Compare commits
3 Commits
913fd6ca22
...
24e7f0f6f4
| Author | SHA1 | Date | |
|---|---|---|---|
| 24e7f0f6f4 | |||
| 5b61102356 | |||
| e4d82835da |
@ -1,537 +0,0 @@
|
|||||||
# Bremen calling API
|
|
||||||
Version: _1.7.0_
|
|
||||||
Last change: _Nov 14, 2025_
|
|
||||||
|
|
||||||
## Introduction
|
|
||||||
|
|
||||||
This API allows users to interact with "Bremen calling" without an UI. Apart vom querying data via _GET_ endpoints users may create and update shipcalls, assign participants and update participant times for shipcalls.
|
|
||||||
|
|
||||||
Creating and updating times and shipcalls depend on the participant roles a user is assigned to. For example, if a participant has the role "AGENCY" they may change assignments _and_ create and update agency times. A participant with the role "PILOT" on the other hand may not change the assigments and only create/update times for the pilot.
|
|
||||||
|
|
||||||
### Authentication
|
|
||||||
- **ApiKey**: API key in `header` header named `Authorization`. This is a JWT Token that the caller receives upon login.
|
|
||||||
|
|
||||||
### Notes on this version
|
|
||||||
|
|
||||||
This version refers to _1.7_ whereas the public client currently has version _1.6_. This means that there is some functionality available in the API that cannot be accessed through the UI yet, specifically notifications.
|
|
||||||
|
|
||||||
There is no documentation for the structures returned by _GET_ requests but these can easily be determined via a single query.
|
|
||||||
|
|
||||||
## Ship Endpoints
|
|
||||||
|
|
||||||
### `DELETE /ships`
|
|
||||||
**Summary:** Delete a ship (logically).
|
|
||||||
A ship can only be logically deleted, since it is possible to have been used in previous shipcalls. On logical delete, the ship can no longer be selected in a new ship call.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | In | Type | Required | Description |
|
|
||||||
|------|----|------|----------|-------------|
|
|
||||||
| id | query | integer | Yes | **Id of ship**. *Example: 42*. Id of ship to be deleted. |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `GET /ships`
|
|
||||||
**Summary:** gets a list of ships
|
|
||||||
Gets a list of ships including logically deleted ships to be used with shipcalls
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: list of ships
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `POST /ships`
|
|
||||||
**Summary:** create a new ship entry
|
|
||||||
adds a new non-existing ship to the database. The ships IMO number is the unique identifier.
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
Ship details. **Do not** provide id parameter.
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| name | string | No | |
|
|
||||||
| imo | integer | No | |
|
|
||||||
| callsign | string | No | |
|
|
||||||
| participant_id | integer | No | Optional reference to participant (tug role) |
|
|
||||||
| length | number | No | |
|
|
||||||
| width | number | No | |
|
|
||||||
| is_tug | boolean | No | |
|
|
||||||
| bollard_pull | integer | No | |
|
|
||||||
| eni | integer | No | BSMD internal use |
|
|
||||||
| created | string | No | Readonly field set by the database when ship was created |
|
|
||||||
| modified | string | No | Readonly field set by the database when ship was last modified |
|
|
||||||
| deleted | boolean | No | marks the ship as logically deleted |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **201**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `PUT /ships`
|
|
||||||
**Summary:** Update a ship entry
|
|
||||||
Updating a ship entry. Please do not modify the IMO number. In that case please add a new entry.
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
Updated ship entry. The id parameter is **required**.
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| name | string | No | |
|
|
||||||
| imo | integer | No | |
|
|
||||||
| callsign | string | No | |
|
|
||||||
| participant_id | integer | No | Optional reference to participant (tug role) |
|
|
||||||
| length | number | No | |
|
|
||||||
| width | number | No | |
|
|
||||||
| is_tug | boolean | No | |
|
|
||||||
| bollard_pull | integer | No | |
|
|
||||||
| eni | integer | No | BSMD internal use |
|
|
||||||
| created | string | No | Readonly field set by the database when ship was created |
|
|
||||||
| modified | string | No | Readonly field set by the database when ship was last modified |
|
|
||||||
| deleted | boolean | No | marks the ship as logically deleted |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
## Shipcall Endpoints
|
|
||||||
|
|
||||||
### `GET /shipcalls`
|
|
||||||
**Summary:** Gets a list of ship calls
|
|
||||||
Get current ship calls
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | In | Type | Required | Description |
|
|
||||||
|------|----|------|----------|-------------|
|
|
||||||
| past_days | query | integer | No | number of days in the past to include in the result. *Example: 7*. |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: ship call list
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `POST /shipcalls`
|
|
||||||
**Summary:** Create a new ship call
|
|
||||||
A new shipcall is created without times at this point. This is ususally done by the BSMD or a participant with that particular role.
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
Creates a new ship call. **Do not** provide id parameter.
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| ship_id | integer | Yes | |
|
|
||||||
| port_id | integer | No | |
|
|
||||||
| type | string | Yes | Type of ship call |
|
|
||||||
| eta | string | No | |
|
|
||||||
| voyage | string | No | |
|
|
||||||
| etd | string | No | |
|
|
||||||
| arrival_berth_id | integer | No | |
|
|
||||||
| departure_berth_id | integer | No | |
|
|
||||||
| tug_required | boolean | No | |
|
|
||||||
| pilot_required | boolean | No | |
|
|
||||||
| flags | integer | No | |
|
|
||||||
| pier_side | boolean | No | |
|
|
||||||
| bunkering | boolean | No | |
|
|
||||||
| replenishing_terminal | boolean | No | |
|
|
||||||
| replenishing_lock | boolean | No | |
|
|
||||||
| draft | number | No | |
|
|
||||||
| tidal_window_from | string | No | |
|
|
||||||
| tidal_window_to | string | No | |
|
|
||||||
| rain_sensitive_cargo | boolean | No | |
|
|
||||||
| recommended_tugs | integer | No | |
|
|
||||||
| anchored | boolean | No | |
|
|
||||||
| moored_lock | boolean | No | |
|
|
||||||
| canceled | boolean | No | |
|
|
||||||
| evaluation | string | No | Evaluation of the ship call |
|
|
||||||
| evaluation_message | string | No | |
|
|
||||||
| time_ref_point | integer | No | Physical reference point for all times given in shipcall and depending times entries |
|
|
||||||
| participants | array<object> | No | |
|
|
||||||
| created | string | No | Readonly field set by the database when shipcall was created |
|
|
||||||
| modified | string | No | Readonly field set by the database when shipcall was last modified |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **201**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `PUT /shipcalls`
|
|
||||||
**Summary:** Updates a ship call
|
|
||||||
Updates a shipcall. Usually done if the participant assignments change.
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
Creates a new ship call. The id parameter is **required**.
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| ship_id | integer | Yes | |
|
|
||||||
| port_id | integer | No | |
|
|
||||||
| type | string | Yes | Type of ship call |
|
|
||||||
| eta | string | No | |
|
|
||||||
| voyage | string | No | |
|
|
||||||
| etd | string | No | |
|
|
||||||
| arrival_berth_id | integer | No | |
|
|
||||||
| departure_berth_id | integer | No | |
|
|
||||||
| tug_required | boolean | No | |
|
|
||||||
| pilot_required | boolean | No | |
|
|
||||||
| flags | integer | No | |
|
|
||||||
| pier_side | boolean | No | |
|
|
||||||
| bunkering | boolean | No | |
|
|
||||||
| replenishing_terminal | boolean | No | |
|
|
||||||
| replenishing_lock | boolean | No | |
|
|
||||||
| draft | number | No | |
|
|
||||||
| tidal_window_from | string | No | |
|
|
||||||
| tidal_window_to | string | No | |
|
|
||||||
| rain_sensitive_cargo | boolean | No | |
|
|
||||||
| recommended_tugs | integer | No | |
|
|
||||||
| anchored | boolean | No | |
|
|
||||||
| moored_lock | boolean | No | |
|
|
||||||
| canceled | boolean | No | |
|
|
||||||
| evaluation | string | No | Evaluation of the ship call |
|
|
||||||
| evaluation_message | string | No | |
|
|
||||||
| time_ref_point | integer | No | Physical reference point for all times given in shipcall and depending times entries |
|
|
||||||
| participants | array<object> | No | |
|
|
||||||
| created | string | No | Readonly field set by the database when shipcall was created |
|
|
||||||
| modified | string | No | Readonly field set by the database when shipcall was last modified |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
## Static Endpoints
|
|
||||||
|
|
||||||
### `GET /berths`
|
|
||||||
**Summary:** Gets a list of all berths registered
|
|
||||||
Returns a list of berths, including berths that are (logically) deleted
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: list of berths
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `GET /history`
|
|
||||||
**Summary:** History data
|
|
||||||
This endpoint returns a list of changes made to the specific shipcall
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | In | Type | Required | Description |
|
|
||||||
|------|----|------|----------|-------------|
|
|
||||||
| shipcall_id | query | integer | Yes | **Id of ship call**. *Example: 3*. Id given in ship call list |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: list of history entries
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `GET /notifications`
|
|
||||||
**Summary:** Gets a list of notifications pursuant to a specified participant and ship call
|
|
||||||
List of notifications (tbd)
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | In | Type | Required | Description |
|
|
||||||
|------|----|------|----------|-------------|
|
|
||||||
| shipcall_id | query | integer | No | **Id of ship call**. *Example: 52*. Id given in ship call list |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: notification list
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `GET /participants`
|
|
||||||
**Summary:** gets one or all participants
|
|
||||||
If no parameter is given, all participants are returned. The list can be used to display participant information in the context of ship calls.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | In | Type | Required | Description |
|
|
||||||
|------|----|------|----------|-------------|
|
|
||||||
| user_id | query | integer | No | **Id of user**. *Example: 2*. User id returned by verify call. |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: one or all participants as list
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **404**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `GET /ports`
|
|
||||||
**Summary:** Your GET endpoint
|
|
||||||
Returns a list of ports
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: list of ports
|
|
||||||
- **401**
|
|
||||||
- **403**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
## Times Endpoints
|
|
||||||
|
|
||||||
### `DELETE /times`
|
|
||||||
**Summary:** Delete a times entry for a ship call.
|
|
||||||
A times entry is typically deleted if the agent for example changes or removes the participant assignment for a particular role.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | In | Type | Required | Description |
|
|
||||||
|------|----|------|----------|-------------|
|
|
||||||
| id | query | integer | Yes | **Id of times**. *Example: 42*. Id of times entry to be deleted. |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `GET /times`
|
|
||||||
**Summary:** Gets list of times
|
|
||||||
Get all times assigned to a shipcall. These might not be complete.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | In | Type | Required | Description |
|
|
||||||
|------|----|------|----------|-------------|
|
|
||||||
| shipcall_id | query | integer | No | **Id**. *Example: 42*. Id of referenced ship call. |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: list of recorded times
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `POST /times`
|
|
||||||
**Summary:** Create a new times entry for a ship call
|
|
||||||
The times entry for a shipcall is created with reference to a participant. For each participant type there should be only one times data record.
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
Times entry that will be added to the ship call. **Do not** provide id parameter.
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| eta_berth | string | No | Arrival time at berth |
|
|
||||||
| eta_berth_fixed | boolean | No | If true, the eta is fixed and cannot be changed |
|
|
||||||
| etd_berth | string | No | departure time from berth |
|
|
||||||
| etd_berth_fixed | boolean | No | If true, the etd is fixed and cannot be changed |
|
|
||||||
| lock_time | string | No | arrival time at lock |
|
|
||||||
| lock_time_fixed | boolean | No | If true, the lock time is fixed and cannot be changed |
|
|
||||||
| zone_entry | string | No | Expected time of entry into the zone |
|
|
||||||
| zone_entry_fixed | boolean | No | If true, the zone entry time is fixed and cannot be changed |
|
|
||||||
| operations_start | string | No | Start time for terminal operations |
|
|
||||||
| operations_end | string | No | End time for terminal operations |
|
|
||||||
| remarks | string | No | Additional remarks |
|
|
||||||
| shipcall_id | integer | Yes | Reference to a shipcall id |
|
|
||||||
| participant_id | integer | Yes | Reference to a participant id |
|
|
||||||
| berth_id | integer | No | Reference to a berth id |
|
|
||||||
| berth_info | string | No | Additional info text for berth |
|
|
||||||
| pier_side | boolean | No | true if ship is rotated, false otherwise |
|
|
||||||
| participant_type | integer | No | |
|
|
||||||
| ata | string | No | ata can be set by mooring if actual times are different from planned |
|
|
||||||
| atd | string | No | atd can be set by mooring if actual times are different from planned |
|
|
||||||
| eta_interval_end | string | No | Optional end of the interval for the times eta entry |
|
|
||||||
| etd_interval_end | string | No | Optional end of the interval for the times etd entry |
|
|
||||||
| created | string | No | Readonly field set by the database when times record was created |
|
|
||||||
| modified | string | No | Readonly field set by the database when times record was last modified |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **201**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
### `PUT /times`
|
|
||||||
**Summary:** Update a times entry for a ship call
|
|
||||||
Updating a times entry for a ship for a particular participant. The times entries are required for a shipcall to pass the validation rules.
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
Times entry that will be added to the ship call. The id parameter is **required**.
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| eta_berth | string | No | Arrival time at berth |
|
|
||||||
| eta_berth_fixed | boolean | No | If true, the eta is fixed and cannot be changed |
|
|
||||||
| etd_berth | string | No | departure time from berth |
|
|
||||||
| etd_berth_fixed | boolean | No | If true, the etd is fixed and cannot be changed |
|
|
||||||
| lock_time | string | No | arrival time at lock |
|
|
||||||
| lock_time_fixed | boolean | No | If true, the lock time is fixed and cannot be changed |
|
|
||||||
| zone_entry | string | No | Expected time of entry into the zone |
|
|
||||||
| zone_entry_fixed | boolean | No | If true, the zone entry time is fixed and cannot be changed |
|
|
||||||
| operations_start | string | No | Start time for terminal operations |
|
|
||||||
| operations_end | string | No | End time for terminal operations |
|
|
||||||
| remarks | string | No | Additional remarks |
|
|
||||||
| shipcall_id | integer | Yes | Reference to a shipcall id |
|
|
||||||
| participant_id | integer | Yes | Reference to a participant id |
|
|
||||||
| berth_id | integer | No | Reference to a berth id |
|
|
||||||
| berth_info | string | No | Additional info text for berth |
|
|
||||||
| pier_side | boolean | No | true if ship is rotated, false otherwise |
|
|
||||||
| participant_type | integer | No | |
|
|
||||||
| ata | string | No | ata can be set by mooring if actual times are different from planned |
|
|
||||||
| atd | string | No | atd can be set by mooring if actual times are different from planned |
|
|
||||||
| eta_interval_end | string | No | Optional end of the interval for the times eta entry |
|
|
||||||
| etd_interval_end | string | No | Optional end of the interval for the times etd entry |
|
|
||||||
| created | string | No | Readonly field set by the database when times record was created |
|
|
||||||
| modified | string | No | Readonly field set by the database when times record was last modified |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
|
|
||||||
## User Endpoints
|
|
||||||
|
|
||||||
### `POST /login`
|
|
||||||
**Summary:** Returns a JWT session token and user data if successful
|
|
||||||
Perform login
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
Login credentials
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| username | string | Yes | |
|
|
||||||
| password | string | Yes | |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**: Successful response
|
|
||||||
- **400**
|
|
||||||
- **403**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
|
|
||||||
**Response 200 JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| participant_id | integer | No | |
|
|
||||||
| first_name | string | No | |
|
|
||||||
| last_name | string | No | |
|
|
||||||
| user_name | string | No | |
|
|
||||||
| user_phone | string | No | |
|
|
||||||
| user_email | string | No | |
|
|
||||||
| notify_email | boolean | No | |
|
|
||||||
| notify_whatsapp | boolean | No | |
|
|
||||||
| notify_signal | boolean | No | |
|
|
||||||
| notify_popup | boolean | No | |
|
|
||||||
| exp | number | No | |
|
|
||||||
| token | string | No | |
|
|
||||||
| notify_on | array<string> | No | |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### `PUT /user`
|
|
||||||
**Summary:** Update user details (first/last name, phone, password)
|
|
||||||
Update user information
|
|
||||||
|
|
||||||
#### Request Body
|
|
||||||
User details
|
|
||||||
|
|
||||||
**JSON Schema**
|
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
|
||||||
|-------|------|----------|-------------|
|
|
||||||
| id | integer | No | |
|
|
||||||
| old_password | string | No | |
|
|
||||||
| new_password | string | No | |
|
|
||||||
| first_name | string | No | |
|
|
||||||
| last_name | string | No | |
|
|
||||||
| user_phone | string | No | |
|
|
||||||
| user_email | string | No | |
|
|
||||||
| notify_email | boolean | No | |
|
|
||||||
| notify_popup | boolean | No | |
|
|
||||||
| notify_whatsapp | boolean | No | |
|
|
||||||
| notify_signal | boolean | No | |
|
|
||||||
| notify_on | array<string> | No | |
|
|
||||||
|
|
||||||
#### Responses
|
|
||||||
|
|
||||||
- **200**
|
|
||||||
- **400**
|
|
||||||
- **401**
|
|
||||||
- **500**
|
|
||||||
- **503**
|
|
||||||
---
|
|
||||||
@ -22,8 +22,6 @@ tags:
|
|||||||
- name: times
|
- name: times
|
||||||
- name: static
|
- name: static
|
||||||
- name: ship
|
- name: ship
|
||||||
- name: notification
|
|
||||||
- name: history
|
|
||||||
paths:
|
paths:
|
||||||
/login:
|
/login:
|
||||||
post:
|
post:
|
||||||
@ -32,7 +30,6 @@ paths:
|
|||||||
tags:
|
tags:
|
||||||
- user
|
- user
|
||||||
operationId: login
|
operationId: login
|
||||||
security: []
|
|
||||||
requestBody:
|
requestBody:
|
||||||
description: Login credentials
|
description: Login credentials
|
||||||
required: true
|
required: true
|
||||||
@ -259,7 +256,7 @@ paths:
|
|||||||
- shipcall
|
- shipcall
|
||||||
operationId: shipcallUpdate
|
operationId: shipcallUpdate
|
||||||
requestBody:
|
requestBody:
|
||||||
description: Updates a ship call. The id parameter is **required**.
|
description: Creates a new ship call. The id parameter is **required**.
|
||||||
required: true
|
required: true
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
@ -446,7 +443,7 @@ paths:
|
|||||||
- name: user_id
|
- name: user_id
|
||||||
in: query
|
in: query
|
||||||
required: false
|
required: false
|
||||||
description: '**Id of user**. *Example: 2*. User id returned by login call.'
|
description: '**Id of user**. *Example: 2*. User id returned by verify call.'
|
||||||
schema:
|
schema:
|
||||||
type: integer
|
type: integer
|
||||||
example: 2
|
example: 2
|
||||||
@ -584,7 +581,7 @@ paths:
|
|||||||
- times
|
- times
|
||||||
operationId: timesUpdate
|
operationId: timesUpdate
|
||||||
requestBody:
|
requestBody:
|
||||||
description: Times entry that will be updated for the ship call. The id parameter is **required**.
|
description: Times entry that will be added to the ship call. The id parameter is **required**.
|
||||||
required: true
|
required: true
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
@ -652,10 +649,10 @@ paths:
|
|||||||
$ref: '#/components/responses/503'
|
$ref: '#/components/responses/503'
|
||||||
/notifications:
|
/notifications:
|
||||||
get:
|
get:
|
||||||
summary: Gets a list of notifications pursuant to a specified ship call
|
summary: Gets a list of notifications pursuant to a specified participant and ship call
|
||||||
description: List of notifications (tbd)
|
description: List of notifications (tbd)
|
||||||
tags:
|
tags:
|
||||||
- notification
|
- static
|
||||||
operationId: notificationsGet
|
operationId: notificationsGet
|
||||||
parameters:
|
parameters:
|
||||||
- name: shipcall_id
|
- name: shipcall_id
|
||||||
@ -726,7 +723,7 @@ paths:
|
|||||||
description: This endpoint returns a list of changes made to the specific shipcall
|
description: This endpoint returns a list of changes made to the specific shipcall
|
||||||
summary: History data
|
summary: History data
|
||||||
tags:
|
tags:
|
||||||
- history
|
- static
|
||||||
operationId: historyGet
|
operationId: historyGet
|
||||||
parameters:
|
parameters:
|
||||||
- name: shipcall_id
|
- name: shipcall_id
|
||||||
@ -1759,11 +1756,10 @@ components:
|
|||||||
token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|
token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|
||||||
user_details:
|
user_details:
|
||||||
type: object
|
type: object
|
||||||
description: user metadata and editable fields
|
description: fields that a user may change
|
||||||
properties:
|
properties:
|
||||||
id:
|
id:
|
||||||
type: integer
|
type: integer
|
||||||
readOnly: true
|
|
||||||
example: 42
|
example: 42
|
||||||
old_password:
|
old_password:
|
||||||
type: string
|
type: string
|
||||||
|
|||||||
@ -89,7 +89,7 @@ def PutShipcalls():
|
|||||||
|
|
||||||
# validate the PUT shipcall data and the user's authority
|
# validate the PUT shipcall data and the user's authority
|
||||||
InputValidationShipcall.evaluate_put_data(user_data, loadedModel, content)
|
InputValidationShipcall.evaluate_put_data(user_data, loadedModel, content)
|
||||||
return impl.shipcalls.PutShipcalls(loadedModel, content)
|
return impl.shipcalls.PutShipcalls(loadedModel)
|
||||||
|
|
||||||
except ValidationError as ex:
|
except ValidationError as ex:
|
||||||
return create_validation_error_response(ex=ex, status_code=400)
|
return create_validation_error_response(ex=ex, status_code=400)
|
||||||
|
|||||||
@ -72,7 +72,7 @@ def PutTimes():
|
|||||||
|
|
||||||
# validate the request
|
# validate the request
|
||||||
InputValidationTimes.evaluate_put_data(user_data, loadedModel, content)
|
InputValidationTimes.evaluate_put_data(user_data, loadedModel, content)
|
||||||
return impl.times.PutTimes(loadedModel, content)
|
return impl.times.PutTimes(loadedModel)
|
||||||
|
|
||||||
except ValidationError as ex:
|
except ValidationError as ex:
|
||||||
return create_validation_error_response(ex=ex, status_code=400)
|
return create_validation_error_response(ex=ex, status_code=400)
|
||||||
|
|||||||
@ -185,7 +185,7 @@ def PostShipcalls(schemaModel):
|
|||||||
pooledConnection.close()
|
pooledConnection.close()
|
||||||
|
|
||||||
|
|
||||||
def PutShipcalls(schemaModel, original_payload=None):
|
def PutShipcalls(schemaModel):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
:param schemaModel: The deserialized dict of the request
|
:param schemaModel: The deserialized dict of the request
|
||||||
@ -209,12 +209,10 @@ def PutShipcalls(schemaModel, original_payload=None):
|
|||||||
|
|
||||||
was_canceled = theshipcall["canceled"]
|
was_canceled = theshipcall["canceled"]
|
||||||
|
|
||||||
provided_keys = set(original_payload.keys()) if isinstance(original_payload, dict) else None
|
# query = SQLQuery.get_shipcall_put(schemaModel)
|
||||||
|
query = "UPDATE shipcall SET "
|
||||||
update_clauses = []
|
isNotFirst = False
|
||||||
for key in schemaModel.keys():
|
for key in schemaModel.keys():
|
||||||
if provided_keys is not None and key not in provided_keys:
|
|
||||||
continue
|
|
||||||
param_key = key
|
param_key = key
|
||||||
if key == "id":
|
if key == "id":
|
||||||
continue
|
continue
|
||||||
@ -236,19 +234,19 @@ def PutShipcalls(schemaModel, original_payload=None):
|
|||||||
param_key = "evaluation_value"
|
param_key = "evaluation_value"
|
||||||
if key == "evaluation_value":
|
if key == "evaluation_value":
|
||||||
continue
|
continue
|
||||||
update_clauses.append(f"{key} = ?{param_key}?")
|
if isNotFirst:
|
||||||
|
query += ", "
|
||||||
|
isNotFirst = True
|
||||||
|
query += key + " = ?" + param_key + "? "
|
||||||
|
|
||||||
if update_clauses:
|
query += "WHERE id = ?id?"
|
||||||
query = "UPDATE shipcall SET " + ", ".join(update_clauses) + " WHERE id = ?id?"
|
|
||||||
commands.execute(query, param=schemaModel)
|
|
||||||
|
|
||||||
ship_id_value = schemaModel.get("ship_id") if (provided_keys is None or "ship_id" in provided_keys) else theshipcall["ship_id"]
|
affected_rows = commands.execute(query, param=schemaModel)
|
||||||
|
|
||||||
shipdata = get_ship_data_for_id(ship_id_value)
|
shipdata = get_ship_data_for_id(schemaModel["ship_id"])
|
||||||
message = shipdata['name']
|
message = shipdata['name']
|
||||||
type_value = schemaModel.get("type_value") if (provided_keys is None or "type" in provided_keys) else theshipcall["type"]
|
if "type_value" in schemaModel:
|
||||||
if type_value is not None:
|
match schemaModel["type_value"]:
|
||||||
match type_value:
|
|
||||||
case 1:
|
case 1:
|
||||||
message += " [ARRIVAL]"
|
message += " [ARRIVAL]"
|
||||||
case 2:
|
case 2:
|
||||||
@ -260,9 +258,6 @@ def PutShipcalls(schemaModel, original_payload=None):
|
|||||||
pquery = "SELECT id, participant_id, type FROM shipcall_participant_map where shipcall_id = ?id?"
|
pquery = "SELECT id, participant_id, type FROM shipcall_participant_map where shipcall_id = ?id?"
|
||||||
pdata = commands.query(pquery,param={"id" : schemaModel["id"]}) # existing list of assignments
|
pdata = commands.query(pquery,param={"id" : schemaModel["id"]}) # existing list of assignments
|
||||||
|
|
||||||
if schemaModel.get("participants") is None:
|
|
||||||
schemaModel["participants"] = []
|
|
||||||
|
|
||||||
# loop across passed participant ids, creating entries for those not present in pdata
|
# loop across passed participant ids, creating entries for those not present in pdata
|
||||||
|
|
||||||
existing_notifications = get_notification_for_shipcall_and_type(schemaModel["id"], 1) # type = 1 is assignment
|
existing_notifications = get_notification_for_shipcall_and_type(schemaModel["id"], 1) # type = 1 is assignment
|
||||||
@ -311,9 +306,8 @@ def PutShipcalls(schemaModel, original_payload=None):
|
|||||||
commands.execute(nquery, param={"shipcall_id" : schemaModel["id"], "participant_id" : elem["participant_id"], "message" : message})
|
commands.execute(nquery, param={"shipcall_id" : schemaModel["id"], "participant_id" : elem["participant_id"], "message" : message})
|
||||||
break
|
break
|
||||||
|
|
||||||
canceled_value = schemaModel.get("canceled")
|
if schemaModel["canceled"] is not None:
|
||||||
if canceled_value is not None:
|
if schemaModel["canceled"] and not was_canceled:
|
||||||
if canceled_value and not was_canceled:
|
|
||||||
# create a canceled notification for all currently assigned participants
|
# create a canceled notification for all currently assigned participants
|
||||||
stornoNotificationQuery = "INSERT INTO notification (shipcall_id, participant_id, level, type, message) VALUES (?shipcall_id?, ?participant_id?, 0, 7, ?message?)"
|
stornoNotificationQuery = "INSERT INTO notification (shipcall_id, participant_id, level, type, message) VALUES (?shipcall_id?, ?participant_id?, 0, 7, ?message?)"
|
||||||
for participant_assignment in schemaModel["participants"]:
|
for participant_assignment in schemaModel["participants"]:
|
||||||
|
|||||||
@ -115,7 +115,7 @@ def PostTimes(schemaModel):
|
|||||||
pooledConnection.close()
|
pooledConnection.close()
|
||||||
|
|
||||||
|
|
||||||
def PutTimes(schemaModel, original_payload=None):
|
def PutTimes(schemaModel):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
:param schemaModel: The deserialized model of the record to be inserted
|
:param schemaModel: The deserialized model of the record to be inserted
|
||||||
@ -127,33 +127,24 @@ def PutTimes(schemaModel, original_payload=None):
|
|||||||
pooledConnection = local_db.getPoolConnection()
|
pooledConnection = local_db.getPoolConnection()
|
||||||
commands = pydapper.using(pooledConnection)
|
commands = pydapper.using(pooledConnection)
|
||||||
|
|
||||||
sentinel = object()
|
query = "UPDATE times SET "
|
||||||
existing_times = commands.query_single_or_default("SELECT * FROM times WHERE id = ?id?", sentinel, param={"id": schemaModel["id"]})
|
isNotFirst = False
|
||||||
if existing_times is sentinel:
|
|
||||||
return json.dumps("no such record"), 404, {'Content-Type': 'application/json; charset=utf-8'}
|
|
||||||
|
|
||||||
provided_keys = set(original_payload.keys()) if isinstance(original_payload, dict) else None
|
|
||||||
|
|
||||||
if "shipcall_id" not in schemaModel or (provided_keys is not None and "shipcall_id" not in provided_keys):
|
|
||||||
schemaModel["shipcall_id"] = existing_times["shipcall_id"]
|
|
||||||
|
|
||||||
schemaModel = {k:v.value if isinstance(v, (Enum, Flag)) else v for k,v in schemaModel.items()}
|
|
||||||
|
|
||||||
update_clauses = []
|
|
||||||
for key in schemaModel.keys():
|
for key in schemaModel.keys():
|
||||||
if provided_keys is not None and key not in provided_keys:
|
|
||||||
continue
|
|
||||||
if key == "id":
|
if key == "id":
|
||||||
continue
|
continue
|
||||||
if key == "created":
|
if key == "created":
|
||||||
continue
|
continue
|
||||||
if key == "modified":
|
if key == "modified":
|
||||||
continue
|
continue
|
||||||
update_clauses.append(f"{key} = ?{key}?")
|
if isNotFirst:
|
||||||
|
query += ", "
|
||||||
|
isNotFirst = True
|
||||||
|
query += key + " = ?" + key + "? "
|
||||||
|
|
||||||
if update_clauses:
|
query += "WHERE id = ?id?"
|
||||||
query = "UPDATE times SET " + ", ".join(update_clauses) + " WHERE id = ?id?"
|
|
||||||
commands.execute(query, param=schemaModel)
|
schemaModel = {k:v.value if isinstance(v, (Enum, Flag)) else v for k,v in schemaModel.items()}
|
||||||
|
affected_rows = commands.execute(query, param=schemaModel)
|
||||||
|
|
||||||
# apply 'Traffic Light' evaluation to obtain 'GREEN', 'YELLOW' or 'RED' evaluation state. The function internally updates the mysql database 'shipcall'
|
# apply 'Traffic Light' evaluation to obtain 'GREEN', 'YELLOW' or 'RED' evaluation state. The function internally updates the mysql database 'shipcall'
|
||||||
evaluate_shipcall_state(mysql_connector_instance=pooledConnection, shipcall_id=schemaModel["shipcall_id"]) # every times data object refers to the 'shipcall_id'
|
evaluate_shipcall_state(mysql_connector_instance=pooledConnection, shipcall_id=schemaModel["shipcall_id"]) # every times data object refers to the 'shipcall_id'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user