This commit is contained in:
root 2024-12-19 01:16:37 +03:00
commit 12ae64d4e8
5 changed files with 259 additions and 0 deletions

2
backup.sh Executable file
View File

@ -0,0 +1,2 @@
docker exec d4dd199a4566 pg_dump -U postgres postgres > $(pwd)/backups/$(date -d "today" +"%Y-%m-%d-%H-%M").sql

11
compose.yml Normal file
View File

@ -0,0 +1,11 @@
services:
postgreSQL:
container_name: dengadiplom
environment:
POSTGRES_PASSWORD: not_admin
image: postgres
ports:
- 6000:5432
volumes:
- ./postgres-data:/var/lib/postgresql/data

82
init.sql Normal file
View File

@ -0,0 +1,82 @@
SET lc_monetary TO 'ru_RU.UTF-8';
CREATE TABLE IF NOT EXISTS clients (
client_id SERIAL PRIMARY KEY,
surname VARCHAR(50) NOT NULL,
forename VARCHAR(50) NOT NULL,
patronymic VARCHAR(50),
age SMALLINT,
phone_number VARCHAR(15) NOT NULL,
email VARCHAR(50) NOT NULL
);
CREATE TABLE IF NOT EXISTS auth (
client_id INT PRIMARY KEY REFERENCES clients(client_id),
password VARCHAR(50) NOT NULL
);
CREATE TABLE IF NOT EXISTS board_games (
board_game_id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
genre VARCHAR(30),
publisher VARCHAR(50),
price MONEY NOT NULL
);
CREATE TABLE IF NOT EXISTS sections (
section_id SERIAL PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
CREATE TABLE IF NOT EXISTS sections_board_games (
section_id INT REFERENCES sections(section_id),
board_game_id INT REFERENCES board_games(board_game_id)
);
CREATE TABLE IF NOT EXISTS bags (
bag_id SERIAL PRIMARY KEY,
client_id INT REFERENCES clients(client_id)
);
CREATE TABLE IF NOT EXISTS bags_board_games (
bag_id INT REFERENCES bags(bag_id),
board_game_id INT REFERENCES board_games(board_game_id),
count INT NOT NULL
);
CREATE TABLE IF NOT EXISTS discounts (
discount_id SERIAL PRIMARY KEY,
board_game_id INT REFERENCES board_games(board_game_id),
amount SMALLINT NOT NULL,
valid_until TIMESTAMP NOT NULL
);
CREATE TABLE IF NOT EXISTS clients_discounts (
discount INT REFERENCES discounts(discount_id),
client_id INT REFERENCES clients(client_id)
);
CREATE TABLE IF NOT EXISTS wishlists (
wishlist_id SERIAL PRIMARY KEY,
client_id INT REFERENCES clients(client_id)
);
CREATE TABLE IF NOT EXISTS wishlists_games (
wishlist_id INT REFERENCES wishlists(wishlist_id),
board_game_id INT REFERENCES board_games(board_game_id)
);
CREATE TABLE IF NOT EXISTS orders (
order_id SERIAL PRIMARY KEY,
client_id INT REFERENCES clients(client_id),
pick_up VARCHAR(50) NOT NULL,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cost MONEY NOT NULL
);
CREATE TABLE IF NOT EXISTS orders_games (
order_id INT REFERENCES orders(order_id),
board_game_id INT REFERENCES board_games(board_game_id),
discount_id INT REFERENCES discounts(discount_id),
count INT NOT NULL
);

162
populate.sql Normal file
View File

@ -0,0 +1,162 @@
INSERT INTO clients (surname, forename, patronymic, age, phone_number, email) VALUES
('Иванов', 'Иван', 'Иванович', 28, '+79876543210', 'ivanov@example.com'),
('Петрова', 'Мария', NULL, 34, '+79876543211', 'petrova@example.com'),
('Сидоров', 'Алексей', 'Викторович', 22, '+79876543212', 'sidorov@example.com'),
('Кузнецова', 'Екатерина', 'Андреевна', 26, '+79876543213', 'kuznetsova@example.com'),
('Васильев', 'Дмитрий', 'Олегович', 31, '+79876543214', 'vasiliev@example.com'),
('Смирнова', 'Анна', 'Игоревна', 29, '+79876543215', 'smirnova@example.com'),
('Орлов', 'Павел', 'Владимирович', 35, '+79876543216', 'orlov@example.com'),
('Михайлова', 'Ольга', 'Николаевна', 24, '+79876543217', 'mikhailova@example.com');
INSERT INTO auth (client_id, password) VALUES
(1, 'password123'),
(2, 'qwerty456'),
(3, 'securepass789'),
(4, 'pass456'),
(5, 'mysecurepass'),
(6, 'easy123'),
(7, 'orlovpass'),
(8, 'mikhailova987');
INSERT INTO board_games (name, genre, publisher, price) VALUES
('Монополия', 'Экономическая стратегия', 'Hasbro', 1999.99),
('Мафия', 'Социальная игра', 'Hobby World', 899.00),
('Каркассон', 'Стратегия', 'Z-Man Games', 1499.50),
('Эволюция', 'Образовательная', 'Правильные игры', 1299.00),
('Диксит', 'Творческая', 'Libellud', 2299.00),
('7 Чудес', 'Карточная стратегия', 'Repos Production', 2599.00),
('Кодовое имя', 'Ассоциативная', 'Czech Games', 1599.00),
('Бэнг!', 'Вестерн', 'dV Giochi', 1399.00),
('Колонизаторы', 'Экономическая стратегия', 'Kosmos', 2799.00),
('Тикет ту райд', 'Путешествия', 'Days of Wonder', 3499.00),
('Агрикола', 'Фермерская стратегия', 'Z-Man Games', 2999.00),
('Манчкин', 'Юмористическая', 'Steve Jackson Games', 1199.00),
('Имаджинариум', 'Творческая', 'Stupid Casual', 1499.00),
('Находка для шпиона', 'Детективная', 'Hobby World', 999.00),
('Зельеварение', 'Фэнтези', 'Правильные игры', 1299.00),
('Саботер', 'Кооперативная', 'Amigo', 999.00),
('Цивилизация', 'Стратегия', 'Fantasy Flight Games', 3999.00),
('Доминион', 'Стратегия', 'Rio Grande Games', 1899.00),
('Терраформирование Марса', 'Космическая стратегия', 'FryxGames', 4599.00),
('Гloomhaven', 'Ролевая', 'Cephalofair Games', 8999.00);
INSERT INTO sections (name) VALUES
('Хиты продаж'),
('Новинки'),
('Семейные'),
('Для детей'),
('Для вечеринок'),
('Стратегии'),
('Кооперативные'),
('Фэнтези'),
('Космические');
INSERT INTO sections_board_games (section_id, board_game_id) VALUES
(1, 1), (1, 3), (1, 5), (1, 10),
(2, 2), (2, 7), (2, 18),
(3, 1), (3, 4), (3, 9),
(4, 4), (4, 12), (4, 13),
(5, 2), (5, 5), (5, 8),
(6, 3), (6, 9), (6, 18),
(7, 14), (7, 16),
(8, 15), (8, 19),
(9, 17), (9, 20);
INSERT INTO discounts (board_game_id, amount, valid_until) VALUES
(1, 600, '2024-12-31 23:59:59'),
(3, 300, '2024-12-25 23:59:59'),
(5, 450, '2024-12-31 23:59:59'),
(9, 750, '2025-01-15 23:59:59'),
(14, 900, '2025-02-01 23:59:59'),
(18, 600, '2024-12-31 23:59:59'),
(20, 300, '2025-01-10 23:59:59');
INSERT INTO clients_discounts (discount, client_id) VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7);
INSERT INTO bags (client_id) VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8);
INSERT INTO bags_board_games (bag_id, board_game_id, count) VALUES
(1, 1, 1),
(1, 3, 2),
(2, 2, 1),
(2, 5, 1),
(3, 6, 2),
(3, 10, 1),
(4, 7, 1),
(5, 8, 2),
(6, 9, 1),
(7, 11, 3),
(8, 20, 1);
INSERT INTO wishlists (client_id) VALUES
(1),
(1),
(1),
(4),
(5),
(6),
(7),
(8);
INSERT INTO wishlists_games (wishlist_id, board_game_id) VALUES
(1, 4),
(1, 5),
(1, 9),
(2, 1),
(2, 14),
(3, 2),
(3, 3),
(4, 7),
(5, 15),
(5, 18),
(6, 12),
(6, 19),
(7, 6),
(8, 17),
(8, 20);
INSERT INTO orders (client_id, pick_up, cost) VALUES
(1, 'Москва, Тверская 12', 4999.49),
(2, 'Санкт-Петербург, Невский 88', 899.00),
(3, 'Казань, Баумана 5', 3897.00),
(4, 'Новосибирск, Ленина 10', 1499.00),
(5, 'Екатеринбург, Малышева 45', 2399.00),
(6, 'Краснодар, Красная 22', 2999.00),
(7, 'Воронеж, Плехановская 5', 1299.00),
(8, 'Нижний Новгород, Рождественская 12', 4599.00),
(1, 'Москва, Тверская 12', 1599.00),
(3, 'Казань, Баумана 5', 3599.00),
(5, 'Екатеринбург, Малышева 45', 3499.00),
(7, 'Воронеж, Плехановская 5', 1299.00),
(8, 'Нижний Новгород, Рождественская 12', 5299.00);
INSERT INTO orders_games (order_id, board_game_id, discount_id, count) VALUES
(1, 1, 1, 1),
(1, 3, 2, 2),
(2, 2, NULL, 1),
(3, 5, 3, 3),
(4, 6, NULL, 1),
(5, 8, 4, 2),
(6, 9, 5, 1),
(7, 11, NULL, 1),
(8, 18, 6, 1),
(9, 3, 2, 1),
(10, 10, NULL, 1),
(11, 20, 7, 1),
(12, 12, NULL, 1),
(13, 14, NULL, 1);

2
setup_backup_cron.sh Executable file
View File

@ -0,0 +1,2 @@
(crontab -l 2>/dev/null; echo "* */12 * * * $(pwd)/backup.sh") | crontab -