App responsibilities
The board
- Offer up your categories and their nodes (e.g. location, classification for Seek), so the mapper and UI can access them
- Offer up a UI (user-SSO protected) to set the fields (description, title, upload video, etc.)
- Store the data from the UI above, for a posting ID (single job may be posted multiple times)
- Periodically (e.g. when there are new postings) push the postings into the mothership
Periodically (e.g. every 6 hours) scan for closed jobs where you may have missed the delta pings
API flow
note right of mapper: user opens app
note right of mapper: mapper enumerates boards
mapper->board: GET /boards/forApp
mapper->board2: GET /boards/forApp
note right of mapper: mapper gets all nodes\nfrom tenant
mapper->board: GET /categories
mapper->board: GET /categories/byID/{}
mapper->board: GET /categories/byID/{}/values
note right of mapper: user starts mapping\nfor first board
note right of mapper: mapper gets all nodes from board
mapper->board: GET /jobBoards/forApp/categories
mapper->board: GET /jobBoards/forApp/categories/byID/{}
mapper->board: GET /jobBoards/forApp/categories/byID/{}/values
note right of mapper: user maps categories
note right of mapper: user maps nodes
User clicks in the job panel to post the job to a job board for first time
note right of poster: poster grabs common details:
note right of poster: get title, description
poster->ats: GET /jobs/byID/{}
note right of poster: get category drop down values
poster->board: GET /jobBoards/forApp/categories
poster->board: GET /jobBoards/forApp/categories/byID/{}
poster->board: GET /jobBoards/forApp/categories/byID/{}/values
note right of poster: get mappings (to set defaults)
poster->mapper: POST /jobBoards/forApp/{app}/mappings
note right of poster: poster creates a draft posting object\nwith values as above
note right of poster: get link to board's\niframe-ed posting UI
poster->board: GET /jobBoards/forApp/postingUI/byID/{posting}
note right of poster: UI can now be shown. User edits,\nclicks save. Client-side message\nsignals board UI to save\nit's own values.
note left of board: board saves its own\nvalues against the posting
board->poster: PATCH /jobBoards/postings/byID/{}/boardDetails
note right of poster: poster signals that postings\nhave changed (should this be "tenantDeltaPings"?)
poster->board: POST /jobBoards/postings/byID/{}/deltaPings
note right of poster: poster updates mothership
poster->mothership: send postings across in bulk or individually
note left of ats: job closes on ATS
ats->poster: /jobs/open/externally/byID/{id}/deltaPings
User clicks to take down a posting