package sql import ( "context" "errors" "tercul/internal/domain" "gorm.io/gorm" ) type editionRepository struct { domain.BaseRepository[domain.Edition] db *gorm.DB } // NewEditionRepository creates a new EditionRepository. func NewEditionRepository(db *gorm.DB) domain.EditionRepository { return &editionRepository{ BaseRepository: NewBaseRepositoryImpl[domain.Edition](db), db: db, } } // ListByBookID finds editions by book ID func (r *editionRepository) ListByBookID(ctx context.Context, bookID uint) ([]domain.Edition, error) { var editions []domain.Edition if err := r.db.WithContext(ctx).Where("book_id = ?", bookID).Find(&editions).Error; err != nil { return nil, err } return editions, nil } // FindByISBN finds an edition by ISBN func (r *editionRepository) FindByISBN(ctx context.Context, isbn string) (*domain.Edition, error) { var edition domain.Edition if err := r.db.WithContext(ctx).Where("isbn = ?", isbn).First(&edition).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, ErrEntityNotFound } return nil, err } return &edition, nil }