Skip to content

Commit fd36650

Browse files
committed
fixing generator and other site functionality
1 parent 8232e86 commit fd36650

8 files changed

Lines changed: 57 additions & 35 deletions

File tree

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
CREATE TABLE IF NOT EXISTS users (
2-
id INTEGER PRIMARY KEY,
2+
id SERIAL PRIMARY KEY,
33
password_hash TEXT NOT NULL,
44
name TEXT NOT NULL UNIQUE,
55
balance INTEGER DEFAULT 0
66
);
77

88
CREATE TABLE IF NOT EXISTS studios (
9-
id INTEGER PRIMARY KEY,
9+
id SERIAL PRIMARY KEY,
1010
name TEXT NOT NULL
1111
);
1212

1313
CREATE TABLE IF NOT EXISTS games (
14-
id INTEGER PRIMARY KEY,
14+
id SERIAL PRIMARY KEY,
1515
name TEXT NOT NULL UNIQUE,
1616
price INTEGER NOT NULL,
1717
description TEXT NOT NULL,
@@ -22,7 +22,7 @@ CREATE TABLE IF NOT EXISTS games (
2222
);
2323

2424
CREATE TABLE IF NOT EXISTS games_pictures (
25-
id INTEGER PRIMARY KEY,
25+
id SERIAL PRIMARY KEY,
2626
name TEXT NOT NULL,
2727
game_id INTEGER NOT NULL,
2828
img_type TEXT NOT NULL CHECK (
@@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS games_pictures (
3636
);
3737

3838
CREATE TABLE IF NOT EXISTS profiles_pictures (
39-
id INTEGER PRIMARY KEY,
39+
id SERIAL PRIMARY KEY,
4040
name TEXT NOT NULL UNIQUE,
4141
user_id INTEGER NOT NULL,
4242
img_fmt TEXT NOT NULL CHECK (img_fmt IN ('jpg', 'png')),
@@ -47,7 +47,7 @@ CREATE TABLE IF NOT EXISTS profiles_pictures (
4747
);
4848

4949
CREATE TABLE IF NOT EXISTS purchases (
50-
id INTEGER PRIMARY KEY,
50+
id SERIAL PRIMARY KEY,
5151
owner_id INTEGER NOT NULL,
5252
buyer_id INTEGER NOT NULL,
5353
ts INTEGER, -- make it NULL if game not buyed yet but in cart already
@@ -62,7 +62,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_owner_game ON purchases (
6262
);
6363

6464
CREATE TABLE IF NOT EXISTS tags (
65-
id INTEGER PRIMARY KEY,
65+
id SERIAL PRIMARY KEY,
6666
name TEXT NOT NULL UNIQUE
6767
);
6868

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
COPY users (id, password_hash, name, balance)
22
FROM '/store-init-csvs/init-data-users.csv'
33
WITH (FORMAT CSV, HEADER, DELIMITER ',');
4+
SELECT setval(pg_get_serial_sequence('users', 'id'), COALESCE(MAX(id), 0) + 1) FROM users;
45

56
COPY tags(id, name)
67
FROM '/store-init-csvs/init-data-tags.csv'
78
WITH (FORMAT CSV, HEADER, DELIMITER ',');
9+
SELECT setval(pg_get_serial_sequence('tags', 'id'), COALESCE(MAX(id), 0) + 1) FROM tags;
810

911
COPY studios(id, name)
1012
FROM '/store-init-csvs/init-data-studios.csv'
1113
WITH (FORMAT CSV, HEADER, DELIMITER ',');
14+
SELECT setval(pg_get_serial_sequence('studios', 'id'), COALESCE(MAX(id), 0) + 1) FROM studios;
1215

1316
COPY games(id, name, price, description, brief, studio_id)
1417
FROM '/store-init-csvs/init-data-games.csv'
1518
WITH (FORMAT CSV, HEADER, DELIMITER ',');
19+
SELECT setval(pg_get_serial_sequence('games', 'id'), COALESCE(MAX(id), 0) + 1) FROM games;
1620

1721
COPY game_tags(game_id, tag_id)
1822
FROM '/store-init-csvs/init-data-game-tags.csv'
@@ -21,9 +25,10 @@ WITH (FORMAT CSV, HEADER, DELIMITER ',');
2125
COPY purchases(id, owner_id, buyer_id, ts, game_id)
2226
FROM '/store-init-csvs/init-data-purchases.csv'
2327
WITH (FORMAT CSV, HEADER, DELIMITER ',', NULL 'NULL');
28+
SELECT setval(pg_get_serial_sequence('purchases', 'id'), COALESCE(MAX(id), 0) + 1) FROM purchases;
2429

2530
-- create temporary table for games pictures to transform csv
26-
CREATE TEMP TABLE temp4gpictures (
31+
CREATE TEMP TABLE IF NOT EXISTS temp4gpictures (
2732
id INTEGER PRIMARY KEY,
2833
name TEXT,
2934
game_id INTEGER,
@@ -46,12 +51,13 @@ SELECT
4651
FROM
4752
temp4gpictures s
4853
ON CONFLICT (id) DO NOTHING;
54+
SELECT setval(pg_get_serial_sequence('games_pictures', 'id'), COALESCE(MAX(id), 0) + 1) FROM games_pictures;
4955

5056
DROP TABLE temp4gpictures;
5157
-- end of copy games pictures
5258

5359
-- create temporary table for profile pictures to transform csv
54-
CREATE TEMP TABLE temp4ppictures (
60+
CREATE TEMP TABLE IF NOT EXISTS temp4ppictures (
5561
id INTEGER PRIMARY KEY,
5662
name TEXT,
5763
user_id INTEGER,
@@ -72,6 +78,9 @@ SELECT
7278
FROM
7379
temp4ppictures s
7480
ON CONFLICT (id) DO NOTHING;
81+
SELECT setval(pg_get_serial_sequence('profiles_pictures', 'id'), COALESCE(MAX(id), 0) + 1) FROM profiles_pictures;
7582

7683
DROP TABLE temp4ppictures;
84+
85+
COMMIT;
7786
-- end of copy profile pictures

docker-compose.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ services:
1515
ports:
1616
- "${DB_PORT}:${DB_PORT}"
1717
volumes:
18-
- /var/lib/postgresql/data
18+
- postgres_data:/var/lib/postgresql/data
1919
- ./database/init-scripts:/docker-entrypoint-initdb.d
2020
- ./database/store-init-csvs:/store-init-csvs
2121
- ./database/bank-init-csvs:/bank-init-csvs
@@ -56,6 +56,5 @@ networks:
5656
my-network:
5757

5858
volumes:
59-
store-db-data:
6059
bank-db-data:
61-
data_sql:
60+
postgres_data:

store-service/store/database/__init__.py

Whitespace-only changes.

store-service/store/database/db_api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def buy_cart(user_id:int, total:int, games_ids:list[int]):
231231
# change purchases
232232
cursor.execute(f"""
233233
UPDATE purchases
234-
SET ts = STRFTIME('%s', 'now')
234+
SET ts = EXTRACT(EPOCH FROM CURRENT_TIMESTAMP)::INTEGER
235235
WHERE owner_id = %s AND game_id IN ({placeholders}) AND ts IS NULL;
236236
""", [user_id] + games_ids)
237237
# change balance
@@ -265,7 +265,7 @@ def get_user_cart_games(user_id:int)->list[dict]:
265265
cursor.execute("""
266266
SELECT game_id
267267
FROM purchases
268-
WHERE owner_id == %s and ts IS NULL;
268+
WHERE owner_id = %s and ts IS NULL;
269269
""", (user_id,))
270270
data = cursor.fetchall()
271271
return data
@@ -290,7 +290,7 @@ def check_own_game(user_id:int, game_id:int)->bool:
290290
try:
291291
cursor.execute("""
292292
SELECT id FROM purchases
293-
WHERE game_id == %s and owner_id == %s;
293+
WHERE game_id = %s and owner_id = %s;
294294
""", (game_id, user_id,))
295295
result = cursor.fetchone()
296296
if result :

tools/deGenerator.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,22 @@ def generate_game(idx:int):
6767
round(random.uniform(1, STUDIO_COUNT))
6868
]
6969

70+
PURCHASES_SET = set()
7071
def generate_purchase(idx:int):
71-
return [
72-
idx,
73-
round(random.uniform(1, USERS_COUNT)),
74-
round(random.uniform(1, USERS_COUNT)),
75-
'NULL' if round(random.uniform(0,2)) == 0 else round(random.uniform(1, 100000)),
76-
round(random.uniform(1, GAMES_COUNT))
77-
]
72+
while True:
73+
x = [
74+
idx,
75+
round(random.uniform(1, USERS_COUNT)),
76+
round(random.uniform(1, USERS_COUNT)),
77+
'NULL' if round(random.uniform(0,2)) == 0 else round(random.uniform(1, 100000)),
78+
round(random.uniform(1, GAMES_COUNT))
79+
]
80+
if (x[1], x[-1]) not in PURCHASES_SET:
81+
break
82+
83+
PURCHASES_SET.add((x[1], x[-1]))
84+
85+
return x
7886

7987
def create_image_with_text(text:str):
8088
WIDTH, HEIGHT = 250, 250

tools/tester.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,30 @@
1717
except psycopg.OperationalError as e:
1818
raise ValueError(f'Failed to connect to database: {e}')
1919

20+
game_id = 8
21+
2022
cursor = db.cursor()
2123

2224
cursor.execute("""
23-
SELECT t.name
24-
FROM game_tags gt
25-
JOIN tags t ON gt.tag_id = t.id
26-
WHERE gt.game_id = %s;
27-
""", (game_id,))
28-
data = cursor.fetchall()
29-
tags = [tag['name'] for tag in data]
30-
return tags
25+
SELECT g.*, s.name AS studio_name
26+
FROM games g
27+
JOIN studios s ON s.id = g.studio_id
28+
WHERE g.id = %s;
29+
""", (game_id,))
30+
31+
data = cursor.fetchall()
32+
print(data)
3133

3234
try:
33-
cursor.execute(queue, params)
34-
data = cursor.fetchall()
35-
print(data)
36-
except psycopg.OperationalError as e:
37-
print(f'sql execution error {e}')
35+
cursor.execute("""
36+
SELECT name, img_type, img_fmt
37+
FROM games_pictures
38+
WHERE game_id = %s;
39+
""", (game_id,))
40+
data = cursor.fetchall()
41+
print(data)
42+
except:
43+
print('e')
3844

3945
db.close()
4046

0 commit comments

Comments
 (0)