Skip to content

Commit

Permalink
improve context and add transaction for db
Browse files Browse the repository at this point in the history
  • Loading branch information
TremblingV5 committed Mar 13, 2024
1 parent d7cd016 commit be1c59f
Show file tree
Hide file tree
Showing 16 changed files with 335 additions and 84 deletions.
22 changes: 16 additions & 6 deletions applications/comment/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@ package main

import (
"context"

"go.uber.org/zap"

"github.com/TremblingV5/DouTok/applications/comment/handler"
"github.com/TremblingV5/DouTok/applications/comment/rpc"
"github.com/TremblingV5/DouTok/config/configStruct"
"github.com/TremblingV5/DouTok/kitex_gen/comment/commentservice"
"github.com/TremblingV5/DouTok/pkg/DouTokContext"
"github.com/TremblingV5/DouTok/pkg/DouTokLogger"
"github.com/TremblingV5/DouTok/pkg/configurator"
"github.com/TremblingV5/DouTok/pkg/constants"
"github.com/TremblingV5/DouTok/pkg/dtviper"
"github.com/TremblingV5/DouTok/pkg/dtx"
"github.com/TremblingV5/DouTok/pkg/services"
"go.uber.org/zap"
)

type Config struct {
Expand All @@ -28,10 +31,17 @@ var (
func init() {

ctx := context.Background()
_, err := configurator.Load(config, "DOUTOK_COMMENT", "comment")
logger = DouTokLogger.InitLogger(config.Logger)
DouTokContext.DefaultLogger = logger
DouTokContext.AddLoggerToContext(ctx, logger)
commentConfig = Config{}

Check failure on line 34 in applications/comment/main.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 undefined: commentConfig Raw Output: applications/comment/main.go:34:2: undefined: commentConfig
logcfg = LoggerConfig{}

Check failure on line 35 in applications/comment/main.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 undefined: logcfg Raw Output: applications/comment/main.go:35:2: undefined: logcfg

Check failure on line 35 in applications/comment/main.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 undefined: LoggerConfig Raw Output: applications/comment/main.go:35:11: undefined: LoggerConfig
ViperConfig = dtviper.ConfigInit("DOUTOK_COMMENT", "comment")

Check failure on line 36 in applications/comment/main.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 undefined: ViperConfig Raw Output: applications/comment/main.go:36:2: undefined: ViperConfig
ViperConfig.UnmarshalStructTags(reflect.TypeOf(commentConfig), "")

Check failure on line 37 in applications/comment/main.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 undefined: ViperConfig Raw Output: applications/comment/main.go:37:2: undefined: ViperConfig

Check failure on line 37 in applications/comment/main.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 undefined: reflect Raw Output: applications/comment/main.go:37:34: undefined: reflect

Check failure on line 37 in applications/comment/main.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 undefined: commentConfig Raw Output: applications/comment/main.go:37:49: undefined: commentConfig
ViperConfig.UnmarshalStruct(&commentConfig)

logcfg, err := configStruct.Load[*LoggerConfig](ctx, &logcfg)

logger = DouTokLogger.InitLogger(logcfg.Logger)
dtx.DefaultLogger = logger
dtx.AddLoggerToContext(ctx, logger)
if err != nil {
logger.Fatal("could not load env variables", zap.Error(err), zap.Any("config", config))
}
Expand Down
16 changes: 9 additions & 7 deletions applications/commentDomain/cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,22 @@ package main

import (
"context"

"go.uber.org/zap"

"github.com/TremblingV5/DouTok/applications/commentDomain/handler"
"github.com/TremblingV5/DouTok/applications/commentDomain/redis/commentTotalCountRedis"
"github.com/TremblingV5/DouTok/applications/commentDomain/service"
"github.com/TremblingV5/DouTok/config/configStruct"
"github.com/TremblingV5/DouTok/kitex_gen/commentDomain/commentdomainservice"
"github.com/TremblingV5/DouTok/pkg/DouTokContext"
"github.com/TremblingV5/DouTok/pkg/DouTokLogger"
"github.com/TremblingV5/DouTok/pkg/configurator"
"github.com/TremblingV5/DouTok/pkg/constants"
"github.com/TremblingV5/DouTok/pkg/dtviper"
"github.com/TremblingV5/DouTok/pkg/dtx"
"github.com/TremblingV5/DouTok/pkg/hbaseHandle"
redishandle "github.com/TremblingV5/DouTok/pkg/redisHandle"
"github.com/TremblingV5/DouTok/pkg/services"
"go.uber.org/zap"
)

type Config struct {
Expand All @@ -39,15 +42,14 @@ func init() {

_, err := configurator.Load(config, "DOUTOK_COMMENT_DOMAIN", "commentDomain")

logger = DouTokLogger.InitLogger(config.Logger)
DouTokContext.DefaultLogger = logger
DouTokContext.AddLoggerToContext(ctx, logger)

logger = DouTokLogger.InitLogger(logcfg.Logger)
dtx.DefaultLogger = logger
ctx = dtx.AddLoggerToContext(ctx, logger)
if err != nil {
logger.Fatal("could not load env variables", zap.Error(err), zap.Any("config", config))
}

logger = DouTokContext.Extract(ctx)
logger = dtx.Extract(ctx)

db, err := config.MySQL.InitDB()
if err != nil {
Expand Down
21 changes: 15 additions & 6 deletions applications/favorite/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@ package main
import (
"context"

"go.uber.org/zap"

"github.com/TremblingV5/DouTok/applications/favorite/handler"
"github.com/TremblingV5/DouTok/applications/favorite/rpc"
"github.com/TremblingV5/DouTok/config/configStruct"
"github.com/TremblingV5/DouTok/kitex_gen/favorite/favoriteservice"
"github.com/TremblingV5/DouTok/pkg/DouTokContext"
"github.com/TremblingV5/DouTok/pkg/DouTokLogger"
"github.com/TremblingV5/DouTok/pkg/configurator"
"github.com/TremblingV5/DouTok/pkg/constants"
"github.com/TremblingV5/DouTok/pkg/dtviper"
"github.com/TremblingV5/DouTok/pkg/dtx"
"github.com/TremblingV5/DouTok/pkg/services"
"go.uber.org/zap"
)

type Config struct {
Expand All @@ -28,10 +30,17 @@ var (

func init() {
ctx := context.Background()
_, err := configurator.Load(config, "DOUTOK_FAVORITE", "favorite")
logger = DouTokLogger.InitLogger(config.Logger)
DouTokContext.DefaultLogger = logger
DouTokContext.AddLoggerToContext(ctx, logger)
favoriteConfig = Config{}
logcfg = LoggerConfig{}
viperConfig = dtviper.ConfigInit("DOUTOK_FAVORITE", "favorite")
viperConfig.UnmarshalStructTags(reflect.TypeOf(favoriteConfig), "")
viperConfig.UnmarshalStruct(&favoriteConfig)

logcfg, err := configStruct.Load[*LoggerConfig](ctx, &logcfg)

logger = DouTokLogger.InitLogger(logcfg.Logger)
dtx.DefaultLogger = logger
dtx.AddLoggerToContext(ctx, logger)
if err != nil {
logger.Fatal("could not load env variables", zap.Error(err), zap.Any("config", config))
}
Expand Down
18 changes: 13 additions & 5 deletions applications/user/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ import (
"github.com/TremblingV5/DouTok/applications/user/rpc"
"github.com/TremblingV5/DouTok/config/configStruct"
"github.com/TremblingV5/DouTok/kitex_gen/user/userservice"
"github.com/TremblingV5/DouTok/pkg/DouTokContext"
"github.com/TremblingV5/DouTok/pkg/DouTokLogger"
"github.com/TremblingV5/DouTok/pkg/configurator"
"github.com/TremblingV5/DouTok/pkg/constants"
"github.com/TremblingV5/DouTok/pkg/dtviper"
"github.com/TremblingV5/DouTok/pkg/dtx"
"github.com/TremblingV5/DouTok/pkg/services"
)

Expand All @@ -28,10 +29,17 @@ var (

func init() {
ctx := context.Background()
_, err := configurator.Load(config, "DOUTOK_USER", "user")
logger = DouTokLogger.InitLogger(config.Logger)
DouTokContext.DefaultLogger = logger
DouTokContext.AddLoggerToContext(ctx, logger)
userConfig = Config{}
logcfg = LoggerConfig{}
viperConfig = dtviper.ConfigInit("DOUTOK_USER", "user")
viperConfig.UnmarshalStructTags(reflect.TypeOf(userConfig), "")
viperConfig.UnmarshalStruct(&userConfig)

logcfg, err := configStruct.Load[*LoggerConfig](ctx, &logcfg)

logger = DouTokLogger.InitLogger(logcfg.Logger)
dtx.DefaultLogger = logger
dtx.AddLoggerToContext(ctx, logger)
if err != nil {
logger.Fatal("could not load env variables", zap.Error(err), zap.Any("config", config))
}
Expand Down
45 changes: 25 additions & 20 deletions applications/userDomain/dal/repository/user/repository.go
Original file line number Diff line number Diff line change
@@ -1,47 +1,52 @@
package user

import (
"context"
"github.com/TremblingV5/DouTok/applications/userDomain/dal/model"
"github.com/TremblingV5/DouTok/applications/userDomain/dal/query"
"gorm.io/gorm"
"github.com/TremblingV5/DouTok/pkg/dtdb"
)

type Repository interface {
Save(user *model.User) error
LoadByUsername(username string) (*model.User, error)
LoadById(id uint64) (*model.User, error)
LoadUserListByIds(ids ...uint64) ([]*model.User, error)
IsUserNameExisted(username string) (bool, error)
Save(ctx context.Context, user *model.User) error
LoadByUsername(ctx context.Context, username string) (*model.User, error)
LoadById(ctx context.Context, id uint64) (*model.User, error)
LoadUserListByIds(ctx context.Context, ids ...uint64) ([]*model.User, error)
IsUserNameExisted(ctx context.Context, username string) (bool, error)
}

type PersistRepository struct {
user query.IUserDo

Check failure on line 19 in applications/userDomain/dal/repository/user/repository.go

View workflow job for this annotation

GitHub Actions / review

[golangci] reported by reviewdog 🐶 field `user` is unused (unused) Raw Output: applications/userDomain/dal/repository/user/repository.go:19:2: field `user` is unused (unused) user query.IUserDo ^
}

func New(db *gorm.DB) *PersistRepository {
return &PersistRepository{
user: query.User.WithContext(db.Statement.Context),
}
func New() *PersistRepository {
return &PersistRepository{}
}

func (p *PersistRepository) Save(user *model.User) error {
return p.user.Create(user)
func (p *PersistRepository) Save(ctx context.Context, user *model.User) error {
tx := dtdb.Tx(ctx).(*query.QueryTx)
return tx.User.Save(user)
}

func (p *PersistRepository) LoadByUsername(username string) (*model.User, error) {
return p.user.Where(query.User.UserName.Eq(username)).First()
func (p *PersistRepository) LoadByUsername(ctx context.Context, username string) (*model.User, error) {
tx := dtdb.Tx(ctx).(*query.QueryTx)
return tx.User.Where(query.User.UserName.Eq(username)).First()
}

func (p *PersistRepository) LoadById(id uint64) (*model.User, error) {
return p.user.Where(query.User.ID.Eq(id)).First()
func (p *PersistRepository) LoadById(ctx context.Context, id uint64) (*model.User, error) {
tx := dtdb.Tx(ctx).(*query.QueryTx)
return tx.User.Where(query.User.ID.Eq(id)).First()
}

func (p *PersistRepository) LoadUserListByIds(ids ...uint64) ([]*model.User, error) {
return p.user.Where(query.User.ID.In(ids...)).Find()
func (p *PersistRepository) LoadUserListByIds(ctx context.Context, ids ...uint64) ([]*model.User, error) {
tx := dtdb.Tx(ctx).(*query.QueryTx)
return tx.User.Where(query.User.ID.In(ids...)).Find()
}

func (p *PersistRepository) IsUserNameExisted(username string) (bool, error) {
count, err := p.user.Where(query.User.UserName.Eq(username)).Count()
func (p *PersistRepository) IsUserNameExisted(ctx context.Context, username string) (bool, error) {
tx := dtdb.Tx(ctx).(*query.QueryTx)

count, err := tx.User.Where(query.User.UserName.Eq(username)).Count()
if err != nil {
return false, err
}
Expand Down
6 changes: 3 additions & 3 deletions applications/userDomain/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (s *Handler) AddUser(ctx context.Context, req *userDomain.DoutokAddUserRequ
}, nil
}

userId, err := s.user.CreateNewUser(req.Username, req.Password)
userId, err := s.user.CreateNewUser(ctx, req.Username, req.Password)

if err != nil {
return &userDomain.DoutokAddUserResponse{
Expand All @@ -49,7 +49,7 @@ func (s *Handler) CheckUser(ctx context.Context, req *userDomain.DoutokCheckUser
return packCheckUserResp(errs.EmptyErr.Code(), errs.EmptyErr.Message(), 0)
}

userId, err := s.user.CheckPassword(req.Username, req.Password)
userId, err := s.user.CheckPassword(ctx, req.Username, req.Password)
if err != nil || userId == 0 {
return packCheckUserResp(errs.PasswordErr.Code(), errs.PasswordErr.Message(), 0)
}
Expand All @@ -65,7 +65,7 @@ func (s *Handler) GetUserInfo(ctx context.Context, req *userDomain.DoutokGetUser
}
}

userList, err := s.user.LoadUserListByIds(userIdList...)
userList, err := s.user.LoadUserListByIds(ctx, userIdList...)
if err != nil {
return packGetUserInfoResp(errs.SystemErr.Code(), err.Error(), nil)
}
Expand Down
30 changes: 23 additions & 7 deletions applications/userDomain/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,16 @@ package main

import (
"context"
"reflect"
"strconv"

"go.uber.org/zap"

"github.com/TremblingV5/DouTok/applications/userDomain/errs"
"github.com/TremblingV5/DouTok/config/configStruct"
"github.com/TremblingV5/DouTok/pkg/DouTokLogger"
"github.com/TremblingV5/DouTok/pkg/dtviper"
"github.com/TremblingV5/DouTok/pkg/dtx"
"github.com/TremblingV5/DouTok/applications/userDomain/dal/query"
"github.com/TremblingV5/DouTok/applications/userDomain/dal/repository/user"
"github.com/TremblingV5/DouTok/applications/userDomain/errs"
Expand Down Expand Up @@ -33,17 +41,25 @@ var (
func init() {
ctx := context.Background()

_, err := configurator.Load(config, "DOUTOK_USER_DOMAIN", "userDomain")
errs.Init(config.Base)
logger = DouTokLogger.InitLogger(config.Logger)
DouTokContext.DefaultLogger = logger
DouTokContext.AddLoggerToContext(ctx, logger)
userDomainConfig = Config{}
logcfg = LoggerConfig{}
viperConfig = dtviper.ConfigInit("DOUTOK_USER_DOMAIN", "userDomain")
viperConfig.UnmarshalStructTags(reflect.TypeOf(userDomainConfig), "")
viperConfig.UnmarshalStruct(&userDomainConfig)

logcfg, err := configStruct.Load[*LoggerConfig](ctx, &logcfg)

errs.Init(userDomainConfig.Server)

logger = DouTokLogger.InitLogger(logcfg.Logger)
dtx.DefaultLogger = logger
dtx.AddLoggerToContext(ctx, logger)

if err != nil {
logger.Fatal("could not load env variables", zap.Error(err), zap.Any("config", config))
}

logger = DouTokContext.Extract(ctx)
logger = dtx.Extract(ctx)
}

func loadFeature() *handler.Handler {
Expand All @@ -53,7 +69,7 @@ func loadFeature() *handler.Handler {
}
query.SetDefault(db)

userRepo := user.New(db)
userRepo := user.New()
userService := service.New(userRepo)
return handler.New(userService)
}
Expand Down
Loading

0 comments on commit be1c59f

Please sign in to comment.