141 lignes
3,8 Kio
Go
141 lignes
3,8 Kio
Go
package postgres
|
|
|
|
import "fmt"
|
|
|
|
// table name for torrents
|
|
const tableTorrents = "torrents"
|
|
|
|
// table name for users
|
|
const tableUsers = "users"
|
|
|
|
// table for new comments
|
|
const tableComments = "comments"
|
|
|
|
// table for old comments
|
|
const tableOldComments = "comments_old"
|
|
|
|
// table for torrent reports
|
|
const tableTorrentReports = "torrent_reports"
|
|
|
|
// table for user follows
|
|
const tableUserFollows = "user_follows"
|
|
|
|
// table for old user uploads
|
|
const tableOldUserUploads = "user_uploads_old"
|
|
|
|
// all tables that we have in current database schema in the order they are created
|
|
var tables = []createTable{
|
|
// users table
|
|
{
|
|
name: tableUsers,
|
|
columns: tableColumns{
|
|
"user_id SERIAL PRIMARY KEY",
|
|
"username TEXT NOT NULL",
|
|
"password TEXT NOT NULL",
|
|
"email TEXT",
|
|
"status INTEGER NOT NULL",
|
|
"created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL",
|
|
"updated_at TIMESTAMP WITHOUT TIME ZONE",
|
|
"last_login_at TIMESTAMP WITHOUT TIME ZONE",
|
|
"last_login_ip TEXT",
|
|
"api_token TEXT",
|
|
"api_token_expiry TIMESTAMP WITHOUT TIME ZONE NOT NULL",
|
|
"language TEXT",
|
|
"MD5 TEXT",
|
|
},
|
|
postCreate: []sqlQuery{
|
|
createIndex(tableUsers, "username"),
|
|
},
|
|
},
|
|
// torrents table
|
|
{
|
|
name: tableTorrents,
|
|
columns: tableColumns{
|
|
"torrent_id SERIAL PRIMARY KEY",
|
|
"torrent_name TEXT",
|
|
"torrent_hash TEXT NOT NULL",
|
|
"category INTEGER NOT NULL",
|
|
"sub_category INTEGER NOT NULL",
|
|
"status INTEGER NOT NULL",
|
|
"date TIMESTAMP WITHOUT TIME ZONE",
|
|
fmt.Sprintf("uploader INTEGER NOT NULL REFERENCES %s (user_id)", tableUsers),
|
|
"downloads INTEGER",
|
|
"stardom INTEGER NOT NULL",
|
|
"filesize BIGINT",
|
|
"description TEXT NOT NULL",
|
|
"website_link TEXT",
|
|
"deleted_at TIMESTAMP WITHOUT TIME ZONE",
|
|
"seeders INTEGER",
|
|
"leechers INTEGER",
|
|
"completed INTEGER",
|
|
"last_scrape TIMESTAMP WITHOUT TIME ZONE",
|
|
},
|
|
postCreate: []sqlQuery{
|
|
createIndex(tableTorrents, "torrent_id"),
|
|
createIndex(tableTorrents, "deleted_at"),
|
|
createIndex(tableTorrents, "uploader"),
|
|
createTrigraph(tableTorrents, "category", "torrent_name"),
|
|
createTrigraph(tableTorrents, "sub_category", "torrent_name"),
|
|
createTrigraph(tableTorrents, "status", "torrent_name"),
|
|
createTrigraph(tableTorrents, "torrent_name"),
|
|
},
|
|
},
|
|
// new comments table
|
|
{
|
|
name: tableComments,
|
|
columns: tableColumns{
|
|
"comment_id SERIAL PRIMARY KEY",
|
|
fmt.Sprintf("torrent_id INTEGER REFERENCES %s (torrent_id)", tableTorrents),
|
|
fmt.Sprintf("user_id INTEGER REFERENCES %s (user_id)", tableUsers),
|
|
"content TEXT NOT NULL",
|
|
"created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL",
|
|
"updated_at TIMESTAMP WITHOUT TIME ZONE",
|
|
"deleted_at TIMESTAMP WITH TIME ZONE",
|
|
},
|
|
postCreate: []sqlQuery{
|
|
createIndex(tableComments, "torrent_id"),
|
|
},
|
|
},
|
|
// old comments table
|
|
{
|
|
name: tableOldComments,
|
|
columns: tableColumns{
|
|
fmt.Sprintf("torrent_id INTEGER NOT NULL REFERENCES %s (torrent_id)", tableTorrents),
|
|
"username TEXT NOT NULL",
|
|
"content TEXT NOT NULL",
|
|
"date TIMESTAMP WITHOUT TIME ZONE NOT NULL",
|
|
},
|
|
},
|
|
// torrent reports table
|
|
{
|
|
name: tableTorrentReports,
|
|
columns: tableColumns{
|
|
"torrent_report_id SERIAL PRIMARY KEY",
|
|
"type TEXT",
|
|
fmt.Sprintf("torrent_id INTEGER REFERENCES %s (torrent_id)", tableTorrents),
|
|
"user_id INTEGER",
|
|
"created_at TIMESTAMP WITH TIME ZONE",
|
|
},
|
|
postCreate: []sqlQuery{
|
|
createIndex(tableTorrentReports, "torrent_report_id"),
|
|
},
|
|
},
|
|
// user follows table
|
|
{
|
|
name: tableUserFollows,
|
|
columns: tableColumns{
|
|
"user_id INTEGER NOT NULL",
|
|
"following INTEGER NOT NULL",
|
|
"PRIMARY KEY(user_id, following)",
|
|
},
|
|
},
|
|
// old uploads table
|
|
{
|
|
name: tableOldUserUploads,
|
|
columns: tableColumns{
|
|
"username TEXT IS NOT NULL",
|
|
fmt.Sprintf("torrent_id INTEGER IS NOT NULL REFERENCES %s (torrent_id)", tableTorrents),
|
|
"PRIMARY KEY (torrent_id)",
|
|
},
|
|
},
|
|
}
|