Files
butterfliu/internal/repository/artist_repo.go
lzw-723 55c017f60d
All checks were successful
Go CI / test-and-build (push) Successful in 11s
拆分LibraryRepository
2026-04-08 14:42:52 +08:00

86 lines
1.9 KiB
Go

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
}