---
phase: 03-project-crud
plan: 03
type: execute
---
Implement project model configuration and deletion commands to complete M2 milestone.
Purpose: Enable users to configure which AI models a project uses and delete unwanted projects.
Output: Working /project models and /project delete commands, completing full Project CRUD.
~/.claude/get-shit-done/workflows/execute-phase.md
~/.claude/get-shit-done/templates/summary.md
@.planning/PROJECT.md
@.planning/ROADMAP.md
@.planning/STATE.md
# Prior plan context
@.planning/phases/03-project-crud/03-02-SUMMARY.md
# Relevant source files
@src/moai/core/services/project.py
@src/moai/bot/handlers/projects.py
**Established patterns:**
- Service layer handles database operations
- Handlers are thin, delegate to services
- user_data["selected_project_id"] for current project
Task 1: Add update_models and delete_project to service
src/moai/core/services/project.py
Add functions to project service:
- update_project_models(project_id: str, models: list[str]) -> Project | None:
Update project's models list, return updated project or None if not found.
- delete_project(project_id: str) -> bool:
Delete project by ID, return True if deleted, False if not found.
Cascade delete will handle discussions/rounds/messages via SQLAlchemy relationship config.
python -c "from moai.core.services.project import update_project_models, delete_project"
Both functions exist and are importable
Task 2: Implement /project models and /project delete handlers
src/moai/bot/handlers/projects.py
Extend project_command handler to support:
/project models claude,gpt,gemini:
- Require project to be selected first
- Parse comma-separated model names from args
- Update via service, confirm: "Models updated: claude, gpt, gemini"
- If no args: show current models list
/project delete :
- Require explicit project ID (not name) for safety
- Delete via service, confirm: "Deleted project: {name}"
- If deleted project was selected, clear user_data["selected_project_id"]
- If not found: "Project not found."
Update /status handler (if exists) to show selected project info now that project CRUD is complete.
ruff check src/moai/bot/handlers/projects.py
/project models updates models, /project delete removes project, M2 milestone complete
Before declaring plan complete:
- [ ] `ruff check src/moai/core/services/ src/moai/bot/handlers/` passes
- [ ] All service functions importable
- [ ] Full CRUD cycle works: new → select → info → models → delete
- All tasks completed
- All verification checks pass
- /project models configures AI models for project
- /project delete removes project with confirmation
- M2 milestone complete (full project CRUD via Telegram)