package feetback import ( "api_yal/internal/models" "time" ) // CreateFeedbackRequest DTO для создания отзыва type CreateFeedbackRequest struct { ObjectID uint `json:"object_id" binding:"required"` Rating int `json:"rating" binding:"required,min=1,max=5"` Text string `json:"text" binding:"required,min=1,max=2000"` Platform models.PlatformType `json:"platform" binding:"required"` MediaURLs []string `json:"media_urls"` } // UpdateFeedbackRequest DTO для обновления отзыва type UpdateFeedbackRequest struct { Rating *int `json:"rating,omitempty" binding:"omitempty,min=1,max=5"` Text *string `json:"text,omitempty" binding:"omitempty,min=1,max=2000"` Platform *models.PlatformType `json:"platform,omitempty"` MediaURLs []string `json:"media_urls"` } // FeedbackResponse DTO для ответа type FeedbackResponse struct { ID uint `json:"id"` OwnerID uint `json:"owner_id"` Owner *AccountBriefResponse `json:"owner,omitempty"` ObjectID uint `json:"object_id"` Object *ObjectBriefResponse `json:"object,omitempty"` Rating int `json:"rating"` Text string `json:"text"` Platform models.PlatformType `json:"platform"` MediaURLs []string `json:"media_urls"` CommentCount int `json:"comment_count"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // AccountBriefResponse краткая информация о пользователе type AccountBriefResponse struct { ID uint `json:"id"` Username string `json:"username"` AvatarURL string `json:"avatar_url"` } // ObjectBriefResponse краткая информация об объекте type ObjectBriefResponse struct { ID uint `json:"id"` Name string `json:"name"` Description string `json:"description"` } // FeedbackListResponse ответ со списком отзывов type FeedbackListResponse struct { Data []FeedbackResponse `json:"data"` Total int64 `json:"total"` Offset int `json:"offset"` Limit int `json:"limit"` NextOffset *int `json:"next_offset,omitempty"` } // CreateCommentRequest DTO для создания комментария type CreateCommentRequest struct { Text string `json:"text" binding:"required,min=1,max=1000"` } // UpdateCommentRequest DTO для обновления комментария type UpdateCommentRequest struct { Text string `json:"text" binding:"required,min=1,max=1000"` } // CommentResponse DTO для ответа с комментарием type CommentResponse struct { ID uint `json:"id"` FeedbackID uint `json:"feedback_id"` AccountID uint `json:"account_id"` Account *AccountBriefResponse `json:"account,omitempty"` Text string `json:"text"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // CommentListResponse ответ со списком комментариев type CommentListResponse struct { Data []CommentResponse `json:"data"` Total int `json:"total"` Offset int `json:"offset"` Limit int `json:"limit"` NextOffset *int `json:"next_offset,omitempty"` } // FeedbackStatsResponse статистика по отзывам type FeedbackStatsResponse struct { TotalFeedbacks int64 `json:"total_feedbacks"` AverageRating float64 `json:"average_rating"` RatingDistribution map[int]int64 `json:"rating_distribution"` PlatformStats map[models.PlatformType]int64 `json:"platform_stats"` } // ErrorResponse ответ с ошибкой type ErrorResponse struct { Error string `json:"error"` Message string `json:"message"` Code int `json:"code"` }