moai/.planning/phases/03-project-crud/03-03-PLAN.md
Mikkel Georgsen afab4f84e2 docs(03-03): complete project models/delete plan
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 18:55:52 +00:00

3.3 KiB

phase plan type status completed
03-project-crud 03 execute complete 2026-01-16
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.

<execution_context> ~/.claude/get-shit-done/workflows/execute-phase.md ~/.claude/get-shit-done/templates/summary.md </execution_context>

@.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

<success_criteria>

  • 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) </success_criteria>
After completion, create `.planning/phases/03-project-crud/03-03-SUMMARY.md`

Summary should note M2 milestone completion and readiness for Phase 4 (Single Model Q&A).