This commit is contained in:
85
internal/repository/artist_repo.go
Normal file
85
internal/repository/artist_repo.go
Normal file
@@ -0,0 +1,85 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user