@startuml

title Feedback Admin API Flow

actor externalApp
participant FEEDBACK_ADMIN
participant MYSQL
participant JIRA

group Get Capabilities

externalApp -> FEEDBACK_ADMIN: Get Capabilities ('enabled', 'disabled', 'all')
FEEDBACK_ADMIN -> MYSQL: Select...
MYSQL --> FEEDBACK_ADMIN: Result Set
FEEDBACK_ADMIN --> externalApp: 200 - Result Set

end

group Add Capability

externalApp -> FEEDBACK_ADMIN: Add Capability (capability data)
FEEDBACK_ADMIN -> JIRA: Validate 'Assignee'
JIRA --> FEEDBACK_ADMIN: Validation Status

  alt Validation Successful

  FEEDBACK_ADMIN -> MYSQL: Select UUID
  MYSQL --> FEEDBACK_ADMIN
  FEEDBACK_ADMIN -> MYSQL: Insert
  MYSQL --> FEEDBACK_ADMIN
  FEEDBACK_ADMIN --> externalApp: 200 - UUID of new Capability

  else Not a valid JIRA Id

    FEEDBACK_ADMIN --> externalApp: 400 - Error Structure

  end

end

group Update Capability

externalApp -> FEEDBACK_ADMIN: Update Capability (capability id/data)
FEEDBACK_ADMIN -> JIRA: Validate 'Assignee'
JIRA --> FEEDBACK_ADMIN: Validation Status

  alt Validation Successful

  FEEDBACK_ADMIN -> MYSQL: Update
  MYSQL --> FEEDBACK_ADMIN
  
    alt Impacted only a single row
      FEEDBACK_ADMIN --> externalApp: 200 - Success
    else
      FEEDBACK_ADMIN --> externalApp: 400 - Error Structure
    end

  else Not a valid JIRA Id

    FEEDBACK_ADMIN --> externalApp: 400 - Error Structure

  end

end

group Delete Capability

externalApp -> FEEDBACK_ADMIN: Delete Capability (capability id)
FEEDBACK_ADMIN -> MYSQL: Delete
MYSQL --> FEEDBACK_ADMIN

alt Impacted only a single row
  FEEDBACK_ADMIN --> externalApp: 200 - Success
else
  FEEDBACK_ADMIN --> externalApp: 400 - Error Structure
end

end

@enduml