From db8b7c0372518d2b3f3f5bf91d18e596d338fad7 Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Sat, 14 Jun 2025 17:36:19 +0300 Subject: [PATCH] feat: added sqlc and binded schema.sql as postgresql's init script --- docker-compose.yml | 2 +- sqlc/query.sql | 2 ++ sqlc/schema.sql | 47 ++++++++++++++++++++++++++++++++++++++++++++++ sqlc/sqlc.yaml | 14 ++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 sqlc/query.sql create mode 100644 sqlc/schema.sql create mode 100644 sqlc/sqlc.yaml diff --git a/docker-compose.yml b/docker-compose.yml index 88fdbcd..22ab072 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,7 +37,7 @@ services: - easywish-network volumes: - ./postgres_data:/var/lib/postgresql/data - + - ./sqlc/schema.sql:/docker-entrypoint-initdb.d/init.sql redis: image: eqalpha/keydb command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"] diff --git a/sqlc/query.sql b/sqlc/query.sql new file mode 100644 index 0000000..ed26fe2 --- /dev/null +++ b/sqlc/query.sql @@ -0,0 +1,2 @@ +-- name: CreateUser :one +INSERT INTO user (username, verified, banned, registration_date) VALUES ($1, false, false, NOW()) RETURNING id, username, verified, banned, registration_date; diff --git a/sqlc/schema.sql b/sqlc/schema.sql new file mode 100644 index 0000000..9b67e4d --- /dev/null +++ b/sqlc/schema.sql @@ -0,0 +1,47 @@ +-- TODO: login information must exist too +CREATE TABLE IF NOT EXISTS "users" ( + id BIGSERIAL PRIMARY KEY, + username VARCHAR(20) UNIQUE NOT NULL, + banned BOOLEAN NOT NULL, + registration_date TIMESTAMP NOT NULL +); + +CREATE TABLE IF NOT EXISTS "login_informations" ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, + email VARCHAR(75), + password_hash VARCHAR(512) NOT NULL, + totp_encrypted VARCHAR(512), + email_2fa_enabled BOOLEAN, + password_change_time TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS "confirmation_codes" ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, + type INTEGER NOT NULL, + code VARCHAR(36) NOT NULL, + expires_at TIMESTAMP NOT NULL, + used BOOLEAN, + deleted BOOLEAN +); + +CREATE TABLE IF NOT EXISTS "sessions" ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, + guid VARCHAR(36) NOT NULL, + name VARCHAR(100), + platform VARCHAR(32), + latest_ip VARCHAR(16), + login_time TIMESTAMP NOT NULL, + last_seen_date TIMESTAMP NOT NULL, + terminated BOOLEAN +); + +CREATE TABLE IF NOT EXISTS "profiles" ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, + name VARCHAR(75) NOT NULL, + avatar_url VARCHAR(255), + birthday TIMESTAMP +); diff --git a/sqlc/sqlc.yaml b/sqlc/sqlc.yaml new file mode 100644 index 0000000..477c488 --- /dev/null +++ b/sqlc/sqlc.yaml @@ -0,0 +1,14 @@ +version: "2" +sql: +- schema: "../postgresql/schema.sql" + queries: "query.sql" + engine: "postgresql" + gen: + go: + out: "../backend/internal/database" + sql_package: "pgx/v5" + database: + # managed: true + uri: "postgresql://postgres:postgres@localhost:5432/mydb?sslmode=disable" + rules: + - sqlc/db-prepare