Restructured project
- backend moved to backend directory - added and initialized frontend with vue - moved infrastructure files to infra directory
This commit is contained in:
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS users;
|
||||
@@ -0,0 +1,13 @@
|
||||
CREATE TABLE users
|
||||
(
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
telegram_id BIGINT UNIQUE NOT NULL,
|
||||
username TEXT,
|
||||
first_name TEXT NOT NULL,
|
||||
last_name TEXT,
|
||||
language_code TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_users_telegram_id ON users (telegram_id);
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS families;
|
||||
@@ -0,0 +1,14 @@
|
||||
CREATE TABLE families
|
||||
(
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
owner_id BIGINT NOT NULL REFERENCES users (id),
|
||||
telegram_chat_id BIGINT NOT NULL,
|
||||
telegram_chat_name TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_families_owner_id ON families (owner_id);
|
||||
|
||||
CREATE UNIQUE INDEX idx_families_chat_id ON families (telegram_chat_id);
|
||||
@@ -0,0 +1,2 @@
|
||||
DROP TABLE IF EXISTS family_members;
|
||||
DROP TYPE IF EXISTS family_role;
|
||||
@@ -0,0 +1,26 @@
|
||||
CREATE TYPE family_role AS ENUM (
|
||||
'owner',
|
||||
'admin',
|
||||
'member',
|
||||
'child'
|
||||
);
|
||||
|
||||
CREATE TABLE family_members
|
||||
(
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
family_id BIGINT NOT NULL REFERENCES families (id) ON DELETE CASCADE,
|
||||
user_id BIGINT NOT NULL REFERENCES users (id) ON DELETE CASCADE,
|
||||
role family_role NOT NULL DEFAULT 'member',
|
||||
joined_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
UNIQUE (family_id, user_id)
|
||||
);
|
||||
|
||||
|
||||
-- быстрый поиск всех членов семьи
|
||||
CREATE INDEX idx_family_members_family_id ON family_members (family_id);
|
||||
|
||||
-- быстрый поиск всех семей пользователя
|
||||
CREATE INDEX idx_family_members_user_id ON family_members (user_id);
|
||||
|
||||
-- composite для частых join’ов
|
||||
CREATE INDEX idx_family_members_user_family ON family_members (user_id, family_id);
|
||||
@@ -0,0 +1,2 @@
|
||||
DROP TABLE IF EXISTS threads;
|
||||
DROP TYPE IF EXISTS thread_type;
|
||||
@@ -0,0 +1,19 @@
|
||||
CREATE TABLE family_threads
|
||||
(
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
family_id BIGINT NOT NULL REFERENCES families (id) ON DELETE CASCADE,
|
||||
type TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
telegram_topic_id BIGINT NOT NULL,
|
||||
is_system BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_by BIGINT NOT NULL REFERENCES users (id),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
|
||||
UNIQUE (family_id, telegram_topic_id)
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX idx_unique_system_threads ON family_threads (family_id, type) WHERE is_system = TRUE;
|
||||
|
||||
CREATE INDEX idx_threads_family_id ON family_threads (family_id);
|
||||
|
||||
CREATE INDEX idx_threads_family_type ON family_threads (family_id, type);
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE receipts;
|
||||
@@ -0,0 +1,35 @@
|
||||
CREATE TABLE receipts
|
||||
(
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
receipt_number TEXT NOT NULL UNIQUE,
|
||||
ui TEXT NOT NULL,
|
||||
status INTEGER NOT NULL,
|
||||
issued_at TIMESTAMP NOT NULL,
|
||||
total_amount REAL NOT NULL,
|
||||
payment_amount REAL NOT NULL,
|
||||
cash_amount REAL NOT NULL,
|
||||
another_amount REAL NOT NULL,
|
||||
clearing_amount REAL NOT NULL,
|
||||
margin REAL NOT NULL,
|
||||
currency TEXT NOT NULL,
|
||||
payment_type INTEGER NOT NULL,
|
||||
cashbox_number INTEGER NOT NULL,
|
||||
cashier TEXT,
|
||||
name_spd TEXT,
|
||||
name_to TEXT,
|
||||
name_np TEXT,
|
||||
type_np TEXT,
|
||||
street_to TEXT,
|
||||
house_to TEXT,
|
||||
kod_soato TEXT,
|
||||
oblast_soato TEXT,
|
||||
rayon_soato TEXT,
|
||||
selsovet_soato TEXT,
|
||||
doc_num TEXT,
|
||||
skno_number TEXT,
|
||||
unp TEXT,
|
||||
success TEXT,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_receipts_issued_at ON receipts(issued_at);
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE positions;
|
||||
@@ -0,0 +1,19 @@
|
||||
CREATE TABLE positions
|
||||
(
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
receipt_id BIGINT NOT NULL,
|
||||
section_number TEXT,
|
||||
gtin_code TEXT,
|
||||
product_name TEXT NOT NULL,
|
||||
product_count REAL NOT NULL,
|
||||
amount REAL NOT NULL,
|
||||
discount REAL,
|
||||
surcharge REAL,
|
||||
tag TEXT,
|
||||
marking_code TEXT,
|
||||
ukz_code TEXT,
|
||||
|
||||
FOREIGN KEY (receipt_id) REFERENCES receipts (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE INDEX idx_positions_receipt_id ON positions (receipt_id);
|
||||
@@ -0,0 +1,3 @@
|
||||
SELECT cron.unschedule('cleanup-expired-otp');
|
||||
|
||||
DROP TABLE IF EXISTS otp;
|
||||
@@ -0,0 +1,17 @@
|
||||
CREATE UNLOGGED TABLE otp
|
||||
(
|
||||
user_id BIGINT NOT NULL,
|
||||
otp TEXT NOT NULL,
|
||||
expired_at TIMESTAMP NOT NULL,
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE INDEX idx_otp_user_id ON otp (user_id);
|
||||
CREATE INDEX idx_otp_expired_at ON otp (expired_at);
|
||||
|
||||
SELECT cron.schedule(
|
||||
'cleanup-expired-otp',
|
||||
'*/10 * * * *',
|
||||
$$DELETE FROM otp WHERE expired_at <= NOW()$$
|
||||
);
|
||||
Reference in New Issue
Block a user