@golemio/parkings 1.1.1-dev.560668363 → 1.1.1-dev.570249156

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/db/example/clear_test_data.sql +5 -0
  2. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesDataSourceFactory.d.ts +5 -0
  3. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesDataSourceFactory.js +19 -0
  4. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesDataSourceFactory.js.map +1 -0
  5. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesTransformation.d.ts +10 -0
  6. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesTransformation.js +50 -0
  7. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesTransformation.js.map +1 -0
  8. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesWorker.d.ts +8 -0
  9. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesWorker.js +42 -0
  10. package/dist/integration-engine/ZtpParkingZones/ZtpParkingZonesWorker.js.map +1 -0
  11. package/dist/integration-engine/index.d.ts +3 -0
  12. package/dist/integration-engine/index.js +3 -0
  13. package/dist/integration-engine/index.js.map +1 -1
  14. package/dist/integration-engine/models/ParkingsModel.d.ts +4 -0
  15. package/dist/integration-engine/models/ParkingsModel.js +17 -0
  16. package/dist/integration-engine/models/ParkingsModel.js.map +1 -0
  17. package/dist/integration-engine/queueDefinitions.js +10 -0
  18. package/dist/integration-engine/queueDefinitions.js.map +1 -1
  19. package/dist/output-gateway/transformations/ParkingsTransformationFabric.js +1 -1
  20. package/dist/output-gateway/transformations/ParkingsTransformationFabric.js.map +1 -1
  21. package/dist/output-gateway/transformations/interfaces/IParkingsTariffChargeNormalized.d.ts +1 -1
  22. package/dist/schema-definitions/datasources/IZtpParkingJsonFeature.d.ts +20 -0
  23. package/dist/schema-definitions/datasources/IZtpParkingJsonFeature.js +3 -0
  24. package/dist/schema-definitions/datasources/IZtpParkingJsonFeature.js.map +1 -0
  25. package/dist/schema-definitions/datasources/ZtpParkingsJsonSchema.d.ts +13 -0
  26. package/dist/schema-definitions/datasources/ZtpParkingsJsonSchema.js +109 -0
  27. package/dist/schema-definitions/datasources/ZtpParkingsJsonSchema.js.map +1 -0
  28. package/docs/assets/parkings_erd.png +0 -0
  29. package/docs/implementation-documentation.md +297 -0
  30. package/docs/openapi.yaml +674 -0
  31. package/package.json +1 -1
@@ -0,0 +1,297 @@
1
+ # Implementační dokumentace modulu **parkings**
2
+
3
+ ## Záměr
4
+
5
+ Modul slouží k ukládání a poskytování informací o parkování.
6
+
7
+ **Dostupní poskytovatelé**:
8
+
9
+ - Korid (Liberec)
10
+ - TSK (Praha)
11
+ - IPR (Praha)
12
+
13
+ ## Vstupní data
14
+
15
+ ### Data nám jsou posílána
16
+
17
+ - Přes Permission Proxy na Input Gateway, dodavatel Korid
18
+
19
+ - POST (/koridparkings/config) => RabbitMQ send Message `saveKoridConfToDB` ([Data example](../test/input-gateway/korid-parkings/data/korid-config.json))
20
+ - POST (/koridparkings/data) => RabbitMQ send Message `saveKoridDataToDB` ([Data example](../test/input-gateway/korid-parkings/data/korid-data.json))
21
+
22
+ - na FTP, dodavatel TSK (parkovací zóny)
23
+
24
+ ### Data aktivně stahujeme
25
+
26
+ Data stahujeme pravidelně od IPR, TSK.
27
+
28
+ Pro ZTP parkoviště se z API se stahuje JSON z https://opendata.iprpraha.cz/CUR/DOP/DOP_TSK_Stani_ZTP_b/WGS_84/DOP_TSK_Stani_ZTP_b.json
29
+
30
+ #### Zóny placeného stání
31
+
32
+ Zóny placeného stání používají 2 datové zdroje - TSK a Opendata IPR, které mají přesnější geometrii.
33
+
34
+ - zdroj dat (**TSK**):
35
+
36
+ config FTPProtocolStrategy:
37
+
38
+ ```
39
+ filename: "Area_YYYY-MM-DD.json", // "Tarif_YYYY-MM-DD.tsv" pro tarify
40
+ path: config.datasources.TSKFTPParkingZonesPath,
41
+ url: {
42
+ host: config.datasources.TSKFTP.host,
43
+ port: config.datasources.TSKFTP.port,
44
+ user: config.datasources.TSKFTP.user,
45
+ password: config.datasources.TSKFTP.password,
46
+ },
47
+ encoding: "utf8",
48
+ ```
49
+
50
+ - formát dat (**TSK**)
51
+
52
+ - protokol: ftp
53
+ - datový typ:
54
+ - lokace: json
55
+ - tarify: tsv
56
+ - validační schéma:
57
+ - lokace: json
58
+ - tarify: tsv
59
+ - validační schéma:
60
+ - lokace [datasourceGeoJsonSchema](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/schema-definitions/index.ts)
61
+ - tarify [datasourceTariffJsonSchema](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/schema-definitions/index.ts)
62
+ - příklad vstupních dat:
63
+ - [lokace](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/test/integration-engine/data/ipr-parking-data-input.json)
64
+ - [tarify (tsv->json)](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/test/integration-engine/data/tsk-parking-tariff-data-input.json)
65
+
66
+ - zdroj dat (**IPR**):
67
+
68
+ config HTTPProtocolStrategy:
69
+
70
+ ```
71
+ headers: {},
72
+ method: "GET",
73
+ url: config.datasources.ParkingZones,
74
+ ```
75
+
76
+ - formát dat (**IPR**)
77
+
78
+ - protokol: http
79
+ - datový typ: json
80
+ - validační schéma: datasourceEcoCounterJsonSchema
81
+ - příklad vstupních dat
82
+
83
+ - frekvence stahování
84
+
85
+ - cron definice:
86
+ - cron.dataplatform.parkings.saveParkingZonesPrague (`0 */5 * * * *`)
87
+
88
+ - název rabbitmq fronty
89
+ - dataplatform.parkings.saveParkingZonesPrague
90
+
91
+ #### Placené parkoviště
92
+
93
+ - zdroj dat (**TSK**):
94
+
95
+ config HTTPProtocolStrategy:
96
+
97
+ ```
98
+ headers: {},
99
+ method: "GET",
100
+ url: config.datasources.TSKParkings,
101
+ ```
102
+
103
+ + filter `lastUpdated` ne starší než 48h
104
+
105
+ - formát dat
106
+ - protokol: http
107
+ - datový typ: json
108
+ - [validační schéma: datasourceMSO](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/schema-definitions/index.ts)
109
+ - [příklad vstupních dat](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/test/integration-engine/data/parking-lots-data-input.json)
110
+
111
+
112
+ - frekvence stahování
113
+
114
+ - cron definice:
115
+ - cron.dataplatform.parkings.saveParkingLotsPrague (`0 0 */6 * * *`)
116
+ - cron.dataplatform.parkings.saveParkingLotsMeasurementsPrague (`0 */5 * * * *`)
117
+
118
+ - název rabbitmq fronty
119
+ - dataplatform.parkings.saveParkingLotsPrague
120
+ - dataplatform.parkings.saveParkingLotsMeasurementsPrague
121
+
122
+
123
+ ## Zpracování dat / transformace
124
+
125
+ Při transformaci dat lokací data obohacujeme o adresu parkoviště, která vychází z centroidu geometrie daného parkoviště a získává se z Photon API metodou `GeocodeApi.getAddressByLatLngFromPhoton` v modulu Core.
126
+
127
+ ### Worker *ParkingsWorker*
128
+
129
+ #### *saveParkingZonesPrague*
130
+
131
+ - vstupní rabbitmq fronta
132
+ - název: `dataplatform.parkings.saveParkingZonesPrague`
133
+ - bez parametrů
134
+ - datové zdroje
135
+ - dataSourceTSK (ftp),
136
+ - dataSourceTariffTSK (ftp),
137
+ - dataSourceIPR
138
+ - transformace
139
+
140
+ Data pro `parkings` - TSK zdroj rozšiřujeme o geodata z Opendat IPR (geometrie stejné zóny mergujeme v jednu), které mají přesnější polohu parkovišť. Kde jsou k dispozici, nahrazujeme geometrii TSK.
141
+ Data pro `parkings_location` - IPR zdroj (původní detailní geometrie) rozšiřujeme o geodata z TSK, pouze kdyžkteré mají přesnější polohu parkovišť. Kde jsou k dispozici, nahrazujeme geometrii TSK.
142
+ - [TSKParkingTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/TSKParkingTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel`
143
+ - [TSKParkingTariffTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/TSKParkingTariffTransformation.ts) - mapování pro `parkingsTariffsModel`
144
+ - [IPRParkingTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/IPRParkingTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel`
145
+ - data modely
146
+ - parkingsModel -> (schéma public) `parkings`
147
+ - parkingsLocationModel -> (schéma public) `parkings_location` (detailnější geometrie, která vychází z položek IPRu)
148
+ - parkingsTariffsModel -> (schéma public) `parkings_tariffs`
149
+ - Důležité informace pro zpracování dat ze zdroje TariffTSK
150
+ - U parkovišť ZPS pod správou TSK nastaveno ve payment_method hodnotu `litacka`
151
+
152
+
153
+ #### *saveParkingLotsPrague*
154
+
155
+ - vstupní rabbitmq fronta
156
+ - název: `dataplatform.parkings.saveParkingLotsPrague`
157
+ - bez parametrů
158
+ - datové zdroje
159
+ - dataSource (http),
160
+ - transformace
161
+ - [ParkingLotsTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/ParkingLotsTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel`
162
+ - data modely
163
+ - parkingsModel -> (schéma public) `parkings`
164
+ - důležité informace pro zpracování dat ze zdroje TSKParkings
165
+ - V budoucnu přibydou další hodnoty parking_type: `park_sharing` pro službu Mr. Parkit atp.
166
+ - Parametr `zone_type` je povinný pokud je `parking_type == on_street`. Jinak má být `NULL`
167
+ - `zone_free` - placeholder pro Zóny neplaceného stání (zone_type), které se budou integrovat v budoucnu
168
+
169
+
170
+ #### *saveParkingLotsMeasurementsPrague*
171
+
172
+ - vstupní rabbitmq fronta
173
+ - název: `dataplatform.parkings.saveParkingLotsMeasurementsPrague`
174
+ - bez parametrů
175
+ - datové zdroje
176
+ - dataSource (http),
177
+ - transformace
178
+ - [ParkingLotsTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/ParkingLotsTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel`
179
+ - data modely
180
+ - parkingsMeasurementsModel -> (schéma public) `parkings_measurements_part`
181
+ - parkingsMeasurementsActualModel -> (schéma public) `parkings_measurements_actual`
182
+
183
+ Všechny historické údaje jsou uloženy v tabulce `parkings_measurements_part`. Aktualizujeme pouze aktuální údaje v tabulce `parkings_measurements_actual`.
184
+
185
+
186
+ #### *saveKoridConfToDB*
187
+
188
+ - vstupní rabbitmq fronta
189
+ - název: `dataplatform.parkings.saveKoridConfToDB`
190
+ - bez parametrů
191
+ - datové zdroje
192
+ - IG
193
+ - transformace
194
+ - [KoridParkingConfigTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/KoridParkingConfigTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel`
195
+ - data modely
196
+ - parkingsModel -> (schéma public) `parkings`
197
+
198
+ #### *saveKoridDataToDB*
199
+
200
+ - vstupní rabbitmq fronta
201
+ - název: `dataplatform.parkings.saveKoridDataToDB`
202
+ - bez parametrů
203
+ - datové zdroje
204
+ - IG
205
+ - transformace
206
+ - [KoridParkingDataTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/KoridParkingDataTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel`
207
+ - data modely
208
+ - parkingsMeasurementsModel -> (schéma public) `parkings_measurements_part`
209
+ - parkingsMeasurementsActualModel -> (schéma public) `parkings_measurements_actual`
210
+
211
+ ### ZtpParkingZonesWorker
212
+
213
+ #### *updateZtpParkings*
214
+
215
+ - vstupní rabbitmq fronta
216
+ - název: `dataplatform.parkings.updateZtpParkings`
217
+ - bez parametrů
218
+ - datové zdroje
219
+ - JSON stahovaný z IPR
220
+ - transformace
221
+ Mapování `IZtpParkingJsonFeature` na `IParking` + doplnění o adresu.
222
+ Získává se z Photon API metodou `GeocodeApi.getAddressByLatLngFromPhoton` v modulu Core.
223
+ - data modely
224
+ - parkingsModel -> (schéma public) `parkings`
225
+
226
+ ### Legacy mongo modely
227
+
228
+ **CronJob and Worker method refreshDataInDB**
229
+
230
+ `cron.dataplatform.parkings.refreshDataInDB` ("`0 */5 * * * *`" Dev a Prod)
231
+
232
+ Datasource TSKParkings, Transformovaná data jsou uložena v tabulce `public.parkings`
233
+
234
+ Na základě dat metoda generuje 3 události RabbitMQ:
235
+
236
+ - RabbitMQ send Message `saveDataToHistory`
237
+ - RabbitMQ send Message `updateAddressAndDistrict`
238
+ - RabbitMQ send Message `updateAverageOccupancy`
239
+
240
+
241
+ ## Uložení dat
242
+
243
+ - typ databáze
244
+ - PSQL
245
+ - databázové schéma
246
+ - ![parkings er diagram](assets/parkings_erd.png)
247
+ - retence dat
248
+ - `parkingsModel`, `parkingsLocationModel`, `parkingsMeasurementsActualModel`, `parkingsTariffsModel` update
249
+ - `parkingsMeasurementsModel` historizace bez promazávání
250
+
251
+ ## Output API
252
+
253
+ ### Obecné
254
+
255
+ - Zdroj pro api
256
+ - PSQL databáze viz výše
257
+ - OpenAPI dokumentace
258
+ - [OpenAPI](./openapi.yaml)
259
+ - veřejné / neveřejné endpointy
260
+ - částečně veřejná na úrovni filtrování podle poskytovatele dat
261
+ - postman kolekce
262
+ - TBD
263
+
264
+ #### _/parking_
265
+
266
+ #### _/parking/:id_
267
+
268
+ - zdrojové tabulky
269
+ - parkings
270
+ - parkings_measurements_actual
271
+ - implementováno dodatečně
272
+ - `reservation_url` - přidáno volitelný atribut, který použijeme v datech od MPLA
273
+ - Nový číselník `payment_methods`. Example: `{ payment_methods: ["card_online", "cash"] }`
274
+
275
+ #### _/parking/detail_
276
+
277
+ #### _/parking/detail/:id_
278
+
279
+ - zdrojové tabulky
280
+ - parkings
281
+ - parkings_location
282
+ - detailnejší geometrie, vychází z OpenData IPR a doplňuje parametry z TSK (ftp)
283
+
284
+ #### _/parking/tariffs/_
285
+
286
+ #### _/parking/tariffs/:tariffId_
287
+
288
+ - zdrojové tabulky
289
+ - parkings_tariffs
290
+
291
+ #### _/parking/measurements_
292
+
293
+ - zdrojové tabulky
294
+ - parkings_measurements_part
295
+ - implementováno dodatečně
296
+ - stránkovací metadata jsou zahrnuta v odpovědi ve formách response headers (`X-Total-Count`, `Link`)
297
+ - implementována možnost dotazování pomocí parametrů `pageSize` a `page`