From ec2184dfea1d9b47f6ab9da4aa0b0f6877fac669 Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Thu, 12 Feb 2026 04:21:30 +0500 Subject: [PATCH] modified: main_dc/yalarba/api_yal/internal/models/rating.go set comment into cod --- .../yalarba/api_yal/internal/models/rating.go | 107 +++++++++++------- 1 file changed, 64 insertions(+), 43 deletions(-) diff --git a/main_dc/yalarba/api_yal/internal/models/rating.go b/main_dc/yalarba/api_yal/internal/models/rating.go index 1dc7719..e010ae5 100644 --- a/main_dc/yalarba/api_yal/internal/models/rating.go +++ b/main_dc/yalarba/api_yal/internal/models/rating.go @@ -1,57 +1,78 @@ package models -import () - -// Типы платформ +// PlatformType определяет тип платформы, на которой используется рейтинг type PlatformType string const ( - PlatformEntrepreneur PlatformType = "entrepreneur" // Платформа для предпринимателей - PlatformTourist PlatformType = "tourist" // Платформа для туристов + // PlatformEntrepreneur - платформа для предпринимателей + PlatformEntrepreneur PlatformType = "entrepreneur" + // PlatformTourist - платформа для туристов + PlatformTourist PlatformType = "tourist" ) +// Rating представляет агрегированную информацию о рейтинге объекта +// Содержит среднюю оценку, общее количество голосов и детализацию по баллам type Rating struct { - - /*ID, CreatedAt, UpdatedAt, DeletedAt (Update's history)*/ + // Base содержит общие поля для всех моделей: + // ID, CreatedAt, UpdatedAt, DeletedAt (история обновлений) Base Base `gorm:"embedded"` - // owner account ID - OwnerID uint `json:"owner_id"` - Owner Account `gorm:"foreignKey:OwnerID;references:ID" json:"owner"` + // OwnerID - идентификатор владельца рейтинга (аккаунта) + OwnerID uint `json:"owner_id"` + // Owner - владелец рейтинга, связанный по OwnerID + Owner Account `gorm:"foreignKey:OwnerID;references:ID" json:"owner"` - // object ID - ObjectID uint `json:"object_id"` - Object Object `gorm:"foreignKey:ObjectID;references:ID" json:"object"` - - Platform PlatformType `json:"platform"` // К какой платформе относится - AverageScore float64 `json:"average_score"` // Средняя оценка - TotalVotes int `json:"total_votes"` // Общее количество голосов - VoteBreakdown VoteBreakdown `json:"vote_breakdown"` // Детализация оценок - -} - -// VoteBreakdown - детализация по баллам -type VoteBreakdown struct { - Base Base `gorm:"embedded"` - - RatingID uint `json:"rating_id"` - Rating Rating `gorm:"foreignKey:RatingID;references:ID" json:"rating"` - - Score1 int `json:"score_1"` // Количество оценок 1 - Score2 int `json:"score_2"` // Количество оценок 2 - Score3 int `json:"score_3"` // Количество оценок 3 - Score4 int `json:"score_4"` // Количество оценок 4 - Score5 int `json:"score_5"` // Количество оценок 5 -} - -// RatingVote - отдельный голос в рейтинге -type RatingVote struct { - - /*ID, CreatedAt, UpdatedAt, DeletedAt (Update's history)*/ - Base Base `gorm:"embedded"` + // ObjectID - идентификатор объекта, к которому относится рейтинг + ObjectID uint `json:"object_id"` + // Object - объект рейтинга, связанный по ObjectID + Object Object `gorm:"foreignKey:ObjectID;references:ID" json:"object"` + // Platform - платформа, к которой относится рейтинг (entrepreneur/tourist) Platform PlatformType `json:"platform"` - TargetID uint `json:"target_id"` - VoterID uint `json:"voter_id"` // ID голосующего (предприниматель/турист) - Score int `json:"score"` // Оценка от 1 до 5 + // 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"` +} \ No newline at end of file