Skip to content

Commit

Permalink
Merge pull request #62 from TremblingV5/xinzf_test
Browse files Browse the repository at this point in the history
Update readme.md
  • Loading branch information
BaiZe1998 authored Feb 23, 2023
2 parents afa78e6 + d208872 commit b8b3e7c
Show file tree
Hide file tree
Showing 10 changed files with 272 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
![image-20230223111012814](https://baize-blog-images.oss-cn-shanghai.aliyuncs.com/img/image-20230223111012814.png)
![image-20230223111012814](./documents/imgs/banner.jpeg)

DouTok is a backend for TikTok client based on Kitex and Hertz.

Expand Down
Binary file added documents/imgs/banner.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ require (
go.uber.org/zap v1.24.0
golang.org/x/net v0.7.0
google.golang.org/protobuf v1.28.1
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/yaml.v3 v3.0.1
gorm.io/driver/mysql v1.4.5
gorm.io/gen v0.3.20
Expand Down
15 changes: 15 additions & 0 deletions pkg/LogBuilder/log_info_array.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package LogBuilder

type logInfoArray []*logInfo

func (arr logInfoArray) Len() int {
return len(arr)
}

func (arr logInfoArray) Less(i, j int) bool {
return arr[i].key < arr[j].key
}

func (arr logInfoArray) Swap(i, j int) {
arr[i], arr[j] = arr[j], arr[i]
}
69 changes: 69 additions & 0 deletions pkg/LogBuilder/log_info_builder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package LogBuilder

import (
"fmt"
"sort"
)

type LogInfoBuilder struct {
logType string
message string
Items map[string]string
}

func InitLogBuilder() *LogInfoBuilder {
return &LogInfoBuilder{
Items: make(map[string]string),
}
}

func (b *LogInfoBuilder) SetLogType(typeString string) {
b.logType = typeString
}

func (b *LogInfoBuilder) SetMessage(str string) {
b.message = str
}

func (b *LogInfoBuilder) Collect(key string, value string) {
tempKey := key

_, ok := b.Items[tempKey]
if ok {
cnt := 1
for {
_, ok := b.Items[tempKey+fmt.Sprint(cnt)]
if !ok {
tempKey = tempKey + fmt.Sprint(cnt)
break
}
cnt++
}
}

b.Items[tempKey] = value
}

func (b *LogInfoBuilder) Get() []string {
temp := []*logInfo{}

for k, v := range b.Items {
newLogInfo := logInfo{
key: k,
value: v,
}
temp = append(temp, &newLogInfo)
}

sort.Sort(logInfoArray(temp))
res := []string{}
for _, v := range temp {
res = append(res, v.key)
res = append(res, v.value)
}
return res
}

func (b *LogInfoBuilder) Write(logger *Logger) {
logger.Write(b.logType, b.message, b.Get()...)
}
56 changes: 56 additions & 0 deletions pkg/LogBuilder/logger.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package LogBuilder

import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)

type Logger struct {
Handle *zap.Logger
}

type logInfo struct {
key string
value string
}

func New(filename string, maxSize int, maxBackups int, maxAge int) *Logger {
writeSyncer := getLogWriter(
filename, maxSize, maxBackups, maxAge,
)

encoder := getEncoder()

var l = new(zapcore.Level)
if err := l.UnmarshalText([]byte("info")); err != nil {
panic(err)
}
core := zapcore.NewCore(encoder, writeSyncer, l)

logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
return &Logger{
Handle: logger,
}
}

func (l *Logger) Write(logType string, msg string, values ...string) {
if len(values)%2 != 0 {
panic("日志信息的键与值数量不匹配")
}

logInfo := make([]zapcore.Field, len(values)/2)
for i := 0; i < len(values); i += 2 {
logInfo[i/2] = zap.String(values[i], values[i+1])
}

switch logType {
case "info":
l.Handle.Info(msg, logInfo...)
case "error":
l.Handle.Error(msg, logInfo...)
case "warn":
l.Handle.Warn(msg, logInfo...)
default:
l.Handle.Info(msg, logInfo...)
}
}
17 changes: 17 additions & 0 deletions pkg/LogBuilder/logger_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package LogBuilder

import "testing"

func TestLogger(t *testing.T) {
logger := New("./temp.log", 1024*1024, 3, 10)

log := InitLogBuilder()
log.SetLogType("error")
log.SetMessage("Test log info")
log.Collect("key1", "value1")
log.Collect("key2", "value2")
log.Collect("key2", "value2")
log.Collect("key3", "value3")

log.Write(logger)
}
27 changes: 27 additions & 0 deletions pkg/LogBuilder/misc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package LogBuilder

import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)

func getEncoder() zapcore.Encoder {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.TimeKey = "time"
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
return zapcore.NewJSONEncoder(encoderConfig)
}

func getLogWriter(filename string, maxSize, maxBackup, maxAge int) zapcore.WriteSyncer {
lumberJackLogger := &lumberjack.Logger{
Filename: filename,
MaxSize: maxSize,
MaxBackups: maxBackup,
MaxAge: maxAge,
}
return zapcore.AddSync(lumberJackLogger)
}
51 changes: 51 additions & 0 deletions pkg/ParamsValidator/init.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package ParamsValidator

import "github.com/TremblingV5/DouTok/pkg/errno"

type Rule struct {
Result bool
Message *errno.ErrNo
Ops []func() (bool, *errno.ErrNo)
Index int
}

func New(message *errno.ErrNo) *Rule {
return &Rule{
Result: true,
Message: message,
Ops: []func() (bool, *errno.ErrNo){},
Index: 0,
}
}

func (r *Rule) Set(f func() (bool, *errno.ErrNo)) *Rule {
r.Ops = append(r.Ops, f)
return r
}

func (r *Rule) SetMore(f ...func() (bool, *errno.ErrNo)) *Rule {
for _, v := range f {
r.Ops = append(r.Ops, v)
}
return r
}

func (r *Rule) Next() bool {
if r.Index < len(r.Ops) {
result, errNo := r.Ops[r.Index]()
r.Result = r.Result && result
r.Index++
if r.Result {
return r.Next()
} else {
r.Message = errNo
return false
}
} else {
return r.Result
}
}

func (r *Rule) Validate() (bool, *errno.ErrNo) {
return r.Next(), r.Message
}
35 changes: 35 additions & 0 deletions pkg/ParamsValidator/init_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package ParamsValidator

import (
"github.com/TremblingV5/DouTok/pkg/errno"
"log"
"testing"
)

var success = errno.NewErrNo(0, "Success")
var usernameErr = errno.NewErrNo(1, "usernameErr")
var passwordErr = errno.NewErrNo(2, "passwordErr")

func TestValidate(t *testing.T) {
username := "xinzf"
password := "123456"

validator := New(&success)
validator.Set(func() (bool, *errno.ErrNo) {
if len(username) < 10 {
return false, &usernameErr
} else {
return true, &success
}
}).Set(func() (bool, *errno.ErrNo) {
if len(password) < 6 {
return false, &passwordErr
} else {
return true, &success
}
})

ok, errNo := validator.Validate()
log.Println(ok)
log.Println(errNo)
}

0 comments on commit b8b3e7c

Please sign in to comment.