package sql import ( "context" "tercul/internal/domain" "tercul/internal/domain/collection" "gorm.io/gorm" ) type collectionRepository struct { domain.BaseRepository[domain.Collection] db *gorm.DB } // NewCollectionRepository creates a new CollectionRepository. func NewCollectionRepository(db *gorm.DB) collection.CollectionRepository { return &collectionRepository{ BaseRepository: NewBaseRepositoryImpl[domain.Collection](db), db: db, } } // ListByUserID finds collections by user ID func (r *collectionRepository) ListByUserID(ctx context.Context, userID uint) ([]domain.Collection, error) { var collections []domain.Collection if err := r.db.WithContext(ctx).Where("user_id = ?", userID).Find(&collections).Error; err != nil { return nil, err } return collections, nil } // ListPublic finds public collections func (r *collectionRepository) ListPublic(ctx context.Context) ([]domain.Collection, error) { var collections []domain.Collection if err := r.db.WithContext(ctx).Where("is_public = ?", true).Find(&collections).Error; err != nil { return nil, err } return collections, nil } // ListByWorkID finds collections by work ID func (r *collectionRepository) ListByWorkID(ctx context.Context, workID uint) ([]domain.Collection, error) { var collections []domain.Collection if err := r.db.WithContext(ctx).Joins("JOIN collection_works ON collection_works.collection_id = collections.id"). Where("collection_works.work_id = ?", workID). Find(&collections).Error; err != nil { return nil, err } return collections, nil }