package app import ( "context" "evening_detective_server/internal/modules/processor_jwt" "evening_detective_server/internal/modules/roles" proto "evening_detective_server/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) func (s *server) AddTeam(ctx context.Context, req *proto.AddTeamReq) (*proto.AddTeamRsp, error) { claims := ctx.Value("claims").(*processor_jwt.JWTClaims) if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } team, err := s.teamService.AddTeam( ctx, claims.UserID, int(req.GameId), req.Name, req.CaptainEmail, ) if err != nil { return &proto.AddTeamRsp{ Error: err.Error(), }, nil } return &proto.AddTeamRsp{ Id: int32(team.ID), Password: team.Password, }, nil } func (s *server) UpdateTeam(ctx context.Context, req *proto.UpdateTeamReq) (*proto.UpdateTeamRsp, error) { claims := ctx.Value("claims").(*processor_jwt.JWTClaims) if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.teamService.UpdateTeam( ctx, int(req.Id), req.Name, ) if err != nil { return &proto.UpdateTeamRsp{ Error: err.Error(), }, nil } return &proto.UpdateTeamRsp{}, nil } func (s *server) DeleteTeam(ctx context.Context, req *proto.DeleteTeamReq) (*proto.DeleteTeamRsp, error) { claims := ctx.Value("claims").(*processor_jwt.JWTClaims) if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.teamService.DeleteTeam( ctx, int(req.Id), ) if err != nil { return &proto.DeleteTeamRsp{ Error: err.Error(), }, nil } return &proto.DeleteTeamRsp{}, nil } func (s *server) GiveTeamApplications(ctx context.Context, req *proto.GiveTeamApplicationsReq) (*proto.GiveTeamApplicationsRsp, error) { claims := ctx.Value("claims").(*processor_jwt.JWTClaims) if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.gameplayService.GiveTeamApplications( ctx, int(req.Id), req.Name, ) if err != nil { return &proto.GiveTeamApplicationsRsp{ Error: err.Error(), }, nil } return &proto.GiveTeamApplicationsRsp{}, nil } func (s *server) GetTeamStory(ctx context.Context, req *proto.GetTeamStoryReq) (*proto.GetTeamStoryRsp, error) { story, game, actions, err := s.gameplayService.GetTeamActions( ctx, int(req.Id), req.Password, ) if err != nil { return &proto.GetTeamStoryRsp{ Error: err.Error(), }, nil } protoActions := make([]*proto.TeamAction, 0, len(actions)) for _, action := range actions { protoActions = append(protoActions, &proto.TeamAction{Code: action.Code, Mcp: action.ViaMCP}) } return &proto.GetTeamStoryRsp{ Story: mapStory(story), Game: mapGame(game), Actions: protoActions, }, nil } func (s *server) AddTeamAction(ctx context.Context, req *proto.AddTeamActionReq) (*proto.AddTeamActionRsp, error) { err := s.gameplayService.AddTeamAction( ctx, int(req.Id), req.Password, req.Code, false, ) if err != nil { return &proto.AddTeamActionRsp{ Error: err.Error(), }, nil } return &proto.AddTeamActionRsp{}, nil } func (s *server) DeleteLastTeamAction(ctx context.Context, req *proto.DeleteLastTeamActionReq) (*proto.DeleteLastTeamActionRsp, error) { claims := ctx.Value("claims").(*processor_jwt.JWTClaims) if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.gameplayService.DeleteLastTeamAction( ctx, int(req.Id), ) if err != nil { return &proto.DeleteLastTeamActionRsp{ Error: err.Error(), }, nil } return &proto.DeleteLastTeamActionRsp{}, nil }