Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0
Ce dépôt a été archivé le 2022-05-07. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
nyaa-pantsu/database/postgres/tables.go
2017-05-24 17:15:07 +10:00

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)",
},
},
}