Files
locoutil/app/database.py
T

84 lines
2.3 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'))
);
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)