Create Sprint entity and CRUD operations #27

Closed
opened 2025-12-29 23:47:13 +00:00 by cardosofelipe · 0 comments

Description

Implement Sprint entity for organizing work into time-boxed iterations.

Requirements

Entity Fields

class Sprint(Base):
    id: UUID
    project_id: UUID  # FK to Project

    # Sprint Info
    name: str
    number: int  # Sequential sprint number
    goal: Optional[str]

    # Dates
    start_date: date
    end_date: date

    # Status
    status: SprintStatus

    # Velocity
    planned_points: Optional[int]
    completed_points: Optional[int]

    # Relationships
    issues: List[Issue]

    # Timestamps
    created_at: datetime
    updated_at: datetime

Enums

class SprintStatus(str, Enum):
    PLANNED = "planned"
    ACTIVE = "active"
    COMPLETED = "completed"
    CANCELLED = "cancelled"

CRUD Operations

  • Standard CRUD
  • get_active(db, project_id: UUID) -> Optional[Sprint]
  • get_by_project(db, project_id: UUID) -> List[Sprint]
  • start_sprint(db, id: UUID) -> Sprint
  • complete_sprint(db, id: UUID) -> Sprint
  • get_next_number(db, project_id: UUID) -> int

Tests

  • CRUD operations
  • Status transitions
  • Sprint overlap prevention
  • Velocity calculation

Acceptance Criteria

  • Model with all fields
  • Migration created
  • CRUD operations
  • Business logic (start, complete)
  • Pydantic schemas
  • Unit tests with >90% coverage

Technical Notes

  • Reference: ADR-012 (Client approval flow)
  • Only one sprint can be ACTIVE per project

Dependencies

  • Depends on: #23 (Project), #26 (Issue)

Assignable To

backend-engineer agent

## Description Implement Sprint entity for organizing work into time-boxed iterations. ## Requirements ### Entity Fields ```python class Sprint(Base): id: UUID project_id: UUID # FK to Project # Sprint Info name: str number: int # Sequential sprint number goal: Optional[str] # Dates start_date: date end_date: date # Status status: SprintStatus # Velocity planned_points: Optional[int] completed_points: Optional[int] # Relationships issues: List[Issue] # Timestamps created_at: datetime updated_at: datetime ``` ### Enums ```python class SprintStatus(str, Enum): PLANNED = "planned" ACTIVE = "active" COMPLETED = "completed" CANCELLED = "cancelled" ``` ### CRUD Operations - Standard CRUD - `get_active(db, project_id: UUID) -> Optional[Sprint]` - `get_by_project(db, project_id: UUID) -> List[Sprint]` - `start_sprint(db, id: UUID) -> Sprint` - `complete_sprint(db, id: UUID) -> Sprint` - `get_next_number(db, project_id: UUID) -> int` ### Tests - CRUD operations - Status transitions - Sprint overlap prevention - Velocity calculation ## Acceptance Criteria - [ ] Model with all fields - [ ] Migration created - [ ] CRUD operations - [ ] Business logic (start, complete) - [ ] Pydantic schemas - [ ] Unit tests with >90% coverage ## Technical Notes - Reference: ADR-012 (Client approval flow) - Only one sprint can be ACTIVE per project ## Dependencies - Depends on: #23 (Project), #26 (Issue) ## Assignable To backend-engineer agent
cardosofelipe added the backenddatabasephase-1 labels 2025-12-29 23:49:59 +00:00
Sign in to join this conversation.