package repository import ( "butterfliu/internal/model" "database/sql" ) type AlbumRepository struct { db *sql.DB } func NewAlbumRepository(db *sql.DB) *AlbumRepository { return &AlbumRepository{db: db} } func (r *AlbumRepository) Get(id int) (model.Album, error) { row := r.db.QueryRow("SELECT id, title, artist_id FROM albums WHERE id = ?", id) var album model.Album if err := row.Scan(&album.ID, &album.Title, &album.ArtistID); err != nil { return model.Album{}, err } return album, nil } func (r *AlbumRepository) GetByTitleAndArtist(title string, artistID int) (model.Album, error) { row := r.db.QueryRow(` SELECT id, title, artist_id, COALESCE(cover, ''), COALESCE(year, 0) FROM albums WHERE title = ? AND artist_id = ? `) var album model.Album if err := row.Scan(&album.ID, &album.Title, &album.ArtistID, &album.Cover, &album.Year); err != nil { return model.Album{}, err } return album, nil } func (r *AlbumRepository) Create(title string, artistID int) (model.Album, error) { result, err := r.db.Exec("INSERT INTO albums (title, artist_id) VALUES (?, ?)", title, artistID) if err != nil { return model.Album{}, err } id, err := result.LastInsertId() if err != nil { return model.Album{}, err } return model.Album{ ID: int(id), Title: title, ArtistID: artistID, }, nil } func (r *AlbumRepository) GetAll() ([]model.Album, error) { rows, err := r.db.Query("SELECT id, title, artist_id FROM albums") if err != nil { return nil, err } defer rows.Close() albums := []model.Album{} for rows.Next() { var album model.Album if err := rows.Scan(&album.ID, &album.Title, &album.ArtistID); err != nil { return nil, err } albums = append(albums, album) } return albums, nil } func (r *AlbumRepository) GetByArtist(artistID int) ([]model.Album, error) { rows, err := r.db.Query("SELECT id, title, artist_id FROM albums WHERE artist_id = ?", artistID) if err != nil { return nil, err } defer rows.Close() albums := []model.Album{} for rows.Next() { var album model.Album if err := rows.Scan(&album.ID, &album.Title, &album.ArtistID); err != nil { return nil, err } albums = append(albums, album) } return albums, nil } func (r *AlbumRepository) GetIDsByArtist(artistID int) ([]int, error) { rows, err := r.db.Query("SELECT id FROM albums WHERE artist_id = ?", artistID) if err != nil { return nil, err } defer rows.Close() ids := []int{} for rows.Next() { var id int if err := rows.Scan(&id); err != nil { return nil, err } ids = append(ids, id) } return ids, nil } func (r *AlbumRepository) GetSongIDs(albumID int) ([]int, error) { rows, err := r.db.Query("SELECT id FROM songs WHERE album_id = ?", albumID) if err != nil { return nil, err } defer rows.Close() ids := []int{} for rows.Next() { var id int if err := rows.Scan(&id); err != nil { return nil, err } ids = append(ids, id) } return ids, nil }