๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ“Œ API Detail Design Document

1. API Informationโ€‹

  • API Name: Collect jira issue data
  • Module/Service: amdp-ags-dashboard-backend
  • Author: Reus
  • Created Date: 2025/08/18
  • Last Updated: 2025/08/18

2. Overviewโ€‹

  • Purpose: API collect data issue on jira server
  • Description: Collect branch data

3. Endpoint Specificationโ€‹

  • Method: POST
  • URL: /dashboard/collect/jira-issue
  • Headers:
    • Authorization: Bearer <token user>
    • Content-Type: application/json

Query Paramsโ€‹

NameTypeRequiredDescriptionExample

Path Paramsโ€‹

NameTypeRequiredDescriptionExample

Request Bodyโ€‹

{
"branch": "main",
"collectFrom": "2024-12-01",
"collectTo": "2024-12-15",
"host": "https://github.com",
"organizationId": "org456",
"projectId": 14245,
"projectName": "My Project",
"repositoryId": "repo123",
"repositoryName": "example-repo",
"token": "ghp_exampletoken123",
"jiraProjectName": "string",
"tool": "Jira"
}


4. Response Specificationโ€‹

Success Response (200/201)โ€‹

{"code": 200,"message": "Success"}

Error Response (400/401/404/500)โ€‹

{"code": 400,"message": "Bad Request"}

5. Sequence / Flow (Source)โ€‹

@startuml
actor Client
participant "Dashboard Service" as DS
queue "Request Queue" as Q
participant "Scheduler (5s)" as Sch
database "MongoDB\nstatusManagerCollection" as StatusDB
participant "Worker Pool (max=5)" as Worker
participant "Jira API" as Jira
database "MongoDB\njiraIssueCollection" as IssueDB


Client -> DS: POST /collectJiraIssueData\n{projectKey, collectFrom, collectTo, ...}
activate DS
DS -> Q: Push collect request
DS -> StatusDB: Insert status = "waiting for sync"
DS --> Client: 200 OK\n{ "message": "Request queued" }
deactivate DS


Sch -> Q: Poll request (FIFO)
Q --> Sch: Request (if available)


alt If request found
Sch -> Worker: Dispatch request (max 5 parallel)
activate Worker
Worker -> StatusDB: Update status = "in sync"
Worker -> Jira: Fetch issue data\\n(using token, projectKey, filter)
activate Jira
Jira --> Worker: Issue data (JSON)
deactivate Jira
Worker -> IssueDB: Insert issue data
Worker -> StatusDB: Update status = "success"
deactivate Worker

else No request
Sch -> Sch: Wait 5s
end


Worker -> StatusDB: Update status = "failed" (on error)

@enduml

6. Sequence / Flow (Image)โ€‹


7. Dependenciesโ€‹

  • DB tables:

    • jiraIssueCollection
  • External service call:

  • Message broker/topic:


8. Security & Performance Considerationsโ€‹

  • Authentication & Authorization
  • Rate limit / Throttling
  • Caching
  • Timeout & Retry logic

9. Test Cases (basic)โ€‹

CaseInputExpected OutputNotes
Valid request{...}200 + data
Missing param{}400 error
Unauthorized401 error

10. Change Historyโ€‹

VersionDateAuthorChange