All files / src/lib/api-docs/endpoints/dev sprints.ts

100% Statements 157/157
100% Branches 0/0
100% Functions 0/0
100% Lines 157/157

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 1581x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
/**
 * Dev Sprints Endpoints
 * Development sprint management endpoints
 */
 
import type { ApiEndpoint } from '@/types/api-docs';
 
export const devSprintsEndpoints: ApiEndpoint[] = [
  {
    id: 'dev-sprints-list',
    method: 'GET',
    path: '/api/dev/sprints',
    summary: 'List sprints',
    description: 'Returns sprints with progress stats',
    category: 'dev-projects',
    requiresAuth: true,
    adminOnly: true,
    parameters: [
      { name: 'projectId', type: 'string', required: false, location: 'query', description: 'Filter by project' },
      { name: 'status', type: 'string', required: false, location: 'query', description: 'Filter by status' },
      { name: 'page', type: 'number', required: false, location: 'query', description: 'Page number' },
      { name: 'limit', type: 'number', required: false, location: 'query', description: 'Items per page' },
    ],
    responses: [
      { status: 200, description: 'Paginated list of sprints' },
    ],
  },
  {
    id: 'dev-sprints-create',
    method: 'POST',
    path: '/api/dev/sprints',
    summary: 'Create sprint',
    description: 'Creates a new sprint (checks for date overlaps)',
    category: 'dev-projects',
    requiresAuth: true,
    adminOnly: true,
    requestBody: {
      contentType: 'application/json',
      fields: [
        { name: 'name', type: 'string', required: true, description: 'Sprint name' },
        { name: 'goal', type: 'string', required: false, description: 'Sprint goal' },
        { name: 'projectId', type: 'string', required: true, description: 'Project ID' },
        { name: 'startDate', type: 'string', required: true, description: 'Start date (ISO)' },
        { name: 'endDate', type: 'string', required: true, description: 'End date (ISO)' },
      ],
    },
    responses: [
      { status: 201, description: 'Sprint created' },
      { status: 400, description: 'Overlapping sprint exists' },
    ],
  },
  {
    id: 'dev-sprints-get',
    method: 'GET',
    path: '/api/dev/sprints/{id}',
    summary: 'Get sprint',
    description: 'Returns sprint with tickets and detailed stats',
    category: 'dev-projects',
    requiresAuth: true,
    adminOnly: true,
    parameters: [
      { name: 'id', type: 'string', required: true, location: 'path', description: 'Sprint ID' },
    ],
    responses: [
      { status: 200, description: 'Sprint with stats' },
      { status: 404, description: 'Sprint not found' },
    ],
  },
  {
    id: 'dev-sprints-update',
    method: 'PATCH',
    path: '/api/dev/sprints/{id}',
    summary: 'Update sprint',
    description: 'Updates sprint (only one active per project)',
    category: 'dev-projects',
    requiresAuth: true,
    adminOnly: true,
    parameters: [
      { name: 'id', type: 'string', required: true, location: 'path', description: 'Sprint ID' },
    ],
    requestBody: {
      contentType: 'application/json',
      fields: [
        { name: 'name', type: 'string', required: false, description: 'Sprint name' },
        { name: 'goal', type: 'string', required: false, description: 'Sprint goal' },
        { name: 'status', type: 'string', required: false, description: 'Status', enum: ['PLANNING', 'ACTIVE', 'COMPLETED', 'CANCELLED'] },
        { name: 'startDate', type: 'string', required: false, description: 'Start date' },
        { name: 'endDate', type: 'string', required: false, description: 'End date' },
      ],
    },
    responses: [
      { status: 200, description: 'Sprint updated' },
      { status: 400, description: 'Another active sprint exists' },
      { status: 404, description: 'Sprint not found' },
    ],
  },
  {
    id: 'dev-sprints-delete',
    method: 'DELETE',
    path: '/api/dev/sprints/{id}',
    summary: 'Delete sprint',
    description: 'Deletes sprint (unlinks tickets)',
    category: 'dev-projects',
    requiresAuth: true,
    adminOnly: true,
    parameters: [
      { name: 'id', type: 'string', required: true, location: 'path', description: 'Sprint ID' },
    ],
    responses: [
      { status: 200, description: 'Sprint deleted' },
      { status: 404, description: 'Sprint not found' },
    ],
  },
  {
    id: 'dev-sprints-start',
    method: 'POST',
    path: '/api/dev/sprints/{id}/start',
    summary: 'Start sprint',
    description: 'Starts a sprint (only one active per project)',
    category: 'dev-projects',
    requiresAuth: true,
    adminOnly: true,
    parameters: [
      { name: 'id', type: 'string', required: true, location: 'path', description: 'Sprint ID' },
    ],
    responses: [
      { status: 200, description: 'Sprint started' },
      { status: 400, description: 'Another sprint is active' },
      { status: 404, description: 'Sprint not found' },
    ],
  },
  {
    id: 'dev-sprints-complete',
    method: 'POST',
    path: '/api/dev/sprints/{id}/complete',
    summary: 'Complete sprint',
    description: 'Completes a sprint and optionally moves incomplete tickets',
    category: 'dev-projects',
    requiresAuth: true,
    adminOnly: true,
    parameters: [
      { name: 'id', type: 'string', required: true, location: 'path', description: 'Sprint ID' },
    ],
    requestBody: {
      contentType: 'application/json',
      fields: [
        { name: 'moveIncompleteToSprintId', type: 'string', required: false, description: 'Sprint ID to move incomplete tickets to' },
        { name: 'moveIncompleteToBacklog', type: 'boolean', required: false, description: 'Move incomplete tickets to backlog' },
      ],
    },
    responses: [
      { status: 200, description: 'Sprint completed' },
      { status: 400, description: 'Sprint not active' },
      { status: 404, description: 'Sprint not found' },
    ],
  },
];