/
initialization.go
120 lines (106 loc) · 2.78 KB
/
initialization.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package utilities
import (
"database/sql"
"io/fs"
"log"
"os"
"path"
"path/filepath"
)
// Initializes the database by ensuring that the database file and
// needed tables are all present and ready to be used during the server's
// runtime. Returns the database as a pointer to an sql.DB struct.
func InitializeDatabase(appDirectory *string) *sql.DB {
databaseDirectory := path.Join(*appDirectory, "db", "app.db")
database, err := sql.Open("sqlite3", databaseDirectory)
if err != nil {
log.Fatalf("ERR : %v", err)
}
if err := database.Ping(); err != nil {
defer database.Close()
log.Fatalf("ERR : %v", err)
}
_, err = database.Exec(`
CREATE TABLE IF NOT EXISTS videos (
id TEXT PRIMARY KEY,
series_id TEXT,
episode INTEGER,
title TEXT NOT NULL,
file_name TEXT NOT NULL,
file_extension TEXT NOT NULL,
upload_date TEXT NOT NULL,
last_modified TEXT NOT NULL
);
`)
if err != nil {
defer database.Close()
log.Fatalf("ERR : %v", err)
}
_, err = database.Exec(`
CREATE TABLE IF NOT EXISTS covers (
id TEXT PRIMARY KEY,
series_id TEXT NOT NULL UNIQUE,
file_name TEXT NOT NULL UNIQUE,
upload_date TEXT NOT NULL
);
`)
if err != nil {
defer database.Close()
log.Fatalf("ERR : %v", err)
}
_, err = database.Exec(`
CREATE TABLE IF NOT EXISTS series (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
description TEXT NOT NULL,
episodes INTEGER NOT NULL,
upload_date TEXT NOT NULL,
last_modified TEXT NOT NULL
);
`)
if err != nil {
defer database.Close()
log.Fatalf("ERR : %v", err)
}
return database
}
// Initializes the server by ensuring that the needed directories are
// present during the server's runtime. returns the path of the
// running executable's directory.
func InitializeServer() string {
permissions := fs.FileMode(0770) // Linux octal permissions
executable, err := os.Executable()
if err != nil {
log.Fatalf("ERR : %v", err)
}
appDirectory := filepath.Dir(executable)
checkDirectories := []string{"db", "storage"}
subStorage := []string{"covers", "videos"}
for _, value := range checkDirectories {
directory := path.Join(appDirectory, value)
_, err = os.ReadDir(directory)
if err != nil {
if !os.IsNotExist(err) {
log.Fatalf("ERR : %v", err)
}
log.Printf("SYS : creating %v folder", value)
if err = os.Mkdir(directory, permissions); err != nil {
log.Fatalf("ERR : %v", err)
}
}
}
for _, value := range subStorage {
directory := path.Join(appDirectory, "storage", value)
_, err = os.ReadDir(directory)
if err != nil {
if !os.IsNotExist(err) {
log.Fatalf("ERR : %v", err)
}
log.Printf("SYS : creating %v folder", value)
if err = os.Mkdir(directory, permissions); err != nil {
log.Fatalf("ERR : %v", err)
}
}
}
return appDirectory
}