feat: added sqlc and binded schema.sql as postgresql's init script

This commit is contained in:
2025-06-14 17:36:19 +03:00
parent 7b03056203
commit db8b7c0372
4 changed files with 64 additions and 1 deletions

View File

@@ -37,7 +37,7 @@ services:
- easywish-network - easywish-network
volumes: volumes:
- ./postgres_data:/var/lib/postgresql/data - ./postgres_data:/var/lib/postgresql/data
- ./sqlc/schema.sql:/docker-entrypoint-initdb.d/init.sql
redis: redis:
image: eqalpha/keydb image: eqalpha/keydb
command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"] command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"]

2
sqlc/query.sql Normal file
View File

@@ -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;

47
sqlc/schema.sql Normal file
View File

@@ -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
);

14
sqlc/sqlc.yaml Normal file
View File

@@ -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