From 1a458ee757038be53aa2da1e573a64a55e8328c4 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 28 Feb 2023 10:24:27 +0200 Subject: [PATCH] refactor: clean migration statements --- migrations.py | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/migrations.py b/migrations.py index e69de29..02565f7 100644 --- a/migrations.py +++ b/migrations.py @@ -0,0 +1,152 @@ +async def m001_initial(db): + + """ + Initial merchants table. + """ + await db.execute( + """ + CREATE TABLE nostrmarket.merchants ( + user_id TEXT NOT NULL, + private_key TEXT NOT NULL, + public_key TEXT NOT NULL, + config TEXT NOT NULL + ); + """ + ) + + """ + Initial stalls table. + """ + await db.execute( + """ + CREATE TABLE nostrmarket.stalls ( + id TEXT PRIMARY KEY, + wallet TEXT NOT NULL, + name TEXT NOT NULL, + currency TEXT, + shipping_zones TEXT NOT NULL, + rating REAL DEFAULT 0 + ); + """ + ) + + """ + Initial products table. + """ + await db.execute( + f""" + CREATE TABLE nostrmarket.products ( + id TEXT PRIMARY KEY, + stall_id TEXT NOT NULL, + product TEXT NOT NULL, + categories TEXT, + description TEXT, + image TEXT, + price REAL NOT NULL, + quantity INTEGER NOT NULL, + rating REAL DEFAULT 0 + ); + """ + ) + + """ + Initial zones table. + """ + await db.execute( + """ + CREATE TABLE nostrmarket.zones ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL, + cost REAL NOT NULL, + countries TEXT NOT NULL + ); + """ + ) + + """ + Initial orders table. + """ + await db.execute( + f""" + CREATE TABLE nostrmarket.orders ( + id TEXT PRIMARY KEY, + wallet TEXT NOT NULL, + username TEXT, + pubkey TEXT, + shipping_zone TEXT NOT NULL, + address TEXT, + email TEXT, + total REAL NOT NULL, + invoice_id TEXT NOT NULL, + paid BOOLEAN NOT NULL, + shipped BOOLEAN NOT NULL, + time TIMESTAMP NOT NULL DEFAULT {db.timestamp_now} + ); + """ + ) + + """ + Initial order details table. + """ + await db.execute( + f""" + CREATE TABLE nostrmarket.order_details ( + id TEXT PRIMARY KEY, + order_id TEXT NOT NULL, + product_id TEXT NOT NULL, + quantity INTEGER NOT NULL + ); + """ + ) + + """ + Initial market table. + """ + await db.execute( + """ + CREATE TABLE nostrmarket.markets ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL, + name TEXT + ); + """ + ) + + """ + Initial market stalls table. + """ + await db.execute( + f""" + CREATE TABLE nostrmarket.market_stalls ( + id TEXT PRIMARY KEY, + market_id TEXT NOT NULL, + stall_id TEXT NOT NULL + ); + """ + ) + + """ + Initial chat messages table. + """ + await db.execute( + f""" + CREATE TABLE nostrmarket.messages ( + id TEXT PRIMARY KEY, + msg TEXT NOT NULL, + pubkey TEXT NOT NULL, + conversation_id TEXT NOT NULL, + timestamp TIMESTAMP NOT NULL DEFAULT {db.timestamp_now} + ); + """ + ) + + if db.type != "SQLITE": + """ + Create indexes for message fetching + """ + await db.execute( + "CREATE INDEX idx_messages_timestamp ON nostrmarket.messages (timestamp DESC)" + ) + await db.execute( + "CREATE INDEX idx_messages_conversations ON nostrmarket.messages (conversation_id)" + )