From 8e3a20ee4843b88f0a6cdf03e07bc710fa0966a0 Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Tue, 24 Feb 2026 12:54:46 +0500 Subject: [PATCH] new file: main_dc/yalarba/api_yal/internal/repository/account_repository.go new file: main_dc/yalarba/api_yal/internal/repository/appeal_repository.go new file: main_dc/yalarba/api_yal/internal/repository/comment_repository.go new file: main_dc/yalarba/api_yal/internal/repository/feedback_repository.go new file: main_dc/yalarba/api_yal/internal/repository/object_repository.go new file: main_dc/yalarba/api_yal/internal/repository/rating_repository.go add repositoryes for models into yal db --- .../internal/repository/account_repository.go | 36 ++++++++++ .../internal/repository/appeal_repository.go | 63 ++++++++++++++++++ .../internal/repository/comment_repository.go | 54 +++++++++++++++ .../repository/feedback_repository.go | 54 +++++++++++++++ .../internal/repository/object_repository.go | 66 +++++++++++++++++++ .../internal/repository/rating_repository.go | 66 +++++++++++++++++++ 6 files changed, 339 insertions(+) create mode 100644 main_dc/yalarba/api_yal/internal/repository/account_repository.go create mode 100644 main_dc/yalarba/api_yal/internal/repository/appeal_repository.go create mode 100644 main_dc/yalarba/api_yal/internal/repository/comment_repository.go create mode 100644 main_dc/yalarba/api_yal/internal/repository/feedback_repository.go create mode 100644 main_dc/yalarba/api_yal/internal/repository/object_repository.go create mode 100644 main_dc/yalarba/api_yal/internal/repository/rating_repository.go diff --git a/main_dc/yalarba/api_yal/internal/repository/account_repository.go b/main_dc/yalarba/api_yal/internal/repository/account_repository.go new file mode 100644 index 0000000..0c8ed83 --- /dev/null +++ b/main_dc/yalarba/api_yal/internal/repository/account_repository.go @@ -0,0 +1,36 @@ +package repository + +import ( + "api_yal/internal/models" +) + +// AccountRepository интерфейс для операций с моделью Account +//go:generate mockgen -destination=mocks/account_repository.go -package=mocks . AccountRepository +type AccountRepository interface { + // Create создает новый аккаунт + Create(account *models.Account) error + + // GetByID возвращает аккаунт по ID + GetByID(id uint) (*models.Account, error) + + // GetByEmail возвращает аккаунт по email + GetByEmail(email string) (*models.Account, error) + + // Update обновляет существующий аккаунт + Update(account *models.Account) error + + // Delete помечает аккаунт как удаленный + Delete(id uint) error + + // List возвращает список аккаунтов с пагинацией + List(offset, limit int) ([]models.Account, error) + + // Count возвращает общее количество аккаунтов + Count() (int64, error) + + // Search находит аккаунты по email или полному имени + Search(query string, offset, limit int) ([]models.Account, error) + + // GetObjects возвращает все объекты, принадлежащие аккаунту + GetObjects(accountID uint) ([]models.Object, error) +} \ No newline at end of file diff --git a/main_dc/yalarba/api_yal/internal/repository/appeal_repository.go b/main_dc/yalarba/api_yal/internal/repository/appeal_repository.go new file mode 100644 index 0000000..d2a92c8 --- /dev/null +++ b/main_dc/yalarba/api_yal/internal/repository/appeal_repository.go @@ -0,0 +1,63 @@ +package repository + +import ( + "api_yal/internal/models" +) + +// AppealRepository интерфейс для операций с моделью Appeal +//go:generate mockgen -destination=mocks/appeal_repository.go -package=mocks . AppealRepository +type AppealRepository interface { + // Create создает новое о��ращение + Create(appeal *models.Appeal) error + + // GetByID возвращает обращение по ID + GetByID(id uint) (*models.Appeal, error) + + // Update обновляет существующее обращение + Update(appeal *models.Appeal) error + + // Delete помечает обращение как удаленное + Delete(id uint) error + + // List возвращает список обращений с пагинацией + List(offset, limit int) ([]models.Appeal, error) + + // Count возвращает общее количество обращений + Count() (int64, error) + + // ListByStatus возвращает обращения по статусу + ListByStatus(status models.AppealStatus, offset, limit int) ([]models.Appeal, error) + + // ListByType возвращает обращения по типу + ListByType(typeAppeal models.AppealType, offset, limit int) ([]models.Appeal, error) + + // ListByPriority возвращает обращения по приоритету + ListByPriority(priority models.AppealPriority, offset, limit int) ([]models.Appeal, error) + + // Search находит обращения по заголовку или сообщению + Search(query string, offset, limit int) ([]models.Appeal, error) + + // GetAuthor возвращает автора обращения + GetAuthor(appealID uint) (*models.Account, error) + + // GetObject возвращает объект, связанный с обращением + GetObject(appealID uint) (*models.Object, error) + + // GetFeedback возвращает отзыв, связанный с обращением + GetFeedback(appealID uint) (*models.Feedback, error) + + // GetComment возвращает комментарий, связанный с обращением + GetComment(appealID uint) (*models.Comment, error) + + // AssignTo назначает ответственного за обработку обращения + AssignTo(appealID uint, assignedToID *uint) error + + // UpdateStatus обновляет статус обращения + UpdateStatus(appealID uint, status models.AppealStatus) error + + // CreateHistory создает запись в истории изменений статуса + CreateHistory(history *models.AppealHistory) error + + // ListHistory возвращает историю изменений статуса обращения + ListHistory(appealID uint, offset, limit int) ([]models.AppealHistory, error) +} \ No newline at end of file diff --git a/main_dc/yalarba/api_yal/internal/repository/comment_repository.go b/main_dc/yalarba/api_yal/internal/repository/comment_repository.go new file mode 100644 index 0000000..daf27b9 --- /dev/null +++ b/main_dc/yalarba/api_yal/internal/repository/comment_repository.go @@ -0,0 +1,54 @@ +package repository + +import ( + "api_yal/internal/models" +) + +// CommentRepository интерфейс для операций с моделью Comment +//go:generate mockgen -destination=mocks/comment_repository.go -package=mocks . CommentRepository +type CommentRepository interface { + // Create создает новый комментарий + Create(comment *models.Comment) error + + // GetByID возвращает комментарий по ID + GetByID(id uint) (*models.Comment, error) + + // Update обновляет существующий комментарий + Update(comment *models.Comment) error + + // Delete помечает комментарий как удаленный + Delete(id uint) error + + // List возвращает список комментариев с пагинацией + List(offset, limit int) ([]models.Comment, error) + + // Count возвращает общее количество комментариев + Count() (int64, error) + + // ListByFeedback возвращает комментарии по отзыву + ListByFeedback(feedbackID uint, offset, limit int) ([]models.Comment, error) + + // ListByAuthor возвращает комментарии по автору + ListByAuthor(authorID uint, offset, limit int) ([]models.Comment, error) + + // ListReplies возвращает ответы на комментарий + ListReplies(parentID uint, offset, limit int) ([]models.Comment, error) + + // GetAuthor возвращает автора комментария + GetAuthor(commentID uint) (*models.Account, error) + + // GetFeedback возвращает отзыв, к которому относится комментарий + GetFeedback(commentID uint) (*models.Feedback, error) + + // GetParent возвращает родительский комментарий + GetParent(commentID uint) (*models.Comment, error) + + // GetRepliesCount возвращает количество ответов на комментарий + GetRepliesCount(commentID uint) (int64, error) + + // MarkAsEdited помечает комментарий как отредактированный + MarkAsEdited(id uint) error + + // ToggleVerification переключает статус верификации комментария + ToggleVerification(id uint, verified bool) error +} \ No newline at end of file diff --git a/main_dc/yalarba/api_yal/internal/repository/feedback_repository.go b/main_dc/yalarba/api_yal/internal/repository/feedback_repository.go new file mode 100644 index 0000000..16ce787 --- /dev/null +++ b/main_dc/yalarba/api_yal/internal/repository/feedback_repository.go @@ -0,0 +1,54 @@ +package repository + +import ( + "api_yal/internal/models" +) + +// FeedbackRepository интерфейс для операций с моделью Feedback +//go:generate mockgen -destination=mocks/feedback_repository.go -package=mocks . FeedbackRepository +type FeedbackRepository interface { + // Create создает новый отзыв + Create(feedback *models.Feedback) error + + // GetByID возвращает отзыв по ID + GetByID(id uint) (*models.Feedback, error) + + // Update обновляет существующий отзыв + Update(feedback *models.Feedback) error + + // Delete помечает отзыв как удаленный + Delete(id uint) error + + // List возвращает список отзывов с пагинацией + List(offset, limit int) ([]models.Feedback, error) + + // Count возвращает общее количество отзывов + Count() (int64, error) + + // ListByOwner возвращает отзывы по владельцу + ListByOwner(ownerID uint, offset, limit int) ([]models.Feedback, error) + + // ListByObject возвращает отзывы по объекту + ListByObject(objectID uint, offset, limit int) ([]models.Feedback, error) + + // ListByPlatform возвращает отзывы по платформе + ListByPlatform(platform models.PlatformType, offset, limit int) ([]models.Feedback, error) + + // GetOwner возвращает владельца отзыва + GetOwner(feedbackID uint) (*models.Account, error) + + // GetObject возвращает объект, к которому относится отзыв + GetObject(feedbackID uint) (*models.Object, error) + + // GetComments возвращает комментарии к отзыву + GetComments(feedbackID uint, offset, limit int) ([]models.Comment, error) + + // GetCommentCount возвращает количество комментариев к отзыву + GetCommentCount(feedbackID uint) (int, error) + + // UpdateCommentCount обновляет количество комментариев у отзыва + UpdateCommentCount(feedbackID uint, count int) error + + // Search находит отзывы по тексту + Search(query string, offset, limit int) ([]models.Feedback, error) +} \ No newline at end of file diff --git a/main_dc/yalarba/api_yal/internal/repository/object_repository.go b/main_dc/yalarba/api_yal/internal/repository/object_repository.go new file mode 100644 index 0000000..cc5d6b9 --- /dev/null +++ b/main_dc/yalarba/api_yal/internal/repository/object_repository.go @@ -0,0 +1,66 @@ +package repository + +import ( + "api_yal/internal/models" +) + +// ObjectRepository интерфейс для операций с моделью Object +//go:generate mockgen -destination=mocks/object_repository.go -package=mocks . ObjectRepository +type ObjectRepository interface { + // Create создает новый объект + Create(object *models.Object) error + + // GetByID возвращает объект по ID + GetByID(id uint) (*models.Object, error) + + // Update обновляет существующий объект + Update(object *models.Object) error + + // Delete помечает объект как удаленный + Delete(id uint) error + + // List возвращает список объектов с пагинацией + List(offset, limit int) ([]models.Object, error) + + // Count возвращает общее количество объектов + Count() (int64, error) + + // ListByOwner возвращает объекты по владельцу + ListByOwner(ownerID uint, offset, limit int) ([]models.Object, error) + + // ListByType возвращает объекты по типу + ListByType(objectType string, offset, limit int) ([]models.Object, error) + + // ListByStatus возвращает объекты по статусу + ListByStatus(isActive bool, offset, limit int) ([]models.Object, error) + + // Search находит объекты по названию, типу или адресу + Search(query string, offset, limit int) ([]models.Object, error) + + // GetOwner возвращает владельца объекта + GetOwner(objectID uint) (*models.Account, error) + + // GetTouristRating возвращает туристический рейтинг объекта + GetTouristRating(objectID uint) (*models.Rating, error) + + // GetEntrepreneurRating возвращает рейтинг для предпринимателей + GetEntrepreneurRating(objectID uint) (*models.Rating, error) + + // GetRatings возвращает все рейтинги объекта + GetRatings(objectID uint) ([]models.Rating, error) + + // GetFeedbacks возвращает отзывы об объекте + GetFeedbacks(objectID uint, offset, limit int) ([]models.Feedback, error) + + // GetFeedbackCount возвращает количество отзывов об объекте + GetFeedbackCount(objectID uint) (int, error) + + // UpdateFeedbackCount обновляет количество отзывов у объекта + UpdateFeedbackCount(objectID uint, count int) error + + // ToggleVerification переключает статус верификации объекта + ToggleVerification(id uint, verified bool) error + + // GetNearby возвращает объекты в радиусе + GetNearby(latitude, longitude, radius float64, offset, limit int) ([]models.Object, error) +} \ No newline at end of file diff --git a/main_dc/yalarba/api_yal/internal/repository/rating_repository.go b/main_dc/yalarba/api_yal/internal/repository/rating_repository.go new file mode 100644 index 0000000..730934d --- /dev/null +++ b/main_dc/yalarba/api_yal/internal/repository/rating_repository.go @@ -0,0 +1,66 @@ +package repository + +import ( + "api_yal/internal/models" +) + +// RatingRepository интерфейс для операций с моделью Rating +//go:generate mockgen -destination=mocks/rating_repository.go -package=mocks . RatingRepository +type RatingRepository interface { + // Create создает новый рейтинг + Create(rating *models.Rating) error + + // GetByID возвращает рейтинг по ID + GetByID(id uint) (*models.Rating, error) + + // GetByObjectAndPlatform возвращает рейтинг объекта для конкретной платформы + GetByObjectAndPlatform(objectID uint, platform models.PlatformType) (*models.Rating, error) + + // Update обновляет существующий рейтинг + Update(rating *models.Rating) error + + // Delete удаляет рейтинг + Delete(id uint) error + + // List возвращает список рейтингов с пагинацией + List(offset, limit int) ([]models.Rating, error) + + // Count возвращает общее количество рейтингов + Count() (int64, error) + + // ListByObject возвращает все рейтинги объекта + ListByObject(objectID uint) ([]models.Rating, error) + + // ListByOwner возвращает рейтинги по владельцу + ListByOwner(ownerID uint, offset, limit int) ([]models.Rating, error) + + // ListByPlatform возвращает рейтинги по платформе + ListByPlatform(platform models.PlatformType, offset, limit int) ([]models.Rating, error) + + // GetObject возвращает объект, к которому относится рейтинг + GetObject(ratingID uint) (*models.Object, error) + + // GetVoteBreakdown возвращает детализацию голосов для рейтинга + GetVoteBreakdown(ratingID uint) (*models.VoteBreakdown, error) + + // UpdateVoteBreakdown обновляет детализацию голосов + UpdateVoteBreakdown(breakdown *models.VoteBreakdown) error + + // CreateRatingVote создает новый голос в рейтинге + CreateRatingVote(vote *models.RatingVote) error + + // GetRatingVote возвращает голос пользователя по цели и платформе + GetRatingVote(targetID uint, voterID uint, platform models.PlatformType) (*models.RatingVote, error) + + // UpdateRatingVote обновляет существующий голос + UpdateRatingVote(vote *models.RatingVote) error + + // DeleteRatingVote удаляет голос + DeleteRatingVote(id uint) error + + // CountVotesByTarget возвращает количество голосов по цели и платформе + CountVotesByTarget(targetID uint, platform models.PlatformType) (int64, error) + + // CalculateAverageScore рассчитывает средний балл на основе VoteBreakdown + CalculateAverageScore(breakdown *models.VoteBreakdown) float64 +} \ No newline at end of file