Problem
Issue handlers (Get, List, Create, Update, Delete, UpdateStatus) do not return Result to the API layer. They throw exceptions instead of returning typed results. They also do runtime ObjectId.TryParse() which should move to the validation layer (handled by Issue #1).
Depends On
Depends on: Foundation issue (standardize ObjectId in Shared commands/queries)
Files to Modify
- src/Api/Handlers/Issues/GetIssueHandler.cs — return Task<Result>
- src/Api/Handlers/Issues/ListIssuesHandler.cs — return Task<Result<IReadOnlyList>>
- src/Api/Handlers/Issues/CreateIssueHandler.cs — return Task<Result>
- src/Api/Handlers/Issues/UpdateIssueHandler.cs — return Task<Result>
- src/Api/Handlers/Issues/DeleteIssueHandler.cs — return Task<Result>
- src/Api/Handlers/Issues/UpdateIssueStatusHandler.cs — return Task<Result>
- src/Api/Handlers/Issues/IssueEndpoints.cs — map Result → HTTP responses (200/201/404/409/500)
Acceptance Criteria
Problem
Issue handlers (Get, List, Create, Update, Delete, UpdateStatus) do not return Result to the API layer. They throw exceptions instead of returning typed results. They also do runtime ObjectId.TryParse() which should move to the validation layer (handled by Issue #1).
Depends On
Depends on: Foundation issue (standardize ObjectId in Shared commands/queries)
Files to Modify
Acceptance Criteria