package users_service import ( "context" "evening_detective_server/internal/modules/email_sender" "evening_detective_server/internal/modules/password_generator" "evening_detective_server/internal/repos/users_repo" "fmt" "golang.org/x/crypto/bcrypt" ) type UsersService struct { usersRepo *users_repo.UsersRepo passwordGenerator password_generator.IPasswordGenerator emailSender email_sender.IEmailSender } func NewUsersService( usersRepo *users_repo.UsersRepo, passwordGenerator password_generator.IPasswordGenerator, emailSender email_sender.IEmailSender, ) *UsersService { return &UsersService{ usersRepo: usersRepo, passwordGenerator: passwordGenerator, emailSender: emailSender, } } func (s *UsersService) AddUser( ctx context.Context, username string, email string, ) error { password, err := s.passwordGenerator.Generate() if err != nil { return err } hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return err } err = s.usersRepo.AddUser( ctx, username, email, string(hashedPassword), "user", ) if err != nil { return err } err = s.emailSender.Send(ctx, email_sender.Message{ To: email, Subject: "Приветствую тебя, детектив!", Body: fmt.Sprintf("Вот твой пароль для входа в систему: %s", password), }) return err }