package app import ( "context" "evening_detective_server/internal/modules/roles" proto "evening_detective_server/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) func (s *server) AddScenarioPlace(ctx context.Context, req *proto.AddScenarioPlaceReq) (*proto.AddScenarioPlaceRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.AddScenarioPlace( ctx, int(req.ID), convertPlace(req.Place), claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось добавить место сценария") } return &proto.AddScenarioPlaceRsp{}, nil } func (s *server) UpdateScenarioPlace(ctx context.Context, req *proto.UpdateScenarioPlaceReq) (*proto.UpdateScenarioPlaceRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.UpdateScenarioPlace( ctx, int(req.ID), req.Code, convertPlace(req.Place), claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось изменить место сценария") } return &proto.UpdateScenarioPlaceRsp{}, nil } func (s *server) DeleteScenarioPlace(ctx context.Context, req *proto.DeleteScenarioPlaceReq) (*proto.DeleteScenarioPlaceRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.DeleteScenarioPlace( ctx, int(req.ID), req.Code, claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось удалить место сценария") } return &proto.DeleteScenarioPlaceRsp{}, nil } func (s *server) AddScenarioQuestion(ctx context.Context, req *proto.AddScenarioQuestionReq) (*proto.AddScenarioQuestionRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.AddScenarioQuestion( ctx, int(req.ID), convertQuestion(req.Question), claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось добавить вопрос сценария") } return &proto.AddScenarioQuestionRsp{}, nil } func (s *server) UpdateScenarioQuestion(ctx context.Context, req *proto.UpdateScenarioQuestionReq) (*proto.UpdateScenarioQuestionRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.UpdateScenarioQuestion( ctx, int(req.ID), req.Code, convertQuestion(req.Question), claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось изменить вопрос сценария") } return &proto.UpdateScenarioQuestionRsp{}, nil } func (s *server) DeleteScenarioQuestion(ctx context.Context, req *proto.DeleteScenarioQuestionReq) (*proto.DeleteScenarioQuestionRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.DeleteScenarioQuestion( ctx, int(req.ID), req.Code, claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось удалить вопрос сценария") } return &proto.DeleteScenarioQuestionRsp{}, nil } func (s *server) UpdateScenarioBackground(ctx context.Context, req *proto.UpdateScenarioBackgroundReq) (*proto.UpdateScenarioBackgroundRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.UpdateScenarioBackground( ctx, int(req.ID), req.Background, claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось изменить фон сценария") } return &proto.UpdateScenarioBackgroundRsp{}, nil } func (s *server) UpdateScenarioIntro(ctx context.Context, req *proto.UpdateScenarioIntroReq) (*proto.UpdateScenarioIntroRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } err := s.scenarioService.UpdateScenarioIntro( ctx, int(req.ID), convertIntroduction(req.Introduction), claims.UserID, roles.HasRole(claims, roles.Admin), ) if err != nil { return nil, scenarioErrorStatus(err, "не удалось изменить введение сценария") } return &proto.UpdateScenarioIntroRsp{}, nil } func (s *server) UpdateScenarioConclusion(ctx context.Context, req *proto.UpdateScenarioConclusionReq) (*proto.UpdateScenarioConclusionRsp, error) { claims, claimsErr := claimsFromContext(ctx) if claimsErr != nil { return nil, claimsErr } if !roles.HasRole(claims, roles.Author) { return nil, status.Errorf(codes.PermissionDenied, "permission denied") } if err := s.scenarioService.UpdateScenarioConclusion(ctx, int(req.ID), convertConclusion(req.Conclusion), claims.UserID, roles.HasRole(claims, roles.Admin)); err != nil { return nil, scenarioErrorStatus(err, "не удалось изменить заключение сценария") } return &proto.UpdateScenarioConclusionRsp{}, nil }