some refactor
This commit is contained in:
parent
9377a9fe35
commit
4c43a0d87b
@ -11,20 +11,19 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger) error {
|
func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger) error {
|
||||||
logger.Info("Запуск приложения", zap.String("AppName", cfg.AppName))
|
logger.Info("Запуск приложения", zap.String("AppName", cfg.AppName))
|
||||||
|
|
||||||
mdb, err := initialize.InitializeMongoDB(ctx, cfg)
|
mdb, err := initialize.MongoDB(ctx, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to initialize MongoDB", zap.Error(err))
|
logger.Error("Failed to initialize MongoDB", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
rdb, err := initialize.InitializeRedis(ctx, cfg)
|
rdb, err := initialize.Redis(ctx, cfg)
|
||||||
encrypt := initialize.InitializeEncrypt(cfg)
|
encrypt := initialize.Encrypt(cfg)
|
||||||
codewordRepo := repository.NewCodewordRepository(repository.Deps{Rdb: rdb, Mdb: mdb.Collection("codeword")})
|
codewordRepo := repository.NewCodewordRepository(repository.Deps{Rdb: rdb, Mdb: mdb.Collection("codeword")})
|
||||||
userRepo := repository.NewUserRepository(repository.Deps{Rdb: nil, Mdb: mdb.Collection("users")})
|
userRepo := repository.NewUserRepository(repository.Deps{Rdb: nil, Mdb: mdb.Collection("users")})
|
||||||
recoveryEmailSender := initialize.RecoveryEmailSender(cfg, logger)
|
recoveryEmailSender := initialize.RecoveryEmailSender(cfg, logger)
|
||||||
@ -68,7 +67,7 @@ func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger) error {
|
|||||||
|
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
|
|
||||||
if err := shutdownApp(server, mdb, logger); err != nil {
|
if err := shutdownApp(ctx, server, mdb, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
logger.Info("The application has stopped")
|
logger.Info("The application has stopped")
|
||||||
@ -77,22 +76,19 @@ func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger) error {
|
|||||||
|
|
||||||
// TODO возможно стоит вынести в отдельные файлы или отказаться от разделения на отдельные методы
|
// TODO возможно стоит вынести в отдельные файлы или отказаться от разделения на отдельные методы
|
||||||
|
|
||||||
func shutdownApp(server *httpserver.Server, mdb *mongo.Database, logger *zap.Logger) error {
|
func shutdownApp(ctx context.Context, server *httpserver.Server, mdb *mongo.Database, logger *zap.Logger) error {
|
||||||
if err := shutdownHTTPServer(server, logger); err != nil {
|
if err := shutdownHTTPServer(ctx, server, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := shutdownMongoDB(mdb, logger); err != nil {
|
if err := shutdownMongoDB(ctx, mdb, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func shutdownHTTPServer(server *httpserver.Server, logger *zap.Logger) error {
|
func shutdownHTTPServer(ctx context.Context, server *httpserver.Server, logger *zap.Logger) error {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
if err := server.Shutdown(ctx); err != nil {
|
if err := server.Shutdown(ctx); err != nil {
|
||||||
logger.Error("Error stopping HTTP server", zap.Error(err))
|
logger.Error("Error stopping HTTP server", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
@ -100,10 +96,7 @@ func shutdownHTTPServer(server *httpserver.Server, logger *zap.Logger) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func shutdownMongoDB(mdb *mongo.Database, logger *zap.Logger) error {
|
func shutdownMongoDB(ctx context.Context, mdb *mongo.Database, logger *zap.Logger) error {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
if err := mdb.Client().Disconnect(ctx); err != nil {
|
if err := mdb.Client().Disconnect(ctx); err != nil {
|
||||||
logger.Error("Error when closing MongoDB connection", zap.Error(err))
|
logger.Error("Error when closing MongoDB connection", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"codeword/internal/utils/encrypt"
|
"codeword/internal/utils/encrypt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitializeEncrypt(cfg Config) *encrypt.Encrypt {
|
func Encrypt(cfg Config) *encrypt.Encrypt {
|
||||||
return encrypt.New(&encrypt.EncryptDeps{
|
return encrypt.New(&encrypt.EncryptDeps{
|
||||||
PublicKey: cfg.PublicCurveKey,
|
PublicKey: cfg.PublicCurveKey,
|
||||||
PrivateKey: cfg.PrivateCurveKey,
|
PrivateKey: cfg.PrivateCurveKey,
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitializeMongoDB(ctx context.Context, cfg Config) (*mongo.Database, error) {
|
func MongoDB(ctx context.Context, cfg Config) (*mongo.Database, error) {
|
||||||
dbConfig := &mdb.Configuration{
|
dbConfig := &mdb.Configuration{
|
||||||
MongoHost: cfg.MongoHost,
|
MongoHost: cfg.MongoHost,
|
||||||
MongoPort: cfg.MongoPort,
|
MongoPort: cfg.MongoPort,
|
||||||
|
@ -5,7 +5,7 @@ import (
|
|||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitializeRedis(ctx context.Context, cfg Config) (*redis.Client, error) {
|
func Redis(ctx context.Context, cfg Config) (*redis.Client, error) {
|
||||||
rdb := redis.NewClient(&redis.Options{
|
rdb := redis.NewClient(&redis.Options{
|
||||||
Addr: cfg.RedisAddr,
|
Addr: cfg.RedisAddr,
|
||||||
Password: cfg.RedisPassword,
|
Password: cfg.RedisPassword,
|
||||||
|
@ -81,5 +81,8 @@ func (r *codewordRepository) GetRecoveryRecord(ctx context.Context, key string)
|
|||||||
|
|
||||||
// пингует в монгу чтобы проверить подключение
|
// пингует в монгу чтобы проверить подключение
|
||||||
func (r *codewordRepository) Ping(ctx context.Context) error {
|
func (r *codewordRepository) Ping(ctx context.Context) error {
|
||||||
return r.mdb.Database().Client().Ping(ctx, readpref.Primary())
|
if err := r.mdb.Database().Client().Ping(ctx, readpref.Primary()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,11 @@ func NewServer(config ServerConfig) *Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Start(addr string) error {
|
func (s *Server) Start(addr string) error {
|
||||||
return s.app.Listen(addr)
|
if err := s.app.Listen(addr); err != nil {
|
||||||
|
s.Logger.Error("Failed to start server", zap.Error(err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Shutdown(ctx context.Context) error {
|
func (s *Server) Shutdown(ctx context.Context) error {
|
||||||
|
@ -116,7 +116,7 @@ func (s *RecoveryService) GetRecoveryRecord(ctx context.Context, key string) (*m
|
|||||||
|
|
||||||
// сомнительный вариант но как я думаю верный, что false==err
|
// сомнительный вариант но как я думаю верный, что false==err
|
||||||
result, err := s.encrypt.VerifySignature(byteKey)
|
result, err := s.encrypt.VerifySignature(byteKey)
|
||||||
if err != nil || result == false {
|
if err != nil || !result {
|
||||||
s.logger.Error("Failed to verify signature", zap.String("signature", key), zap.Error(err))
|
s.logger.Error("Failed to verify signature", zap.String("signature", key), zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -13,19 +13,19 @@ type Deps struct {
|
|||||||
Mongo *mongo.Collection
|
Mongo *mongo.Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
type purgeWorker struct {
|
type PurgeWorker struct {
|
||||||
logger *zap.Logger
|
logger *zap.Logger
|
||||||
mongo *mongo.Collection
|
mongo *mongo.Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRecoveryWC(deps Deps) *purgeWorker {
|
func NewRecoveryWC(deps Deps) *PurgeWorker {
|
||||||
return &purgeWorker{
|
return &PurgeWorker{
|
||||||
logger: deps.Logger,
|
logger: deps.Logger,
|
||||||
mongo: deps.Mongo,
|
mongo: deps.Mongo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wc *purgeWorker) Start(ctx context.Context) {
|
func (wc *PurgeWorker) Start(ctx context.Context) {
|
||||||
ticker := time.NewTicker(1 * time.Hour)
|
ticker := time.NewTicker(1 * time.Hour)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ func (wc *purgeWorker) Start(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wc *purgeWorker) processTasks(ctx context.Context) {
|
func (wc *PurgeWorker) processTasks(ctx context.Context) {
|
||||||
wc.logger.Info("Checking cleaning records")
|
wc.logger.Info("Checking cleaning records")
|
||||||
|
|
||||||
oneHourAgo := time.Now().Add(-1 * time.Hour)
|
oneHourAgo := time.Now().Add(-1 * time.Hour)
|
||||||
|
Loading…
Reference in New Issue
Block a user