diff --git a/internal/app/participation.go b/internal/app/participation.go index 9994a7c..4ce150f 100644 --- a/internal/app/participation.go +++ b/internal/app/participation.go @@ -3,14 +3,14 @@ package app import ( "context" "errors" - "evening_detective_server/internal/repos/teams_repo" + "evening_detective_server/internal/services/participation_service" "evening_detective_server/proto" "google.golang.org/grpc" "google.golang.org/grpc/metadata" "google.golang.org/protobuf/types/known/timestamppb" ) -func mapParticipationResponse(p *teams_repo.Participation) *proto.ParticipationRsp { +func mapParticipationResponse(p *participation_service.Participation) *proto.ParticipationRsp { result := &proto.ParticipationRsp{} if p != nil { result.TeamName = p.TeamName @@ -24,7 +24,7 @@ func mapParticipationResponse(p *teams_repo.Participation) *proto.ParticipationR } func participationError(err error) string { - if errors.Is(err, teams_repo.ErrParticipationLink) || errors.Is(err, teams_repo.ErrParticipationFinal) || errors.Is(err, teams_repo.ErrParticipationClosed) { + if errors.Is(err, participation_service.ErrParticipationLink) || errors.Is(err, participation_service.ErrParticipationFinal) || errors.Is(err, participation_service.ErrParticipationClosed) { return err.Error() } return "Не удалось обработать ответ. Попробуйте позже." diff --git a/internal/services/participation_service/mapper.go b/internal/services/participation_service/mapper.go new file mode 100644 index 0000000..536e377 --- /dev/null +++ b/internal/services/participation_service/mapper.go @@ -0,0 +1,20 @@ +package participation_service + +import "evening_detective_server/internal/repos/teams_repo" + +func mapParticipation(p *teams_repo.Participation) *Participation { + if p == nil { + return nil + } + return &Participation{ + TeamID: p.TeamID, + TeamName: p.TeamName, + GameName: p.GameName, + StartAt: p.StartAt, + ParticipantsCount: p.ParticipantsCount, + Status: p.Status, + Closed: p.Closed, + Email: p.Email, + Attempts: p.Attempts, + } +} diff --git a/internal/services/participation_service/participation.go b/internal/services/participation_service/participation.go new file mode 100644 index 0000000..42886e5 --- /dev/null +++ b/internal/services/participation_service/participation.go @@ -0,0 +1,26 @@ +package participation_service + +import ( + "time" + + "evening_detective_server/internal/repos/teams_repo" +) + +// Participation — данные участия, доступные транспортному и email-сценариям. +type Participation struct { + TeamID int + TeamName string + GameName string + StartAt time.Time + ParticipantsCount int32 + Status string + Closed bool + Email string + Attempts int +} + +var ( + ErrParticipationLink = teams_repo.ErrParticipationLink + ErrParticipationClosed = teams_repo.ErrParticipationClosed + ErrParticipationFinal = teams_repo.ErrParticipationFinal +) diff --git a/internal/services/participation_service/participation_test.go b/internal/services/participation_service/participation_test.go index 2445b24..8016579 100644 --- a/internal/services/participation_service/participation_test.go +++ b/internal/services/participation_service/participation_test.go @@ -33,7 +33,7 @@ func TestParticipationEmail(t *testing.T) { if len(token) != 64 || token != participationToken("test-secret", 42) || token == participationToken("test-secret", 43) || token == participationToken("other", 42) { t.Fatal("token isolation or retry stability broken") } - p := &teams_repo.Participation{TeamName: "", GameName: "Game", Email: "captain@example.org", StartAt: time.Date(2026, 9, 20, 12, 0, 0, 0, time.UTC), ParticipantsCount: 5} + p := &Participation{TeamName: "", GameName: "Game", Email: "captain@example.org", StartAt: time.Date(2026, 9, 20, 12, 0, 0, 0, time.UTC), ParticipantsCount: 5} m := participationEmail(p, "https://example.org", token, time.FixedZone("+07", 7*3600)) if strings.Contains(m.HTML, "