Add User route and Refactor code
This commit is contained in:
parent
519749fd3a
commit
b311a41dc7
24 changed files with 902 additions and 489 deletions
|
|
@ -2,76 +2,66 @@ package logger
|
|||
|
||||
import (
|
||||
"os"
|
||||
"recipe-manager/config"
|
||||
|
||||
"github.com/natefinch/lumberjack"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
var (
|
||||
log_inst = _NewLogger()
|
||||
type TaoLogger struct {
|
||||
cfg *config.ServerConfig
|
||||
enableDebug bool
|
||||
Log *zap.Logger
|
||||
}
|
||||
|
||||
enable_debug = false
|
||||
log_level = zap.NewAtomicLevel()
|
||||
func (tl *TaoLogger) initConfig() *zap.Logger {
|
||||
|
||||
log_file_config = zapcore.AddSync(&lumberjack.Logger{
|
||||
Filename: "services/logger/serverlog.log",
|
||||
MaxSize: 500, // megabytes
|
||||
MaxBackups: 3,
|
||||
MaxAge: 28, //days
|
||||
LocalTime: true,
|
||||
})
|
||||
json_enc = zapcore.NewJSONEncoder(zapcore.EncoderConfig{
|
||||
TimeKey: "timestamp",
|
||||
LevelKey: "level",
|
||||
NameKey: "logger",
|
||||
CallerKey: "caller",
|
||||
MessageKey: "message",
|
||||
StacktraceKey: "error",
|
||||
EncodeLevel: zapcore.LowercaseLevelEncoder,
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder,
|
||||
})
|
||||
console_enc = zapcore.NewConsoleEncoder(zapcore.EncoderConfig{
|
||||
TimeKey: "timestamp",
|
||||
LevelKey: "level",
|
||||
NameKey: "logger",
|
||||
CallerKey: "caller",
|
||||
MessageKey: "message",
|
||||
StacktraceKey: "error",
|
||||
EncodeLevel: zapcore.CapitalColorLevelEncoder,
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder,
|
||||
})
|
||||
)
|
||||
|
||||
func createLogggerConfig() *zap.Logger {
|
||||
|
||||
enable_debug_mode := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
||||
return lvl >= zap.InfoLevel || enable_debug
|
||||
enableDebugMode := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
||||
return lvl >= zap.InfoLevel || tl.enableDebug
|
||||
})
|
||||
|
||||
log_core := zapcore.NewTee(
|
||||
zapcore.NewCore(json_enc, log_file_config, enable_debug_mode),
|
||||
zapcore.NewCore(console_enc, zapcore.AddSync(os.Stdout), enable_debug_mode),
|
||||
logCore := zapcore.NewTee(
|
||||
zapcore.NewCore(zapcore.NewJSONEncoder(zapcore.EncoderConfig{
|
||||
TimeKey: "timestamp",
|
||||
LevelKey: "level",
|
||||
NameKey: "logger",
|
||||
CallerKey: "caller",
|
||||
MessageKey: "message",
|
||||
StacktraceKey: "error",
|
||||
EncodeLevel: zapcore.LowercaseLevelEncoder,
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder,
|
||||
}), zapcore.AddSync(&lumberjack.Logger{
|
||||
Filename: "services/logger/serverlog.log",
|
||||
MaxSize: 500, // megabytes
|
||||
MaxBackups: 3,
|
||||
MaxAge: 28, //days
|
||||
LocalTime: true,
|
||||
}), enableDebugMode),
|
||||
zapcore.NewCore(zapcore.NewConsoleEncoder(zapcore.EncoderConfig{
|
||||
TimeKey: "timestamp",
|
||||
LevelKey: "level",
|
||||
NameKey: "logger",
|
||||
CallerKey: "caller",
|
||||
MessageKey: "message",
|
||||
StacktraceKey: "error",
|
||||
EncodeLevel: zapcore.CapitalColorLevelEncoder,
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder,
|
||||
}), zapcore.AddSync(os.Stdout), enableDebugMode),
|
||||
)
|
||||
|
||||
return zap.New(log_core)
|
||||
return zap.New(logCore)
|
||||
}
|
||||
|
||||
func _NewLogger() *zap.Logger {
|
||||
log := createLogggerConfig()
|
||||
defer log.Sync()
|
||||
return log
|
||||
}
|
||||
func NewTaoLogger(cfg *config.ServerConfig) *TaoLogger {
|
||||
logger := &TaoLogger{cfg, false, nil}
|
||||
logger.Log = logger.initConfig()
|
||||
|
||||
func GetInstance() *zap.Logger {
|
||||
return log_inst
|
||||
}
|
||||
if cfg.Debug {
|
||||
// logger.SetLevel("DEBUG")
|
||||
logger.Log.Debug("Debug mode", zap.Bool("enable", cfg.Debug))
|
||||
logger.enableDebug = true
|
||||
}
|
||||
|
||||
func EnableDebug(state bool) {
|
||||
enable_debug = state
|
||||
log_inst.Debug("EnableDebug", zap.Bool("enable", state))
|
||||
}
|
||||
|
||||
func GetDbgState() bool {
|
||||
return enable_debug
|
||||
return logger
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,7 +78,9 @@ func (o *oauthService) GetUserInfo(ctx context.Context, token *oauth2.Token) (*m
|
|||
defer resp.Body.Close()
|
||||
|
||||
var userInfo map[string]interface{}
|
||||
json.NewDecoder(resp.Body).Decode(&userInfo)
|
||||
if err := json.NewDecoder(resp.Body).Decode(&userInfo); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if userInfo["error"] != nil {
|
||||
return nil, errors.New("Error getting user info")
|
||||
|
|
|
|||
9
server/services/user/queries/query.go
Normal file
9
server/services/user/queries/query.go
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
package queries
|
||||
|
||||
const (
|
||||
GetUserByID = "SELECT id, name, email, picture, permissions FROM users WHERE id = ?"
|
||||
GetUserByEmail = "SELECT id, name, email, picture, permissions FROM users WHERE email = ?"
|
||||
CreateUser = "INSERT INTO users (id, name, email, picture, permissions) VALUES (? , ?, ?, ? , ?)"
|
||||
SetNameUser = "UPDATE users SET name = ? WHERE id = ?"
|
||||
SetPermissionsUser = "UPDATE users SET permissions = ? WHERE id = ?"
|
||||
)
|
||||
112
server/services/user/user.go
Normal file
112
server/services/user/user.go
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"go.uber.org/zap"
|
||||
"recipe-manager/config"
|
||||
"recipe-manager/enums/permissions"
|
||||
"recipe-manager/models"
|
||||
"recipe-manager/services/logger"
|
||||
"recipe-manager/services/user/queries"
|
||||
)
|
||||
|
||||
type UserService interface {
|
||||
CreateNewUser(ctx context.Context, name, email, picture string, permissions permissions.Permission) error
|
||||
UpdateName(ctx context.Context, userID, name string) error
|
||||
UpdatePermissions(ctx context.Context, userID string, permissions permissions.Permission) error
|
||||
|
||||
GetUserByID(ctx context.Context, userID string) (*models.User, error)
|
||||
GetUserByEmail(ctx context.Context, email string) (*models.User, error)
|
||||
}
|
||||
|
||||
type userService struct {
|
||||
cft *config.ServerConfig
|
||||
db *sqlx.DB
|
||||
taoLogger *logger.TaoLogger
|
||||
}
|
||||
|
||||
func (u *userService) CreateNewUser(ctx context.Context, name, email, picture string, permissions permissions.Permission) error {
|
||||
|
||||
user := ctx.Value("user").(*models.User)
|
||||
u.taoLogger.Log.Info("User.CreateNewUser", zap.Reflect("user", map[string]interface{}{
|
||||
"name": name,
|
||||
"email": email,
|
||||
"picture": picture,
|
||||
"permissions": permissions,
|
||||
}), zap.String("by", user.Email))
|
||||
|
||||
userID := uuid.New()
|
||||
|
||||
_, err := u.db.ExecContext(ctx, queries.CreateUser, userID, name, email, picture, permissions)
|
||||
|
||||
if err != nil {
|
||||
|
||||
u.taoLogger.Log.Error("User.CreateNewUser", zap.Error(err), zap.String("by", user.Email))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *userService) UpdateName(ctx context.Context, userID, name string) error {
|
||||
|
||||
user := ctx.Value("user").(*models.User)
|
||||
u.taoLogger.Log.Info("User.UpdateName", zap.String("userID", userID), zap.String("name", name), zap.String("by", user.Email))
|
||||
|
||||
_, err := u.db.ExecContext(ctx, queries.SetNameUser, name, userID)
|
||||
|
||||
if err != nil {
|
||||
|
||||
u.taoLogger.Log.Error("User.UpdateName", zap.Error(err), zap.String("by", user.Email))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *userService) UpdatePermissions(ctx context.Context, userID string, perms permissions.Permission) error {
|
||||
|
||||
user := ctx.Value("user").(*models.User)
|
||||
u.taoLogger.Log.Info("User.UpdatePermissions", zap.String("userID", userID), zap.Uint("permissions", uint(perms)), zap.String("by", user.Email))
|
||||
|
||||
_, err := u.db.ExecContext(ctx, queries.SetPermissionsUser, perms, userID)
|
||||
|
||||
if err != nil {
|
||||
|
||||
u.taoLogger.Log.Error("User.UpdatePermissions", zap.Error(err), zap.String("by", user.Email))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *userService) GetUserByID(ctx context.Context, userID string) (*models.User, error) {
|
||||
|
||||
userResult := &models.User{}
|
||||
if err := u.db.GetContext(ctx, userResult, queries.GetUserByID, userID); err != nil {
|
||||
u.taoLogger.Log.Error("User.GetUserByID", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return userResult, nil
|
||||
}
|
||||
|
||||
func (u *userService) GetUserByEmail(ctx context.Context, email string) (*models.User, error) {
|
||||
|
||||
userResult := &models.User{}
|
||||
if err := u.db.GetContext(ctx, userResult, queries.GetUserByEmail, email); err != nil {
|
||||
u.taoLogger.Log.Error("User.GetUserByEmail", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return userResult, nil
|
||||
}
|
||||
|
||||
func NewUserService(cfg *config.ServerConfig, db *sqlx.DB, taoLogger *logger.TaoLogger) UserService {
|
||||
return &userService{cfg, db, taoLogger}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue