62 lines
1.5 KiB
PL/PgSQL
62 lines
1.5 KiB
PL/PgSQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
create table users (
|
|
id text primary key,
|
|
username text not null,
|
|
biography text
|
|
);
|
|
|
|
create table bots (
|
|
id text primary key,
|
|
username text not null,
|
|
avatar text,
|
|
overview text,
|
|
description text,
|
|
is_slash boolean not null,
|
|
install_context text check (install_context in ('guild', 'user')) not null,
|
|
guild_count int,
|
|
install_count int,
|
|
imported_from text,
|
|
prefix text,
|
|
created_at timestamp with time zone default now(),
|
|
updated_at timestamp with time zone default now(),
|
|
status text check (
|
|
status in ('deleted', 'pending', 'rejected', 'approved')
|
|
) default 'pending',
|
|
main_owner_id text references users (id)
|
|
);
|
|
|
|
create table bot_co_owners (
|
|
bot_id text references bots (id),
|
|
user_id text references users (id),
|
|
primary key (bot_id, user_id)
|
|
);
|
|
|
|
create table votes (
|
|
user_id text references users (id),
|
|
bot_id text references bots (id),
|
|
voted_at timestamp with time zone default now(),
|
|
primary key (user_id, bot_id, voted_at)
|
|
);
|
|
|
|
create
|
|
or replace function can_vote_again (user_id text, bot_id text) returns boolean as $$
|
|
BEGIN
|
|
RETURN NOT EXISTS (
|
|
SELECT 1 FROM votes
|
|
WHERE user_id = $1 AND bot_id = $2 AND voted_at > now() - interval '12 hours'
|
|
);
|
|
END;
|
|
$$ language plpgsql;
|
|
-- +goose StatementEnd
|
|
|
|
|
|
-- +goose Down
|
|
-- +goose StatementBegin
|
|
drop function if exists can_vote_again;
|
|
|
|
drop table if exists votes;
|
|
drop table if exists bot_co_owners;
|
|
drop table if exists bots;
|
|
drop table if exists users;
|
|
-- +goose StatementEnd
|