Lots of API related information for the applications. No internet access so cannot review weather services yet.

me committed 2026-08-20 10:24:03 -07:00
1 parent 2a95801d57
commit bde8a74880
1 file changed
+139 -1
+139 -1
@@ -212,6 +212,7 @@ objects, constraints, schedules, etc being added in the revision. Example:
```
- Scripts shall have a consistent style and formatting. Developer may use the
style of their choice.
- Scripts shall assume a Docker environment using image `debian:trixie-slim`.
### Tables
@@ -340,8 +341,145 @@ For each `ZIP_CODE`, calculate the following:
## 4. Response API
Developer: TBD
Language: Developer's choice.
Node.js using Express recommended unless a better use case can be made.
### Description
Listener API which receives requests from the front end and queries the database on their behalf. This program is responsible for adding new `ZIP_CODE`'s to the database and requesting that the weatherman load the data for these when that is done.
### Requirements
-
- Program shall listen JSON #1 in the appendix as its initiating request.
- Program shall provide JSON #2 as a response to the request.
- Program shall access the database in section #2 as user `geo`.
- Program shall acquire the weather data from the `loc_weather_agg` table..
- Program shall post any new zip codes in the `loc` table.
- program shall update `loc.last_accessed_date` for the zip codes it retrieved data for.
# Appendix - JSON Requests and Responses
## 1. Request: Front End to Response API
- Data shall be de-duplicated so that any one zip only appears once.
- All payloads shall contain the version number so that the server knows which
response to provide, in case the format changes in the future.
- Commas are acceptable after every data element, even ending ones.
```json
{
"version": "1.0",
"data": [
"zip_code": "85901",
"zip_code": "86004",
"zip_code": "86001",
],
}
```
## 2. Response: Response API to Front End
- Version shall be included so that the front end knows how to parse the response.
- Commas are acceptable after every element, including the ends of lists.
- Zip codes and dates shall be treated as strings.
- Temperature data shall be treated like numbers.
```json
{
"version": "1.0",
"data": [
{
"zip_code": "85901",
"last_update_date": "1900-01-01T15:00:00+0000",
"mean_high": 64.237,
"mean_low": 38.758,
"median_high": 65,
"median_low": 43,
"mode_high": 68,
"mode_low": 47,
"today_high": 58,
"today_low": 33,
"tomorrow_high": 61,
"tomorrow_low": 37,
},
{
"zip_code": "86004",
"last_update_date": "1900-01-01T15:00:00+0000",
"mean_high": 45.46,
"mean_low": 22.235,
"median_high": 45,
"median_low": 19,
"mode_high": 42,
"mode_low": 22,
"today_high": 46,
"today_low": 25,
"tomorrow_high": 52,
"tomorrow_low": 12,
},
{
"zip_code": "86001",
"last_update_date": "1900-01-01T15:00:00+0000",
"mean_high": 45.64,
"mean_low": 22.532,
"median_high": 44,
"median_low": 18,
"mode_high": 41,
"mode_low": 21,
"today_high": 45,
"today_low": 24,
"tomorrow_high": 51,
"tomorrow_low": 11,
},
],
}
```
## 3. Request: Applications to Weather Provider (TBD)
(TBD: How to parse a request to the weather service.)
## 4. Response: Weather Provider (TBD) to Applications
(TBD: How to read a response from the weather service.)
## 5. Request: New ZIP_CODE Needs Processed
Notification from the `reporter` for the `weatherman` to kick off an ad hoc run.
This data never leaves the server and cannot come from outside sources, the endpoint will not available to the public, it is accessed via localhost.
Zip codes do not need provided since the `reporter` has already inserted and committed them to `loc`.
```json
{
"data": "run",
}
```
## 6. Response: ZIP_CODE Data Now Available
Response from `weatherman` program to `reporter`.
If the `reporter` sees this, then it continues with building a response for the front end.
```json
{
"data": "ready",
}
```
## 7. Response: Issue Loading New ZIP_CODE's
Response from `weatherman` program to `reporter`.
If the `reporter` happens to see this, it provides
```json
{
"data": "error",
"error": "Message about what went wrong, which may get forwarded to the user.",
}
```