Pipelinen parannuksia building blockeilla

This commit is contained in:
Jaakko Vanhala
2026-04-12 18:48:14 +03:00
parent c1a5f8aff5
commit b2ee8b9031
175 changed files with 13311 additions and 237 deletions

View File

@@ -0,0 +1,142 @@
# 2 — Coder (coder) — schemas.py
**Malli:** `qwen-coder`
## System Prompt
```
You are an expert Python developer. Write complete, production-ready code.
CRITICAL RULES:
1. Include ALL imports at the top of every file
2. Import from other project files: from models import User, SessionLocal
3. Pydantic schemas use different names than SQLAlchemy models: UserCreate, UserResponse (not User)
4. SQLAlchemy engine: create_engine(url, connect_args={"check_same_thread": False})
5. SessionLocal: sessionmaker(autocommit=False, autoflush=False, bind=engine)
6. FastAPI dependencies: def get_db(): db = SessionLocal(); try: yield db; finally: db.close()
7. Pydantic v2: use model_dump() not dict(), class Config: from_attributes = True
8. All CRUD endpoints: POST (201), GET list, GET by id, PUT, DELETE (204)
NEVER:
- Add explanations or comments like "# Add routes here"
- Leave placeholder code or TODO comments
- Use Flask syntax (app.run) in FastAPI projects
- Forget to import from other project files
- Use requirements.txt or Poetry — always use pyproject.toml with [project] format (PEP 621)
- Use pip install — use uv (e.g. uv run uvicorn main:app --reload)
```
## Syöte
```
You are an expert Python developer. Write complete, production-ready code.
CRITICAL RULES:
1. Include ALL imports at the top of every file
2. Import from other project files: from models import User, SessionLocal
3. Pydantic schemas use different names than SQLAlchemy models: UserCreate, UserResponse (not User)
4. SQLAlchemy engine: create_engine(url, connect_args={"check_same_thread": False})
5. SessionLocal: sessionmaker(autocommit=False, autoflush=False, bind=engine)
6. FastAPI dependencies: def get_db(): db = SessionLocal(); try: yield db; finally: db.close()
7. Pydantic v2: use model_dump() not dict(), class Config: from_attributes = True
8. All CRUD endpoints: POST (201), GET list, GET by id, PUT, DELETE (204)
NEVER:
- Add explanations or comments like "# Add routes here"
- Leave placeholder code or TODO comments
- Use Flask syntax (app.run) in FastAPI projects
- Forget to import from other project files
- Use requirements.txt or Poetry — always use pyproject.toml with [project] format (PEP 621)
- Use pip install — use uv (e.g. uv run uvicorn main:app --reload)
EXAMPLE of schemas.py (for a different project, adapt to this one):
```
from pydantic import BaseModel
class ItemCreate(BaseModel):
name: str
description: str | None = None
class ItemResponse(ItemCreate):
id: int
class Config:
from_attributes = True
```
Already written files in THIS project:
--- models.py ---
from sqlalchemy import create_engine, Column, Integer, String, Date, Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "sqlite:///./todo.db"
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class Todo(Base):
__tablename__ = "todos"
id = Column(Integer, primary_key=True, index=True)
title = Column(String(100), nullable=False)
description = Column(String(500))
due_date = Column(Date, nullable=False)
status = Column(Enum('pending', 'completed'), default='pending')
PROJECT REQUIREMENTS (from product owner):
1. **PROJECT NAME:** Todo-sovellus
2. **GOAL:** A simple task manager for individuals to keep track of their daily tasks and manage them efficiently.
3. **CORE FEATURES:**
- Create new todos with title, description, due date.
- Read/View all todos or a single todo by ID.
- Update existing todos (title, description, status).
- Delete completed or unnecessary todos.
- Filter todos by status (e.g., pending, completed).
4. **DATA MODEL:**
- Todo
- id (integer, primary key)
- title (string)
- description (text)
- due_date (date)
- status (enum: 'pending', 'completed')
5. **API ENDPOINTS:**
- GET /todos: Retrieve all todos.
- GET /todos/{id}: Retrieve a single todo by ID.
- POST /todos: Create a new todo.
- PUT /todos/{id}: Update an existing todo.
- DELETE /todos/{id}: Delete a todo.
6. **CONSTRAINTS:**
- Must use SQLite as the database.
- No authentication required for accessing endpoints.
- Implement unit tests and integration tests to ensure functionality.
NOW write "schemas.py" for THIS project: Todo-sovellus FastAPI + SQLite, CRUD-endpointit ja testit
Create Pydantic schemas that match the SQLAlchemy model:
- Create schema: fields without id (user provides these)
- Response schema: inherits from Create, adds id
- Add class Config with from_attributes = True (required for SQLAlchemy ORM)
Adapt to the project requirements. Import from already written files. Write ONLY the code, no explanations.
```
## Tulos
```
from pydantic import BaseModel
class TodoCreate(BaseModel):
title: str
description: str | None = None
due_date: date
status: str = 'pending'
class TodoResponse(TodoCreate):
id: int
class Config:
from_attributes = True
```