Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| aff523a038 | |||
| e0a7c5f56e | |||
| 9a9fc59e22 | |||
| d103314350 | |||
| 5c16b17aea | |||
| 71e04b93d5 | |||
| 423bb9fc34 | |||
| eb7c3a18d8 | |||
| fe68c038de | |||
| 776263c068 | |||
| 87ed1d01d5 | |||
| 057f5ed777 | |||
| 93df742c7d | |||
| f20f2f83ec | |||
| 770ee003e7 | |||
| a5675b1442 | |||
| a927ccc732 | |||
| 817c338745 | |||
| af3c82518c | |||
| 9511db8ee9 |
16
README.md
16
README.md
@@ -20,7 +20,21 @@ Since the package is hosted in the Gitea Package Registry, you must configure yo
|
||||
|
||||
**Setup:**
|
||||
```bash
|
||||
export GOPROXY=[https://git.fjla.uk/api/packages/owlboard/go,https://proxy.golang.org,direct](https://git.fjla.uk/api/packages/owlboard/go,https://proxy.golang.org,direct)
|
||||
# Set the proxy to check our Gitea instance first
|
||||
go env -w GOPROXY="https://git.fjla.uk/api/packages/OwlBoard/go,https://proxy.golang.org,direct"
|
||||
|
||||
# Trust our internal domain and skip the public Google checksum database
|
||||
go env -w GONOSUMDB="git.fjla.uk"
|
||||
```
|
||||
|
||||
The, you can simply run go get, as usual.
|
||||
|
||||
#### Container Usage
|
||||
```bash
|
||||
ARG GOPROXY=https://git.fjla.uk/api/packages/OwlBoard/go,https://proxy.golang.org,direct
|
||||
ARG GONOSUMDB=git.fjla.uk
|
||||
ENV GOPROXY=$GOPROXY
|
||||
ENV GONOSUMDB=$GONOSUMDB
|
||||
```
|
||||
|
||||
### 2. Typescript Services
|
||||
|
||||
32
schemas/data-ingress/message-envelope.json
Normal file
32
schemas/data-ingress/message-envelope.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"$id": "https://schema.owlboard.info/data-ingress/message-envelope.schema.json",
|
||||
"$schema": "https://json-schema.org/draft-07/schema#",
|
||||
"title": "MessageEnvelope",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"service_name": {
|
||||
"type": "string",
|
||||
"description": "Name of the service submitting the update"
|
||||
},
|
||||
"service_id": {
|
||||
"type": "string",
|
||||
"description": "ID of the service sending the message - usually a hostname"
|
||||
},
|
||||
"data_type": {
|
||||
"type": "string",
|
||||
"enum": ["file"],
|
||||
"description": "The type of data contained in this message object"
|
||||
},
|
||||
"sent_timestamp": {
|
||||
"type": "integer",
|
||||
"description": "Unix timestamp representing the time the message was sent"
|
||||
},
|
||||
"data_kind": {
|
||||
"type": "string",
|
||||
"enum": ["pis", "timetable", "knowledgebase", "darwin_schedule", "darwin_ts", "darwin_ref"],
|
||||
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
|
||||
}
|
||||
},
|
||||
"required": ["service_name", "service_id", "data_type", "sent_timestamp"],
|
||||
"additionalProperties": true
|
||||
}
|
||||
@@ -8,23 +8,27 @@
|
||||
"type": "string",
|
||||
"description": "Name of the service submitting the update"
|
||||
},
|
||||
"update_type": {
|
||||
"service_id": {
|
||||
"type": "string",
|
||||
"description": "ID of the service sending the message - usually a hostname"
|
||||
},
|
||||
"data_type": {
|
||||
"type": "string",
|
||||
"enum": ["file"],
|
||||
"description": "The method of update application"
|
||||
"description": "The type of data contained in this message object"
|
||||
},
|
||||
"sent_timestamp": {
|
||||
"type": "integer",
|
||||
"description": "Unix timestamp representing the time the message was sent"
|
||||
},
|
||||
"data_kind": {
|
||||
"type": "string",
|
||||
"enum": ["pis", "timetable", "knowledgebase"],
|
||||
"description": "The data type contained in the file. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
|
||||
},
|
||||
"payload": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"kind": {
|
||||
"type": "string",
|
||||
"enum": ["pis"],
|
||||
"description": "The type of data provided in the update"
|
||||
},
|
||||
"version": {
|
||||
"type": "string",
|
||||
"description": "The version string from the package source"
|
||||
@@ -34,9 +38,10 @@
|
||||
"description": "The full path to the file, including protocol (eg. s3://) where appropriate"
|
||||
}
|
||||
},
|
||||
"required": ["kind", "version", "filepath"]
|
||||
"required": ["version", "filepath"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["service_name", "update_type", "payload"],
|
||||
"required": ["service_name", "service_id", "data_type", "sent_timestamp", "data_kind", "payload"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
58
schemas/data-ingress/pushport/schedule.json
Normal file
58
schemas/data-ingress/pushport/schedule.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"$id": "https://schema.owlboard.info/data-ingress/pushport-schedule.schema.json",
|
||||
"$schema": "https://json-schema.org/draft-07/schema#",
|
||||
"title": "PushPortSchedule",
|
||||
"type": "object",
|
||||
"required": ["rid", "uid", "trainId", "ssd", "toc", "locations"],
|
||||
"properties": {
|
||||
"rid": {"type": "string", "description": "Unique service ID"},
|
||||
"uid": {"type": "string", "description": "Unique schedule ID - maps to NR CIF"},
|
||||
"trainId": {"type": "string", "description": "Train Headcode"},
|
||||
"ssd": {"type": "string", "format": "date", "description": "Schedule Start Date (When the service commences)"},
|
||||
"toc": {"type": "string", "minLength": 2, "maxLength": 2, "description": "TOC Code"},
|
||||
"isPassenger": {"type": "boolean", "description": "If service is for passengers", "default": true},
|
||||
"isCharter": {"type": "boolean", "description": "If train is charter service", "default": false},
|
||||
"status": {"type": "string", "enum": ["train", "bus", "ship"], "default": "train"},
|
||||
"isDelayedDelivery": {"type": "boolean", "description": "If message is sent as part of Darwin service recovery"},
|
||||
"cancelReason": {"type": ["string", "null"], "description": "Reason code for cancellation"},
|
||||
"isDeleted": {"type": "boolean", "description": "Whether schedule should be deleted", "default": false},
|
||||
"locations": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["tpl", "seq"],
|
||||
"properties": {
|
||||
"tpl": {"type": "string", "description": "TIPLOC of location"},
|
||||
"seq": {"type": "integer", "description": "The order of the stop for sorting and handling repeated TIPLOCs"},
|
||||
"wta": { "type": ["string", "null"] },
|
||||
"wtd": { "type": ["string", "null"] },
|
||||
"wtp": { "type": ["string", "null"] },
|
||||
"pta": { "type": ["string", "null"] },
|
||||
"ptd": { "type": ["string", "null"] },
|
||||
"plat": { "type": ["string", "null"] },
|
||||
"isCancelled": { "type": "boolean", "default": false },
|
||||
"isSupressed": { "type": "boolean", "default": false, "description": "Defines whether the service should be hidden to the public"},
|
||||
"activities": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pass": {"type": "boolean", "description": "Indicates that the train does not stop, it only passes this location"},
|
||||
"pickUpDropOff": {"type": "boolean", "description": "Indicates the train stops for passengers to board and alight"},
|
||||
"requestStop": {"type": "boolean", "description": "Indicates if the train stops only when required"},
|
||||
"pickUpOnly": {"type": "boolean", "description": "Indicated the service picks up passengers only"},
|
||||
"dropOffOnly": {"type": "boolean", "description": "Indicates the service drops off passengers only"},
|
||||
"tokenExchange": {"type": "boolean", "description": "Indicates if the train stops for exhanging a token/staff or similar"},
|
||||
"vehiclesAttached": {"type": "boolean", "description": "Indicates if vehicles are attached at this location"},
|
||||
"vehiclesDetached": {"type": "boolean", "description": "Indicates if vehicles are detached at this location"},
|
||||
"trainCrewChange": {"type": "boolean", "description": "Indicates if train stops to exchange crew at this location"},
|
||||
"changeLocomotive": {"type": "boolean", "description": "Indicates if train stops to exchange locomotive at this location"},
|
||||
"changeEnds": {"type": "boolean", "description": "Indicates if the train reverses or driver changes ends at this location"},
|
||||
"staffStop": {"type": "boolean", "description": "Indicates that the train stops for staff use only"},
|
||||
"unadvertised": {"type": "boolean", "description": "Indicates that the stop is not advertised to the public"},
|
||||
"passesAnotherTrain": {"type": "boolean", "description": "Indicates if the train stops to pass another train on a single line crossing point"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
39
schemas/data-ingress/pushport/ts.json.txt
Normal file
39
schemas/data-ingress/pushport/ts.json.txt
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"$id": "https://schema.owlboard.info/data-ingress/pushport-ts.schema.json",
|
||||
"$schema": "https://json-schema.org/draft-07/schema#",
|
||||
"title": "PushPortTS",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"rid": {
|
||||
"type": "string",
|
||||
"description": "Unique ID for the train service (eg. 2026022217610103)",
|
||||
"pattern": "^[0-9]{15}$"
|
||||
},
|
||||
"uid": {
|
||||
"type": "string",
|
||||
"description": "Schedule ID - The permanent ID for the schedule in the static timetable"
|
||||
},
|
||||
"ssd": {
|
||||
"type": "string",
|
||||
"format": "date",
|
||||
"description": "Scheduled Start Data, the date the train service started its journey"
|
||||
},
|
||||
"isDelayed": {
|
||||
"type": "boolean",
|
||||
"description": "Indicated if the message is delayed due to PushPort service disruption"
|
||||
},
|
||||
"lateReason": {
|
||||
"type": "integer",
|
||||
"description": "Reason the train is late (Maps to textual reason)"
|
||||
},
|
||||
"cancelReason": {
|
||||
"type": "integer",
|
||||
"description": "Reason the train is cancelled (Maps to textual reason)"
|
||||
},
|
||||
"locations": {
|
||||
"type": "array",
|
||||
"description": "A list of one or more locations where the train has recorded a movement or forecast",
|
||||
"items": { "$ref": "https://schema.owlboard.info/data-ingress/pushport-ts-location.schema.json" }
|
||||
}
|
||||
}
|
||||
}
|
||||
51
schemas/data-ingress/pushport/ts_location.json.txt
Normal file
51
schemas/data-ingress/pushport/ts_location.json.txt
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"$id": "https://schema.owlboard.info/data-ingress/pushport-ts-location.schema.json",
|
||||
"$schema": "https://json-schema.org/draft-07/schema#",
|
||||
"title": "PushPortTSLocation",
|
||||
"type": "object",
|
||||
"required": ["tpl"],
|
||||
"definitions": {
|
||||
"TSTime": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"at": {"type": "string", "description": "Actual time"},
|
||||
"et": {"type": "string", "description": "Estimated time"},
|
||||
"wet": {"type": "string", "description": "Working estimated time"},
|
||||
"src": {"type": "string", "description": "Data source (TD/Darwin/etc)"},
|
||||
"atClass": {"type": "string", "description": "Time source Automatic/Manual"},
|
||||
"delayed": {"type": "boolean", "description": "is train delayed with no estimated time"},
|
||||
"srcInst": {"type": "string", "description": "Source instance (what caused the update)"},
|
||||
"atRemoved": {"type": "boolean", "description": "Whether a previous 'at' was reported in error and should be removed"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"tpl": {"type": "string", "description": "TIPLOC for the location"},
|
||||
"wta": {"type": "string", "description": "Scheduled working time arrival"},
|
||||
"wtd": {"type": "string", "description": "Scheduled working time departure"},
|
||||
"wtp": {"type": "string", "description": "Scheduled working time pass"},
|
||||
"pta": {"type": "string", "description": "Scheduled public arrival time"},
|
||||
"ptd": {"type": "string", "description": "Scheduled public departure time"},
|
||||
"arr": {"$ref": "#/definitions/TSTime"},
|
||||
"dep": {"$ref": "#/definitions/TSTime"},
|
||||
"pass": {"$ref": "#/definitions/TSTime"},
|
||||
"plat": {
|
||||
"type": "object",
|
||||
"description": "Platform data",
|
||||
"properties": {
|
||||
"value": {"type": "string", "description": "Platform number/letter"},
|
||||
"platsrc": {"type": "string", "enum": ["A", "M", "P"], "description": "Source of data Automatic/Manual/Planned"},
|
||||
"platsup": {"type": "boolean", "description": "Is platform suppressed from public display"},
|
||||
"cisPlatsup": {"type": "boolean", "description": "Whether CIS or Darwin Workstation has supressed the platform"},
|
||||
"conf": {"type": "boolean", "description": "Whether platform has been confirmed by the local CIS"}
|
||||
}
|
||||
},
|
||||
"suppr": {"type": "boolean", "description": "Whether location is supressed"},
|
||||
"length": {"type": "integer", "description": "Train length (no. of coaches)"},
|
||||
"detachFront": {"type": "boolean","description": "Indicated if coaches will detatch from front"},
|
||||
"detachRead": {"type": "boolean", "description": "Indicates if coaches will detatch from rear"},
|
||||
"attachFront": {"type": "boolean", "description": "Indicates if coaches will attach to front"},
|
||||
"attachRear": {"type": "boolean", "description": "Indicates if coaches will be attached to rear"},
|
||||
"adhoc": {"type": "boolean", "description": "Whether this is an ad-hoc stop"}
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ for file in $FILES; do
|
||||
npx --yes json-schema-to-typescript "$file" > "gen/ts/${clean_name}.ts"
|
||||
|
||||
# Generate Go
|
||||
go-jsonschema -p models "$file" > "gen/go/models/${clean_name}.go"
|
||||
go-jsonschema -p contracts "$file" > "gen/go/models/${clean_name}.go"
|
||||
done
|
||||
|
||||
echo "✅ Generated single TS package in gen/ts"
|
||||
|
||||
Reference in New Issue
Block a user