Initial commit: FastAPI scaffolding, SQLite schema, and basic models\n\n- Add main.py with DB initialization and Pydantic models\n- Add requirements.txt (fastapi, uvicorn, sqlalchemy, pydantic)\n- Update README with project description and setup\n\nOperation: shopping-list-api-2026-04-05\nWI1: Project setup and database design

This commit is contained in:
Marcus A.
2026-04-05 23:31:25 +00:00
parent 8421db833a
commit 8db5262f46
3 changed files with 76 additions and 2 deletions

View File

@@ -1,3 +1,14 @@
# shopping-list-api # Shopping List API
Simple internal API to track shopping list items using SQLite and FastAPI A simple internal API to track shopping list items using SQLite and FastAPI.
## Setup
```bash
pip install -r requirements.txt
uvicorn main:app --reload
```
## API
Endpoints will be documented after implementation.

59
main.py Normal file
View File

@@ -0,0 +1,59 @@
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import sqlite3
from datetime import datetime
app = FastAPI()
DB_PATH = "shopping.db"
def init_db():
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute("""
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
sku TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
c.execute("""
CREATE TABLE IF NOT EXISTS lists (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
c.execute("""
CREATE TABLE IF NOT EXISTS list_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
list_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (list_id) REFERENCES lists(id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES products(id)
)
""")
conn.commit()
conn.close()
@app.on_event("startup")
def startup():
init_db()
class Product(BaseModel):
name: str
sku: str | None = None
class List(BaseModel):
name: str
class ListItem(BaseModel):
product_id: int
quantity: int = 1
@app.get("/")
def read_root():
return {"message": "Shopping List API"}

4
requirements.txt Normal file
View File

@@ -0,0 +1,4 @@
fastapi
uvicorn
sqlalchemy
pydantic