UNPKG

@golemio/parkings

Version:
814 lines (636 loc) 32.1 kB
# Implementační dokumentace modulu **parkings** ## Záměr Modul slouží k ukládání a poskytování informací o parkování. **Dostupní poskytovatelé**: - Korid (Liberec) - TSK v2 (Praha) - IPR (Praha) - IPT/OICT - Smart4City - Bedrichov - GreenCenter ## Vstupní data ### Data nám jsou posílána - Přes Permission Proxy na Input Gateway, dodavatel Korid - POST (/koridparkings/config) => RabbitMQ send Message `saveKoridConfToDB` ([Data example](../test/input-gateway/korid-parkings/data/korid-config.json)) - POST (/koridparkings/data) => RabbitMQ send Message `saveKoridDataToDB` ([Data example](../test/input-gateway/korid-parkings/data/korid-data.json)) - Data poskytovatelů přes /source - slouží pro administraci a update statických hodnot k poskytovatelům parkovišť - POST (/source) => RabbitMq send Message `saveParkingSourceToDB` ([Data example](../test/input-gateway/data/parkingSourceInput.json)) - Přes Permission Proxy na Input Gateway, dodavatel ISPHK Hradec - POST (/isphkparkings/measurements) => RabbitMQ send Message `saveIsphkMeasurements` ([Data example](../test/input-gateway/data/parkingIsphkInput.json)) ### Data aktivně stahujeme Data stahujeme pravidelně od IPR, z nového API TSK (značené jako v2), TSK ZPS public API a Smart4City. Dále z blob storage IPT. Pro ZTP parkoviště se z API se stahuje JSON z https://services5.arcgis.com/SBTXIEUGWbqzUecw/arcgis/rest/services/DOP_CUR_DOP_TSK_STANI_ZTP_B/FeatureServer/0/query?outFields=*&where=1%3D1&f=geojson Pro parkovací zony se stahuje z https://services5.arcgis.com/SBTXIEUGWbqzUecw/arcgis/rest/services/DOP_CUR_DOP_ZPS_USEKY_P/FeatureServer/0/query?outFields=*&where=1%3D1&f=geojson Pro statické (ručně zadané) tarify se stahuje JSON ze zdroje IPT. Pro statické (ručně vytvořené) polygony placených parkovišť se stahuje GeoJSON ze zdroje IPT. **Data o vjezdech** do parkovišť se stahují ze zdroje poskytovatele, pokud má uvedenou url vjezdů v tabulce poskytovatelů. **Data o parkovacích automatech** OSM se stahují z exportovaného zdroje IPT. **Data o platbách** se stahují z ručně vytvořeného zdroje IPT, nejsou-li součástí púvodního. **Data o vjezdových omezeních** se stahují ze zdroje IPT, nejsou-li součástí púvodního (Mr. Parkit). **Data o obsazenosti parkovišť TSK** se stahují z TSK ZPS public API. #### Zóny placeného stání Zóny placeného stání se stahují z API TSK (CIS VHD CD API) značené jako v2 - zdroj dat (**Bedrichov**): config HTTPFetchProtocolStrategy: ``` headers: { Authorization: `Token token`, }, method: "POST", url: datasources.parking.bedrichov.datasource.url, token: datasources.parking.bedrichov.datasource.token ``` - formát dat (**Bedrichov**) - protokol: http - datový typ: json - validační schéma: [BedrichovParkingSchema](../src/schema-definitions/datasources/BedrichovParkingSchema.ts) - příklad vstupních dat: [BedrichovInputData](../test/integration-engine/data/bedrichov-input-data.ts) - frekvence stahování - cron definice: - cron.dataplatform.parkings.saveBedrichovData (`0 * * * * *`) - název rabbitmq fronty - dataplatform.parkings.saveBedrichovData - zdroj dat (**TSK v2**): config HTTPFetchProtocolStrategy: ``` headers: { Authorization: `Basic jmeno:heslo`, }, method: "GET", url: this.config.datasources.parking.TskApiBaseUrl + this.config.datasources.parking.TskApiEndpoints[endpoint], ``` - formát dat (**TSK v2**) - zdroj používá 4 datové zdroje: sections, sectionList level 251 (zóny plac. stání) a level 253 (ZTP), tariffs - protokol: http - datový typ: json - validační schéma sections: https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/schema-definitions/datasources/TskParkingSectionSchema.ts - validační schéma sections level (251 i 253): https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/schema-definitions/datasources/TskParkingSectionLevelSchema.ts - validační schéma tarify: https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/schema-definitions/datasources/TskParkingZoneTariffSchema.ts - transformace a ukládání: - sections => parkings - ukládají se pouze platná parkoviště podle pravidel níže - section levels => parkings_location - ukladají se pouze platná parkovací místa podle pravidel níže - tariffs => parkings_tariffs - pravidla pro určení platnosti parkoviště / parkovacího místa - validFrom =null, validTo=1-1-2030 - platné - validFrom = 1-1-2020, validTo = null - platné - validFrom = null, validTo = null - platné - validFrom = 1-1-2030, validTo = null - zatím neplatné - validFrom = null, validTo=1-1-2024 - už neplatné - frekvence stahování - cron definice: - cron.dataplatform.parkings.saveParkingZonesPrague (`0 0 4 * * *`) #### Parkovací automaty TSK - zdroj dat (**TSK v2**) je stejný, jako pro zóny, liší se jen konec URL: "ParkMachine/list" - formát dat (**TSK v2**) - protokol: http - datový typ: json - validační schéma: https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/schema-definitions/datasources/TskParkingMachinesSchema.ts - frekvence stahování - cron definice: - cron.dataplatform.parkings.saveParkingZonesPrague (`0 0 4 * * *`) - cílová tabulka: `parking_machines` #### _MR.PARKIT Garages_ - zdroj dat - url: config.datasources.parkings.mrParkit.datasource.url - parametry dotazu: - apiVersion: config.datasources.parkings.mrParkit.datasource.apiVersion - apiKey: config.datasources.parkings.mrParkit.datasource.apiKey - formát dat - protokol: http - datový typ: json - validační schéma: [mrParkitJsonSchema](../src/schema-definitions/datasources/MrParkitJsonSchema.ts) - příklad vstupnich dat: [InputDataFixture](../test/integration-engine/data/MrParkitInputDataFixture.ts) - tarify z datového zdroje jsou namapované na tabulku parkings_tariffs, data ["mrParkitTransformation"](../test/integration-engine/data/MrParkitGarageTransformation.ts) - frekvence stahování - cron definice: - cron.dataplatform.parkings.saveMrParkitData - rabin `0 */15 * * * *` - prod `0 */15 * * * *` - názvy rabbitmq front - dataplatform.parkings.saveMrParkitData #### _Smart4City_ - ze zdroje stahujeme parkoviště, parkovací místa a měření. - zdroj dat (seznam měst) - url: config.datasources.parkings.Smart4City.graphQL.url - formát dat - protokol: http - datový typ: json - validační schéma: [smart4CityGraphQLResponse](../src/schema-definitions/datasources/smart4city/Smart4CityGraphQLSchemas.ts) - příklad vstupnich dat: [smart4CityMeasurementsInput](../test/integration-engine/data/smart4city/smart4city-measurements-input.ts) - frekvence stahování - cron definice: - cron.dataplatform.parkings.updateSmart4CityData - rabin: parking `0 0 6 * * *` - prod: parking `0 0 6 * * *` - rabin: measurements `0 */1 * * * *` - prod: measurements `0 */1 * * * *` - názvy rabbitmq front - dataplatform.parkings.updateSmart4CityData - vstupem do fronty je json konfigurace viz schema [UpdateSmart4CityDataValidationSchema](../src/integration-engine/workers/schemas/UpdateSmart4CityDataSchema.ts) - příklad vstupu `{"type":"measurements"}` spustí pouze aktualizaci měření, dále je možné použít typ `data` to aktualizuje informace o parkovištích a parkovacích místech. Typ `all` aktualizuje jak parkoviště tak i měření #### _parkomats_ - zdroj dat - url: `https://apicore.zpspraha.cz/CISICTService/CISICTService.svc/parkingsessionshistory` - parametry - `from` - nastavujeme na predchozi den 00 - `to` - nastavujeme na dnesni den v 04 - poznamka stahujeme data za 28 hodin abychom o zadna data neprisli - nastaveno více pokusů o stažení, z důvodů nestability API - protokol: http - datovy typ: json - validacni schema: [parkomatInputSchema](../src/schema-definitions/parkomats/datasources/ParkomatInputSchema.ts) - frekvence stahovani: - cron definice - rabin: `0 04,16 * * *` - prod: `0 07,19 * * *` - nazev rabbitmq fronty - dataplatform.parkomats.refreshDataInDB ## Zpracování dat / transformace 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.getExtendedAddressFromPhoton` v modulu Core. Parkoviště, která nemají tarif (je null), mohou dostat tarif ze statického zdroje IPT. Vybraným parkovištím může být nahrazena location za Multipolygon ze zdroje IPT (výměna bodu za multipolygon). Původní bod je uložen do centroidu. ### Worker _NewParkingsWorker_ #### Task _SaveMrParkitData_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveMrParkitData` - bez parametrů - datové zdroje - dataSourceMrParkit (http) - transformace - [MrParkitGarageTransformation](../src/integration-engine/workers/tasks/SaveMrParkitDataTask.ts) - transformace parkovišť, lokací i measurementů (pro každou garáž nálezí vždy jeden business objekt od každého) - data modely - parkingsModel -> (schéma parkings) `parkings` - parkingsLocationModel -> (schéma parkings) `parkings_location` - parkingsMeasurementsModel -> (schéma parkings) `parkings_measurements` - přestože přesná data nedostáváme, tak ukládáme do tabulky hodnoty `available_spot_number` stav ve významu jestli je parkoviště volné. Absolutní počet volných míst není znám a je třeba s tím počítat na výstupním API. #### Task _UpdateSmart4CityDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.updateSmart4CityData` - parametry: - příklad vstupu `{"type":"measurements"}` spustí pouze aktualizaci měření, dále je možné použít typ `data` to aktualizuje informace o parkovištích a parkovacích místech. Typ `all` aktualizuje jak parkoviště tak i měření - datové zdroje - Smart4City - data měst (GraphQL) - transformace - [Smart4CityParkingTransformation](../src/integration-engine/transformations/smart4city/Smart4CityParkingTransformation.ts) - [Smart4CityMeasurementTransformation](../src/integration-engine/transformations/smart4city/Smart4CityParkingMeasurementsTransformation.ts) - data modely - parkingsModel -> (schéma parkings) `parkings` - parkingsLocationModel -> (schéma parkings) `parkings_location` - parkingsMeasurementsModel -> (schéma parkings) `parkings_measurements` #### Task _GenerateIptOictParkingJobsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.generateIptOictParkingJobs` - parametry: - bez parametrů - závislé fronty - název: `dataplatform.parkings.SaveIptOictParkingData` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - `parking_sources` - záznamy obsahují url datového zdroje v `datasource_parking` && `datasource_locations` #### Task _SaveIptOictParkingDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveIptOictParkingData` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - IptOictDataSource (http) - zvlášť endpoint pro parkoviště a parkovací místa - geojson formát - statická data - transformace - [IptOictParkingSpaceTransformation](../src/integration-engine/transformations/IptOictParkingSpaceTransformation.ts) - transformace -lokací parkovišť - [IptOictParkingTransformation](../src/integration-engine/transformations/IptOictParkingTransformation.ts) - transformace parkovišť - [IptOictOpeningHoursTransformation](../src/integration-engine/transformations/iptoict/IptOictOpeningHoursTransformation.ts) - transformace otvíracích dob - data modely - parkingsModel -> (schéma parkings) `parkings` - parkingsLocationModel -> (schéma parkings) `parkings_location` - parkingsOpeningHoursModel -> (schéma parkings) `parkings_opening_hours` #### Task _GenerateIptOictPaymentJobsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.generateIptOictPaymentJobs` - parametry: - bez parametrů - závislé fronty - název: `dataplatform.parkings.saveIptOictPaymentsData` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - `parking_sources` - záznamy obsahují url datového zdroje v `datasource_payments` #### Task _GenerateIptOictProhibitionsJobsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.generateIptOictProhibitionsJobs` - parametry: - bez parametrů - závislé fronty - název: `dataplatform.parkings.saveIptOictProhibitionsDataTask` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - `parking_sources` - záznamy obsahují url datového zdroje v `datasource_prohibitions` #### Task _SaveIptOictProhibitionsDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveIptOictProhibitionsDataTask` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - IptOictParkingsProhibitionsDataSource (http) - json formát - stahuje se z url uvedené v `parking_sources`, sloupec `datasource_prohibitions` - transformace - [IptOictParkingProhibitionsTransformation](../src/integration-engine/transformations/IptOictParkingProhibitionsTransformation.ts) - transformace plateb - data modely - ParkingProhibitionsModel -> (schéma parkings) `parking_prohibitions` #### Task _SaveIptOictParkingDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveIptOictPaymentsData` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - IptOictPaymentsDataSource (http) - json formát - statická data - transformace - [IptOictPaymentsTransformation](../src/integration-engine/transformations/IptOictPaymentsTransformation.ts) - transformace plateb - data modely - PaymentModel -> (schéma parkings) `parking_payments` #### Task _GenerateIptOictTariffsJobsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.generateIptOictTariffsJobs` - parametry: - bez parametrů - závislé fronty - název: `dataplatform.parkings.saveIptOictTariffsData` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - `parking_sources` - záznamy obsahují url datového zdroje v `datasource_tariffs` #### Task _SaveIptOictTariffsDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveIptOictTariffsData` - parametry: - source: `jméno zdroje` = `source` - datové zdroje - IptOictTariffsDataSource (http) - statická data - transformace - [IptOictTariffsTransformation](../src/integration-engine/transformations/IptOictTariffsTransformation.ts) - transformace tarifů parkovišť - data modely - ParkingTariffsModel -> (schéma parkings) `parkings_tariffs` - ParkingModel -> (schéma parkings) `parkings` #### Task _GenerateIptOictParkingMachinesJobsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.generateIptOictParkingMachinesTask` - parametry: - bez parametrů - závislé fronty - název: `dataplatform.parkings.saveIptOictParkingMachines` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - `parking_sources` - záznamy obsahují url datového zdroje v `datasource_parking_machines` #### Task _SaveIptOictParkingMachinesDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveIptOictParkingMachines` - parametry: - source: `jméno zdroje` = `source` - datové zdroje - IptOictParkingMachinesDatasource (http) - statická data - transformace - [IptOictParkingMachinesTransformation](../src/integration-engine/transformations/IptOictParkingMachinesTransformation.ts) - transformace tarifů parkovišť - data modely - ParkingMachinesModel -> (schéma parkings) `parking_machines` #### Task _SaveIsphkMeasurementsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveIsphkDataTask` - parametry: - ([Data example](../test/input-gateway/data/parkingIsphkInput.json)) - datové zdroje - IG - závislé fronty - název: `input.parkings.saveIsphkDataTask` - transformace - [IsphkMeasurementTransformation](../src/integration-engine/transformations/iptoict/IsphkMeasurementTransformation.ts) - transformace measurements - data modely - parkingsMeasurementsModel -> `parkings_measurements_part` - parkingsMeasurementsActualModel -> `parkings_measurements_actual` #### Task _SaveBedrichovDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveBedrichovDataTask` - parametry: - ([Data example](../test/integration-engine/data/bedrichov-input-data.ts)) - datové zdroje - dataSource (http) - transformace - [BedrichovMeasurementsTransformation](../src/integration-engine/transformations/BedrichovMeasurementsTransformation.ts) - transformace measurements - data modely - parkingsMeasurementsModel -> `parkings_measurements_part` - parkingsMeasurementsActualModel -> `parkings_measurements_actual` #### Task _SavePmdpMeasurementsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.savePmdpMeasurements` - parametry: - ([Data example](../src/integration-engine/workers/schemas/PmdpTaskTypeSchema.ts)) - datové zdroje - PmdpMeasurementsDataSourceFactory (http) - xml formát - dynamická data - obohacené o info z `parkings` tabulky (manuální zdroj IPT OICT) - transformace - [PmdpMeasurementTransformation](../src/integration-engine/transformations/pmdp/PmdpMeasurementTransformation.ts) - transformace measurements - data modely - parkingsMeasurementsModel -> `parkings_measurements_part` - parkingsMeasurementsActualModel -> `parkings_measurements_actual` #### Task _GenerateGreenCenterMeasurementJobsTask_ - generuje zprávy s parametrem `sourceId` pro `saveGreenCenterMeasurements` - vstupní rabbitmq fronta - název: `dataplatform.parkings.generateGreenCenterMeasurementJobs` - bez parametrů - závislé fronty - název: `input.parkings.saveGreenCenterMeasurements` - parametry: - sourceId: `source_id` dle `parkings` - datové zdroje - `parkings` - záznamy se source 'greencenter' #### Task _SaveGreenCenterMeasurementsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveGreenCenterMeasurements` - parametry: - sourceId: `source_id` dle `parkings` - datové zdroje - dataSource (http) - transformace - [GreenCenterMeasurementTransformation](../src/integration-engine/transformations/greencenter/GreenCenterMeasurementTransformation.ts) - transformace measurements - data modely - parkingsMeasurementsModel -> `parkings_measurements_part` - parkingsMeasurementsActualModel -> `parkings_measurements_actual` #### Task _CalculateAverageOccupancyTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.calculateAverageOccupancy` - bez parametrů - datové zdroje - `parkings_measurement_part` tabulka - data modely - ParkingAverageOccupancyModel -> (schéma parkings) `parkings_average_occupancy` #### Task _generateIptOictEntrancesJobsTask_ - generuje zprávy s parametrem `source` pro `SaveIptOictEntrancesDataTask` - vstupní rabbitmq fronta - název: `dataplatform.parkings.generateIptOictEntrancesJobsTask` - bez parametrů - závislé fronty - název: `dataplatform.parkings.saveIptOictEntrancesData` - parametry: - source: `jméno zdroje` dle. `parking_sources` - datové zdroje - `parking_sources` - záznamy obsahují url datového zdroje v `datasource_entrances` #### Task _SaveIptOictEntrancesDataTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveIptOictEntrancesData` - parametr je zdroj (source) - zprávy s parametrem generuje `generateIptOictEntrancesJobsTask` přes stejnojmennou frontu bez parametrů - datové zdroje - geojson formát - data se stahují z url uvedené v `parking_sources`, sloupec `datasource_entrances` - transformace - [IptOictEntrancesTransformation](../src/integration-engine/transformations/iptoict/IptOictEntrancesTransformation.ts) - data modely - EntranceModel -> (schéma parkings) `parking_entrances` #### Task _SaveTskOffStreetMeasurementsTask_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveTskOffStreetMeasurements` - parametry: - ([Data example](../src/schema-definitions/datasources/tsk/TskOffstreetMeasurementSchema.ts)) - datové zdroje - TskOffStreetMeasurementsDataSource (http) - json formát - dynamická data - transformace - [TskOffStreetMeasurementsTransformation](../src/integration-engine/transformations/tsk/TskOffStreetMeasurementsTransformation.ts) - transformace measurements - data modely - parkingsMeasurementsModel -> `parkings_measurements_part` - parkingsMeasurementsActualModel -> `parkings_measurements_actual` ### Worker _ParkingsWorker_ #### _saveKoridConfToDB_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveKoridConfToDB` - bez parametrů - datové zdroje - IG - transformace - [KoridParkingConfigTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/KoridParkingConfigTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel` - data modely - parkingsModel -> `parkings` - ParkingsLocationRepository -> `parkings_location` #### _saveKoridDataToDB_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.saveKoridDataToDB` - bez parametrů - datové zdroje - IG - transformace - [KoridParkingDataTransformation](https://gitlab.com/operator-ict/golemio/code/modules/parkings/-/blob/development/src/integration-engine/KoridParkingDataTransformation.ts) - mapování pro `parkingsModel` a `parkingsLocationModel` - data modely - parkingsMeasurementsModel -> `parkings_measurements_part` - parkingsMeasurementsActualModel -> `parkings_measurements_actual` ### ZtpParkingZonesWorker #### _updateZtpParkings_ - vstupní rabbitmq fronta - název: `dataplatform.parkings.updateZtpParkings` - bez parametrů - datové zdroje - JSON stahovaný z IPR - frekvence stahování: denně v 5 ráno (`0 5 */1 * *`) - transformace Mapování `IZtpParkingJsonFeature` na `IParking` + doplnění o adresu. Získává se z Photon API metodou `GeocodeApi.getExtendedAddressFromPhoton` v modulu Core. - data modely - parkingsModel -> `parkings` ### Worker _StaticTariffsWorker_ a _UpdateStaticTariffsTask_ - vstupní rabbitmq fronta: - název: `updateStaticTariffs` - bez parametrů - datový zdroj - JSON stahovaný ze zdroje IPT - [příklad vstupních dat](../test/integration-engine/data/StaticParkingTariffsData.json) - transformace - mapování na `IParkingTariff` - `relations` mapuje `StaticTariffsMatcher` tak, že do příslušného `IParking` doplní id tarifu, pokud je toto null - data modely - parkingsModel -> `parkings` - parkingTariffsmodel -> `parkings_tariffs` ### Worker ParkingSourcesWorker - ukládá data z queue `updateParkingSource` do db - zdroj je IG přes `ParkingSourcesRouter` - transformace není ### ParkomatsWorker #### _RefreshDataInDbTask_ - vstupní rabbitmq fronta: - název: `refreshDataInDB` - optional paramtery - from - to - datový zdroj - JSON stahovaný z API - transformace - Mapovani z `IParkomatInput` na `IParkomatDto` - data modely - `parkomats` ### ParkomatsWorker #### _RefreshDataInDbTask_ - vstupní rabbitmq fronta: - název: `refreshDataInDB` - optional paramtery - from - to - datový zdroj - JSON stahovaný z API - transformace - Mapovani z `IParkomatInput` na `IParkomatDto` - data modely - `parkomats` ### UpdateAddressWorker #### _UpdateAddressTask_ - vstupní rabbitmq fronta: - název: `updateAddress` - parametry - id - POINT - id je z tabulky parkings - obohacuje id o adresu, která vychází z centroidu geometrie daného parkoviště a získává se z Photon API metodou `GeocodeApi.getExtendedAddressFromPhoton` v modulu Core #### _UpdateLocationAddressTask_ - vstupní rabbitmq fronta: - název: `UpdateLocationAddressTask` - parametry - id - POINT - id je z tabulky parkings_location - obohacuje id o adresu, která vychází z centroidu geometrie daného parkoviště a získává se z Photon API metodou `GeocodeApi.getExtendedAddressFromPhoton` v modulu Core #### _UpdateAddressAndNameTask_ - slouží pouze pro ztp parkoviště - vstupní rabbitmq fronta: - název: `updateAddress` - parametry - id - POINT - id je z tabulky parkings s parking.source "ipr" - obohacuje id o adresu, která vychází z centroidu geometrie daného parkoviště a získává se z Photon API metodou `GeocodeApi.getExtendedAddressFromPhoton` v modulu Core #### _UpdateAllParkingAdresses_ - vstupní rabbitmq fronta: - název: `updateAllParkingAdresses` - bez parametru - aktualizuje při každém běhu dávku adres z Photonu v tabulce parkings. Dávkuje se tak, aby se nepřetěžoval Photon. #### _UpdateAllParkingsLocationAdresses_ - vstupní rabbitmq fronta: - název: `updateAllParkingsLocationAdresses` - bez parametru - aktualizuje při každém běhu dávku adres z Photonu v tabulce parkings_location. Dávkuje se tak, aby se nepřetěžoval Photon. #### _UpdateMissingParkingAdressesTask_ - vstupní rabbitmq fronta: - název: `updateMissingParkingAdresses` - bez parametru - doplní při každém běhu chybějící adresy v tabulce parkings. #### _UpdateMissingParkingsLocationAdressesTask_ - vstupní rabbitmq fronta: - název: `updateMissingParkingsLocationAdresses` - bez parametru - doplní při každém běhu chybějící adresy v tabulce parkings_location. ## Uložení dat - typ databáze - PSQL - databázové schéma - ![parkings er diagram](assets/parkings_erd.png) - retence dat - `parkingsModel`, `parkingsLocationModel`, `parkingsMeasurementsActualModel`, `parkingsTariffsModel` update - `parkingsMeasurementsModel` historizace bez promazávání - `ParkingPaymentsRepository` - update s promazávaním dle zdroje ## Output API ### Obecné - Zdroj pro api - PSQL databáze viz výše - OpenAPI dokumentace - [OpenAPI](./openapi-output.yaml) - veřejné / neveřejné endpointy - částečně veřejná na úrovni filtrování podle poskytovatele dat - verze 3 neveřejná - Ořezání dle zájmového regionu u endpointů parking machines a parkings[statický soubor](../static-data/geojson/parkoviste_orez_okresy_max.geojson) - AsyncApi dokumentace - [AsyncApi](./asyncapi.yaml) #### _/v2/parking_ #### _/v2/parking/:id_ - zdrojové tabulky - parkings - parkings_measurements_actual - implementováno dodatečně - `reservation_url` - přidáno volitelný atribut, který použijeme v datech od MPLA - Nový číselník `payment_methods`. Example: `{ payment_methods: ["card_online", "cash"] }` #### _/v2/parking/detail_ #### _/v2/parking/detail/:id_ - zdrojové tabulky - parkings - parkings_location #### _/v2/parking/tariffs/_ #### _/v2/parking/tariffs/:tariffId_ - zdrojové tabulky - parkings_tariffs #### _/v2/parking/measurements_ - zdrojové tabulky - parkings_measurements_part - implementováno dodatečně - response header (`Link`) obsahuje metadata k předchozí a následující stránce - implementována možnost dotazování pomocí parametrů `limit` a `offset` #### _/v3/parking_ - zdrojové tabulky - parkings (filtrováno skrz pohled `v_parkings_filtered`) - v_parkings_filtered filtruje parkoviště která se překrývají s tím, že naše zdroje jsou nadřazeny osm - parkings_secondary (sekundární zdroj aktuálně pouze data z osm, můžou obsahovat duplicitní prvky k primárním zdrojům) - parkings_location - parking_entrances - již integrováno několik dodavatelů (dle `parking_sources`) - nový formát výstupu viz open api dokumentace - omezení geometrie na zájmový region #### _/v3/parking/:id_ - zdrojové tabulky - parkings - parkings_secondary - parkings_location - parking_entrances #### _/v3/parking/:id/average-occupancy_ - zdrojové tabulky - `parkings_average_occupancy` - zobrazí průměrnou zaplněnost pro dané parkoviště #### _/v3/parking-measurements_ - zdrojové tabulky - `v_parkings_latest_measurements` - zobrazí nejnovější měření parkoviště (za max 1h) #### _/v3/parking-tariff_ - zdrojové tabulky - parkings_tariffs - na výstupu děleno do charge bands a charges - pod jedním tariffem může být více charge bands ~ každý řádek se stejným `tariff_id` je jeden charge band - `valid_from` a `valid_to` se vztahují k charge band se vypočítá jako min a maximum z `valid_from` a `valid_to` ze všech chargů - pod jedním charge band může být více charges pozná se podle `charge_band_name` #### _/v3/parking-tariff/:id_ - zdrojové tabulky - parkings_tariffs - zobrazí konkrétní tariff, data stejná jako v `_/v3/parking-tariff_` #### _/v3/parking-machines_ - zdrojové tabulky - parkings_machines - seznam parkovacích automatů s geometrií - `type` nabývá hodnot: `payment_machine, info_box - omezení geometrie na zájmový region #### _/v3/parking-machines/:id_ - zdrojové tabulky - parkings_machines - zobrazí konkrétní parkovací automat, data stejná jako v `_/v3/parking-machines_` #### _/v3/parking-sources_ - zdrojové tabulky - parkings_sources - zobrazí dostupné datové zdroje #### Open data k _/v3/_ endpointům - Omezení na open data / vše se řídí interním parametrem `isRestrictedToOpenData`. Ten je nutné nastavit ve všech rolích v pp, které mají přístup k `/v3/` endpointům. Povolené hodnoty: `true` / `false`. Pro opendataře je nutné nastavit limitaci `is-empty`.