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
This commit is contained in:
2026-02-24 12:54:46 +05:00
parent 4dbf58d2dc
commit 8e3a20ee48
6 changed files with 339 additions and 0 deletions
@@ -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)
}
@@ -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)
}
@@ -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
}
@@ -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)
}
@@ -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)
}
@@ -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
}