You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
6.1 KiB
Lua
149 lines
6.1 KiB
Lua
local db = require "lapis.db"
|
|
local schema = require "lapis.db.schema"
|
|
local types = schema.types
|
|
|
|
return {
|
|
[100] = function()
|
|
schema.create_table("users", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "username", types.varchar { unique=true }},
|
|
{ "password", types.varchar },
|
|
{ "admin", types.boolean { default=false }},
|
|
{ "mod", types.boolean { default=false }},
|
|
{ "janitor", types.boolean { default=false }}
|
|
})
|
|
|
|
schema.create_table("bans", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "board_id", types.integer { default=0 }},
|
|
{ "ip", types.varchar },
|
|
{ "reason", types.varchar { null=true }},
|
|
{ "time", types.integer },
|
|
{ "duration", types.integer { default=259200 }}, -- 3 days
|
|
})
|
|
|
|
schema.create_table("boards", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "short_name", types.varchar { unique=true }},
|
|
{ "name", types.varchar { unique=true }},
|
|
{ "subtext", types.varchar { null=true }},
|
|
{ "rules", types.text { null=true }},
|
|
{ "ban_message", types.varchar { default="USER WAS BANNED FOR THIS POST" }},
|
|
{ "anon_name", types.varchar { default="Anonymous" }},
|
|
{ "theme", types.varchar { default="yotsuba_b" }},
|
|
{ "posts", types.integer { default=0 }},
|
|
{ "pages", types.integer { default=10 }},
|
|
{ "threads_per_page", types.integer { default=10 }},
|
|
{ "text_only", types.boolean { default=false }},
|
|
{ "draw", types.boolean { default=false }},
|
|
{ "thread_file", types.boolean { default=true }},
|
|
{ "thread_comment", types.boolean { default=false }},
|
|
{ "thread_file_limit", types.integer { default=100 }},
|
|
{ "post_file", types.boolean { default=false }},
|
|
{ "post_comment", types.boolean { default=false }},
|
|
{ "post_limit", types.integer { default=250 }},
|
|
{ "archive", types.boolean { default=true }},
|
|
{ "archive_time", types.integer { default=2592000 }}, -- 30 days
|
|
{ "group", types.integer { default=1 }}
|
|
})
|
|
|
|
schema.create_table("threads", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "board_id", types.integer },
|
|
{ "last_active", types.integer },
|
|
{ "sticky", types.boolean { default=false }},
|
|
{ "lock", types.boolean { default=false }},
|
|
{ "archive", types.boolean { default=false }},
|
|
{ "size_override", types.boolean { default=false }},
|
|
{ "save", types.boolean { default=false }}
|
|
})
|
|
|
|
schema.create_table("posts", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "post_id", types.integer },
|
|
{ "thread_id", types.integer },
|
|
{ "board_id", types.integer },
|
|
{ "timestamp", types.integer },
|
|
{ "ip", types.varchar },
|
|
{ "comment", types.text { null=true }},
|
|
{ "name", types.varchar { null=true }},
|
|
{ "trip", types.varchar { null=true }},
|
|
{ "subject", types.varchar { null=true }},
|
|
{ "password", types.varchar { null=true }},
|
|
{ "file_name", types.varchar { null=true }},
|
|
{ "file_path", types.varchar { null=true }},
|
|
{ "file_md5", types.varchar { null=true }},
|
|
{ "file_size", types.integer { null=true }},
|
|
{ "file_width", types.integer { null=true }},
|
|
{ "file_height", types.integer { null=true }},
|
|
{ "file_spoiler", types.boolean { null=true }},
|
|
{ "banned", types.boolean { default=false }}
|
|
})
|
|
|
|
schema.create_table("announcements", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "board_id", types.integer { null=true }},
|
|
{ "text", types.varchar }
|
|
})
|
|
|
|
schema.create_table("reports", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "board_id", types.integer },
|
|
{ "thread_id", types.integer },
|
|
{ "post_id", types.integer },
|
|
{ "timestamp", types.integer },
|
|
{ "num_reports", types.integer }
|
|
})
|
|
|
|
schema.create_table("pages", {
|
|
{ "id", types.serial { unique=true, primary_key=true }},
|
|
{ "url", types.varchar { unique=true }},
|
|
{ "name", types.varchar },
|
|
{ "content", types.text }
|
|
})
|
|
end,
|
|
[120] = function()
|
|
schema.add_column("boards", "filetype_image", types.boolean { default=true })
|
|
schema.add_column("boards", "filetype_audio", types.boolean { default=false })
|
|
schema.add_column("posts", "file_type", types.varchar { default="image" })
|
|
schema.add_column("posts", "file_duration", types.varchar { null=true })
|
|
end,
|
|
[200] = function()
|
|
|
|
schema.rename_column("boards", "posts", "total_posts")
|
|
schema.rename_column("boards", "name", "title")
|
|
schema.rename_column("boards", "short_name", "name")
|
|
schema.rename_column("pages", "url", "slug")
|
|
schema.rename_column("pages", "name", "title")
|
|
schema.rename_column("posts", "post_id", "post_number")
|
|
|
|
db.query("ALTER TABLE posts ALTER COLUMN file_type DROP DEFAULT")
|
|
db.query("ALTER TABLE posts ALTER COLUMN file_type DROP NOT NULL")
|
|
schema.add_column("boards", "anon_only", types.boolean { default=false })
|
|
|
|
local Users = require "src.models.users"
|
|
local uuid = require "resty.jit-uuid"
|
|
uuid.seed()
|
|
|
|
schema.add_column("users", "api_key", types.varchar { default="00000000-0000-0000-0000-000000000000" })
|
|
local users = Users:get_all()
|
|
for _, user in ipairs(users) do
|
|
user.api_key = uuid()
|
|
user:update("api_key")
|
|
end
|
|
|
|
schema.add_column("users", "role", types.integer)
|
|
db.query("UPDATE users SET role=? WHERE janitor=true", Users.role.JANITOR)
|
|
db.query("UPDATE users SET role=? WHERE mod=true", Users.role.MOD)
|
|
db.query("UPDATE users SET role=? WHERE admin=true", Users.role.ADMIN)
|
|
db.query("UPDATE users SET role=? WHERE id=1", Users.role.OWNER)
|
|
schema.drop_column("users", "janitor")
|
|
schema.drop_column("users", "mod")
|
|
schema.drop_column("users", "admin")
|
|
|
|
schema.add_column("posts", "reports", types.integer)
|
|
db.query("UPDATE posts SET reports=reports.num_reports FROM reports WHERE posts.id=reports.post_id")
|
|
schema.drop_table("reports")
|
|
end
|
|
}
|