generated from VLADIMIR/template
up
This commit is contained in:
@@ -13,7 +13,7 @@ import (
|
||||
)
|
||||
|
||||
func mapGameReview(r *game_reviews_repo.Review) *proto.GameReview {
|
||||
return &proto.GameReview{Id: int32(r.ID), GameId: int32(r.GameID), TeamId: int32(r.TeamID), TeamName: r.TeamName, Rating: r.Rating, Text: r.Text, Status: r.Status, CreatedAt: timestamppb.New(r.CreatedAt)}
|
||||
return &proto.GameReview{Id: int32(r.ID), GameId: int32(r.GameID), TeamId: int32(r.TeamID), TeamName: r.TeamName, Rating: r.Rating, Text: r.Text, Status: r.Status, CreatedAt: timestamppb.New(r.CreatedAt), GameName: r.GameName}
|
||||
}
|
||||
|
||||
func mapGameReviews(reviews []*game_reviews_repo.Review) []*proto.GameReview {
|
||||
@@ -52,6 +52,18 @@ func (s *server) GetGameReviewsForModeration(ctx context.Context, req *proto.Get
|
||||
return &proto.GetGameReviewsRsp{AverageRating: average, ReviewsCount: count, Reviews: mapGameReviews(reviews)}, nil
|
||||
}
|
||||
|
||||
func (s *server) GetReviewsForModeration(ctx context.Context, req *proto.GetReviewsForModerationReq) (*proto.GetGameReviewsRsp, error) {
|
||||
claims := ctx.Value("claims").(*processor_jwt.JWTClaims)
|
||||
if !roles.HasRole(claims, roles.Admin) {
|
||||
return nil, status.Error(codes.PermissionDenied, "permission denied")
|
||||
}
|
||||
reviews, err := s.reviewService.ListForModeration(ctx)
|
||||
if err != nil {
|
||||
return &proto.GetGameReviewsRsp{Error: err.Error()}, nil
|
||||
}
|
||||
return &proto.GetGameReviewsRsp{Reviews: mapGameReviews(reviews)}, nil
|
||||
}
|
||||
|
||||
func (s *server) ModerateGameReview(ctx context.Context, req *proto.ModerateGameReviewReq) (*proto.ModerateGameReviewRsp, error) {
|
||||
claims := ctx.Value("claims").(*processor_jwt.JWTClaims)
|
||||
if !roles.HasRole(claims, roles.Admin) {
|
||||
|
||||
@@ -17,6 +17,7 @@ var (
|
||||
type Review struct {
|
||||
ID int
|
||||
GameID int
|
||||
GameName string
|
||||
TeamID int
|
||||
TeamName string
|
||||
Rating int32
|
||||
@@ -59,8 +60,8 @@ func (r *Repo) List(ctx context.Context, gameID int, all bool) ([]*Review, float
|
||||
if all {
|
||||
where = "r.game_id=$1"
|
||||
}
|
||||
rows, err := r.pool.Query(ctx, `SELECT r.id,r.game_id,r.team_id,t.name,r.rating,r.text,r.status,r.created_at
|
||||
FROM game_reviews r JOIN teams t ON t.id=r.team_id WHERE `+where+` ORDER BY r.created_at DESC`, gameID)
|
||||
rows, err := r.pool.Query(ctx, `SELECT r.id,r.game_id,r.team_id,t.name,g.name,r.rating,r.text,r.status,r.created_at
|
||||
FROM game_reviews r JOIN teams t ON t.id=r.team_id JOIN games g ON g.id=r.game_id WHERE `+where+` ORDER BY r.created_at DESC`, gameID)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
@@ -68,7 +69,7 @@ func (r *Repo) List(ctx context.Context, gameID int, all bool) ([]*Review, float
|
||||
var reviews []*Review
|
||||
for rows.Next() {
|
||||
review := &Review{}
|
||||
if err := rows.Scan(&review.ID, &review.GameID, &review.TeamID, &review.TeamName, &review.Rating, &review.Text, &review.Status, &review.CreatedAt); err != nil {
|
||||
if err := rows.Scan(&review.ID, &review.GameID, &review.TeamID, &review.TeamName, &review.GameName, &review.Rating, &review.Text, &review.Status, &review.CreatedAt); err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
reviews = append(reviews, review)
|
||||
@@ -84,6 +85,25 @@ func (r *Repo) List(ctx context.Context, gameID int, all bool) ([]*Review, float
|
||||
return reviews, average, int32(count), nil
|
||||
}
|
||||
|
||||
func (r *Repo) ListForModeration(ctx context.Context) ([]*Review, error) {
|
||||
rows, err := r.pool.Query(ctx, `SELECT r.id,r.game_id,r.team_id,t.name,g.name,r.rating,r.text,r.status,r.created_at
|
||||
FROM game_reviews r JOIN teams t ON t.id=r.team_id JOIN games g ON g.id=r.game_id
|
||||
ORDER BY CASE WHEN r.status='pending' THEN 0 ELSE 1 END, r.created_at ASC`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var reviews []*Review
|
||||
for rows.Next() {
|
||||
review := &Review{}
|
||||
if err := rows.Scan(&review.ID, &review.GameID, &review.TeamID, &review.TeamName, &review.GameName, &review.Rating, &review.Text, &review.Status, &review.CreatedAt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
reviews = append(reviews, review)
|
||||
}
|
||||
return reviews, rows.Err()
|
||||
}
|
||||
|
||||
func (r *Repo) Moderate(ctx context.Context, id int, status string) (*Review, error) {
|
||||
review, err := r.queryOne(ctx, `WHERE r.id=$1`, id)
|
||||
if err != nil {
|
||||
@@ -110,9 +130,9 @@ func (r *Repo) ScenarioRating(ctx context.Context, scenarioID int) (float64, int
|
||||
|
||||
func (r *Repo) queryOne(ctx context.Context, condition string, id int) (*Review, error) {
|
||||
review := &Review{}
|
||||
err := r.pool.QueryRow(ctx, `SELECT r.id,r.game_id,r.team_id,t.name,r.rating,r.text,r.status,r.created_at
|
||||
FROM game_reviews r JOIN teams t ON t.id=r.team_id `+condition, id).Scan(
|
||||
&review.ID, &review.GameID, &review.TeamID, &review.TeamName, &review.Rating, &review.Text, &review.Status, &review.CreatedAt)
|
||||
err := r.pool.QueryRow(ctx, `SELECT r.id,r.game_id,r.team_id,t.name,g.name,r.rating,r.text,r.status,r.created_at
|
||||
FROM game_reviews r JOIN teams t ON t.id=r.team_id JOIN games g ON g.id=r.game_id `+condition, id).Scan(
|
||||
&review.ID, &review.GameID, &review.TeamID, &review.TeamName, &review.GameName, &review.Rating, &review.Text, &review.Status, &review.CreatedAt)
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
return nil, ErrReviewNotFound
|
||||
}
|
||||
|
||||
@@ -58,6 +58,10 @@ func (s *Service) List(ctx context.Context, gameID int, all bool) ([]*game_revie
|
||||
return s.reviews.List(ctx, gameID, all)
|
||||
}
|
||||
|
||||
func (s *Service) ListForModeration(ctx context.Context) ([]*game_reviews_repo.Review, error) {
|
||||
return s.reviews.ListForModeration(ctx)
|
||||
}
|
||||
|
||||
func (s *Service) Moderate(ctx context.Context, id int, status string) (*game_reviews_repo.Review, error) {
|
||||
return s.reviews.Moderate(ctx, id, status)
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ var (
|
||||
permissions = map[string][]string{
|
||||
rolesModule.Admin: {
|
||||
"users_page",
|
||||
"reviews_page",
|
||||
},
|
||||
rolesModule.Author: {
|
||||
"scenarios_page",
|
||||
|
||||
Reference in New Issue
Block a user