package repository import ( "butterfliu/internal/model" "database/sql" ) type ArtistRepository struct { db *sql.DB } func NewArtistRepository(db *sql.DB) *ArtistRepository { return &ArtistRepository{db: db} } func (r *ArtistRepository) Get(id int) (model.Artist, error) { row := r.db.QueryRow("SELECT id, name FROM artists WHERE id = ?", id) var artist model.Artist if err := row.Scan(&artist.ID, &artist.Name); err != nil { return model.Artist{}, err } return artist, nil } func (r *ArtistRepository) GetByName(name string) (model.Artist, error) { row := r.db.QueryRow("SELECT id, name FROM artists WHERE name = ?", name) var artist model.Artist if err := row.Scan(&artist.ID, &artist.Name); err != nil { return model.Artist{}, err } return artist, nil } func (r *ArtistRepository) Create(name string) (model.Artist, error) { result, err := r.db.Exec("INSERT INTO artists (name) VALUES (?)", name) if err != nil { return model.Artist{}, err } id, err := result.LastInsertId() if err != nil { return model.Artist{}, err } return model.Artist{ ID: int(id), Name: name, }, nil } func (r *ArtistRepository) GetAll() ([]model.Artist, error) { rows, err := r.db.Query("SELECT id, name FROM artists") if err != nil { return nil, err } defer rows.Close() artists := []model.Artist{} for rows.Next() { var artist model.Artist if err := rows.Scan(&artist.ID, &artist.Name); err != nil { return nil, err } artists = append(artists, artist) } return artists, nil } func (r *ArtistRepository) GetSongIDsByArtist(artistID int) ([]int, error) { rows, err := r.db.Query("SELECT id FROM songs 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 }