mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-02 00:21:14 +03:00
refactor: some clean-up
This commit is contained in:
parent
a260e65307
commit
d9f61a278c
@ -13,7 +13,168 @@ func init() {
|
|||||||
|
|
||||||
func Up20200130083147(tx *sql.Tx) error {
|
func Up20200130083147(tx *sql.Tx) error {
|
||||||
log.Info("Creating DB Schema")
|
log.Info("Creating DB Schema")
|
||||||
_, err := tx.Exec(schema)
|
_, err := tx.Exec(`
|
||||||
|
create table album
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
name varchar(255) default '' not null,
|
||||||
|
artist_id varchar(255) default '' not null,
|
||||||
|
cover_art_path varchar(255) default '' not null,
|
||||||
|
cover_art_id varchar(255) default '' not null,
|
||||||
|
artist varchar(255) default '' not null,
|
||||||
|
album_artist varchar(255) default '' not null,
|
||||||
|
year integer default 0 not null,
|
||||||
|
compilation bool default FALSE not null,
|
||||||
|
song_count integer default 0 not null,
|
||||||
|
duration integer default 0 not null,
|
||||||
|
genre varchar(255) default '' not null,
|
||||||
|
created_at datetime,
|
||||||
|
updated_at datetime
|
||||||
|
);
|
||||||
|
|
||||||
|
create index album_artist
|
||||||
|
on album (artist);
|
||||||
|
|
||||||
|
create index album_artist_id
|
||||||
|
on album (artist_id);
|
||||||
|
|
||||||
|
create index album_genre
|
||||||
|
on album (genre);
|
||||||
|
|
||||||
|
create index album_name
|
||||||
|
on album (name);
|
||||||
|
|
||||||
|
create index album_year
|
||||||
|
on album (year);
|
||||||
|
|
||||||
|
create table annotation
|
||||||
|
(
|
||||||
|
ann_id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
user_id varchar(255) default '' not null,
|
||||||
|
item_id varchar(255) default '' not null,
|
||||||
|
item_type varchar(255) default '' not null,
|
||||||
|
play_count integer,
|
||||||
|
play_date datetime,
|
||||||
|
rating integer,
|
||||||
|
starred bool default FALSE not null,
|
||||||
|
starred_at datetime,
|
||||||
|
unique (user_id, item_id, item_type)
|
||||||
|
);
|
||||||
|
|
||||||
|
create index annotation_play_count
|
||||||
|
on annotation (play_count);
|
||||||
|
|
||||||
|
create index annotation_play_date
|
||||||
|
on annotation (play_date);
|
||||||
|
|
||||||
|
create index annotation_rating
|
||||||
|
on annotation (rating);
|
||||||
|
|
||||||
|
create index annotation_starred
|
||||||
|
on annotation (starred);
|
||||||
|
|
||||||
|
create table artist
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
name varchar(255) default '' not null,
|
||||||
|
album_count integer default 0 not null
|
||||||
|
);
|
||||||
|
|
||||||
|
create index artist_name
|
||||||
|
on artist (name);
|
||||||
|
|
||||||
|
create table media_file
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
path varchar(255) default '' not null,
|
||||||
|
title varchar(255) default '' not null,
|
||||||
|
album varchar(255) default '' not null,
|
||||||
|
artist varchar(255) default '' not null,
|
||||||
|
artist_id varchar(255) default '' not null,
|
||||||
|
album_artist varchar(255) default '' not null,
|
||||||
|
album_id varchar(255) default '' not null,
|
||||||
|
has_cover_art bool default FALSE not null,
|
||||||
|
track_number integer default 0 not null,
|
||||||
|
disc_number integer default 0 not null,
|
||||||
|
year integer default 0 not null,
|
||||||
|
size integer default 0 not null,
|
||||||
|
suffix varchar(255) default '' not null,
|
||||||
|
duration integer default 0 not null,
|
||||||
|
bit_rate integer default 0 not null,
|
||||||
|
genre varchar(255) default '' not null,
|
||||||
|
compilation bool default FALSE not null,
|
||||||
|
created_at datetime,
|
||||||
|
updated_at datetime
|
||||||
|
);
|
||||||
|
|
||||||
|
create index media_file_album_id
|
||||||
|
on media_file (album_id);
|
||||||
|
|
||||||
|
create index media_file_genre
|
||||||
|
on media_file (genre);
|
||||||
|
|
||||||
|
create index media_file_path
|
||||||
|
on media_file (path);
|
||||||
|
|
||||||
|
create index media_file_title
|
||||||
|
on media_file (title);
|
||||||
|
|
||||||
|
create table playlist
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
name varchar(255) default '' not null,
|
||||||
|
comment varchar(255) default '' not null,
|
||||||
|
duration integer default 0 not null,
|
||||||
|
owner varchar(255) default '' not null,
|
||||||
|
public bool default FALSE not null,
|
||||||
|
tracks text not null
|
||||||
|
);
|
||||||
|
|
||||||
|
create index playlist_name
|
||||||
|
on playlist (name);
|
||||||
|
|
||||||
|
create table property
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
value varchar(255) default '' not null
|
||||||
|
);
|
||||||
|
|
||||||
|
create table search
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
"table" varchar(255) default '' not null,
|
||||||
|
full_text varchar(255) default '' not null
|
||||||
|
);
|
||||||
|
|
||||||
|
create index search_full_text
|
||||||
|
on search (full_text);
|
||||||
|
|
||||||
|
create index search_table
|
||||||
|
on search ("table");
|
||||||
|
|
||||||
|
create table user
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
user_name varchar(255) default '' not null
|
||||||
|
unique,
|
||||||
|
name varchar(255) default '' not null,
|
||||||
|
email varchar(255) default '' not null
|
||||||
|
unique,
|
||||||
|
password varchar(255) default '' not null,
|
||||||
|
is_admin bool default FALSE not null,
|
||||||
|
last_login_at datetime,
|
||||||
|
last_access_at datetime,
|
||||||
|
created_at datetime not null,
|
||||||
|
updated_at datetime not null
|
||||||
|
);`)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,165 +0,0 @@
|
|||||||
package migrations
|
|
||||||
|
|
||||||
var schema = `
|
|
||||||
create table album
|
|
||||||
(
|
|
||||||
id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
name varchar(255) default '' not null,
|
|
||||||
artist_id varchar(255) default '' not null,
|
|
||||||
cover_art_path varchar(255) default '' not null,
|
|
||||||
cover_art_id varchar(255) default '' not null,
|
|
||||||
artist varchar(255) default '' not null,
|
|
||||||
album_artist varchar(255) default '' not null,
|
|
||||||
year integer default 0 not null,
|
|
||||||
compilation bool default FALSE not null,
|
|
||||||
song_count integer default 0 not null,
|
|
||||||
duration integer default 0 not null,
|
|
||||||
genre varchar(255) default '' not null,
|
|
||||||
created_at datetime,
|
|
||||||
updated_at datetime
|
|
||||||
);
|
|
||||||
|
|
||||||
create index album_artist
|
|
||||||
on album (artist);
|
|
||||||
|
|
||||||
create index album_artist_id
|
|
||||||
on album (artist_id);
|
|
||||||
|
|
||||||
create index album_genre
|
|
||||||
on album (genre);
|
|
||||||
|
|
||||||
create index album_name
|
|
||||||
on album (name);
|
|
||||||
|
|
||||||
create index album_year
|
|
||||||
on album (year);
|
|
||||||
|
|
||||||
create table annotation
|
|
||||||
(
|
|
||||||
ann_id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
user_id varchar(255) default '' not null,
|
|
||||||
item_id varchar(255) default '' not null,
|
|
||||||
item_type varchar(255) default '' not null,
|
|
||||||
play_count integer,
|
|
||||||
play_date datetime,
|
|
||||||
rating integer,
|
|
||||||
starred bool default FALSE not null,
|
|
||||||
starred_at datetime,
|
|
||||||
unique (user_id, item_id, item_type)
|
|
||||||
);
|
|
||||||
|
|
||||||
create index annotation_play_count
|
|
||||||
on annotation (play_count);
|
|
||||||
|
|
||||||
create index annotation_play_date
|
|
||||||
on annotation (play_date);
|
|
||||||
|
|
||||||
create index annotation_rating
|
|
||||||
on annotation (rating);
|
|
||||||
|
|
||||||
create index annotation_starred
|
|
||||||
on annotation (starred);
|
|
||||||
|
|
||||||
create table artist
|
|
||||||
(
|
|
||||||
id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
name varchar(255) default '' not null,
|
|
||||||
album_count integer default 0 not null
|
|
||||||
);
|
|
||||||
|
|
||||||
create index artist_name
|
|
||||||
on artist (name);
|
|
||||||
|
|
||||||
create table media_file
|
|
||||||
(
|
|
||||||
id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
path varchar(255) default '' not null,
|
|
||||||
title varchar(255) default '' not null,
|
|
||||||
album varchar(255) default '' not null,
|
|
||||||
artist varchar(255) default '' not null,
|
|
||||||
artist_id varchar(255) default '' not null,
|
|
||||||
album_artist varchar(255) default '' not null,
|
|
||||||
album_id varchar(255) default '' not null,
|
|
||||||
has_cover_art bool default FALSE not null,
|
|
||||||
track_number integer default 0 not null,
|
|
||||||
disc_number integer default 0 not null,
|
|
||||||
year integer default 0 not null,
|
|
||||||
size integer default 0 not null,
|
|
||||||
suffix varchar(255) default '' not null,
|
|
||||||
duration integer default 0 not null,
|
|
||||||
bit_rate integer default 0 not null,
|
|
||||||
genre varchar(255) default '' not null,
|
|
||||||
compilation bool default FALSE not null,
|
|
||||||
created_at datetime,
|
|
||||||
updated_at datetime
|
|
||||||
);
|
|
||||||
|
|
||||||
create index media_file_album_id
|
|
||||||
on media_file (album_id);
|
|
||||||
|
|
||||||
create index media_file_genre
|
|
||||||
on media_file (genre);
|
|
||||||
|
|
||||||
create index media_file_path
|
|
||||||
on media_file (path);
|
|
||||||
|
|
||||||
create index media_file_title
|
|
||||||
on media_file (title);
|
|
||||||
|
|
||||||
create table playlist
|
|
||||||
(
|
|
||||||
id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
name varchar(255) default '' not null,
|
|
||||||
comment varchar(255) default '' not null,
|
|
||||||
duration integer default 0 not null,
|
|
||||||
owner varchar(255) default '' not null,
|
|
||||||
public bool default FALSE not null,
|
|
||||||
tracks text not null
|
|
||||||
);
|
|
||||||
|
|
||||||
create index playlist_name
|
|
||||||
on playlist (name);
|
|
||||||
|
|
||||||
create table property
|
|
||||||
(
|
|
||||||
id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
value varchar(255) default '' not null
|
|
||||||
);
|
|
||||||
|
|
||||||
create table search
|
|
||||||
(
|
|
||||||
id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
"table" varchar(255) default '' not null,
|
|
||||||
full_text varchar(255) default '' not null
|
|
||||||
);
|
|
||||||
|
|
||||||
create index search_full_text
|
|
||||||
on search (full_text);
|
|
||||||
|
|
||||||
create index search_table
|
|
||||||
on search ("table");
|
|
||||||
|
|
||||||
create table user
|
|
||||||
(
|
|
||||||
id varchar(255) not null
|
|
||||||
primary key,
|
|
||||||
user_name varchar(255) default '' not null
|
|
||||||
unique,
|
|
||||||
name varchar(255) default '' not null,
|
|
||||||
email varchar(255) default '' not null
|
|
||||||
unique,
|
|
||||||
password varchar(255) default '' not null,
|
|
||||||
is_admin bool default FALSE not null,
|
|
||||||
last_login_at datetime,
|
|
||||||
last_access_at datetime,
|
|
||||||
created_at datetime not null,
|
|
||||||
updated_at datetime not null
|
|
||||||
);
|
|
||||||
`
|
|
@ -73,10 +73,6 @@ func (db *NewSQLStore) Annotation(ctx context.Context) model.AnnotationRepositor
|
|||||||
return NewAnnotationRepository(ctx, db.getOrmer())
|
return NewAnnotationRepository(ctx, db.getOrmer())
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTypeName(model interface{}) string {
|
|
||||||
return reflect.TypeOf(model).Name()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (db *NewSQLStore) Resource(ctx context.Context, m interface{}) model.ResourceRepository {
|
func (db *NewSQLStore) Resource(ctx context.Context, m interface{}) model.ResourceRepository {
|
||||||
switch m.(type) {
|
switch m.(type) {
|
||||||
case model.User:
|
case model.User:
|
||||||
@ -88,7 +84,7 @@ func (db *NewSQLStore) Resource(ctx context.Context, m interface{}) model.Resour
|
|||||||
case model.MediaFile:
|
case model.MediaFile:
|
||||||
return db.MediaFile(ctx).(model.ResourceRepository)
|
return db.MediaFile(ctx).(model.ResourceRepository)
|
||||||
}
|
}
|
||||||
log.Error("Resource no implemented", "model", getTypeName(m))
|
log.Error("Resource no implemented", "model", reflect.TypeOf(m).Name())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@ import (
|
|||||||
func TestPersistence(t *testing.T) {
|
func TestPersistence(t *testing.T) {
|
||||||
tests.Init(t, true)
|
tests.Init(t, true)
|
||||||
|
|
||||||
os.Remove("./test-123.db")
|
//os.Remove("./test-123.db")
|
||||||
conf.Server.DbPath = "./test-123.db"
|
//conf.Server.DbPath = "./test-123.db"
|
||||||
//conf.Server.DbPath = "file::memory:?cache=shared"
|
conf.Server.DbPath = "file::memory:?cache=shared"
|
||||||
New()
|
New()
|
||||||
db.EnsureDB()
|
db.EnsureDB()
|
||||||
log.SetLevel(log.LevelCritical)
|
log.SetLevel(log.LevelCritical)
|
||||||
|
@ -14,10 +14,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type sqlRepository struct {
|
type sqlRepository struct {
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
tableName string
|
tableName string
|
||||||
fieldNames []string
|
ormer orm.Ormer
|
||||||
ormer orm.Ormer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const invalidUserId = "-1"
|
const invalidUserId = "-1"
|
||||||
@ -31,7 +30,7 @@ func userId(ctx context.Context) string {
|
|||||||
return usr.ID
|
return usr.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *sqlRepository) newSelectWithAnnotation(itemType, idField string, options ...model.QueryOptions) SelectBuilder {
|
func (r sqlRepository) newSelectWithAnnotation(itemType, idField string, options ...model.QueryOptions) SelectBuilder {
|
||||||
return r.newSelect(options...).
|
return r.newSelect(options...).
|
||||||
LeftJoin("annotation on ("+
|
LeftJoin("annotation on ("+
|
||||||
"annotation.item_id = "+idField+
|
"annotation.item_id = "+idField+
|
||||||
@ -40,14 +39,14 @@ func (r *sqlRepository) newSelectWithAnnotation(itemType, idField string, option
|
|||||||
Columns("starred", "starred_at", "play_count", "play_date", "rating")
|
Columns("starred", "starred_at", "play_count", "play_date", "rating")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *sqlRepository) newSelect(options ...model.QueryOptions) SelectBuilder {
|
func (r sqlRepository) newSelect(options ...model.QueryOptions) SelectBuilder {
|
||||||
sq := Select().From(r.tableName)
|
sq := Select().From(r.tableName)
|
||||||
sq = r.applyOptions(sq, options...)
|
sq = r.applyOptions(sq, options...)
|
||||||
sq = r.applyFilters(sq, options...)
|
sq = r.applyFilters(sq, options...)
|
||||||
return sq
|
return sq
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *sqlRepository) applyOptions(sq SelectBuilder, options ...model.QueryOptions) SelectBuilder {
|
func (r sqlRepository) applyOptions(sq SelectBuilder, options ...model.QueryOptions) SelectBuilder {
|
||||||
if len(options) > 0 {
|
if len(options) > 0 {
|
||||||
if options[0].Max > 0 {
|
if options[0].Max > 0 {
|
||||||
sq = sq.Limit(uint64(options[0].Max))
|
sq = sq.Limit(uint64(options[0].Max))
|
||||||
@ -66,7 +65,7 @@ func (r *sqlRepository) applyOptions(sq SelectBuilder, options ...model.QueryOpt
|
|||||||
return sq
|
return sq
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *sqlRepository) applyFilters(sq SelectBuilder, options ...model.QueryOptions) SelectBuilder {
|
func (r sqlRepository) applyFilters(sq SelectBuilder, options ...model.QueryOptions) SelectBuilder {
|
||||||
if len(options) > 0 && options[0].Filters != nil {
|
if len(options) > 0 && options[0].Filters != nil {
|
||||||
sq = sq.Where(options[0].Filters)
|
sq = sq.Where(options[0].Filters)
|
||||||
}
|
}
|
||||||
@ -137,7 +136,7 @@ func (r sqlRepository) count(countQuery SelectBuilder, options ...model.QueryOpt
|
|||||||
return res.Count, nil
|
return res.Count, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *sqlRepository) put(id string, m interface{}) (newId string, err error) {
|
func (r sqlRepository) put(id string, m interface{}) (newId string, err error) {
|
||||||
values, _ := toSqlArgs(m)
|
values, _ := toSqlArgs(m)
|
||||||
if id != "" {
|
if id != "" {
|
||||||
update := Update(r.tableName).Where(Eq{"id": id}).SetMap(values)
|
update := Update(r.tableName).Where(Eq{"id": id}).SetMap(values)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user