package models // PlatformType определяет тип платформы, на которой используется рейтинг type PlatformType string const ( // PlatformEntrepreneur - платформа для предпринимателей PlatformEntrepreneur PlatformType = "entrepreneur" // PlatformTourist - платформа для туристов PlatformTourist PlatformType = "tourist" ) // Rating представляет агрегированную информацию о рейтинге объекта // Содержит среднюю оценку, общее количество голосов и детализацию по баллам type Rating struct { // Base содержит общие поля для всех моделей: // ID, CreatedAt, UpdatedAt, DeletedAt (история обновлений) Base Base `gorm:"embedded"` // OwnerID - идентификатор владельца рейтинга (аккаунта) OwnerID uint `json:"owner_id"` // ObjectID - идентификатор объекта, к которому относится рейтинг ObjectID uint `json:"object_id"` // Object - объект рейтинга, связанный по ObjectID Object Object `gorm:"foreignKey:ObjectID;references:ID" json:"object"` // Platform - платформа, к которой относится рейтинг (entrepreneur/tourist) Platform PlatformType `json:"platform"` // AverageScore - средняя оценка объекта (от 1 до 5) AverageScore float64 `json:"average_score"` // TotalVotes - общее количество проголосовавших пользователей TotalVotes int `json:"total_votes"` // VoteBreakdown - детализированная информация о распределении оценок VoteBreakdown VoteBreakdown `json:"vote_breakdown"` } // VoteBreakdown содержит детализацию количества оценок по каждому баллу // Используется для отображения распределения голосов от 1 до 5 type VoteBreakdown struct { // Base содержит общие поля для всех моделей Base Base `gorm:"embedded"` // RatingID - идентификатор рейтинга, к которому относится детализация RatingID uint `json:"rating_id"` // Rating - рейтинг, связанный по RatingID Rating Rating `gorm:"foreignKey:RatingID;references:ID" json:"rating"` // Score1 - количество оценок "1" Score1 int `json:"score_1"` // Score2 - количество оценок "2" Score2 int `json:"score_2"` // Score3 - количество оценок "3" Score3 int `json:"score_3"` // Score4 - количество оценок "4" Score4 int `json:"score_4"` // Score5 - количество оценок "5" Score5 int `json:"score_5"` } // RatingVote представляет отдельный голос пользователя в рейтинге // Хранит информацию о том, кто, когда и какую оценку поставил type RatingVote struct { // Base содержит общие поля для всех моделей: // ID, CreatedAt, UpdatedAt, DeletedAt (история обновлений) Base Base `gorm:"embedded"` // Platform - платформа, на которой был сделан голос Platform PlatformType `json:"platform"` // TargetID - идентификатор объекта, которому поставлена оценка TargetID uint `json:"target_id"` // VoterID - идентификатор пользователя, поставившего оценку VoterID uint `json:"voter_id"` // Score - поставленная оценка (допустимые значения: от 1 до 5) Score int `json:"score"` }