Files
evening_detective_server/internal/app/team_receipt.go
T
2026-10-13 13:50:13 +07:00

56 lines
1.8 KiB
Go

package app
import (
"context"
"evening_detective_server/internal/modules/roles"
"evening_detective_server/internal/services/team_service"
"evening_detective_server/proto"
"google.golang.org/genproto/googleapis/api/httpbody"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
)
func receiptClaims(ctx context.Context) error {
claims, err := claimsFromContext(ctx)
if err != nil {
return err
}
if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) {
return status.Error(codes.PermissionDenied, "нет доступа к печати чеков команды")
}
return nil
}
func (s *server) PreviewTeamReceipt(ctx context.Context, req *proto.TeamReceiptReq) (*httpbody.HttpBody, error) {
if err := receiptClaims(ctx); err != nil {
return nil, err
}
data, err := s.teamService.PreviewTeamReceipt(ctx, int(req.GetGameID()), req.GetTeamID())
if err != nil {
return nil, teamReceiptError(err)
}
if err := grpc.SetHeader(ctx, metadata.Pairs("Cache-Control", "no-store", "X-Content-Type-Options", "nosniff")); err != nil {
return nil, status.Error(codes.Internal, "не удалось установить заголовки чека")
}
return &httpbody.HttpBody{
ContentType: "image/png",
Data: data,
}, nil
}
func (s *server) PrintTeamReceipt(ctx context.Context, req *proto.TeamReceiptReq) (*proto.PrintTeamReceiptRsp, error) {
if err := receiptClaims(ctx); err != nil {
return nil, err
}
ctx, cancel := context.WithTimeout(ctx, team_service.ReceiptTimeout)
defer cancel()
if err := s.teamService.PrintTeamReceipt(ctx, int(req.GetGameID()), req.GetTeamID()); err != nil {
return nil, teamReceiptError(err)
}
return &proto.PrintTeamReceiptRsp{}, nil
}