Files
evening_detective_server/internal/app/scenario_story.go
T
2026-10-01 14:19:43 +07:00

228 lines
5.9 KiB
Go

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 &proto.AddScenarioPlaceRsp{
Error: err.Error(),
}, nil
}
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 &proto.UpdateScenarioPlaceRsp{
Error: err.Error(),
}, nil
}
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 &proto.DeleteScenarioPlaceRsp{
Error: err.Error(),
}, nil
}
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 &proto.AddScenarioQuestionRsp{
Error: err.Error(),
}, nil
}
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 &proto.UpdateScenarioQuestionRsp{
Error: err.Error(),
}, nil
}
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 &proto.DeleteScenarioQuestionRsp{
Error: err.Error(),
}, nil
}
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 &proto.UpdateScenarioBackgroundRsp{
Error: err.Error(),
}, nil
}
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 &proto.UpdateScenarioIntroRsp{
Error: err.Error(),
}, nil
}
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 &proto.UpdateScenarioConclusionRsp{Error: err.Error()}, nil
}
return &proto.UpdateScenarioConclusionRsp{}, nil
}