package services import ( "codeword/internal/models" "go.uber.org/zap" "time" ) type UserRepository interface { FindByEmail(email string) (*models.User, error) StoreRecoveryRecord(userID string, signature string, createdAt time.Time) error GetRecoveryRecord(signature string) (*models.RestoreRequest, error) } type EmailSender interface { SendRecoveryEmail(email, signature string) error } type RecoveryService struct { Logger *zap.Logger Repository UserRepository Email EmailSender } func NewRecoveryService(logger *zap.Logger, repository UserRepository, email EmailSender) *RecoveryService { return &RecoveryService{ Logger: logger, Repository: repository, Email: email, } } // GenerateKey генерирует ключ, используя шифрование на основе эллиптической кривой func (s *RecoveryService) GenerateKey() (string, error) { // TODO return "", nil } // FindUserByEmail ищет пользователя по электронной почте func (s *RecoveryService) FindUserByEmail(email string) (*models.User, error) { return s.Repository.FindByEmail(email) } // StoreRecoveryRecord сохраняет запись восстановления в базе данных func (s *RecoveryService) StoreRecoveryRecord(userID string) (string, error) { signature := "" createdAt := time.Now() err := s.Repository.StoreRecoveryRecord(userID, signature, createdAt) return signature, err } // GetRecoveryRecord получает запись восстановления из базы данных func (s *RecoveryService) GetRecoveryRecord(signature string) (*models.RestoreRequest, error) { return s.Repository.GetRecoveryRecord(signature) } // SendRecoveryEmail посылает письмо для восстановления доступа пользователю func (s *RecoveryService) SendRecoveryEmail(email string, signature string) error { return s.Email.SendRecoveryEmail(email, signature) } // ExchangeForTokens обменивает ссылку восстановления на токены используя сервис аутентификации. func (s *RecoveryService) ExchangeForTokens(userID string) (map[string]string, error) { // TODO return nil, nil }