add automatic database migrations with goose
This commit is contained in:
@ -2,8 +2,11 @@ package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"embed"
|
||||
"fmt"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/pressly/goose/v3"
|
||||
"log"
|
||||
"openmediacenter/apiGo/api/types"
|
||||
"openmediacenter/apiGo/config"
|
||||
)
|
||||
@ -11,7 +14,10 @@ import (
|
||||
var db *sql.DB
|
||||
var DBName string
|
||||
|
||||
func InitDB() {
|
||||
//go:embed migrations/*.sql
|
||||
var embedMigrations embed.FS
|
||||
|
||||
func InitDB() error {
|
||||
dbconf := config.GetConfig().Database
|
||||
DBName = dbconf.DBName
|
||||
|
||||
@ -21,15 +27,31 @@ func InitDB() {
|
||||
|
||||
// if there is an error opening the connection, handle it
|
||||
if err != nil {
|
||||
fmt.Printf("Error while connecting to database! - %s\n", err.Error())
|
||||
return fmt.Errorf("Error while connecting to database! - %s\n", err.Error())
|
||||
}
|
||||
|
||||
if db != nil {
|
||||
ping := db.Ping()
|
||||
if ping != nil {
|
||||
fmt.Printf("Error while connecting to database! - %s\n", ping.Error())
|
||||
return fmt.Errorf("Error while connecting to database! - %s\n", ping.Error())
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("Running Database migrations!")
|
||||
// perform database migrations
|
||||
goose.SetBaseFS(embedMigrations)
|
||||
|
||||
// set mysql dialect
|
||||
err = goose.SetDialect("mysql")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := goose.Up(db, "migrations"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Query(query string, args ...interface{}) *sql.Rows {
|
||||
|
122
apiGo/database/migrations/20210927231631_init.sql
Normal file
122
apiGo/database/migrations/20210927231631_init.sql
Normal file
@ -0,0 +1,122 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
create table if not exists actors
|
||||
(
|
||||
actor_id int auto_increment
|
||||
primary key,
|
||||
name varchar(50) null,
|
||||
thumbnail mediumblob null
|
||||
)
|
||||
comment 'informations about different actors';
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create table if not exists settings
|
||||
(
|
||||
video_path varchar(255) null,
|
||||
episode_path varchar(255) null,
|
||||
password varchar(32) default '-1' null,
|
||||
mediacenter_name varchar(32) default 'OpenMediaCenter' null,
|
||||
TMDB_grabbing tinyint null,
|
||||
DarkMode tinyint default 0 null
|
||||
);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create table if not exists tags
|
||||
(
|
||||
tag_id int auto_increment
|
||||
primary key,
|
||||
tag_name varchar(50) null
|
||||
);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create table if not exists tvshow
|
||||
(
|
||||
name varchar(100) null,
|
||||
thumbnail mediumblob null,
|
||||
id int auto_increment
|
||||
primary key,
|
||||
foldername varchar(100) null
|
||||
);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create table if not exists tvshow_episodes
|
||||
(
|
||||
id int auto_increment
|
||||
primary key,
|
||||
name varchar(100) null,
|
||||
season int null,
|
||||
poster mediumblob null,
|
||||
tvshow_id int null,
|
||||
episode int null,
|
||||
filename varchar(100) null,
|
||||
constraint tvshow_episodes_tvshow_id_fk
|
||||
foreign key (tvshow_id) references tvshow (id)
|
||||
);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create table if not exists videos
|
||||
(
|
||||
movie_id int auto_increment
|
||||
primary key,
|
||||
movie_name varchar(200) null,
|
||||
movie_url varchar(250) null,
|
||||
thumbnail mediumblob null,
|
||||
poster mediumblob null,
|
||||
likes int default 0 null,
|
||||
quality int default 0 null,
|
||||
length int default 0 null comment 'in seconds',
|
||||
create_date datetime default current_timestamp() null
|
||||
);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create table if not exists actors_videos
|
||||
(
|
||||
actor_id int null,
|
||||
video_id int null,
|
||||
constraint actors_videos_actors_id_fk
|
||||
foreign key (actor_id) references actors (actor_id),
|
||||
constraint actors_videos_videos_movie_id_fk
|
||||
foreign key (video_id) references videos (movie_id)
|
||||
);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create index if not exists actors_videos_actor_id_index
|
||||
on actors_videos (actor_id);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create index if not exists actors_videos_video_id_index
|
||||
on actors_videos (video_id);
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
create table if not exists video_tags
|
||||
(
|
||||
tag_id int null,
|
||||
video_id int null,
|
||||
constraint video_tags_tags_tag_id_fk
|
||||
foreign key (tag_id) references tags (tag_id),
|
||||
constraint video_tags_videos_movie_id_fk
|
||||
foreign key (video_id) references videos (movie_id)
|
||||
on delete cascade
|
||||
);
|
||||
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
INSERT IGNORE INTO tags (tag_id, tag_name)
|
||||
VALUES (2, 'fullhd');
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
INSERT IGNORE INTO tags (tag_id, tag_name)
|
||||
VALUES (3, 'lowquality');
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
INSERT IGNORE INTO tags (tag_id, tag_name)
|
||||
VALUES (4, 'hd');
|
||||
-- +goose StatementEnd
|
||||
-- +goose StatementBegin
|
||||
INSERT IGNORE INTO settings (video_path, episode_path, password, mediacenter_name)
|
||||
VALUES ('./videos/', './tvshows/', -1, 'OpenMediaCenter');
|
||||
|
||||
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
12
apiGo/database/migrations/20210927235150_relese_date.sql
Normal file
12
apiGo/database/migrations/20210927235150_relese_date.sql
Normal file
@ -0,0 +1,12 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
alter table videos
|
||||
add release_date date null;
|
||||
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
alter table videos
|
||||
drop release_date;
|
||||
-- +goose StatementEnd
|
Reference in New Issue
Block a user