This commit is contained in:
2026-10-02 23:19:44 +07:00
parent b1fb9c4dfa
commit b97a5bc0cd
3 changed files with 14 additions and 5 deletions
+3 -4
View File
@@ -7,8 +7,7 @@ import (
"evening_detective_server/internal/modules/processor_jwt" "evening_detective_server/internal/modules/processor_jwt"
"evening_detective_server/internal/modules/roles" "evening_detective_server/internal/modules/roles"
"evening_detective_server/internal/modules/team_qr_pdf" "evening_detective_server/internal/services/team_service"
"evening_detective_server/internal/repos/games_repo"
"evening_detective_server/proto" "evening_detective_server/proto"
"google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/genproto/googleapis/api/httpbody"
@@ -32,9 +31,9 @@ func (s *server) DownloadTeamQR(ctx context.Context, req *proto.GetGameReq) (*ht
data, filename, err := s.teamService.DownloadTeamQR(ctx, int(req.ID)) data, filename, err := s.teamService.DownloadTeamQR(ctx, int(req.ID))
if err != nil { if err != nil {
switch { switch {
case errors.Is(err, games_repo.ErrGameNotFound): case errors.Is(err, team_service.ErrGameNotFound):
return nil, status.Error(codes.NotFound, err.Error()) return nil, status.Error(codes.NotFound, err.Error())
case errors.Is(err, team_qr_pdf.ErrNoCards): case errors.Is(err, team_service.ErrNoCards):
return nil, status.Error(codes.FailedPrecondition, err.Error()) return nil, status.Error(codes.FailedPrecondition, err.Error())
default: default:
return nil, status.Error(codes.Internal, err.Error()) return nil, status.Error(codes.Internal, err.Error())
+4 -1
View File
@@ -125,6 +125,9 @@ func registrationEmail(team *repos.Team, gameName, baseURL string) email_sender.
func (s *TeamService) DownloadTeamQR(ctx context.Context, id int) ([]byte, string, error) { func (s *TeamService) DownloadTeamQR(ctx context.Context, id int) ([]byte, string, error) {
game, err := s.gamesRepo.GetGameByID(ctx, id) game, err := s.gamesRepo.GetGameByID(ctx, id)
if err != nil { if err != nil {
if errors.Is(err, games_repo.ErrGameNotFound) {
return nil, "", ErrGameNotFound
}
return nil, "", err return nil, "", err
} }
teams, err := s.teamsRepo.GetActiveTeamsByGameID(ctx, id) teams, err := s.teamsRepo.GetActiveTeamsByGameID(ctx, id)
@@ -132,7 +135,7 @@ func (s *TeamService) DownloadTeamQR(ctx context.Context, id int) ([]byte, strin
return nil, "", err return nil, "", err
} }
if len(teams) == 0 { if len(teams) == 0 {
return nil, "", team_qr_pdf.ErrNoCards return nil, "", ErrNoCards
} }
cards, filename, err := teamQRData(s.appBaseURL, game, teams) cards, filename, err := teamQRData(s.appBaseURL, game, teams)
if err != nil { if err != nil {
@@ -11,6 +11,13 @@ import (
"evening_detective_server/internal/repos" "evening_detective_server/internal/repos"
) )
var (
// ErrGameNotFound — игра для генерации QR-кодов не найдена.
ErrGameNotFound = errors.New("Игра не найдена")
// ErrNoCards — для игры нет активных команд, которым нужны QR-коды.
ErrNoCards = errors.New("нет карточек")
)
func teamQRData(baseURL string, game *repos.Game, teams []*repos.Team) ([]team_qr_pdf.Card, string, error) { func teamQRData(baseURL string, game *repos.Game, teams []*repos.Team) ([]team_qr_pdf.Card, string, error) {
base, err := url.Parse(strings.TrimSpace(baseURL)) base, err := url.Parse(strings.TrimSpace(baseURL))
if err != nil || (base.Scheme != "http" && base.Scheme != "https") || base.Host == "" || base.User != nil || base.RawQuery != "" || base.Fragment != "" { if err != nil || (base.Scheme != "http" && base.Scheme != "https") || base.Host == "" || base.User != nil || base.RawQuery != "" || base.Fragment != "" {