From 63b63038d19759a3867375e94eacc6828f3a9b67 Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Tue, 8 Jul 2025 23:21:00 +0300 Subject: [PATCH] feat: initialized smtp service; refactor: config now returns a copy of a struct to prevent editing; chore: corrected identation --- backend/cmd/main.go | 2 +- backend/config/config.go | 6 +++--- backend/internal/controllers/auth.go | 14 +++++++------- backend/internal/errors/smtp.go | 10 ++++++++++ backend/internal/middleware/request.go | 8 ++++---- backend/internal/services/smtp.go | 19 +++++++++++++++++++ 6 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 backend/internal/errors/smtp.go diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 8bf69dd..e2071de 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -108,5 +108,5 @@ func main() { }) }), - ).Run() + ).Run() } diff --git a/backend/config/config.go b/backend/config/config.go index 56f62ba..410aeb3 100644 --- a/backend/config/config.go +++ b/backend/config/config.go @@ -153,16 +153,16 @@ func Load() (*Config, error) { return &cfg, nil } -func GetConfig() *Config { +func GetConfig() Config { if config == nil { - + if _, err := Load(); err != nil { panic(err) } } - return config + return *config } var config *Config diff --git a/backend/internal/controllers/auth.go b/backend/internal/controllers/auth.go index 75a8927..0b3e1b1 100644 --- a/backend/internal/controllers/auth.go +++ b/backend/internal/controllers/auth.go @@ -146,7 +146,7 @@ func (a *authControllerImpl) RegistrationBegin(c *gin.Context) { // @Router /auth/registrationComplete [post] func (a *authControllerImpl) RegistrationComplete(c *gin.Context) { request, ok := utils.GetRequest[models.RegistrationCompleteRequest](c) - if !ok { + if !ok { c.Status(http.StatusBadRequest) return } @@ -168,10 +168,10 @@ func (a *authControllerImpl) RegistrationComplete(c *gin.Context) { } func (a *authControllerImpl) RegisterRoutes(group *gin.RouterGroup) { - group.POST("/registrationBegin", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.GuestRole), a.RegistrationBegin) - group.POST("/registrationComplete", middleware.RequestMiddleware[models.RegistrationCompleteRequest](enums.GuestRole), a.RegistrationComplete) - group.POST("/login", middleware.RequestMiddleware[models.LoginRequest](enums.GuestRole), a.Login) - group.POST("/refresh", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.UserRole), a.Refresh) - group.POST("/passwordResetBegin", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.GuestRole), a.PasswordResetBegin) - group.POST("/passwordResetComplete", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.GuestRole), a.PasswordResetComplete) + group.POST("/registrationBegin", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.GuestRole), a.RegistrationBegin) + group.POST("/registrationComplete", middleware.RequestMiddleware[models.RegistrationCompleteRequest](enums.GuestRole), a.RegistrationComplete) + group.POST("/login", middleware.RequestMiddleware[models.LoginRequest](enums.GuestRole), a.Login) + group.POST("/refresh", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.UserRole), a.Refresh) + group.POST("/passwordResetBegin", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.GuestRole), a.PasswordResetBegin) + group.POST("/passwordResetComplete", middleware.RequestMiddleware[models.RegistrationBeginRequest](enums.GuestRole), a.PasswordResetComplete) } diff --git a/backend/internal/errors/smtp.go b/backend/internal/errors/smtp.go new file mode 100644 index 0000000..4b45f59 --- /dev/null +++ b/backend/internal/errors/smtp.go @@ -0,0 +1,10 @@ +package errors + +import ( + "errors" +) + +var ( + ErrSmtpDisabled = errors.New("Smtp is not enabled in the config") + ErrSmtpSendFailure = errors.New("Failed to send email") +) diff --git a/backend/internal/middleware/request.go b/backend/internal/middleware/request.go index 2665b20..36ef57b 100644 --- a/backend/internal/middleware/request.go +++ b/backend/internal/middleware/request.go @@ -46,15 +46,15 @@ func UserInfoFromContext(c *gin.Context) (*UserInfo, bool) { var ok bool username, ok = c.Get("username") ; if !ok { - return &UserInfo{Username: "", Role: enums.GuestRole}, true + return &UserInfo{Username: "", Role: enums.GuestRole}, true } role, ok = c.Get("role"); if !ok { - return nil, false + return nil, false } if username == nil { - return &UserInfo{Username: "", Role: enums.GuestRole}, true + return &UserInfo{Username: "", Role: enums.GuestRole}, true } if role == nil { @@ -103,7 +103,7 @@ func RequestMiddleware[T any](role enums.Role) gin.HandlerFunc { User: *userInfo, Body: body, } - + c.Set(requestKey, request) c.Next() }) diff --git a/backend/internal/services/smtp.go b/backend/internal/services/smtp.go index f56b2f7..c477953 100644 --- a/backend/internal/services/smtp.go +++ b/backend/internal/services/smtp.go @@ -16,3 +16,22 @@ // along with this program. If not, see . package services + +import "go.uber.org/zap" + +type SmtpService interface { + SendEmail(to string, content string) +} + +type smtpServiceImpl struct { + log *zap.Logger +} + +func NewSmtpService(_log *zap.Logger) SmtpService { + return &smtpServiceImpl{log: _log} +} + +func (s *smtpServiceImpl) SendEmail(to string, content string) { + panic("unimplemented") +} +