Multi-cloud meme website designed to opearate on ultra-low infra budget.
These are all configured as env vars:
terraform init
terraform apply
You can use the presets for testing.
flask --app main run --debug
CREATE USER atka WITH PASSWORD 'atka';
CREATE DATABASE meme WITH OWNER atka;
\c meme;
CREATE EXTENSION tsm_system_rows;
CREATE TABLE users (
username VARCHAR(25) NOT NULL,
password VARCHAR(32) NOT NULL,
email VARCHAR(50) NOT NULL,
admin BOOLEAN DEFAULT false,
PRIMARY KEY (username)
);
CREATE TABLE posts (
post_id SERIAL,
title VARCHAR(50) NOT NULL,
url VARCHAR(255) NOT NULL,
published INT NOT NULL,
username VARCHAR(25) NOT NULL,
approver VARCHAR(25),
approved BOOLEAN,
tag_all BOOLEAN DEFAULT false,
tag_emk BOOLEAN DEFAULT false,
tag_gpk BOOLEAN DEFAULT false,
tag_epk BOOLEAN DEFAULT false,
tag_vbk BOOLEAN DEFAULT false,
tag_vik BOOLEAN DEFAULT false,
tag_kjk BOOLEAN DEFAULT false,
tag_ttk BOOLEAN DEFAULT false,
tag_gtk BOOLEAN DEFAULT false,
FOREIGN KEY (username) REFERENCES users(username),
FOREIGN KEY (approver) REFERENCES users(username),
PRIMARY KEY (post_id)
);
CREATE TABLE votes (
post_id INT NOT NULL,
username VARCHAR(25) NOT NULL,
vote SMALLINT NOT NULL CHECK (vote IN (-1, 1)),
FOREIGN KEY (post_id) REFERENCES posts(post_id),
FOREIGN KEY (username) REFERENCES users(username)
);
CREATE TABLE pending_registrations (
email VARCHAR(40) NOT NULL,
uuid VARCHAR(36) NOT NULL,
username VARCHAR(25) NOT NULL,
password VARCHAR(32) NOT NULL,
Created INT NOT NULL,
PRIMARY KEY (email)
);
GRANT ALL PRIVILEGES ON TABLE users TO atka;
GRANT ALL PRIVILEGES ON TABLE posts TO atka;
GRANT ALL PRIVILEGES ON TABLE votes TO atka;
GRANT ALL PRIVILEGES ON TABLE pending_registrations TO atka;
GRANT USAGE, SELECT, UPDATE ON SEQUENCE posts_post_id_seq TO atka;