rageval-ai / db.py
seali's picture
Upload folder using huggingface_hub
ce1a1e7 verified
Raw
History Blame Contribute Delete
4.07 kB
"""SQLite katmanı: kitap stoğu ve sipariş kayıtları."""
import os
import sqlite3
from datetime import datetime, timezone
DB_PATH = os.path.join(os.path.dirname(__file__), "kitapci.db")
SEED_BOOKS = [
("Suç ve Ceza", "Fyodor Dostoyevski", 180.0, 12),
("1984", "George Orwell", 120.0, 8),
("Küçük Prens", "Antoine de Saint-Exupéry", 90.0, 20),
("Simyacı", "Paulo Coelho", 110.0, 15),
("Sapiens", "Yuval Noah Harari", 220.0, 5),
("Fahrenheit 451", "Ray Bradbury", 130.0, 0),
]
def get_connection() -> sqlite3.Connection:
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
return conn
def init_db(reset: bool = False) -> None:
if reset and os.path.exists(DB_PATH):
os.remove(DB_PATH)
conn = get_connection()
cur = conn.cursor()
cur.execute(
"""
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author TEXT NOT NULL,
price REAL NOT NULL,
stock INTEGER NOT NULL
)
"""
)
cur.execute(
"""
CREATE TABLE IF NOT EXISTS orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
book_id INTEGER NOT NULL,
quantity INTEGER NOT NULL,
customer_name TEXT NOT NULL,
status TEXT NOT NULL,
created_at TEXT NOT NULL,
FOREIGN KEY (book_id) REFERENCES books(id)
)
"""
)
cur.execute("SELECT COUNT(*) FROM books")
if cur.fetchone()[0] == 0:
cur.executemany(
"INSERT INTO books (title, author, price, stock) VALUES (?, ?, ?, ?)",
SEED_BOOKS,
)
conn.commit()
conn.close()
def list_books(query: str | None = None) -> list[dict]:
conn = get_connection()
if query:
rows = conn.execute(
"SELECT * FROM books WHERE title LIKE ? OR author LIKE ?",
(f"%{query}%", f"%{query}%"),
).fetchall()
else:
rows = conn.execute("SELECT * FROM books").fetchall()
conn.close()
return [dict(r) for r in rows]
def get_book(book_id: int) -> dict | None:
conn = get_connection()
row = conn.execute("SELECT * FROM books WHERE id = ?", (book_id,)).fetchone()
conn.close()
return dict(row) if row else None
def create_order(book_id: int, quantity: int, customer_name: str) -> dict:
conn = get_connection()
book = conn.execute("SELECT * FROM books WHERE id = ?", (book_id,)).fetchone()
if not book:
conn.close()
return {"error": f"book_id {book_id} bulunamadı."}
if quantity < 1:
conn.close()
return {"error": "quantity en az 1 olmalı."}
if book["stock"] < quantity:
conn.close()
return {"error": f"Yetersiz stok. '{book['title']}' için mevcut stok: {book['stock']}."}
now = datetime.now(timezone.utc).isoformat()
cur = conn.execute(
"INSERT INTO orders (book_id, quantity, customer_name, status, created_at) VALUES (?, ?, ?, ?, ?)",
(book_id, quantity, customer_name, "confirmed", now),
)
conn.execute(
"UPDATE books SET stock = stock - ? WHERE id = ?", (quantity, book_id)
)
conn.commit()
order_id = cur.lastrowid
conn.close()
return {
"order_id": order_id,
"book_title": book["title"],
"quantity": quantity,
"customer_name": customer_name,
"total_price": round(book["price"] * quantity, 2),
"status": "confirmed",
}
def check_order_status(order_id: int) -> dict:
conn = get_connection()
row = conn.execute(
"""
SELECT orders.id AS order_id, orders.quantity, orders.customer_name,
orders.status, orders.created_at, books.title AS book_title
FROM orders JOIN books ON orders.book_id = books.id
WHERE orders.id = ?
""",
(order_id,),
).fetchone()
conn.close()
if not row:
return {"error": f"order_id {order_id} bulunamadı."}
return dict(row)
init_db()