From 6d306c43ec04a7418c4a7c3a76f36d9a30e3dac3 Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Fri, 2 Oct 2026 23:21:45 +0700 Subject: [PATCH] fix --- internal/app/users.go | 3 +-- .../services/users_service/change_password_test.go | 2 +- internal/services/users_service/service.go | 13 ++++++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/internal/app/users.go b/internal/app/users.go index 38ce472..b51781d 100644 --- a/internal/app/users.go +++ b/internal/app/users.go @@ -8,7 +8,6 @@ import ( "evening_detective_server/internal/modules/processor_jwt" "evening_detective_server/internal/modules/roles" - "evening_detective_server/internal/repos/users_repo" "evening_detective_server/internal/services/users_service" proto "evening_detective_server/proto" @@ -262,7 +261,7 @@ func (s *server) ChangeUserPassword(ctx context.Context, req *proto.ChangeUserPa return nil, status.Error(codes.PermissionDenied, err.Error()) case errors.Is(err, users_service.ErrInvalidPasswordChange): return nil, status.Error(codes.InvalidArgument, err.Error()) - case errors.Is(err, users_repo.ErrUserNotFound): + case errors.Is(err, users_service.ErrUserNotFound): return nil, status.Error(codes.NotFound, err.Error()) case err != nil: return nil, status.Error(codes.Internal, "Не удалось изменить пароль") diff --git a/internal/services/users_service/change_password_test.go b/internal/services/users_service/change_password_test.go index 86bd6b3..bc68c95 100644 --- a/internal/services/users_service/change_password_test.go +++ b/internal/services/users_service/change_password_test.go @@ -24,7 +24,7 @@ func TestChangeUserPassword(t *testing.T) { {"missing actor", "admin", "123456789012", 4, 2, ErrPasswordChangeForbidden}, {"self", "admin", "123456789012", 1, 1, ErrInvalidPasswordChange}, {"bad id", "admin", "123456789012", 1, -1, ErrInvalidPasswordChange}, - {"missing target", "admin", "123456789012", 1, 4, users_repo.ErrUserNotFound}, + {"missing target", "admin", "123456789012", 1, 4, ErrUserNotFound}, {"empty", "admin", "", 1, 2, ErrInvalidPasswordChange}, {"8 characters", "admin", "abcdefgh", 1, 2, nil}, {"8 unicode characters", "admin", "яяббввгг", 1, 2, nil}, diff --git a/internal/services/users_service/service.go b/internal/services/users_service/service.go index abea00f..bf61da3 100644 --- a/internal/services/users_service/service.go +++ b/internal/services/users_service/service.go @@ -370,6 +370,8 @@ func (s *UsersService) DeleteUserRole( var ( ErrPasswordChangeForbidden = errors.New("Изменять чужой пароль может только администратор") ErrInvalidPasswordChange = errors.New("Укажите чужой положительный ID и пароль от 8 до 16 символов") + // ErrUserNotFound — целевой пользователь не найден. + ErrUserNotFound = errors.New("Пользователь не найден") ) // ChangeUserPassword сохраняет только хеш; действующие сеансы не изменяются. @@ -390,11 +392,20 @@ func (s *UsersService) ChangeUserPassword(ctx context.Context, actorID, userID i } user, err := s.usersRepo.GetUserByID(ctx, userID) if err != nil { + if errors.Is(err, users_repo.ErrUserNotFound) { + return ErrUserNotFound + } return err } hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return err } - return s.usersRepo.UpdateUserPassword(ctx, user.Email, string(hash)) + if err := s.usersRepo.UpdateUserPassword(ctx, user.Email, string(hash)); err != nil { + if errors.Is(err, users_repo.ErrUserNotFound) { + return ErrUserNotFound + } + return err + } + return nil }