# Tasks: Database Models

## Task 1: Create project structure and configuration
- [x] Create `apps/api/src/models/__init__.py`
- [x] Create `apps/api/src/config.py` with pydantic-settings for database URL
- [x] Create `apps/api/src/database.py` with async engine and session

## Task 2: Create base model
- [x] Create `apps/api/src/models/base.py` with DeclarativeBase
- [x] Add UUID primary key mixin
- [x] Add timestamp mixin (created_at, updated_at)

## Task 3: Create User model
- [x] Create `apps/api/src/models/user.py`
- [x] Define User with all fields from spec
- [x] Add relationships to Project, SSHKey, UserConfig

## Task 4: Create Project model
- [x] Create `apps/api/src/models/project.py`
- [x] Define Project with all fields
- [x] Add relationships to User, GitRepository, SSHKey

## Task 5: Create GitRepository model
- [x] Create `apps/api/src/models/git_repository.py`
- [x] Define GitRepository with all fields
- [x] Add relationships to Project, User

## Task 6: Create SSHKey model
- [x] Create `apps/api/src/models/ssh_key.py`
- [x] Define SSHKey with all fields
- [x] Add relationships to User, Project

## Task 7: Create UserConfig model
- [x] Create `apps/api/src/models/user_config.py`
- [x] Define UserConfig with JSONB config field
- [x] Add relationship to User

## Task 8: Initialize Alembic
- [x] Create Alembic scaffolding equivalent to `alembic init`
- [x] Configure `alembic/env.py` for async
- [x] Update `alembic.ini` with correct URL

## Task 9: Create initial migration
- [x] Generate migration creating all tables
- [x] Verify migration is correct

## Task 10: Create seed script
- [x] Create `apps/api/src/scripts/seed.py`
- [x] Add test user and sample data payload helper
- [x] Make script runnable

## Task 11: Create tests
- [x] Create `apps/api/tests/test_models.py`
- [x] Test model creation and relationships
- [x] Test async database operations

## Task 12: Run quality gates
- [x] Run `pytest` - all tests pass
- [x] Run `mypy .` - no type errors
- [x] Run `ruff check .` - no lint errors

## Runtime Verification

- [x] Run migrations against a live PostgreSQL instance to verify end-to-end database execution.
