From d85967968ff9c64b0048f1ffe5c3f84312361569 Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Fri, 2 Oct 2026 01:01:58 +0700 Subject: [PATCH] update --- internal/app/user_mapper.go | 4 +-- internal/app/user_mapper_test.go | 4 +-- .../services/scenarios_service/scenario.go | 4 +-- .../scenarios_service/scenario_mapper.go | 13 +++++++++- internal/services/users_service/service.go | 8 +++--- internal/services/users_service/user.go | 13 ++++++++++ .../services/users_service/user_mapper.go | 25 +++++++++++++++++++ 7 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 internal/services/users_service/user.go create mode 100644 internal/services/users_service/user_mapper.go diff --git a/internal/app/user_mapper.go b/internal/app/user_mapper.go index eeae483..830fab7 100644 --- a/internal/app/user_mapper.go +++ b/internal/app/user_mapper.go @@ -1,7 +1,7 @@ package app import ( - "evening_detective_server/internal/repos" + "evening_detective_server/internal/services/users_service" proto "evening_detective_server/proto" "google.golang.org/protobuf/types/known/timestamppb" @@ -10,7 +10,7 @@ import ( // mapUser преобразует пользователя в proto-структуру. Возвращает nil для // обезличенного автора (аккаунт удалён, контент сохранён) — клиент отображает // такого автора как «Автор удалён». -func mapUser(o *repos.User) *proto.User { +func mapUser(o *users_service.User) *proto.User { if o == nil { return nil } diff --git a/internal/app/user_mapper_test.go b/internal/app/user_mapper_test.go index f3c0b8e..30de065 100644 --- a/internal/app/user_mapper_test.go +++ b/internal/app/user_mapper_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "evening_detective_server/internal/repos" + "evening_detective_server/internal/services/users_service" ) func TestMapUser(t *testing.T) { @@ -15,7 +15,7 @@ func TestMapUser(t *testing.T) { }) t.Run("обычный пользователь маппится полностью", func(t *testing.T) { - u := &repos.User{ + u := &users_service.User{ ID: 42, Username: "detective", Email: "d@example.com", diff --git a/internal/services/scenarios_service/scenario.go b/internal/services/scenarios_service/scenario.go index 0a9fb11..2d8b521 100644 --- a/internal/services/scenarios_service/scenario.go +++ b/internal/services/scenarios_service/scenario.go @@ -2,7 +2,7 @@ package scenarios_service import ( "evening_detective_server/internal/modules/storytelling" - "evening_detective_server/internal/repos" + "evening_detective_server/internal/services/users_service" "time" ) @@ -12,7 +12,7 @@ type Scenario struct { Description *string Image *string Story *storytelling.Story - Author *repos.User + Author *users_service.User Status string UpdatedAt time.Time CreatedAt time.Time diff --git a/internal/services/scenarios_service/scenario_mapper.go b/internal/services/scenarios_service/scenario_mapper.go index 11f62d9..9b9024e 100644 --- a/internal/services/scenarios_service/scenario_mapper.go +++ b/internal/services/scenarios_service/scenario_mapper.go @@ -7,6 +7,7 @@ import ( "evening_detective_server/internal/modules/file_storage" "evening_detective_server/internal/modules/storytelling" "evening_detective_server/internal/repos" + "evening_detective_server/internal/services/users_service" ) func mapScenariosLight( @@ -48,7 +49,7 @@ func MapScenarioLight( Description: o.Description, Image: mapImage(o.Image, domain), Story: nil, - Author: o.Author, + Author: mapAuthor(o.Author), Status: o.Status, UpdatedAt: o.UpdatedAt, CreatedAt: o.CreatedAt, @@ -57,6 +58,16 @@ func MapScenarioLight( } } +func mapAuthor(user *repos.User) *users_service.User { + if user == nil { + return nil + } + return &users_service.User{ + ID: user.ID, + Username: user.Username, + } +} + func mapScenario( o *repos.Scenario, domain string, diff --git a/internal/services/users_service/service.go b/internal/services/users_service/service.go index f8c1b64..abea00f 100644 --- a/internal/services/users_service/service.go +++ b/internal/services/users_service/service.go @@ -326,23 +326,23 @@ func (s *UsersService) Refresh( func (s *UsersService) GetUsers( ctx context.Context, -) ([]*repos.User, error) { +) ([]*User, error) { users, err := s.usersRepo.GetUsers(ctx) if err != nil { return nil, err } - return users, nil + return mapUsers(users), nil } func (s *UsersService) GetUserByID( ctx context.Context, userID int, -) (*repos.User, error) { +) (*User, error) { user, err := s.usersRepo.GetUserByID(ctx, userID) if err != nil { return nil, err } - return user, nil + return mapUser(user), nil } func (s *UsersService) AddUserRole( diff --git a/internal/services/users_service/user.go b/internal/services/users_service/user.go new file mode 100644 index 0000000..b4f08a9 --- /dev/null +++ b/internal/services/users_service/user.go @@ -0,0 +1,13 @@ +package users_service + +import "time" + +// User — пользователь, доступный прикладным сценариям и выдаче наружу. +type User struct { + ID int + Username string + Email string + Roles []string + IsActive bool + CreatedAt time.Time +} diff --git a/internal/services/users_service/user_mapper.go b/internal/services/users_service/user_mapper.go new file mode 100644 index 0000000..fde08fb --- /dev/null +++ b/internal/services/users_service/user_mapper.go @@ -0,0 +1,25 @@ +package users_service + +import "evening_detective_server/internal/repos" + +func mapUser(user *repos.User) *User { + if user == nil { + return nil + } + return &User{ + ID: user.ID, + Username: user.Username, + Email: user.Email, + Roles: user.Roles, + IsActive: user.IsActive, + CreatedAt: user.CreatedAt, + } +} + +func mapUsers(users []*repos.User) []*User { + result := make([]*User, 0, len(users)) + for _, user := range users { + result = append(result, mapUser(user)) + } + return result +}