99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
import sqlite3
|
|
import os
|
|
from contextlib import contextmanager
|
|
|
|
DB_PATH = os.environ.get("DB_PATH", "/data/locoutil.db")
|
|
|
|
SCHEMA = """
|
|
PRAGMA foreign_keys = ON;
|
|
|
|
CREATE TABLE IF NOT EXISTS tools (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
description TEXT DEFAULT '',
|
|
category TEXT DEFAULT '',
|
|
daily_price REAL NOT NULL DEFAULT 0,
|
|
weekend_price REAL NOT NULL DEFAULT 0,
|
|
deposit REAL DEFAULT 0,
|
|
notes TEXT DEFAULT '',
|
|
created_at TEXT DEFAULT (datetime('now', 'localtime'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tool_images (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
tool_id INTEGER NOT NULL REFERENCES tools(id) ON DELETE CASCADE,
|
|
filename TEXT NOT NULL,
|
|
is_main INTEGER DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS clients (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
phone TEXT DEFAULT '',
|
|
email TEXT DEFAULT '',
|
|
address TEXT DEFAULT '',
|
|
notes TEXT DEFAULT '',
|
|
created_at TEXT DEFAULT (datetime('now', 'localtime'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS client_documents (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
client_id INTEGER NOT NULL REFERENCES clients(id) ON DELETE CASCADE,
|
|
filename TEXT NOT NULL,
|
|
label TEXT DEFAULT 'Document'
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS platforms (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL UNIQUE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS rentals (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
tool_id INTEGER NOT NULL REFERENCES tools(id),
|
|
client_id INTEGER NOT NULL REFERENCES clients(id),
|
|
platform_id INTEGER REFERENCES platforms(id),
|
|
start_date TEXT NOT NULL,
|
|
end_date TEXT NOT NULL,
|
|
price REAL NOT NULL DEFAULT 0,
|
|
deposit_collected INTEGER DEFAULT 0,
|
|
deposit_returned INTEGER DEFAULT 0,
|
|
status TEXT DEFAULT 'confirmed',
|
|
return_notes TEXT DEFAULT '',
|
|
created_at TEXT DEFAULT (datetime('now', 'localtime'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS listings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
tool_id INTEGER NOT NULL REFERENCES tools(id) ON DELETE CASCADE,
|
|
platform_id INTEGER NOT NULL REFERENCES platforms(id) ON DELETE CASCADE,
|
|
is_active INTEGER DEFAULT 1,
|
|
title TEXT DEFAULT '',
|
|
description TEXT DEFAULT '',
|
|
price REAL,
|
|
url TEXT DEFAULT '',
|
|
notes TEXT DEFAULT '',
|
|
created_at TEXT DEFAULT (datetime('now', 'localtime')),
|
|
updated_at TEXT DEFAULT (datetime('now', 'localtime')),
|
|
UNIQUE(tool_id, platform_id)
|
|
);
|
|
|
|
INSERT OR IGNORE INTO platforms (name) VALUES ('Direct');
|
|
INSERT OR IGNORE INTO platforms (name) VALUES ('Leboncoin');
|
|
"""
|
|
|
|
@contextmanager
|
|
def get_db():
|
|
conn = sqlite3.connect(DB_PATH)
|
|
conn.row_factory = sqlite3.Row
|
|
conn.execute("PRAGMA foreign_keys = ON")
|
|
try:
|
|
yield conn
|
|
conn.commit()
|
|
finally:
|
|
conn.close()
|
|
|
|
def init_db():
|
|
with get_db() as conn:
|
|
conn.executescript(SCHEMA)
|