Files
tp/main_dc/yalarba/api_yal/internal/domain/rating/dto.go
T
valitovgaziz ba2e3b9545 On branch main
modified:   main_dc/yalarba/api_yal/internal/domain/rating/dto.go
	new file:   main_dc/yalarba/api_yal/internal/domain/rating/handler.go
	new file:   main_dc/yalarba/api_yal/internal/domain/rating/router.go
	new file:   main_dc/yalarba/api_yal/internal/domain/rating/service.go
	modified:   main_dc/yalarba/api_yal/internal/router/router.go
add raing domain without test
2026-05-20 13:23:38 +05:00

87 lines
3.0 KiB
Go

package rating
import (
"api_yal/internal/models"
"time"
)
// CreateRatingRequest запрос на создание рейтинга
type CreateRatingRequest struct {
ObjectID uint `json:"object_id" validate:"required"`
Platform models.PlatformType `json:"platform" validate:"required,oneof=entrepreneur tourist"`
}
// UpdateRatingRequest запрос на обновление рейтинга
type UpdateRatingRequest struct {
AverageScore *float64 `json:"average_score,omitempty"`
TotalVotes *int `json:"total_votes,omitempty"`
}
// VoteRequest запрос на голосование
type VoteRequest struct {
Score int `json:"score" validate:"required,min=1,max=5"`
}
// RatingResponse ответ с данными рейтинга
type RatingResponse struct {
ID uint `json:"id"`
OwnerID uint `json:"owner_id"`
ObjectID uint `json:"object_id"`
Platform models.PlatformType `json:"platform"`
AverageScore float64 `json:"average_score"`
TotalVotes int `json:"total_votes"`
VoteBreakdown *VoteBreakdownResponse `json:"vote_breakdown,omitempty"`
Object *ObjectBriefResponse `json:"object,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// VoteBreakdownResponse ответ с детализацией голосов
type VoteBreakdownResponse struct {
Score1 int `json:"score_1"`
Score2 int `json:"score_2"`
Score3 int `json:"score_3"`
Score4 int `json:"score_4"`
Score5 int `json:"score_5"`
}
// ObjectBriefResponse краткая информация об объекте
type ObjectBriefResponse struct {
ID uint `json:"id"`
Name string `json:"name"`
}
// RatingVoteResponse ответ с данными голоса
type RatingVoteResponse struct {
ID uint `json:"id"`
Platform models.PlatformType `json:"platform"`
TargetID uint `json:"target_id"`
VoterID uint `json:"voter_id"`
Score int `json:"score"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// ListRatingsRequest параметры для списка рейтингов
type ListRatingsRequest struct {
Page int `query:"page" default:"1"`
PageSize int `query:"page_size" default:"20"`
Platform string `query:"platform"`
OwnerID uint `query:"owner_id"`
ObjectID uint `query:"object_id"`
}
// ListRatingsResponse ответ со списком рейтингов
type ListRatingsResponse struct {
Ratings []RatingResponse `json:"ratings"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalPages int `json:"total_pages"`
}
// UserRatingInfoResponse информация о голосе пользователя
type UserRatingInfoResponse struct {
HasVoted bool `json:"has_voted"`
UserScore *int `json:"user_score,omitempty"`
}