Files
agentic-studio/zipit/todo_new/prompts/2_coder_schemas.py.md
2026-04-12 18:48:14 +03:00

5.6 KiB

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 — including stdlib (from datetime import date, etc.)
2. Import from other project files: from models import Todo, SessionLocal
3. NEVER use relative imports (from .models) — ALWAYS absolute: from models import ...
4. Pydantic schemas use different names than SQLAlchemy models: TodoCreate, TodoResponse (not Todo)
5. SQLAlchemy engine: create_engine(url, connect_args={"check_same_thread": False})
6. SessionLocal: sessionmaker(autocommit=False, autoflush=False, bind=engine)
7. FastAPI dependencies: def get_db(): db = SessionLocal(); try: yield db; finally: db.close()
8. Pydantic v2: use model_dump() not dict(), class Config: from_attributes = True
9. All CRUD endpoints: POST (201), GET list, GET by id, PUT, DELETE (204)

NEVER:
- Leave out any import (EVERY type you use must be imported)
- Use relative imports (from .models)
- Add explanations or comments
- Leave placeholder code or TODO comments
- Use Flask syntax (app.run) in FastAPI projects
- 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 — including stdlib (from datetime import date, etc.)
2. Import from other project files: from models import Todo, SessionLocal
3. NEVER use relative imports (from .models) — ALWAYS absolute: from models import ...
4. Pydantic schemas use different names than SQLAlchemy models: TodoCreate, TodoResponse (not Todo)
5. SQLAlchemy engine: create_engine(url, connect_args={"check_same_thread": False})
6. SessionLocal: sessionmaker(autocommit=False, autoflush=False, bind=engine)
7. FastAPI dependencies: def get_db(): db = SessionLocal(); try: yield db; finally: db.close()
8. Pydantic v2: use model_dump() not dict(), class Config: from_attributes = True
9. All CRUD endpoints: POST (201), GET list, GET by id, PUT, DELETE (204)

NEVER:
- Leave out any import (EVERY type you use must be imported)
- Use relative imports (from .models)
- Add explanations or comments
- Leave placeholder code or TODO comments
- Use Flask syntax (app.run) in FastAPI projects
- 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, DateTime, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime

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 Task(Base):
    __tablename__ = "tasks"
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String(100), nullable=False)
    description = Column(Text)
    status = Column(String(20), default="pending")
    created_at = Column(DateTime, default=datetime.utcnow)

Base.metadata.create_all(bind=engine)

PROJECT REQUIREMENTS (from product owner):
### PROJECT NAME: Todo-App

### GOAL:
Create a simple task manager application for individuals to keep track of their daily tasks.

### CORE FEATURES:
1. **Add Task**: Users can add new tasks with title and description.
2. **View Tasks**: Users can see all their tasks in a list.
3. **Edit Task**: Users can update the details of an existing task.
4. **Delete Task**: Users can remove tasks they no longer need.
5. **Mark as Complete**: Users can mark tasks as completed.
6. **Filter Tasks**: Users can filter tasks by status (e.g., pending, completed).
7. **Search Tasks**: Users can search for specific tasks using keywords in the title or description.

### DATA MODEL:
- **Tasks**
  - `id` (integer, primary key)
  - `title` (string, required)
  - `description` (text)
  - `status` (enum: "pending", "completed")
  - `created_at` (timestamp)

### API ENDPOINTS:
1. **GET /tasks**: Retrieve a list of all tasks.
2. **POST /tasks**: Create a new task with title, description, and status.
3. **PUT /tasks/{id}**: Update an existing task by ID.
4. **DELETE /tasks/{id}**: Delete a task by ID.
5. **GET /tasks/status/{status}**: Retrieve tasks filtered by status.

### CONSTRAINTS:
- Must use SQLite as the database.
- No authentication required for simplicity.

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 TaskCreate(BaseModel):
    title: str
    description: str | None = None
    status: str = "pending"

class TaskResponse(TaskCreate):
    id: int

    class Config:
        from_attributes = True