From eb94e17c883e37cbaed584475117d22ada3d2d73 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 14 Nov 2024 17:49:58 +0100 Subject: [PATCH] wip --- angular/openapi.json | 2 +- angular/openapi.yaml | 4891 +++++------------ .../filter-bar/filter-bar.component.html | 34 +- .../filter-bar/filter-bar.component.ts | 71 +- .../two-column/two-column.component.html | 7 + .../app/_components/list/list.component.html | 2 + .../app/_components/list/list.component.ts | 8 +- .../_components/paging/paging.component.html | 5 +- .../_components/paging/paging.component.ts | 7 + angular/src/app/_forms/apiForms.ts | 691 +-- .../AbstractCreateDataComponent.ts | 19 + .../CreateDataComponentInterface.ts | 12 + angular/src/app/_models/priceError.ts | 4 - angular/src/app/_models/snipingResponse.ts | 11 - .../_views/base-data/base-data.component.html | 19 + .../_views/base-data/base-data.component.scss | 0 .../base-data/base-data.component.spec.ts | 23 + .../_views/base-data/base-data.component.ts | 10 + .../_views/dashboard/dashboard.component.html | 9 +- .../_views/dashboard/dashboard.component.ts | 1 - .../location-list.component.html | 9 + .../location-list.component.scss | 0 .../location-list.component.spec.ts | 23 + .../location-list/location-list.component.ts | 88 + .../_views/location/location.component.html | 1 + .../_views/location/location.component.scss | 0 .../location/location.component.spec.ts | 23 + .../app/_views/location/location.component.ts | 10 + .../shipping-company-list.component.html | 9 + .../shipping-company-list.component.scss | 0 .../shipping-company-list.component.spec.ts | 23 + .../shipping-company-list.component.ts | 80 + .../shipping-company.component.html | 1 + .../shipping-company.component.scss | 0 .../shipping-company.component.spec.ts | 23 + .../shipping-company.component.ts | 10 + .../trip-location.component.html | 1 + .../trip-location.component.scss | 0 .../trip-location.component.spec.ts | 23 + .../trip-location/trip-location.component.ts | 10 + .../trip-work-log.component.html | 1 + .../trip-work-log.component.scss | 0 .../trip-work-log.component.spec.ts | 23 + .../trip-work-log/trip-work-log.component.ts | 10 + .../src/app/_views/trip/trip.component.html | 1 + .../src/app/_views/trip/trip.component.scss | 0 .../app/_views/trip/trip.component.spec.ts | 23 + angular/src/app/_views/trip/trip.component.ts | 10 + .../vessel-list/vessel-list.component.html | 9 + .../vessel-list/vessel-list.component.scss | 0 .../vessel-list/vessel-list.component.spec.ts | 23 + .../vessel-list/vessel-list.component.ts | 77 + .../app/_views/vessel/vessel.component.html | 1 + .../app/_views/vessel/vessel.component.scss | 0 .../_views/vessel/vessel.component.spec.ts | 23 + .../src/app/_views/vessel/vessel.component.ts | 10 + .../zone/zone-list/zone-list.component.html | 10 + .../zone/zone-list/zone-list.component.scss | 0 .../zone-list/zone-list.component.spec.ts | 23 + .../zone/zone-list/zone-list.component.ts | 79 + .../zone/zone-new/zone-new.component.html | 1 + .../zone/zone-new/zone-new.component.scss | 0 .../zone/zone-new/zone-new.component.spec.ts | 23 + .../zone/zone-new/zone-new.component.ts | 43 + .../src/app/_views/zone/zone.component.html | 1 + .../src/app/_views/zone/zone.component.scss | 0 .../app/_views/zone/zone.component.spec.ts | 23 + angular/src/app/_views/zone/zone.component.ts | 10 + angular/src/app/app-routing.module.ts | 15 + angular/src/app/app.module.ts | 26 + .../app/core/api/v1/.openapi-generator/FILES | 96 +- angular/src/app/core/api/v1/api/api.ts | 50 +- .../app/core/api/v1/api/location.service.ts | 434 ++ .../app/core/api/v1/api/loginCheck.service.ts | 2 +- .../core/api/v1/api/mediaObject.service.ts | 2 +- .../api/v1/api/shippingCompany.service.ts | 434 ++ .../src/app/core/api/v1/api/trip.service.ts | 419 ++ .../core/api/v1/api/tripLocation.service.ts | 419 ++ .../src/app/core/api/v1/api/user.service.ts | 90 +- .../app/core/api/v1/api/userTrip.service.ts | 419 ++ .../api/v1/api/userTripLocation.service.ts | 419 ++ .../api/v1/api/userTripWorkLog.service.ts | 419 ++ .../src/app/core/api/v1/api/vessel.service.ts | 434 ++ .../src/app/core/api/v1/api/zone.service.ts | 434 ++ .../apiLocationsGetCollection200Response.ts | 23 + ...LocationsGetCollection200ResponseSearch.ts | 21 + ...Collection200ResponseSearchMappingInner.ts | 20 + ...piLocationsGetCollection200ResponseView.ts | 22 + ...apiMediaObjectsGetCollection200Response.ts | 14 +- ...ippingCompaniesGetCollection200Response.ts | 23 + ...piTripLocationsGetCollection200Response.ts | 23 + .../model/apiTripsGetCollection200Response.ts | 23 + ...erTripLocationsGetCollection200Response.ts | 23 + ...serTripWorkLogsGetCollection200Response.ts | 23 + .../apiUserTripsGetCollection200Response.ts | 23 + .../model/apiUsersGetCollection200Response.ts | 14 +- .../apiVesselsGetCollection200Response.ts | 23 + .../model/apiZonesGetCollection200Response.ts | 23 + angular/src/app/core/api/v1/model/location.ts | 23 + .../app/core/api/v1/model/locationJsonld.ts | 28 + .../api/v1/model/locationJsonldContext.ts | 20 + .../v1/model/locationJsonldContextOneOf.ts | 28 + .../api/v1/model/loginCheckPost200Response.ts | 2 +- .../api/v1/model/loginCheckPostRequest.ts | 2 +- .../model/mediaObjectJsonldMediaObjectRead.ts | 6 +- angular/src/app/core/api/v1/model/models.ts | 72 +- .../app/core/api/v1/model/shippingCompany.ts | 21 + .../api/v1/model/shippingCompanyJsonld.ts | 25 + angular/src/app/core/api/v1/model/trip.ts | 27 + .../src/app/core/api/v1/model/tripJsonld.ts | 33 + .../src/app/core/api/v1/model/tripLocation.ts | 23 + .../core/api/v1/model/tripLocationJsonld.ts | 29 + angular/src/app/core/api/v1/model/user.ts | 31 + .../src/app/core/api/v1/model/userJsonld.ts | 6 +- angular/src/app/core/api/v1/model/userTrip.ts | 25 + .../app/core/api/v1/model/userTripJsonld.ts | 31 + .../app/core/api/v1/model/userTripLocation.ts | 23 + .../api/v1/model/userTripLocationJsonld.ts | 29 + .../app/core/api/v1/model/userTripWorkLog.ts | 25 + .../api/v1/model/userTripWorkLogJsonld.ts | 31 + angular/src/app/core/api/v1/model/vessel.ts | 22 + .../src/app/core/api/v1/model/vesselJsonld.ts | 27 + angular/src/app/core/api/v1/model/zone.ts | 21 + .../src/app/core/api/v1/model/zoneJsonld.ts | 25 + angular/src/assets/i18n/en.json | 23 + ...Lods certificeringer - Januar 2024.numbers | Bin 0 -> 236206 bytes docs/shipping-class-diagramV2.mermaid | 110 + httpdocs/exportApi.sh | 2 +- httpdocs/migrations/Version20241114121031.php | 75 + httpdocs/src/ApiResource/LocationApi.php | 77 + .../src/ApiResource/ShippingCompanyApi.php | 57 + httpdocs/src/ApiResource/TripApi.php | 105 + httpdocs/src/ApiResource/TripLocationApi.php | 81 + httpdocs/src/ApiResource/UserApi.php | 7 +- httpdocs/src/ApiResource/UserTripApi.php | 87 + .../src/ApiResource/UserTripLocationApi.php | 81 + .../src/ApiResource/UserTripWorkLogApi.php | 100 + httpdocs/src/ApiResource/VesselApi.php | 74 + httpdocs/src/ApiResource/ZoneApi.php | 57 + httpdocs/src/Entity/Location.php | 106 + httpdocs/src/Entity/ShippingCompany.php | 63 + httpdocs/src/Entity/Trip.php | 169 + httpdocs/src/Entity/TripLocation.php | 83 + httpdocs/src/Entity/UserTrip.php | 176 + httpdocs/src/Entity/UserTripLocation.php | 83 + httpdocs/src/Entity/UserTripWorkLog.php | 119 + httpdocs/src/Entity/Vessel.php | 78 + httpdocs/src/Entity/Zone.php | 62 + .../src/Mapper/LocationApiToEntityMapper.php | 59 + .../src/Mapper/LocationEntityToApiMapper.php | 49 + .../ShippingCompanyApiToEntityMapper.php | 43 + .../ShippingCompanyEntityToApiMapper.php | 42 + httpdocs/src/Mapper/TripApiToEntityMapper.php | 84 + httpdocs/src/Mapper/TripEntityToApiMapper.php | 60 + .../Mapper/TripLocationApiToEntityMapper.php | 66 + .../Mapper/TripLocationEntityToApiMapper.php | 52 + .../src/Mapper/UserTripApiToEntityMapper.php | 74 + .../src/Mapper/UserTripEntityToApiMapper.php | 54 + .../UserTripLocationApiToEntityMapper.php | 70 + .../UserTripLocationEntityToApiMapper.php | 52 + .../UserTripWorkLogApiToEntityMapper.php | 78 + .../UserTripWorkLogEntityToApiMapper.php | 57 + .../src/Mapper/VesselApiToEntityMapper.php | 59 + .../src/Mapper/VesselEntityToApiMapper.php | 47 + httpdocs/src/Mapper/ZoneApiToEntityMapper.php | 46 + httpdocs/src/Mapper/ZoneEntityToApiMapper.php | 36 + .../src/Repository/LocationRepository.php | 58 + .../Repository/ShippingCompanyRepository.php | 53 + .../src/Repository/TripLocationRepository.php | 77 + httpdocs/src/Repository/TripRepository.php | 73 + .../Repository/UserTripLocationRepository.php | 77 + .../src/Repository/UserTripRepository.php | 77 + .../Repository/UserTripWorkLogRepository.php | 90 + httpdocs/src/Repository/VesselRepository.php | 58 + httpdocs/src/Repository/ZoneRepository.php | 53 + 175 files changed, 10749 insertions(+), 4399 deletions(-) create mode 100644 angular/src/app/_interfaces/AbstractCreateDataComponent.ts create mode 100644 angular/src/app/_interfaces/CreateDataComponentInterface.ts delete mode 100644 angular/src/app/_models/priceError.ts delete mode 100644 angular/src/app/_models/snipingResponse.ts create mode 100644 angular/src/app/_views/base-data/base-data.component.html create mode 100644 angular/src/app/_views/base-data/base-data.component.scss create mode 100644 angular/src/app/_views/base-data/base-data.component.spec.ts create mode 100644 angular/src/app/_views/base-data/base-data.component.ts create mode 100644 angular/src/app/_views/location/location-list/location-list.component.html create mode 100644 angular/src/app/_views/location/location-list/location-list.component.scss create mode 100644 angular/src/app/_views/location/location-list/location-list.component.spec.ts create mode 100644 angular/src/app/_views/location/location-list/location-list.component.ts create mode 100644 angular/src/app/_views/location/location.component.html create mode 100644 angular/src/app/_views/location/location.component.scss create mode 100644 angular/src/app/_views/location/location.component.spec.ts create mode 100644 angular/src/app/_views/location/location.component.ts create mode 100644 angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.html create mode 100644 angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.scss create mode 100644 angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.spec.ts create mode 100644 angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.ts create mode 100644 angular/src/app/_views/shipping-company/shipping-company.component.html create mode 100644 angular/src/app/_views/shipping-company/shipping-company.component.scss create mode 100644 angular/src/app/_views/shipping-company/shipping-company.component.spec.ts create mode 100644 angular/src/app/_views/shipping-company/shipping-company.component.ts create mode 100644 angular/src/app/_views/trip-location/trip-location.component.html create mode 100644 angular/src/app/_views/trip-location/trip-location.component.scss create mode 100644 angular/src/app/_views/trip-location/trip-location.component.spec.ts create mode 100644 angular/src/app/_views/trip-location/trip-location.component.ts create mode 100644 angular/src/app/_views/trip-work-log/trip-work-log.component.html create mode 100644 angular/src/app/_views/trip-work-log/trip-work-log.component.scss create mode 100644 angular/src/app/_views/trip-work-log/trip-work-log.component.spec.ts create mode 100644 angular/src/app/_views/trip-work-log/trip-work-log.component.ts create mode 100644 angular/src/app/_views/trip/trip.component.html create mode 100644 angular/src/app/_views/trip/trip.component.scss create mode 100644 angular/src/app/_views/trip/trip.component.spec.ts create mode 100644 angular/src/app/_views/trip/trip.component.ts create mode 100644 angular/src/app/_views/vessel/vessel-list/vessel-list.component.html create mode 100644 angular/src/app/_views/vessel/vessel-list/vessel-list.component.scss create mode 100644 angular/src/app/_views/vessel/vessel-list/vessel-list.component.spec.ts create mode 100644 angular/src/app/_views/vessel/vessel-list/vessel-list.component.ts create mode 100644 angular/src/app/_views/vessel/vessel.component.html create mode 100644 angular/src/app/_views/vessel/vessel.component.scss create mode 100644 angular/src/app/_views/vessel/vessel.component.spec.ts create mode 100644 angular/src/app/_views/vessel/vessel.component.ts create mode 100644 angular/src/app/_views/zone/zone-list/zone-list.component.html create mode 100644 angular/src/app/_views/zone/zone-list/zone-list.component.scss create mode 100644 angular/src/app/_views/zone/zone-list/zone-list.component.spec.ts create mode 100644 angular/src/app/_views/zone/zone-list/zone-list.component.ts create mode 100644 angular/src/app/_views/zone/zone-new/zone-new.component.html create mode 100644 angular/src/app/_views/zone/zone-new/zone-new.component.scss create mode 100644 angular/src/app/_views/zone/zone-new/zone-new.component.spec.ts create mode 100644 angular/src/app/_views/zone/zone-new/zone-new.component.ts create mode 100644 angular/src/app/_views/zone/zone.component.html create mode 100644 angular/src/app/_views/zone/zone.component.scss create mode 100644 angular/src/app/_views/zone/zone.component.spec.ts create mode 100644 angular/src/app/_views/zone/zone.component.ts create mode 100644 angular/src/app/core/api/v1/api/location.service.ts create mode 100644 angular/src/app/core/api/v1/api/shippingCompany.service.ts create mode 100644 angular/src/app/core/api/v1/api/trip.service.ts create mode 100644 angular/src/app/core/api/v1/api/tripLocation.service.ts create mode 100644 angular/src/app/core/api/v1/api/userTrip.service.ts create mode 100644 angular/src/app/core/api/v1/api/userTripLocation.service.ts create mode 100644 angular/src/app/core/api/v1/api/userTripWorkLog.service.ts create mode 100644 angular/src/app/core/api/v1/api/vessel.service.ts create mode 100644 angular/src/app/core/api/v1/api/zone.service.ts create mode 100644 angular/src/app/core/api/v1/model/apiLocationsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearch.ts create mode 100644 angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearchMappingInner.ts create mode 100644 angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseView.ts create mode 100644 angular/src/app/core/api/v1/model/apiShippingCompaniesGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiTripLocationsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiTripsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiUserTripLocationsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiUserTripWorkLogsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiUserTripsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiVesselsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiZonesGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/location.ts create mode 100644 angular/src/app/core/api/v1/model/locationJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/locationJsonldContext.ts create mode 100644 angular/src/app/core/api/v1/model/locationJsonldContextOneOf.ts create mode 100644 angular/src/app/core/api/v1/model/shippingCompany.ts create mode 100644 angular/src/app/core/api/v1/model/shippingCompanyJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/trip.ts create mode 100644 angular/src/app/core/api/v1/model/tripJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/tripLocation.ts create mode 100644 angular/src/app/core/api/v1/model/tripLocationJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/user.ts create mode 100644 angular/src/app/core/api/v1/model/userTrip.ts create mode 100644 angular/src/app/core/api/v1/model/userTripJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/userTripLocation.ts create mode 100644 angular/src/app/core/api/v1/model/userTripLocationJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/userTripWorkLog.ts create mode 100644 angular/src/app/core/api/v1/model/userTripWorkLogJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/vessel.ts create mode 100644 angular/src/app/core/api/v1/model/vesselJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/zone.ts create mode 100644 angular/src/app/core/api/v1/model/zoneJsonld.ts create mode 100644 docs/Matrix over Lods certificeringer - Januar 2024.numbers create mode 100644 docs/shipping-class-diagramV2.mermaid create mode 100644 httpdocs/migrations/Version20241114121031.php create mode 100644 httpdocs/src/ApiResource/LocationApi.php create mode 100644 httpdocs/src/ApiResource/ShippingCompanyApi.php create mode 100644 httpdocs/src/ApiResource/TripApi.php create mode 100644 httpdocs/src/ApiResource/TripLocationApi.php create mode 100644 httpdocs/src/ApiResource/UserTripApi.php create mode 100644 httpdocs/src/ApiResource/UserTripLocationApi.php create mode 100644 httpdocs/src/ApiResource/UserTripWorkLogApi.php create mode 100644 httpdocs/src/ApiResource/VesselApi.php create mode 100644 httpdocs/src/ApiResource/ZoneApi.php create mode 100644 httpdocs/src/Entity/Location.php create mode 100644 httpdocs/src/Entity/ShippingCompany.php create mode 100644 httpdocs/src/Entity/Trip.php create mode 100644 httpdocs/src/Entity/TripLocation.php create mode 100644 httpdocs/src/Entity/UserTrip.php create mode 100644 httpdocs/src/Entity/UserTripLocation.php create mode 100644 httpdocs/src/Entity/UserTripWorkLog.php create mode 100644 httpdocs/src/Entity/Vessel.php create mode 100644 httpdocs/src/Entity/Zone.php create mode 100644 httpdocs/src/Mapper/LocationApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/LocationEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/ShippingCompanyApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/ShippingCompanyEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/TripApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/TripEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/TripLocationApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/TripLocationEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/UserTripApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/UserTripEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/UserTripLocationApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/UserTripLocationEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/UserTripWorkLogApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/UserTripWorkLogEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/VesselApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/VesselEntityToApiMapper.php create mode 100644 httpdocs/src/Mapper/ZoneApiToEntityMapper.php create mode 100644 httpdocs/src/Mapper/ZoneEntityToApiMapper.php create mode 100644 httpdocs/src/Repository/LocationRepository.php create mode 100644 httpdocs/src/Repository/ShippingCompanyRepository.php create mode 100644 httpdocs/src/Repository/TripLocationRepository.php create mode 100644 httpdocs/src/Repository/TripRepository.php create mode 100644 httpdocs/src/Repository/UserTripLocationRepository.php create mode 100644 httpdocs/src/Repository/UserTripRepository.php create mode 100644 httpdocs/src/Repository/UserTripWorkLogRepository.php create mode 100644 httpdocs/src/Repository/VesselRepository.php create mode 100644 httpdocs/src/Repository/ZoneRepository.php diff --git a/angular/openapi.json b/angular/openapi.json index ff3bd69..8e5af6b 100644 --- a/angular/openapi.json +++ b/angular/openapi.json @@ -1 +1 @@ -{"openapi":"3.1.0","info":{"title":"Hello API Platform","description":"","version":"1.0.0"},"servers":[{"url":"\/","description":""}],"paths":{"\/api\/account_trade_pile_items":{"get":{"operationId":"api_account_trade_pile_items_get_collection","tags":["AccountTradePileItem"],"responses":{"200":{"description":"AccountTradePileItem collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountTradePileItem.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of AccountTradePileItem resources.","description":"Retrieves the collection of AccountTradePileItem resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"account","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"account[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateItem","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"candidateItem[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"accountTmOpenFilter","in":"query","description":"Filter items based on the tmOpen value of the associated account","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"boolean"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/account_trade_pile_items\/{id}":{"get":{"operationId":"api_account_trade_pile_items_id_get","tags":["AccountTradePileItem"],"responses":{"200":{"description":"AccountTradePileItem resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/AccountTradePileItem.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a AccountTradePileItem resource.","description":"Retrieves a AccountTradePileItem resource.","parameters":[{"name":"id","in":"path","description":"AccountTradePileItem identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_account_trade_pile_items_id_patch","tags":["AccountTradePileItem"],"responses":{"200":{"description":"AccountTradePileItem resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/AccountTradePileItem.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the AccountTradePileItem resource.","description":"Updates the AccountTradePileItem resource.","parameters":[{"name":"id","in":"path","description":"AccountTradePileItem identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated AccountTradePileItem resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/AccountTradePileItem"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/auth":{"post":{"operationId":"login_check_post","tags":["Login Check"],"responses":{"200":{"description":"User token created","content":{"application\/json":{"schema":{"type":"object","properties":{"token":{"readOnly":true,"type":"string","nullable":false}},"required":["token"]}}}}},"summary":"Creates a user token.","description":"Creates a user token.","requestBody":{"description":"The login data","content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","nullable":false},"password":{"type":"string","nullable":false}},"required":["email","password"]}}},"required":true}},"parameters":[]},"\/api\/candidate-items\/{id}\/stock-accounts":{"get":{"operationId":"api_candidate-items_idstock-accounts_get","tags":["CandidateStockAccounts"],"responses":{"200":{"description":"CandidateStockAccounts resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/CandidateStockAccounts.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves the stock and missing accounts for a candidate item","description":"Retrieves a CandidateStockAccounts resource.","parameters":[{"name":"id","in":"path","description":"Candidate Item ID","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"integer"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/candidate_stats":{"get":{"operationId":"api_candidate_stats_get_collection","tags":["CandidateStat"],"responses":{"200":{"description":"CandidateStat collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/CandidateStat.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of CandidateStat resources.","description":"Retrieves the collection of CandidateStat resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/candidate_stats\/{id}":{"get":{"operationId":"api_candidate_stats_id_get","tags":["CandidateStat"],"responses":{"200":{"description":"CandidateStat resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/CandidateStat.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a CandidateStat resource.","description":"Retrieves a CandidateStat resource.","parameters":[{"name":"id","in":"path","description":"CandidateStat identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/candidates":{"get":{"operationId":"api_candidates_get_collection","tags":["Candidate"],"responses":{"200":{"description":"Candidate collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of Candidate resources.","description":"Retrieves the collection of Candidate resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_candidates_post","tags":["Candidate"],"responses":{"201":{"description":"Candidate resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Candidate resource.","description":"Creates a Candidate resource.","parameters":[],"requestBody":{"description":"The new Candidate resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/candidates\/{id}":{"get":{"operationId":"api_candidates_id_get","tags":["Candidate"],"responses":{"200":{"description":"Candidate resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Candidate resource.","description":"Retrieves a Candidate resource.","parameters":[{"name":"id","in":"path","description":"Candidate identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_candidates_id_patch","tags":["Candidate"],"responses":{"200":{"description":"Candidate resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Candidate resource.","description":"Updates the Candidate resource.","parameters":[{"name":"id","in":"path","description":"Candidate identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Candidate resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/config":{"get":{"operationId":"api_config_get","tags":["Config"],"responses":{"200":{"description":"Config resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Config.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Config resource.","description":"Retrieves a Config resource.","parameters":[],"deprecated":false},"patch":{"operationId":"api_config_patch","tags":["Config"],"responses":{"200":{"description":"Config resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Config.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Config resource.","description":"Updates the Config resource.","parameters":[],"requestBody":{"description":"The updated Config resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Config"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/game_accounts":{"get":{"operationId":"api_game_accounts_get_collection","tags":["GameAccount"],"responses":{"200":{"description":"GameAccount collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of GameAccount resources.","description":"Retrieves the collection of GameAccount resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"owner","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"owner[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"email","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"profile","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"tmOpen","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"boolean"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_game_accounts_post","tags":["GameAccount"],"responses":{"201":{"description":"GameAccount resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a GameAccount resource.","description":"Creates a GameAccount resource.","parameters":[],"requestBody":{"description":"The new GameAccount resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/game_accounts\/{id}":{"get":{"operationId":"api_game_accounts_id_get","tags":["GameAccount"],"responses":{"200":{"description":"GameAccount resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a GameAccount resource.","description":"Retrieves a GameAccount resource.","parameters":[{"name":"id","in":"path","description":"GameAccount identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_game_accounts_id_patch","tags":["GameAccount"],"responses":{"200":{"description":"GameAccount resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the GameAccount resource.","description":"Updates the GameAccount resource.","parameters":[{"name":"id","in":"path","description":"GameAccount identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated GameAccount resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/log_account_credits":{"get":{"operationId":"api_log_account_credits_get_collection","tags":["LogAccountCredit"],"responses":{"200":{"description":"LogAccountCredit collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogAccountCredit.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogAccountCredit resources.","description":"Retrieves the collection of LogAccountCredit resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"order[creationDate]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string","enum":["asc","desc"]},"style":"form","explode":false,"allowReserved":false},{"name":"order[credits]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string","enum":["asc","desc"]},"style":"form","explode":false,"allowReserved":false},{"name":"order[revenue]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string","enum":["asc","desc"]},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_account_credits\/{id}":{"get":{"operationId":"api_log_account_credits_id_get","tags":["LogAccountCredit"],"responses":{"200":{"description":"LogAccountCredit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogAccountCredit.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogAccountCredit resource.","description":"Retrieves a LogAccountCredit resource.","parameters":[{"name":"id","in":"path","description":"LogAccountCredit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_account_profits":{"get":{"operationId":"api_log_account_profits_get_collection","tags":["LogAccountProfit"],"responses":{"200":{"description":"LogAccountProfit collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogAccountProfit.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogAccountProfit resources.","description":"Retrieves the collection of LogAccountProfit resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccount","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccount[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"isDailyProfit","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"boolean"},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccountProfile","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/log_account_profits\/{id}":{"get":{"operationId":"api_log_account_profits_id_get","tags":["LogAccountProfit"],"responses":{"200":{"description":"LogAccountProfit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogAccountProfit.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogAccountProfit resource.","description":"Retrieves a LogAccountProfit resource.","parameters":[{"name":"id","in":"path","description":"LogAccountProfit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_account_sold_items":{"get":{"operationId":"api_log_account_sold_items_get_collection","tags":["LogAccountSoldItem"],"responses":{"200":{"description":"LogAccountSoldItem collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogAccountSoldItem.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogAccountSoldItem resources.","description":"Retrieves the collection of LogAccountSoldItem resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"account","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"account[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateItem","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"candidateItem[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/log_account_sold_items\/{id}":{"get":{"operationId":"api_log_account_sold_items_id_get","tags":["LogAccountSoldItem"],"responses":{"200":{"description":"LogAccountSoldItem resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogAccountSoldItem.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogAccountSoldItem resource.","description":"Retrieves a LogAccountSoldItem resource.","parameters":[{"name":"id","in":"path","description":"LogAccountSoldItem identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_generals":{"get":{"operationId":"api_log_generals_get_collection","tags":["LogGeneral"],"responses":{"200":{"description":"LogGeneral collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogGeneral.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogGeneral resources.","description":"Retrieves the collection of LogGeneral resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccountProfile","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/log_generals\/{id}":{"get":{"operationId":"api_log_generals_id_get","tags":["LogGeneral"],"responses":{"200":{"description":"LogGeneral resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogGeneral.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogGeneral resource.","description":"Retrieves a LogGeneral resource.","parameters":[{"name":"id","in":"path","description":"LogGeneral identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_total_profits":{"get":{"operationId":"api_log_total_profits_get_collection","tags":["LogTotalProfit"],"responses":{"200":{"description":"LogTotalProfit collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogTotalProfit resources.","description":"Retrieves the collection of LogTotalProfit resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_log_total_profits_post","tags":["LogTotalProfit"],"responses":{"201":{"description":"LogTotalProfit resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a LogTotalProfit resource.","description":"Creates a LogTotalProfit resource.","parameters":[],"requestBody":{"description":"The new LogTotalProfit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/log_total_profits\/{id}":{"get":{"operationId":"api_log_total_profits_id_get","tags":["LogTotalProfit"],"responses":{"200":{"description":"LogTotalProfit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogTotalProfit resource.","description":"Retrieves a LogTotalProfit resource.","parameters":[{"name":"id","in":"path","description":"LogTotalProfit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_log_total_profits_id_patch","tags":["LogTotalProfit"],"responses":{"200":{"description":"LogTotalProfit resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the LogTotalProfit resource.","description":"Updates the LogTotalProfit resource.","parameters":[{"name":"id","in":"path","description":"LogTotalProfit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated LogTotalProfit resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/media_objects":{"get":{"operationId":"api_media_objects_get_collection","tags":["MediaObject"],"responses":{"200":{"description":"MediaObject collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of MediaObject resources.","description":"Retrieves the collection of MediaObject resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_media_objects_post","tags":["MediaObject"],"responses":{"201":{"description":"MediaObject resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a MediaObject resource.","description":"Creates a MediaObject resource.","parameters":[],"requestBody":{"description":"","content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}},"required":false},"deprecated":false},"parameters":[]},"\/api\/media_objects\/{id}":{"get":{"operationId":"api_media_objects_id_get","tags":["MediaObject"],"responses":{"200":{"description":"MediaObject resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a MediaObject resource.","description":"Retrieves a MediaObject resource.","parameters":[{"name":"id","in":"path","description":"MediaObject identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"delete":{"operationId":"api_media_objects_id_delete","tags":["MediaObject"],"responses":{"204":{"description":"MediaObject resource deleted"},"404":{"description":"Resource not found"}},"summary":"Removes the MediaObject resource.","description":"Removes the MediaObject resource.","parameters":[{"name":"id","in":"path","description":"MediaObject identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/mode_config":{"get":{"operationId":"api_mode_config_get","tags":["ModeConfig"],"responses":{"200":{"description":"ModeConfig resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ModeConfig.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a ModeConfig resource.","description":"Retrieves a ModeConfig resource.","parameters":[],"deprecated":false},"patch":{"operationId":"api_mode_config_patch","tags":["ModeConfig"],"responses":{"200":{"description":"ModeConfig resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ModeConfig.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the ModeConfig resource.","description":"Updates the ModeConfig resource.","parameters":[],"requestBody":{"description":"The updated ModeConfig resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/ModeConfig"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/players":{"get":{"operationId":"api_players_get_collection","tags":["Player"],"responses":{"200":{"description":"Player collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Player.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of Player resources.","description":"Retrieves the collection of Player resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_players_post","tags":["Player"],"responses":{"201":{"description":"Player resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Player resource.","description":"Creates a Player resource.","parameters":[],"requestBody":{"description":"The new Player resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/players\/{id}":{"get":{"operationId":"api_players_id_get","tags":["Player"],"responses":{"200":{"description":"Player resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Player resource.","description":"Retrieves a Player resource.","parameters":[{"name":"id","in":"path","description":"Player identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_players_id_patch","tags":["Player"],"responses":{"200":{"description":"Player resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Player resource.","description":"Updates the Player resource.","parameters":[{"name":"id","in":"path","description":"Player identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Player resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Player"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/rarities":{"get":{"operationId":"api_rarities_get_collection","tags":["Rarity"],"responses":{"200":{"description":"Rarity collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of Rarity resources.","description":"Retrieves the collection of Rarity resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_rarities_post","tags":["Rarity"],"responses":{"201":{"description":"Rarity resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Rarity resource.","description":"Creates a Rarity resource.","parameters":[],"requestBody":{"description":"The new Rarity resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/rarities\/{id}":{"get":{"operationId":"api_rarities_id_get","tags":["Rarity"],"responses":{"200":{"description":"Rarity resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Rarity resource.","description":"Retrieves a Rarity resource.","parameters":[{"name":"id","in":"path","description":"Rarity identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_rarities_id_patch","tags":["Rarity"],"responses":{"200":{"description":"Rarity resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Rarity resource.","description":"Updates the Rarity resource.","parameters":[{"name":"id","in":"path","description":"Rarity identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Rarity resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/system_stats":{"get":{"operationId":"api_system_stats_get","tags":["SystemStat"],"responses":{"200":{"description":"SystemStat resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/SystemStat.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a SystemStat resource.","description":"Retrieves a SystemStat resource.","parameters":[],"deprecated":false},"parameters":[]},"\/api\/users":{"get":{"operationId":"api_users_get_collection","tags":["User"],"responses":{"200":{"description":"User collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/User.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of User resources.","description":"Retrieves the collection of User resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"firstName","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"lastName","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"userNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_users_post","tags":["User"],"responses":{"201":{"description":"User resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a User resource.","description":"Creates a User resource.","parameters":[],"requestBody":{"description":"The new User resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/users\/{id}":{"get":{"operationId":"api_users_id_get","tags":["User"],"responses":{"200":{"description":"User resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a User resource.","description":"Retrieves a User resource.","parameters":[{"name":"id","in":"path","description":"User identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]}},"components":{"schemas":{"AccountTradePileItem":{"type":"object","description":"","deprecated":false,"properties":{"dbId":{"readOnly":true,"type":["integer","null"]},"account":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"candidateItem":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"eaId":{"readOnly":true,"type":"integer"},"eaAssetId":{"readOnly":true,"type":"integer"},"eaResourceId":{"readOnly":true,"type":"integer"},"rareFlag":{"readOnly":true,"type":"integer"},"itemType":{"readOnly":true,"type":"string"},"rating":{"readOnly":true,"type":"integer"},"contracts":{"readOnly":true,"type":["integer","null"]},"playStyle":{"readOnly":true,"type":["integer","null"]},"startingBid":{"type":"integer"},"binPrice":{"type":"integer"},"individualPrice":{"default":true,"example":true,"type":"boolean"},"minRange":{"readOnly":true,"type":"integer"},"maxRange":{"readOnly":true,"type":"integer"},"lastSalePrice":{"readOnly":true,"type":"integer"},"tradeState":{"readOnly":true,"type":["string","null"]},"eaTradeId":{"readOnly":true,"type":["integer","null"]},"rebuy":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"leagueId":{"readOnly":true,"type":["integer","null"]},"teamId":{"readOnly":true,"type":["integer","null"]},"nationId":{"readOnly":true,"type":["integer","null"]},"listCnt":{"readOnly":true,"type":"integer"},"openBidCnt":{"readOnly":true,"type":["integer","null"]},"snipedItem":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"AccountTradePileItem.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"dbId":{"readOnly":true,"type":["integer","null"]},"account":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"eaId":{"readOnly":true,"type":"integer"},"eaAssetId":{"readOnly":true,"type":"integer"},"eaResourceId":{"readOnly":true,"type":"integer"},"rareFlag":{"readOnly":true,"type":"integer"},"itemType":{"readOnly":true,"type":"string"},"rating":{"readOnly":true,"type":"integer"},"contracts":{"readOnly":true,"type":["integer","null"]},"playStyle":{"readOnly":true,"type":["integer","null"]},"startingBid":{"type":"integer"},"binPrice":{"type":"integer"},"individualPrice":{"default":true,"example":true,"type":"boolean"},"minRange":{"readOnly":true,"type":"integer"},"maxRange":{"readOnly":true,"type":"integer"},"lastSalePrice":{"readOnly":true,"type":"integer"},"tradeState":{"readOnly":true,"type":["string","null"]},"eaTradeId":{"readOnly":true,"type":["integer","null"]},"rebuy":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"leagueId":{"readOnly":true,"type":["integer","null"]},"teamId":{"readOnly":true,"type":["integer","null"]},"nationId":{"readOnly":true,"type":["integer","null"]},"listCnt":{"readOnly":true,"type":"integer"},"openBidCnt":{"readOnly":true,"type":["integer","null"]},"snipedItem":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"Candidate":{"type":"object","description":"","deprecated":false,"properties":{"dbId":{"readOnly":true,"type":["integer","null"]},"rarity":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"candidateStat":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"player":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"firstname":{"readOnly":true,"type":["string","null"]},"lastname":{"readOnly":true,"type":["string","null"]},"nickname":{"readOnly":true,"type":["string","null"]},"fullDisplayInfo":{"readOnly":true,"type":["string","null"]},"eaAssetId":{"readOnly":true,"type":["integer","null"]},"eaResourceId":{"readOnly":true,"type":["integer","null"]},"rareFlag":{"readOnly":true,"type":["integer","null"]},"rarityName":{"readOnly":true,"type":["string","null"]},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"cardImageUrl":{"readOnly":true,"type":["string","null"]},"stockCountTotal":{"readOnly":true,"type":["integer","null"]},"stockCountReal":{"readOnly":true,"type":["integer","null"]},"futBinId":{"type":["integer","null"]},"futBinName":{"type":["string","null"]},"futBinPrice":{"type":["integer","null"]},"futBinSellingPrice":{"type":["integer","null"]},"lastFutBinUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"futWizId":{"type":["integer","null"]},"futWizPrice":{"type":["integer","null"]},"futwizName":{"type":["string","null"]},"futWizSellingPrice":{"type":["integer","null"]},"lastFutWizUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"rating":{"type":["integer","null"]},"highestBuyBinPrice":{"type":["integer","null"]},"sellStartingBid":{"type":["integer","null"]},"sellBinPrice":{"type":["integer","null"]},"lastFoundMinRange":{"type":["integer","null"]},"lastFoundMaxRange":{"type":["integer","null"]},"lastFoundLowestBin":{"type":["integer","null"]},"lowestBinUpdateDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"buy":{"type":["boolean","null"]},"maxBuyPrice":{"type":["integer","null"]},"buyStyle":{"type":["integer","null"]},"newBuySelective":{"type":["boolean","null"]},"remove":{"type":["boolean","null"]},"leagueId":{"type":["integer","null"]},"nationId":{"type":["integer","null"]},"prio":{"type":["integer","null"]},"listCnt":{"type":["integer","null"]},"soldCnt":{"type":["integer","null"]},"note":{"type":["string","null"]},"relevant":{"type":["boolean","null"]},"adjust100":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["eaAssetId","eaResourceId","rareFlag","rating","buy","buyStyle","newBuySelective","remove","listCnt","soldCnt","relevant","adjust100","directReBuy","creationDate"]},"Candidate.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"dbId":{"readOnly":true,"type":["integer","null"]},"rarity":{"readOnly":true,"$ref":"#\/components\/schemas\/Rarity.jsonld"},"candidateStat":{"readOnly":true,"$ref":"#\/components\/schemas\/CandidateStat.jsonld"},"player":{"readOnly":true,"$ref":"#\/components\/schemas\/Player.jsonld"},"firstname":{"readOnly":true,"type":["string","null"]},"lastname":{"readOnly":true,"type":["string","null"]},"nickname":{"readOnly":true,"type":["string","null"]},"fullDisplayInfo":{"readOnly":true,"type":["string","null"]},"eaAssetId":{"readOnly":true,"type":["integer","null"]},"eaResourceId":{"readOnly":true,"type":["integer","null"]},"rareFlag":{"readOnly":true,"type":["integer","null"]},"rarityName":{"readOnly":true,"type":["string","null"]},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"cardImageUrl":{"readOnly":true,"type":["string","null"]},"stockCountTotal":{"readOnly":true,"type":["integer","null"]},"stockCountReal":{"readOnly":true,"type":["integer","null"]},"futBinId":{"type":["integer","null"]},"futBinName":{"type":["string","null"]},"futBinPrice":{"type":["integer","null"]},"futBinSellingPrice":{"type":["integer","null"]},"lastFutBinUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"futWizId":{"type":["integer","null"]},"futWizPrice":{"type":["integer","null"]},"futwizName":{"type":["string","null"]},"futWizSellingPrice":{"type":["integer","null"]},"lastFutWizUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"rating":{"type":["integer","null"]},"highestBuyBinPrice":{"type":["integer","null"]},"sellStartingBid":{"type":["integer","null"]},"sellBinPrice":{"type":["integer","null"]},"lastFoundMinRange":{"type":["integer","null"]},"lastFoundMaxRange":{"type":["integer","null"]},"lastFoundLowestBin":{"type":["integer","null"]},"lowestBinUpdateDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"buy":{"type":["boolean","null"]},"maxBuyPrice":{"type":["integer","null"]},"buyStyle":{"type":["integer","null"]},"newBuySelective":{"type":["boolean","null"]},"remove":{"type":["boolean","null"]},"leagueId":{"type":["integer","null"]},"nationId":{"type":["integer","null"]},"prio":{"type":["integer","null"]},"listCnt":{"type":["integer","null"]},"soldCnt":{"type":["integer","null"]},"note":{"type":["string","null"]},"relevant":{"type":["boolean","null"]},"adjust100":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["eaAssetId","eaResourceId","rareFlag","rating","buy","buyStyle","newBuySelective","remove","listCnt","soldCnt","relevant","adjust100","directReBuy","creationDate"]},"CandidateStat.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"revRl6":{"type":"number"},"rl6":{"type":"integer"},"sold6":{"type":"integer"},"rat6":{"type":"number"},"rev6":{"type":"integer"},"revRl12":{"type":"number"},"rl12":{"type":"integer"},"sold12":{"type":"integer"},"rat12":{"type":"number"},"rev12":{"type":"integer"},"revRl24":{"type":"number"},"rl24":{"type":"integer"},"sold24":{"type":"integer"},"rat24":{"type":"number"},"rev24":{"type":"integer"},"revRl3d":{"type":"number"},"rl3d":{"type":"integer"},"sold3d":{"type":"integer"},"rat3d":{"type":"number"},"rev3d":{"type":"integer"},"revRl1w":{"type":"number"},"rl1w":{"type":"integer"},"sold1w":{"type":"integer"},"rat1w":{"type":"number"},"rev1w":{"type":"integer"},"revRl2w":{"type":"number"},"rl2w":{"type":"integer"},"sold2w":{"type":"integer"},"rat2w":{"type":"number"},"rev2w":{"type":"integer"},"revRl3w":{"type":"number"},"rl3w":{"type":"integer"},"sold3w":{"type":"integer"},"rat3w":{"type":"number"},"rev3w":{"type":"integer"},"revRl4w":{"type":"number"},"rl4w":{"type":"integer"},"sold4w":{"type":"integer"},"rat4w":{"type":"number"},"rev4w":{"type":"integer"},"revRl":{"type":"number"},"rl":{"type":"integer"},"sold":{"type":"integer"},"rat":{"type":"number"},"rev":{"type":"integer"},"snipingRev":{"type":"integer"},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"lastUpdateDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"CandidateStockAccounts.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"candidatesStockAccounts":{"type":"array","items":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}},"candidatesMissingAccounts":{"type":"array","items":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}}},"Config":{"type":"object","description":"","deprecated":false,"properties":{"systemActive":{"type":"boolean"},"systemRunning":{"type":"boolean"},"lastUpdateDate":{"readOnly":true,"type":"string","format":"date-time"},"lastCheckDate":{"readOnly":true,"type":"string","format":"date-time"},"processCnt":{"readOnly":true,"type":"integer"},"sleepHourStart":{"minimum":0,"maximum":23,"type":["integer","null"]},"sleepHourEnd":{"minimum":0,"maximum":23,"type":["integer","null"]},"checkMaxSales":{"type":"boolean"},"numMaxSales":{"minimum":0,"maximum":20,"type":["integer","null"]}}},"Config.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"systemActive":{"type":"boolean"},"systemRunning":{"type":"boolean"},"lastUpdateDate":{"readOnly":true,"type":"string","format":"date-time"},"lastCheckDate":{"readOnly":true,"type":"string","format":"date-time"},"processCnt":{"readOnly":true,"type":"integer"},"sleepHourStart":{"minimum":0,"maximum":23,"type":["integer","null"]},"sleepHourEnd":{"minimum":0,"maximum":23,"type":["integer","null"]},"checkMaxSales":{"type":"boolean"},"numMaxSales":{"minimum":0,"maximum":20,"type":["integer","null"]}}},"GameAccount":{"type":"object","description":"","deprecated":false,"properties":{"dbId":{"readOnly":true,"type":["integer","null"]},"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"profile":{"type":["string","null"]},"password":{"type":["string","null"]},"emailPw":{"type":["string","null"]},"credits":{"readOnly":true,"type":["integer","null"]},"cntItems":{"readOnly":true,"type":["integer","null"]},"cntSoldItems":{"readOnly":true,"type":["integer","null"]},"cntInactiveItems":{"readOnly":true,"type":["integer","null"]},"active":{"type":["boolean","null"]},"running":{"type":["boolean","null"]},"relist":{"type":["boolean","null"]},"relistDate":{"type":["string","null"],"format":"date-time"},"blocked":{"type":["boolean","null"]},"sniping":{"type":["boolean","null"]},"snipingDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"tmOpen":{"type":["boolean","null"]},"tmState":{"type":["integer","null"]},"dead":{"type":["boolean","null"]},"lockedMsg":{"type":["boolean","null"]},"dynPrices":{"type":["boolean","null"]},"newBuy":{"type":["boolean","null"]},"newBuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"newBuySelective":{"type":["boolean","null"]},"reBuy":{"type":["boolean","null"]},"rebuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"connectionDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"importWatchlist":{"type":["boolean","null"]},"autoReBuy":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"itemMaxBuyPrice":{"minimum":0,"maximum":15000000,"type":["integer","null"]},"revenue":{"readOnly":true,"type":["integer","null"]},"futWizValue":{"readOnly":true,"type":["integer","null"]},"eaMarketAvgValue":{"readOnly":true,"type":["integer","null"]},"mfaCode":{"type":["string","null"]},"twoFactorAuthKey":{"type":["string","null"]},"login2FaViaApp":{"type":["boolean","null"]},"eaCode1":{"type":["string","null"]},"eaCode2":{"type":["string","null"]},"eaCode3":{"type":["string","null"]},"eaCode4":{"type":["string","null"]},"eaCode5":{"type":["string","null"]},"eaCode6":{"type":["string","null"]},"snipingCnt1h":{"type":["integer","null"]},"snipingCnt3h":{"type":["integer","null"]},"snipingCnt6h":{"type":["integer","null"]},"snipingCnt12h":{"type":["integer","null"]},"snipingCnt24h":{"type":["integer","null"]},"snipingCnt3d":{"type":["integer","null"]},"snipingCnt1w":{"type":["integer","null"]},"note":{"type":["string","null"]},"loopStartDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"loopFinishDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"owner":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"}},"required":["email","profile","password","active","running","relist","blocked","sniping","tmOpen","dead","lockedMsg","dynPrices","newBuy","newBuySelective","reBuy","importWatchlist","autoReBuy","directReBuy"]},"GameAccount.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"dbId":{"readOnly":true,"type":["integer","null"]},"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"profile":{"type":["string","null"]},"password":{"type":["string","null"]},"emailPw":{"type":["string","null"]},"credits":{"readOnly":true,"type":["integer","null"]},"cntItems":{"readOnly":true,"type":["integer","null"]},"cntSoldItems":{"readOnly":true,"type":["integer","null"]},"cntInactiveItems":{"readOnly":true,"type":["integer","null"]},"active":{"type":["boolean","null"]},"running":{"type":["boolean","null"]},"relist":{"type":["boolean","null"]},"relistDate":{"type":["string","null"],"format":"date-time"},"blocked":{"type":["boolean","null"]},"sniping":{"type":["boolean","null"]},"snipingDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"tmOpen":{"type":["boolean","null"]},"tmState":{"type":["integer","null"]},"dead":{"type":["boolean","null"]},"lockedMsg":{"type":["boolean","null"]},"dynPrices":{"type":["boolean","null"]},"newBuy":{"type":["boolean","null"]},"newBuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"newBuySelective":{"type":["boolean","null"]},"reBuy":{"type":["boolean","null"]},"rebuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"connectionDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"importWatchlist":{"type":["boolean","null"]},"autoReBuy":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"itemMaxBuyPrice":{"minimum":0,"maximum":15000000,"type":["integer","null"]},"revenue":{"readOnly":true,"type":["integer","null"]},"futWizValue":{"readOnly":true,"type":["integer","null"]},"eaMarketAvgValue":{"readOnly":true,"type":["integer","null"]},"mfaCode":{"type":["string","null"]},"twoFactorAuthKey":{"type":["string","null"]},"login2FaViaApp":{"type":["boolean","null"]},"eaCode1":{"type":["string","null"]},"eaCode2":{"type":["string","null"]},"eaCode3":{"type":["string","null"]},"eaCode4":{"type":["string","null"]},"eaCode5":{"type":["string","null"]},"eaCode6":{"type":["string","null"]},"snipingCnt1h":{"type":["integer","null"]},"snipingCnt3h":{"type":["integer","null"]},"snipingCnt6h":{"type":["integer","null"]},"snipingCnt12h":{"type":["integer","null"]},"snipingCnt24h":{"type":["integer","null"]},"snipingCnt3d":{"type":["integer","null"]},"snipingCnt1w":{"type":["integer","null"]},"note":{"type":["string","null"]},"loopStartDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"loopFinishDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"owner":{"readOnly":true,"$ref":"#\/components\/schemas\/User.jsonld"}},"required":["email","profile","password","active","running","relist","blocked","sniping","tmOpen","dead","lockedMsg","dynPrices","newBuy","newBuySelective","reBuy","importWatchlist","autoReBuy","directReBuy"]},"LogAccountCredit.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"credits":{"readOnly":true,"type":["integer","null"]},"revenue":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"LogAccountProfit.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"credits":{"type":["integer","null"]},"revenue":{"type":["integer","null"]},"tpValue":{"type":["integer","null"]},"revToday":{"type":["integer","null"]},"rev3hours":{"type":["integer","null"]},"rev6hours":{"type":["integer","null"]},"rev12hours":{"type":["integer","null"]},"rev24hours":{"type":["integer","null"]},"rev3days":{"type":["integer","null"]},"rev1week":{"type":["integer","null"]},"rev2weeks":{"type":["integer","null"]},"rev3weeks":{"type":["integer","null"]},"rev4weeks":{"type":["integer","null"]},"rev2months":{"type":["integer","null"]},"rev3months":{"type":["integer","null"]},"revTotal":{"type":["integer","null"]},"numSalesToday":{"type":["integer","null"]},"numSales3hours":{"type":["integer","null"]},"numSales6hours":{"type":["integer","null"]},"numSales12hours":{"type":["integer","null"]},"numSales24hours":{"type":["integer","null"]},"numSales3days":{"type":["integer","null"]},"numSales1week":{"type":["integer","null"]},"numSales2weeks":{"type":["integer","null"]},"numSales3weeks":{"type":["integer","null"]},"numSales4weeks":{"type":["integer","null"]},"numSales2months":{"type":["integer","null"]},"numSales3months":{"type":["integer","null"]},"numSalesTotal":{"type":["integer","null"]},"isDailyProfit":{"type":["boolean","null"]},"creationDate":{"type":["string","null"],"format":"date-time"}}},"LogAccountSoldItem.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"dbId":{"readOnly":true,"type":["integer","null"]},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"eaId":{"readOnly":true,"type":"integer"},"contracts":{"readOnly":true,"type":["integer","null"]},"playStyle":{"readOnly":true,"type":["integer","null"]},"lastSalePrice":{"readOnly":true,"type":"integer"},"currentBid":{"readOnly":true,"type":"integer"},"startingBid":{"readOnly":true,"type":"integer"},"binPrice":{"readOnly":true,"type":"integer"},"minRange":{"readOnly":true,"type":"integer"},"maxRange":{"readOnly":true,"type":"integer"},"tradeState":{"readOnly":true,"type":"string"},"eaTradeId":{"readOnly":true,"type":"integer"},"listCnt":{"readOnly":true,"type":"integer"},"revenue":{"readOnly":true,"type":"integer"},"reBought":{"readOnly":true,"type":"boolean"},"snipedItem":{"readOnly":true,"type":"boolean"},"firstListDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"LogGeneral.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"dbId":{"readOnly":true,"type":"integer"},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"logType":{"type":"string","enum":["alert","alert_low","cant_buy","debug","debug_server_logs","info","moved_to_club","new_buy","player_price_changed","preview_pack","preview_pack_alert","price_range_errors","profit_overview","removed","rebuy","sales","server_logs","stats","hourly_stats"]},"message":{"readOnly":true,"type":["string","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["logType"]},"LogTotalProfit":{"type":"object","description":"","deprecated":false,"properties":{"credits":{"type":["integer","null"]},"revenue":{"type":["integer","null"]},"tpValueFutwiz":{"type":["integer","null"]},"tpValueEaAverage":{"type":["integer","null"]},"revToday":{"type":["integer","null"]},"rev3hours":{"type":["integer","null"]},"rev6hours":{"type":["integer","null"]},"rev12hours":{"type":["integer","null"]},"rev24hours":{"type":["integer","null"]},"rev3days":{"type":["integer","null"]},"rev1week":{"type":["integer","null"]},"rev2weeks":{"type":["integer","null"]},"rev3weeks":{"type":["integer","null"]},"rev4weeks":{"type":["integer","null"]},"rev2months":{"type":["integer","null"]},"rev3months":{"type":["integer","null"]},"revTotal":{"type":["integer","null"]},"numSalesToday":{"type":["integer","null"]},"numSales3hours":{"type":["integer","null"]},"numSales6hours":{"type":["integer","null"]},"numSales12hours":{"type":["integer","null"]},"numSales24hours":{"type":["integer","null"]},"numSales3days":{"type":["integer","null"]},"numSales1week":{"type":["integer","null"]},"numSales2weeks":{"type":["integer","null"]},"numSales3weeks":{"type":["integer","null"]},"numSales4weeks":{"type":["integer","null"]},"numSales2months":{"type":["integer","null"]},"numSales3months":{"type":["integer","null"]},"numSalesTotal":{"type":["integer","null"]},"isDailyProfit":{"type":["boolean","null"]},"creationDate":{"type":["string","null"],"format":"date-time"}}},"LogTotalProfit.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"credits":{"type":["integer","null"]},"revenue":{"type":["integer","null"]},"tpValueFutwiz":{"type":["integer","null"]},"tpValueEaAverage":{"type":["integer","null"]},"revToday":{"type":["integer","null"]},"rev3hours":{"type":["integer","null"]},"rev6hours":{"type":["integer","null"]},"rev12hours":{"type":["integer","null"]},"rev24hours":{"type":["integer","null"]},"rev3days":{"type":["integer","null"]},"rev1week":{"type":["integer","null"]},"rev2weeks":{"type":["integer","null"]},"rev3weeks":{"type":["integer","null"]},"rev4weeks":{"type":["integer","null"]},"rev2months":{"type":["integer","null"]},"rev3months":{"type":["integer","null"]},"revTotal":{"type":["integer","null"]},"numSalesToday":{"type":["integer","null"]},"numSales3hours":{"type":["integer","null"]},"numSales6hours":{"type":["integer","null"]},"numSales12hours":{"type":["integer","null"]},"numSales24hours":{"type":["integer","null"]},"numSales3days":{"type":["integer","null"]},"numSales1week":{"type":["integer","null"]},"numSales2weeks":{"type":["integer","null"]},"numSales3weeks":{"type":["integer","null"]},"numSales4weeks":{"type":["integer","null"]},"numSales2months":{"type":["integer","null"]},"numSales3months":{"type":["integer","null"]},"numSalesTotal":{"type":["integer","null"]},"isDailyProfit":{"type":["boolean","null"]},"creationDate":{"type":["string","null"],"format":"date-time"}}},"MediaObject.jsonld-media_object.read":{"type":"object","description":"","deprecated":false,"externalDocs":{"url":"https:\/\/schema.org\/MediaObject"},"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"contentUrl":{"externalDocs":{"url":"https:\/\/schema.org\/contentUrl"},"type":["string","null"]}}},"ModeConfig":{"type":"object","description":"","deprecated":false,"properties":{"autoReBuyMinSoldItems":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"},"autoReBuyMinLastHours":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"}}},"ModeConfig.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"autoReBuyMinSoldItems":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"},"autoReBuyMinLastHours":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"}}},"Player":{"type":"object","description":"","deprecated":false,"properties":{"eaAssetId":{"type":"integer"},"firstname":{"type":["string","null"]},"lastname":{"type":["string","null"]},"nickname":{"type":["string","null"]},"rating":{"type":"integer"},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"Player.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"eaAssetId":{"type":"integer"},"firstname":{"type":["string","null"]},"lastname":{"type":["string","null"]},"nickname":{"type":["string","null"]},"rating":{"type":"integer"},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"Rarity":{"type":"object","description":"","deprecated":false,"properties":{"rareFlag":{"readOnly":true,"type":"integer"},"name":{"type":["string","null"]},"untradable":{"readOnly":true,"type":"boolean"},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"imageBronze":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"}}},"Rarity.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"rareFlag":{"readOnly":true,"type":"integer"},"name":{"type":["string","null"]},"untradable":{"readOnly":true,"type":"boolean"},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"imageBronze":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"}}},"SystemStat.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"totalLogProfit":{"readOnly":true,"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"},"config":{"readOnly":true,"$ref":"#\/components\/schemas\/Config.jsonld"},"modeConfig":{"readOnly":true,"$ref":"#\/components\/schemas\/ModeConfig.jsonld"},"numAccounts":{"type":["integer","null"]},"numDeadAccounts":{"type":["integer","null"]},"numActiveAccounts":{"type":["integer","null"]},"numTmOpenAccounts":{"type":["integer","null"]},"numTmClosedAccounts":{"type":["integer","null"]},"numBlockedAccounts":{"type":["integer","null"]},"numRunningAccounts":{"type":["integer","null"]},"numTradepileItems":{"type":["integer","null"]},"numSoldTradepileItems":{"type":["integer","null"]},"numActiveTradepileItems":{"type":["integer","null"]},"numExpiredTradepileItems":{"type":["integer","null"]},"numInactiveTradepileItems":{"type":["integer","null"]},"numCandidates":{"type":["integer","null"]},"numRelevantCandidates":{"type":["integer","null"]},"numBuyCandidates":{"type":["integer","null"]},"totalSnipingRev":{"type":["integer","null"]}}},"User.jsonld":{"type":"object","description":"","deprecated":false,"required":["email","firstName","lastName"],"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"image":{"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"fullName":{"readOnly":true,"type":["string","null"]},"password":{"writeOnly":true,"description":"The plaintext password when being set or changed.","type":["string","null"]},"active":{"type":"boolean"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}}},"responses":{},"parameters":{},"examples":{},"requestBodies":{},"headers":{},"securitySchemes":{"JWT":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"security":[{"JWT":[]}],"tags":[]} \ No newline at end of file +{"openapi":"3.1.0","info":{"title":"Imaq Platform","description":"","version":"1.0.0"},"servers":[{"url":"\/","description":""}],"paths":{"\/api\/locations":{"get":{"operationId":"api_locations_get_collection","tags":["Location"],"responses":{"200":{"description":"Location collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Location.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of Location resources.","description":"Retrieves the collection of Location resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"name","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_locations_post","tags":["Location"],"responses":{"201":{"description":"Location resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Location.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Location resource.","description":"Creates a Location resource.","parameters":[],"requestBody":{"description":"The new Location resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Location.jsonld"}}},"required":true},"deprecated":false}},"\/api\/locations\/{id}":{"get":{"operationId":"api_locations_id_get","tags":["Location"],"responses":{"200":{"description":"Location resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Location.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Location resource.","description":"Retrieves a Location resource.","parameters":[{"name":"id","in":"path","description":"Location identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_locations_id_patch","tags":["Location"],"responses":{"200":{"description":"Location resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Location.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Location resource.","description":"Updates the Location resource.","parameters":[{"name":"id","in":"path","description":"Location identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Location resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Location"}}},"required":true},"deprecated":false}},"\/api\/auth":{"post":{"operationId":"login_check_post","tags":["Login Check"],"responses":{"200":{"description":"User token created","content":{"application\/json":{"schema":{"type":"object","properties":{"token":{"readOnly":true,"type":"string","nullable":false}},"required":["token"]}}}}},"summary":"Creates a user token.","description":"Creates a user token.","requestBody":{"description":"The login data","content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","nullable":false},"password":{"type":"string","nullable":false}},"required":["email","password"]}}},"required":true}}},"\/api\/media_objects":{"get":{"operationId":"api_media_objects_get_collection","tags":["MediaObject"],"responses":{"200":{"description":"MediaObject collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of MediaObject resources.","description":"Retrieves the collection of MediaObject resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_media_objects_post","tags":["MediaObject"],"responses":{"201":{"description":"MediaObject resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a MediaObject resource.","description":"Creates a MediaObject resource.","parameters":[],"requestBody":{"description":"The new MediaObject resource","content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}},"required":false},"deprecated":false}},"\/api\/media_objects\/{id}":{"get":{"operationId":"api_media_objects_id_get","tags":["MediaObject"],"responses":{"200":{"description":"MediaObject resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a MediaObject resource.","description":"Retrieves a MediaObject resource.","parameters":[{"name":"id","in":"path","description":"MediaObject identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"delete":{"operationId":"api_media_objects_id_delete","tags":["MediaObject"],"responses":{"204":{"description":"MediaObject resource deleted"},"404":{"description":"Resource not found"}},"summary":"Removes the MediaObject resource.","description":"Removes the MediaObject resource.","parameters":[{"name":"id","in":"path","description":"MediaObject identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false}},"\/api\/shipping_companies":{"get":{"operationId":"api_shipping_companies_get_collection","tags":["ShippingCompany"],"responses":{"200":{"description":"ShippingCompany collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/ShippingCompany.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of ShippingCompany resources.","description":"Retrieves the collection of ShippingCompany resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"name","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_shipping_companies_post","tags":["ShippingCompany"],"responses":{"201":{"description":"ShippingCompany resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ShippingCompany.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a ShippingCompany resource.","description":"Creates a ShippingCompany resource.","parameters":[],"requestBody":{"description":"The new ShippingCompany resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ShippingCompany.jsonld"}}},"required":true},"deprecated":false}},"\/api\/shipping_companies\/{id}":{"get":{"operationId":"api_shipping_companies_id_get","tags":["ShippingCompany"],"responses":{"200":{"description":"ShippingCompany resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ShippingCompany.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a ShippingCompany resource.","description":"Retrieves a ShippingCompany resource.","parameters":[{"name":"id","in":"path","description":"ShippingCompany identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_shipping_companies_id_patch","tags":["ShippingCompany"],"responses":{"200":{"description":"ShippingCompany resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ShippingCompany.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the ShippingCompany resource.","description":"Updates the ShippingCompany resource.","parameters":[{"name":"id","in":"path","description":"ShippingCompany identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated ShippingCompany resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/ShippingCompany"}}},"required":true},"deprecated":false}},"\/api\/trips":{"get":{"operationId":"api_trips_get_collection","tags":["Trip"],"responses":{"200":{"description":"Trip collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Trip.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of Trip resources.","description":"Retrieves the collection of Trip resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_trips_post","tags":["Trip"],"responses":{"201":{"description":"Trip resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Trip.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Trip resource.","description":"Creates a Trip resource.","parameters":[],"requestBody":{"description":"The new Trip resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Trip.jsonld"}}},"required":true},"deprecated":false}},"\/api\/trips\/{id}":{"get":{"operationId":"api_trips_id_get","tags":["Trip"],"responses":{"200":{"description":"Trip resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Trip.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Trip resource.","description":"Retrieves a Trip resource.","parameters":[{"name":"id","in":"path","description":"Trip identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_trips_id_patch","tags":["Trip"],"responses":{"200":{"description":"Trip resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Trip.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Trip resource.","description":"Updates the Trip resource.","parameters":[{"name":"id","in":"path","description":"Trip identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Trip resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Trip"}}},"required":true},"deprecated":false}},"\/api\/trip_locations":{"get":{"operationId":"api_trip_locations_get_collection","tags":["TripLocation"],"responses":{"200":{"description":"TripLocation collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/TripLocation.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of TripLocation resources.","description":"Retrieves the collection of TripLocation resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_trip_locations_post","tags":["TripLocation"],"responses":{"201":{"description":"TripLocation resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/TripLocation.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a TripLocation resource.","description":"Creates a TripLocation resource.","parameters":[],"requestBody":{"description":"The new TripLocation resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/TripLocation.jsonld"}}},"required":true},"deprecated":false}},"\/api\/trip_locations\/{id}":{"get":{"operationId":"api_trip_locations_id_get","tags":["TripLocation"],"responses":{"200":{"description":"TripLocation resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/TripLocation.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a TripLocation resource.","description":"Retrieves a TripLocation resource.","parameters":[{"name":"id","in":"path","description":"TripLocation identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_trip_locations_id_patch","tags":["TripLocation"],"responses":{"200":{"description":"TripLocation resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/TripLocation.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the TripLocation resource.","description":"Updates the TripLocation resource.","parameters":[{"name":"id","in":"path","description":"TripLocation identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated TripLocation resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/TripLocation"}}},"required":true},"deprecated":false}},"\/api\/users":{"get":{"operationId":"api_users_get_collection","tags":["User"],"responses":{"200":{"description":"User collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/User.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of User resources.","description":"Retrieves the collection of User resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"firstName","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"lastName","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"userNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_users_post","tags":["User"],"responses":{"201":{"description":"User resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a User resource.","description":"Creates a User resource.","parameters":[],"requestBody":{"description":"The new User resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}},"required":true},"deprecated":false}},"\/api\/users\/{id}":{"get":{"operationId":"api_users_id_get","tags":["User"],"responses":{"200":{"description":"User resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a User resource.","description":"Retrieves a User resource.","parameters":[{"name":"id","in":"path","description":"User identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_users_id_patch","tags":["User"],"responses":{"200":{"description":"User resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the User resource.","description":"Updates the User resource.","parameters":[{"name":"id","in":"path","description":"User identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated User resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/User"}}},"required":true},"deprecated":false}},"\/api\/user_trips":{"get":{"operationId":"api_user_trips_get_collection","tags":["UserTrip"],"responses":{"200":{"description":"UserTrip collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/UserTrip.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of UserTrip resources.","description":"Retrieves the collection of UserTrip resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_user_trips_post","tags":["UserTrip"],"responses":{"201":{"description":"UserTrip resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTrip.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a UserTrip resource.","description":"Creates a UserTrip resource.","parameters":[],"requestBody":{"description":"The new UserTrip resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTrip.jsonld"}}},"required":true},"deprecated":false}},"\/api\/user_trips\/{id}":{"get":{"operationId":"api_user_trips_id_get","tags":["UserTrip"],"responses":{"200":{"description":"UserTrip resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTrip.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a UserTrip resource.","description":"Retrieves a UserTrip resource.","parameters":[{"name":"id","in":"path","description":"UserTrip identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_user_trips_id_patch","tags":["UserTrip"],"responses":{"200":{"description":"UserTrip resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTrip.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the UserTrip resource.","description":"Updates the UserTrip resource.","parameters":[{"name":"id","in":"path","description":"UserTrip identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated UserTrip resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/UserTrip"}}},"required":true},"deprecated":false}},"\/api\/user_trip_locations":{"get":{"operationId":"api_user_trip_locations_get_collection","tags":["UserTripLocation"],"responses":{"200":{"description":"UserTripLocation collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/UserTripLocation.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of UserTripLocation resources.","description":"Retrieves the collection of UserTripLocation resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_user_trip_locations_post","tags":["UserTripLocation"],"responses":{"201":{"description":"UserTripLocation resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripLocation.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a UserTripLocation resource.","description":"Creates a UserTripLocation resource.","parameters":[],"requestBody":{"description":"The new UserTripLocation resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripLocation.jsonld"}}},"required":true},"deprecated":false}},"\/api\/user_trip_locations\/{id}":{"get":{"operationId":"api_user_trip_locations_id_get","tags":["UserTripLocation"],"responses":{"200":{"description":"UserTripLocation resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripLocation.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a UserTripLocation resource.","description":"Retrieves a UserTripLocation resource.","parameters":[{"name":"id","in":"path","description":"UserTripLocation identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_user_trip_locations_id_patch","tags":["UserTripLocation"],"responses":{"200":{"description":"UserTripLocation resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripLocation.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the UserTripLocation resource.","description":"Updates the UserTripLocation resource.","parameters":[{"name":"id","in":"path","description":"UserTripLocation identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated UserTripLocation resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripLocation"}}},"required":true},"deprecated":false}},"\/api\/user_trip_work_logs":{"get":{"operationId":"api_user_trip_work_logs_get_collection","tags":["UserTripWorkLog"],"responses":{"200":{"description":"UserTripWorkLog collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/UserTripWorkLog.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of UserTripWorkLog resources.","description":"Retrieves the collection of UserTripWorkLog resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_user_trip_work_logs_post","tags":["UserTripWorkLog"],"responses":{"201":{"description":"UserTripWorkLog resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripWorkLog.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a UserTripWorkLog resource.","description":"Creates a UserTripWorkLog resource.","parameters":[],"requestBody":{"description":"The new UserTripWorkLog resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripWorkLog.jsonld"}}},"required":true},"deprecated":false}},"\/api\/user_trip_work_logs\/{id}":{"get":{"operationId":"api_user_trip_work_logs_id_get","tags":["UserTripWorkLog"],"responses":{"200":{"description":"UserTripWorkLog resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripWorkLog.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a UserTripWorkLog resource.","description":"Retrieves a UserTripWorkLog resource.","parameters":[{"name":"id","in":"path","description":"UserTripWorkLog identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_user_trip_work_logs_id_patch","tags":["UserTripWorkLog"],"responses":{"200":{"description":"UserTripWorkLog resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripWorkLog.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the UserTripWorkLog resource.","description":"Updates the UserTripWorkLog resource.","parameters":[{"name":"id","in":"path","description":"UserTripWorkLog identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated UserTripWorkLog resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/UserTripWorkLog"}}},"required":true},"deprecated":false}},"\/api\/vessels":{"get":{"operationId":"api_vessels_get_collection","tags":["Vessel"],"responses":{"200":{"description":"Vessel collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Vessel.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of Vessel resources.","description":"Retrieves the collection of Vessel resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"name","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_vessels_post","tags":["Vessel"],"responses":{"201":{"description":"Vessel resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Vessel.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Vessel resource.","description":"Creates a Vessel resource.","parameters":[],"requestBody":{"description":"The new Vessel resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Vessel.jsonld"}}},"required":true},"deprecated":false}},"\/api\/vessels\/{id}":{"get":{"operationId":"api_vessels_id_get","tags":["Vessel"],"responses":{"200":{"description":"Vessel resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Vessel.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Vessel resource.","description":"Retrieves a Vessel resource.","parameters":[{"name":"id","in":"path","description":"Vessel identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_vessels_id_patch","tags":["Vessel"],"responses":{"200":{"description":"Vessel resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Vessel.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Vessel resource.","description":"Updates the Vessel resource.","parameters":[{"name":"id","in":"path","description":"Vessel identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Vessel resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Vessel"}}},"required":true},"deprecated":false}},"\/api\/zones":{"get":{"operationId":"api_zones_get_collection","tags":["Zone"],"responses":{"200":{"description":"Zone collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Zone.jsonld"}},"totalItems":{"type":"integer","minimum":0},"view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"first":{"type":"string","format":"iri-reference"},"last":{"type":"string","format":"iri-reference"},"previous":{"type":"string","format":"iri-reference"},"next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","first":"string","last":"string","previous":"string","next":"string"}},"search":{"type":"object","properties":{"@type":{"type":"string"},"template":{"type":"string"},"variableRepresentation":{"type":"string"},"mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["member"]}}}}},"summary":"Retrieves the collection of Zone resources.","description":"Retrieves the collection of Zone resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"name","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_zones_post","tags":["Zone"],"responses":{"201":{"description":"Zone resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Zone.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Zone resource.","description":"Creates a Zone resource.","parameters":[],"requestBody":{"description":"The new Zone resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Zone.jsonld"}}},"required":true},"deprecated":false}},"\/api\/zones\/{id}":{"get":{"operationId":"api_zones_id_get","tags":["Zone"],"responses":{"200":{"description":"Zone resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Zone.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Zone resource.","description":"Retrieves a Zone resource.","parameters":[{"name":"id","in":"path","description":"Zone identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_zones_id_patch","tags":["Zone"],"responses":{"200":{"description":"Zone resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Zone.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Zone resource.","description":"Updates the Zone resource.","parameters":[{"name":"id","in":"path","description":"Zone identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Zone resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Zone"}}},"required":true},"deprecated":false}}},"components":{"schemas":{"Location":{"type":"object","description":"","deprecated":false,"properties":{"zone":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"name":{"type":"string"},"zoneName":{"readOnly":true,"type":"string"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["name"]},"Location.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"zone":{"readOnly":true,"$ref":"#\/components\/schemas\/Zone.jsonld"},"name":{"type":"string"},"zoneName":{"readOnly":true,"type":"string"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["name"]},"MediaObject.jsonld-media_object.read":{"type":"object","description":"","deprecated":false,"externalDocs":{"url":"https:\/\/schema.org\/MediaObject"},"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"contentUrl":{"externalDocs":{"url":"https:\/\/schema.org\/contentUrl"},"type":["string","null"]}}},"ShippingCompany":{"type":"object","description":"","deprecated":false,"required":["name"],"properties":{"name":{"type":"string"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"ShippingCompany.jsonld":{"type":"object","description":"","deprecated":false,"required":["name"],"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"name":{"type":"string"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"Trip":{"type":"object","description":"","deprecated":false,"properties":{"vessel":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"pilotReference":{"type":"string"},"captainName":{"type":["string","null"]},"startLocation":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"endLocation":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"startDate":{"type":["string","null"],"format":"date-time"},"endDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["pilotReference","startDate","endDate"]},"Trip.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"vessel":{"readOnly":true,"$ref":"#\/components\/schemas\/Vessel.jsonld"},"pilotReference":{"type":"string"},"captainName":{"type":["string","null"]},"startLocation":{"readOnly":true,"$ref":"#\/components\/schemas\/Location.jsonld"},"endLocation":{"readOnly":true,"$ref":"#\/components\/schemas\/Location.jsonld"},"startDate":{"type":["string","null"],"format":"date-time"},"endDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["pilotReference","startDate","endDate"]},"TripLocation":{"type":"object","description":"","deprecated":false,"properties":{"trip":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"location":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"date":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["date"]},"TripLocation.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"trip":{"readOnly":true,"$ref":"#\/components\/schemas\/Trip.jsonld"},"location":{"readOnly":true,"$ref":"#\/components\/schemas\/Location.jsonld"},"date":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["date"]},"User":{"type":"object","description":"","deprecated":false,"required":["email","firstName","lastName"],"properties":{"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"image":{"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"fullName":{"readOnly":true,"type":["string","null"]},"password":{"writeOnly":true,"description":"The plaintext password when being set or changed.","type":["string","null"]},"active":{"type":"boolean"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"User.jsonld":{"type":"object","description":"","deprecated":false,"required":["email","firstName","lastName"],"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"image":{"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"fullName":{"readOnly":true,"type":["string","null"]},"password":{"writeOnly":true,"description":"The plaintext password when being set or changed.","type":["string","null"]},"active":{"type":"boolean"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"UserTrip":{"type":"object","description":"","deprecated":false,"properties":{"trip":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"user":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"captainName":{"type":"string"},"startDate":{"type":["string","null"],"format":"date-time"},"endDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["captainName","startDate","endDate"]},"UserTrip.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"trip":{"readOnly":true,"$ref":"#\/components\/schemas\/Trip.jsonld"},"user":{"readOnly":true,"$ref":"#\/components\/schemas\/User.jsonld"},"captainName":{"type":"string"},"startDate":{"type":["string","null"],"format":"date-time"},"endDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["captainName","startDate","endDate"]},"UserTripLocation":{"type":"object","description":"","deprecated":false,"properties":{"userTrip":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"location":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"plannedDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["plannedDate"]},"UserTripLocation.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"userTrip":{"readOnly":true,"$ref":"#\/components\/schemas\/UserTrip.jsonld"},"location":{"readOnly":true,"$ref":"#\/components\/schemas\/Location.jsonld"},"plannedDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["plannedDate"]},"UserTripWorkLog":{"type":"object","description":"","deprecated":false,"properties":{"userTrip":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"startLocation":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"endLocation":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"startDate":{"type":["string","null"],"format":"date-time"},"endDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["startDate","endDate"]},"UserTripWorkLog.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"userTrip":{"readOnly":true,"$ref":"#\/components\/schemas\/UserTrip.jsonld"},"startLocation":{"readOnly":true,"$ref":"#\/components\/schemas\/Location.jsonld"},"endLocation":{"readOnly":true,"$ref":"#\/components\/schemas\/Location.jsonld"},"startDate":{"type":["string","null"],"format":"date-time"},"endDate":{"type":["string","null"],"format":"date-time"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["startDate","endDate"]},"Vessel":{"type":"object","description":"","deprecated":false,"required":["name"],"properties":{"name":{"type":"string"},"company":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"Vessel.jsonld":{"type":"object","description":"","deprecated":false,"required":["name"],"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"name":{"type":"string"},"company":{"readOnly":true,"$ref":"#\/components\/schemas\/ShippingCompany.jsonld"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"Zone":{"type":"object","description":"","deprecated":false,"required":["name"],"properties":{"name":{"type":"string"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"Zone.jsonld":{"type":"object","description":"","deprecated":false,"required":["name"],"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"name":{"type":"string"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}}},"responses":{},"parameters":{},"examples":{},"requestBodies":{},"headers":{},"securitySchemes":{"JWT":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"security":[{"JWT":[]}],"tags":[],"webhooks":{}} \ No newline at end of file diff --git a/angular/openapi.yaml b/angular/openapi.yaml index 61a0f90..d685c83 100644 --- a/angular/openapi.yaml +++ b/angular/openapi.yaml @@ -1,6 +1,6 @@ openapi: 3.1.0 info: - title: 'Hello API Platform' + title: 'Imaq Platform' description: '' version: 1.0.0 servers: @@ -8,27 +8,27 @@ servers: url: / description: '' paths: - /api/account_trade_pile_items: + /api/locations: get: - operationId: api_account_trade_pile_items_get_collection + operationId: api_locations_get_collection tags: - - AccountTradePileItem + - Location responses: - 200: - description: 'AccountTradePileItem collection' + '200': + description: 'Location collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/AccountTradePileItem.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/Location.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of AccountTradePileItem resources.' - description: 'Retrieves the collection of AccountTradePileItem resources.' + - member + summary: 'Retrieves the collection of Location resources.' + description: 'Retrieves the collection of Location resources.' parameters: - name: page @@ -59,88 +59,24 @@ paths: explode: false allowReserved: false - - name: account + name: name in: query description: '' required: false deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: 'account[]' - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: array - items: - type: string - style: form - explode: true - allowReserved: false - - - name: candidateItem - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: 'candidateItem[]' - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: array - items: - type: string - style: form - explode: true - allowReserved: false - - - name: candidateNameSearch - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string style: form explode: false allowReserved: false - - - name: accountTmOpenFilter - in: query - description: 'Filter items based on the tmOpen value of the associated account' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: boolean - style: form - explode: false - allowReserved: false - name: custom_json_filter in: query description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string style: form @@ -152,36 +88,61 @@ paths: description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string style: form explode: false allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false - parameters: [] - '/api/account_trade_pile_items/{id}': + post: + operationId: api_locations_post + tags: + - Location + responses: + '201': + description: 'Location resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Location.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + summary: 'Creates a Location resource.' + description: 'Creates a Location resource.' + parameters: [] + requestBody: + description: 'The new Location resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Location.jsonld' + required: true + deprecated: false + '/api/locations/{id}': get: - operationId: api_account_trade_pile_items_id_get + operationId: api_locations_id_get tags: - - AccountTradePileItem + - Location responses: - 200: - description: 'AccountTradePileItem resource' + '200': + description: 'Location resource' content: application/ld+json: schema: - $ref: '#/components/schemas/AccountTradePileItem.jsonld' - 404: + $ref: '#/components/schemas/Location.jsonld' + '404': description: 'Resource not found' - summary: 'Retrieves a AccountTradePileItem resource.' - description: 'Retrieves a AccountTradePileItem resource.' + summary: 'Retrieves a Location resource.' + description: 'Retrieves a Location resource.' parameters: - name: id in: path - description: 'AccountTradePileItem identifier' + description: 'Location identifier' required: true deprecated: false allowEmptyValue: false @@ -192,30 +153,30 @@ paths: allowReserved: false deprecated: false patch: - operationId: api_account_trade_pile_items_id_patch + operationId: api_locations_id_patch tags: - - AccountTradePileItem + - Location responses: - 200: - description: 'AccountTradePileItem resource updated' + '200': + description: 'Location resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/AccountTradePileItem.jsonld' + $ref: '#/components/schemas/Location.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - 404: + '404': description: 'Resource not found' - summary: 'Updates the AccountTradePileItem resource.' - description: 'Updates the AccountTradePileItem resource.' + summary: 'Updates the Location resource.' + description: 'Updates the Location resource.' parameters: - name: id in: path - description: 'AccountTradePileItem identifier' + description: 'Location identifier' required: true deprecated: false allowEmptyValue: false @@ -225,21 +186,20 @@ paths: explode: false allowReserved: false requestBody: - description: 'The updated AccountTradePileItem resource' + description: 'The updated Location resource' content: application/merge-patch+json: schema: - $ref: '#/components/schemas/AccountTradePileItem' + $ref: '#/components/schemas/Location' required: true deprecated: false - parameters: [] /api/auth: post: operationId: login_check_post tags: - 'Login Check' responses: - 200: + '200': description: 'User token created' content: application/json: @@ -268,59 +228,27 @@ paths: - email - password required: true - parameters: [] - '/api/candidate-items/{id}/stock-accounts': - get: - operationId: api_candidate-items_idstock-accounts_get - tags: - - CandidateStockAccounts - responses: - 200: - description: 'CandidateStockAccounts resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/CandidateStockAccounts.jsonld' - 404: - description: 'Resource not found' - summary: 'Retrieves the stock and missing accounts for a candidate item' - description: 'Retrieves a CandidateStockAccounts resource.' - parameters: - - - name: id - in: path - description: 'Candidate Item ID' - required: true - deprecated: false - allowEmptyValue: false - schema: - type: integer - style: simple - explode: false - allowReserved: false - deprecated: false - parameters: [] - /api/candidate_stats: + /api/media_objects: get: - operationId: api_candidate_stats_get_collection + operationId: api_media_objects_get_collection tags: - - CandidateStat + - MediaObject responses: - 200: - description: 'CandidateStat collection' + '200': + description: 'MediaObject collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/CandidateStat.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of CandidateStat resources.' - description: 'Retrieves the collection of CandidateStat resources.' + - member + summary: 'Retrieves the collection of MediaObject resources.' + description: 'Retrieves the collection of MediaObject resources.' parameters: - name: page @@ -350,54 +278,84 @@ paths: style: form explode: false allowReserved: false + deprecated: false + post: + operationId: api_media_objects_post + tags: + - MediaObject + responses: + '201': + description: 'MediaObject resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + summary: 'Creates a MediaObject resource.' + description: 'Creates a MediaObject resource.' + parameters: [] + requestBody: + description: 'The new MediaObject resource' + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + required: false + deprecated: false + '/api/media_objects/{id}': + get: + operationId: api_media_objects_id_get + tags: + - MediaObject + responses: + '200': + description: 'MediaObject resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' + '404': + description: 'Resource not found' + summary: 'Retrieves a MediaObject resource.' + description: 'Retrieves a MediaObject resource.' + parameters: - - name: candidateNameSearch - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_order - in: query - description: '' - required: false + name: id + in: path + description: 'MediaObject identifier' + required: true deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string - style: form + style: simple explode: false allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false - parameters: [] - '/api/candidate_stats/{id}': - get: - operationId: api_candidate_stats_id_get + delete: + operationId: api_media_objects_id_delete tags: - - CandidateStat + - MediaObject responses: - 200: - description: 'CandidateStat resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/CandidateStat.jsonld' - 404: + '204': + description: 'MediaObject resource deleted' + '404': description: 'Resource not found' - summary: 'Retrieves a CandidateStat resource.' - description: 'Retrieves a CandidateStat resource.' + summary: 'Removes the MediaObject resource.' + description: 'Removes the MediaObject resource.' parameters: - name: id in: path - description: 'CandidateStat identifier' + description: 'MediaObject identifier' required: true deprecated: false allowEmptyValue: false @@ -407,28 +365,27 @@ paths: explode: false allowReserved: false deprecated: false - parameters: [] - /api/candidates: + /api/shipping_companies: get: - operationId: api_candidates_get_collection + operationId: api_shipping_companies_get_collection tags: - - Candidate + - ShippingCompany responses: - 200: - description: 'Candidate collection' + '200': + description: 'ShippingCompany collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/Candidate.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/ShippingCompany.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of Candidate resources.' - description: 'Retrieves the collection of Candidate resources.' + - member + summary: 'Retrieves the collection of ShippingCompany resources.' + description: 'Retrieves the collection of ShippingCompany resources.' parameters: - name: page @@ -459,12 +416,12 @@ paths: explode: false allowReserved: false - - name: candidateNameSearch + name: name in: query description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string style: form @@ -476,7 +433,7 @@ paths: description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string style: form @@ -488,63 +445,61 @@ paths: description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string style: form explode: false allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false post: - operationId: api_candidates_post + operationId: api_shipping_companies_post tags: - - Candidate + - ShippingCompany responses: - 201: - description: 'Candidate resource created' + '201': + description: 'ShippingCompany resource created' content: application/ld+json: schema: - $ref: '#/components/schemas/Candidate.jsonld' + $ref: '#/components/schemas/ShippingCompany.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - summary: 'Creates a Candidate resource.' - description: 'Creates a Candidate resource.' + summary: 'Creates a ShippingCompany resource.' + description: 'Creates a ShippingCompany resource.' parameters: [] requestBody: - description: 'The new Candidate resource' + description: 'The new ShippingCompany resource' content: application/ld+json: schema: - $ref: '#/components/schemas/Candidate.jsonld' + $ref: '#/components/schemas/ShippingCompany.jsonld' required: true deprecated: false - parameters: [] - '/api/candidates/{id}': + '/api/shipping_companies/{id}': get: - operationId: api_candidates_id_get + operationId: api_shipping_companies_id_get tags: - - Candidate + - ShippingCompany responses: - 200: - description: 'Candidate resource' + '200': + description: 'ShippingCompany resource' content: application/ld+json: schema: - $ref: '#/components/schemas/Candidate.jsonld' - 404: + $ref: '#/components/schemas/ShippingCompany.jsonld' + '404': description: 'Resource not found' - summary: 'Retrieves a Candidate resource.' - description: 'Retrieves a Candidate resource.' + summary: 'Retrieves a ShippingCompany resource.' + description: 'Retrieves a ShippingCompany resource.' parameters: - name: id in: path - description: 'Candidate identifier' + description: 'ShippingCompany identifier' required: true deprecated: false allowEmptyValue: false @@ -555,30 +510,30 @@ paths: allowReserved: false deprecated: false patch: - operationId: api_candidates_id_patch + operationId: api_shipping_companies_id_patch tags: - - Candidate + - ShippingCompany responses: - 200: - description: 'Candidate resource updated' + '200': + description: 'ShippingCompany resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/Candidate.jsonld' + $ref: '#/components/schemas/ShippingCompany.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - 404: + '404': description: 'Resource not found' - summary: 'Updates the Candidate resource.' - description: 'Updates the Candidate resource.' + summary: 'Updates the ShippingCompany resource.' + description: 'Updates the ShippingCompany resource.' parameters: - name: id in: path - description: 'Candidate identifier' + description: 'ShippingCompany identifier' required: true deprecated: false allowEmptyValue: false @@ -588,83 +543,34 @@ paths: explode: false allowReserved: false requestBody: - description: 'The updated Candidate resource' - content: - application/merge-patch+json: - schema: - $ref: '#/components/schemas/Candidate' - required: true - deprecated: false - parameters: [] - /api/config: - get: - operationId: api_config_get - tags: - - Config - responses: - 200: - description: 'Config resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/Config.jsonld' - 404: - description: 'Resource not found' - summary: 'Retrieves a Config resource.' - description: 'Retrieves a Config resource.' - parameters: [] - deprecated: false - patch: - operationId: api_config_patch - tags: - - Config - responses: - 200: - description: 'Config resource updated' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/Config.jsonld' - links: { } - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - 404: - description: 'Resource not found' - summary: 'Updates the Config resource.' - description: 'Updates the Config resource.' - parameters: [] - requestBody: - description: 'The updated Config resource' + description: 'The updated ShippingCompany resource' content: application/merge-patch+json: schema: - $ref: '#/components/schemas/Config' + $ref: '#/components/schemas/ShippingCompany' required: true deprecated: false - parameters: [] - /api/game_accounts: + /api/trips: get: - operationId: api_game_accounts_get_collection + operationId: api_trips_get_collection tags: - - GameAccount + - Trip responses: - 200: - description: 'GameAccount collection' + '200': + description: 'Trip collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/GameAccount.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/Trip.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of GameAccount resources.' - description: 'Retrieves the collection of GameAccount resources.' + - member + summary: 'Retrieves the collection of Trip resources.' + description: 'Retrieves the collection of Trip resources.' parameters: - name: page @@ -694,143 +600,204 @@ paths: style: form explode: false allowReserved: false + deprecated: false + post: + operationId: api_trips_post + tags: + - Trip + responses: + '201': + description: 'Trip resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Trip.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + summary: 'Creates a Trip resource.' + description: 'Creates a Trip resource.' + parameters: [] + requestBody: + description: 'The new Trip resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Trip.jsonld' + required: true + deprecated: false + '/api/trips/{id}': + get: + operationId: api_trips_id_get + tags: + - Trip + responses: + '200': + description: 'Trip resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Trip.jsonld' + '404': + description: 'Resource not found' + summary: 'Retrieves a Trip resource.' + description: 'Retrieves a Trip resource.' + parameters: - - name: owner - in: query - description: '' - required: false + name: id + in: path + description: 'Trip identifier' + required: true deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string - style: form + style: simple explode: false allowReserved: false + deprecated: false + patch: + operationId: api_trips_id_patch + tags: + - Trip + responses: + '200': + description: 'Trip resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Trip.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + '404': + description: 'Resource not found' + summary: 'Updates the Trip resource.' + description: 'Updates the Trip resource.' + parameters: - - name: 'owner[]' - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: array - items: - type: string - style: form - explode: true - allowReserved: false - - - name: email - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: profile - in: query - description: '' - required: false + name: id + in: path + description: 'Trip identifier' + required: true deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string - style: form - explode: false - allowReserved: false - - - name: tmOpen - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: boolean - style: form + style: simple explode: false allowReserved: false + requestBody: + description: 'The updated Trip resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/Trip' + required: true + deprecated: false + /api/trip_locations: + get: + operationId: api_trip_locations_get_collection + tags: + - TripLocation + responses: + '200': + description: 'TripLocation collection' + content: + application/ld+json: + schema: + type: object + properties: + member: { type: array, items: { $ref: '#/components/schemas/TripLocation.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - member + summary: 'Retrieves the collection of TripLocation resources.' + description: 'Retrieves the collection of TripLocation resources.' + parameters: - - name: custom_json_filter + name: page in: query - description: '' + description: 'The collection page number' required: false deprecated: false allowEmptyValue: true schema: - type: string + type: integer + default: 1 style: form explode: false allowReserved: false - - name: custom_json_order + name: itemsPerPage in: query - description: '' + description: 'The number of items per page' required: false deprecated: false allowEmptyValue: true schema: - type: string + type: integer + default: 50 + minimum: 0 + maximum: 100 style: form explode: false allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false post: - operationId: api_game_accounts_post + operationId: api_trip_locations_post tags: - - GameAccount + - TripLocation responses: - 201: - description: 'GameAccount resource created' + '201': + description: 'TripLocation resource created' content: application/ld+json: schema: - $ref: '#/components/schemas/GameAccount.jsonld' + $ref: '#/components/schemas/TripLocation.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - summary: 'Creates a GameAccount resource.' - description: 'Creates a GameAccount resource.' + summary: 'Creates a TripLocation resource.' + description: 'Creates a TripLocation resource.' parameters: [] requestBody: - description: 'The new GameAccount resource' + description: 'The new TripLocation resource' content: application/ld+json: schema: - $ref: '#/components/schemas/GameAccount.jsonld' + $ref: '#/components/schemas/TripLocation.jsonld' required: true deprecated: false - parameters: [] - '/api/game_accounts/{id}': + '/api/trip_locations/{id}': get: - operationId: api_game_accounts_id_get + operationId: api_trip_locations_id_get tags: - - GameAccount + - TripLocation responses: - 200: - description: 'GameAccount resource' + '200': + description: 'TripLocation resource' content: application/ld+json: schema: - $ref: '#/components/schemas/GameAccount.jsonld' - 404: + $ref: '#/components/schemas/TripLocation.jsonld' + '404': description: 'Resource not found' - summary: 'Retrieves a GameAccount resource.' - description: 'Retrieves a GameAccount resource.' + summary: 'Retrieves a TripLocation resource.' + description: 'Retrieves a TripLocation resource.' parameters: - name: id in: path - description: 'GameAccount identifier' + description: 'TripLocation identifier' required: true deprecated: false allowEmptyValue: false @@ -841,30 +808,30 @@ paths: allowReserved: false deprecated: false patch: - operationId: api_game_accounts_id_patch + operationId: api_trip_locations_id_patch tags: - - GameAccount + - TripLocation responses: - 200: - description: 'GameAccount resource updated' + '200': + description: 'TripLocation resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/GameAccount.jsonld' + $ref: '#/components/schemas/TripLocation.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - 404: + '404': description: 'Resource not found' - summary: 'Updates the GameAccount resource.' - description: 'Updates the GameAccount resource.' + summary: 'Updates the TripLocation resource.' + description: 'Updates the TripLocation resource.' parameters: - name: id in: path - description: 'GameAccount identifier' + description: 'TripLocation identifier' required: true deprecated: false allowEmptyValue: false @@ -874,35 +841,34 @@ paths: explode: false allowReserved: false requestBody: - description: 'The updated GameAccount resource' + description: 'The updated TripLocation resource' content: application/merge-patch+json: schema: - $ref: '#/components/schemas/GameAccount' + $ref: '#/components/schemas/TripLocation' required: true deprecated: false - parameters: [] - /api/log_account_credits: + /api/users: get: - operationId: api_log_account_credits_get_collection + operationId: api_users_get_collection tags: - - LogAccountCredit + - User responses: - 200: - description: 'LogAccountCredit collection' + '200': + description: 'User collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogAccountCredit.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/User.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of LogAccountCredit resources.' - description: 'Retrieves the collection of LogAccountCredit resources.' + - member + summary: 'Retrieves the collection of User resources.' + description: 'Retrieves the collection of User resources.' parameters: - name: page @@ -933,73 +899,136 @@ paths: explode: false allowReserved: false - - name: 'order[creationDate]' + name: firstName in: query description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string - enum: - - asc - - desc style: form explode: false allowReserved: false - - name: 'order[credits]' + name: lastName in: query description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string - enum: - - asc - - desc style: form explode: false allowReserved: false - - name: 'order[revenue]' + name: userNameSearch in: query description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: false schema: type: string - enum: - - asc - - desc style: form explode: false allowReserved: false deprecated: false - parameters: [] - '/api/log_account_credits/{id}': + post: + operationId: api_users_post + tags: + - User + responses: + '201': + description: 'User resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/User.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + summary: 'Creates a User resource.' + description: 'Creates a User resource.' + parameters: [] + requestBody: + description: 'The new User resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/User.jsonld' + required: true + deprecated: false + '/api/users/{id}': get: - operationId: api_log_account_credits_id_get + operationId: api_users_id_get + tags: + - User + responses: + '200': + description: 'User resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/User.jsonld' + '404': + description: 'Resource not found' + summary: 'Retrieves a User resource.' + description: 'Retrieves a User resource.' + parameters: + - + name: id + in: path + description: 'User identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + patch: + operationId: api_users_id_patch tags: - - LogAccountCredit + - User responses: - 200: - description: 'LogAccountCredit resource' + '200': + description: 'User resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/LogAccountCredit.jsonld' - 404: + $ref: '#/components/schemas/User.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + '404': description: 'Resource not found' - summary: 'Retrieves a LogAccountCredit resource.' - description: 'Retrieves a LogAccountCredit resource.' + summary: 'Updates the User resource.' + description: 'Updates the User resource.' parameters: - name: id in: path - description: 'LogAccountCredit identifier' + description: 'User identifier' required: true deprecated: false allowEmptyValue: false @@ -1008,29 +1037,35 @@ paths: style: simple explode: false allowReserved: false + requestBody: + description: 'The updated User resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/User' + required: true deprecated: false - parameters: [] - /api/log_account_profits: + /api/user_trips: get: - operationId: api_log_account_profits_get_collection + operationId: api_user_trips_get_collection tags: - - LogAccountProfit + - UserTrip responses: - 200: - description: 'LogAccountProfit collection' + '200': + description: 'UserTrip collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogAccountProfit.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/UserTrip.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of LogAccountProfit resources.' - description: 'Retrieves the collection of LogAccountProfit resources.' + - member + summary: 'Retrieves the collection of UserTrip resources.' + description: 'Retrieves the collection of UserTrip resources.' parameters: - name: page @@ -1060,104 +1095,55 @@ paths: style: form explode: false allowReserved: false - - - name: gameAccount - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: 'gameAccount[]' - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: array - items: - type: string - style: form - explode: true - allowReserved: false - - - name: isDailyProfit - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: boolean - style: form - explode: false - allowReserved: false - - - name: gameAccountProfile - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_filter - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_order - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false - parameters: [] - '/api/log_account_profits/{id}': + post: + operationId: api_user_trips_post + tags: + - UserTrip + responses: + '201': + description: 'UserTrip resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTrip.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + summary: 'Creates a UserTrip resource.' + description: 'Creates a UserTrip resource.' + parameters: [] + requestBody: + description: 'The new UserTrip resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTrip.jsonld' + required: true + deprecated: false + '/api/user_trips/{id}': get: - operationId: api_log_account_profits_id_get + operationId: api_user_trips_id_get tags: - - LogAccountProfit + - UserTrip responses: - 200: - description: 'LogAccountProfit resource' + '200': + description: 'UserTrip resource' content: application/ld+json: schema: - $ref: '#/components/schemas/LogAccountProfit.jsonld' - 404: + $ref: '#/components/schemas/UserTrip.jsonld' + '404': description: 'Resource not found' - summary: 'Retrieves a LogAccountProfit resource.' - description: 'Retrieves a LogAccountProfit resource.' + summary: 'Retrieves a UserTrip resource.' + description: 'Retrieves a UserTrip resource.' parameters: - name: id in: path - description: 'LogAccountProfit identifier' + description: 'UserTrip identifier' required: true deprecated: false allowEmptyValue: false @@ -1167,33 +1153,73 @@ paths: explode: false allowReserved: false deprecated: false - parameters: [] - /api/log_account_sold_items: - get: - operationId: api_log_account_sold_items_get_collection + patch: + operationId: api_user_trips_id_patch tags: - - LogAccountSoldItem + - UserTrip responses: - 200: - description: 'LogAccountSoldItem collection' + '200': + description: 'UserTrip resource updated' content: application/ld+json: schema: - type: object - properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogAccountSoldItem.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } - required: - - 'hydra:member' - summary: 'Retrieves the collection of LogAccountSoldItem resources.' - description: 'Retrieves the collection of LogAccountSoldItem resources.' + $ref: '#/components/schemas/UserTrip.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + '404': + description: 'Resource not found' + summary: 'Updates the UserTrip resource.' + description: 'Updates the UserTrip resource.' parameters: - - name: page - in: query - description: 'The collection page number' + name: id + in: path + description: 'UserTrip identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + requestBody: + description: 'The updated UserTrip resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/UserTrip' + required: true + deprecated: false + /api/user_trip_locations: + get: + operationId: api_user_trip_locations_get_collection + tags: + - UserTripLocation + responses: + '200': + description: 'UserTripLocation collection' + content: + application/ld+json: + schema: + type: object + properties: + member: { type: array, items: { $ref: '#/components/schemas/UserTripLocation.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - member + summary: 'Retrieves the collection of UserTripLocation resources.' + description: 'Retrieves the collection of UserTripLocation resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' required: false deprecated: false allowEmptyValue: true @@ -1218,118 +1244,89 @@ paths: style: form explode: false allowReserved: false + deprecated: false + post: + operationId: api_user_trip_locations_post + tags: + - UserTripLocation + responses: + '201': + description: 'UserTripLocation resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTripLocation.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + summary: 'Creates a UserTripLocation resource.' + description: 'Creates a UserTripLocation resource.' + parameters: [] + requestBody: + description: 'The new UserTripLocation resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTripLocation.jsonld' + required: true + deprecated: false + '/api/user_trip_locations/{id}': + get: + operationId: api_user_trip_locations_id_get + tags: + - UserTripLocation + responses: + '200': + description: 'UserTripLocation resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTripLocation.jsonld' + '404': + description: 'Resource not found' + summary: 'Retrieves a UserTripLocation resource.' + description: 'Retrieves a UserTripLocation resource.' + parameters: - - name: account - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: 'account[]' - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: array - items: - type: string - style: form - explode: true - allowReserved: false - - - name: candidateItem - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: 'candidateItem[]' - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: array - items: - type: string - style: form - explode: true - allowReserved: false - - - name: candidateNameSearch - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_filter - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_order - in: query - description: '' - required: false + name: id + in: path + description: 'UserTripLocation identifier' + required: true deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string - style: form + style: simple explode: false allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false - parameters: [] - '/api/log_account_sold_items/{id}': - get: - operationId: api_log_account_sold_items_id_get + patch: + operationId: api_user_trip_locations_id_patch tags: - - LogAccountSoldItem + - UserTripLocation responses: - 200: - description: 'LogAccountSoldItem resource' + '200': + description: 'UserTripLocation resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/LogAccountSoldItem.jsonld' - 404: + $ref: '#/components/schemas/UserTripLocation.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + '404': description: 'Resource not found' - summary: 'Retrieves a LogAccountSoldItem resource.' - description: 'Retrieves a LogAccountSoldItem resource.' + summary: 'Updates the UserTripLocation resource.' + description: 'Updates the UserTripLocation resource.' parameters: - name: id in: path - description: 'LogAccountSoldItem identifier' + description: 'UserTripLocation identifier' required: true deprecated: false allowEmptyValue: false @@ -1338,29 +1335,35 @@ paths: style: simple explode: false allowReserved: false + requestBody: + description: 'The updated UserTripLocation resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/UserTripLocation' + required: true deprecated: false - parameters: [] - /api/log_generals: + /api/user_trip_work_logs: get: - operationId: api_log_generals_get_collection + operationId: api_user_trip_work_logs_get_collection tags: - - LogGeneral + - UserTripWorkLog responses: - 200: - description: 'LogGeneral collection' + '200': + description: 'UserTripWorkLog collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogGeneral.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/UserTripWorkLog.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of LogGeneral resources.' - description: 'Retrieves the collection of LogGeneral resources.' + - member + summary: 'Retrieves the collection of UserTripWorkLog resources.' + description: 'Retrieves the collection of UserTripWorkLog resources.' parameters: - name: page @@ -1390,66 +1393,89 @@ paths: style: form explode: false allowReserved: false + deprecated: false + post: + operationId: api_user_trip_work_logs_post + tags: + - UserTripWorkLog + responses: + '201': + description: 'UserTripWorkLog resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTripWorkLog.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + summary: 'Creates a UserTripWorkLog resource.' + description: 'Creates a UserTripWorkLog resource.' + parameters: [] + requestBody: + description: 'The new UserTripWorkLog resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTripWorkLog.jsonld' + required: true + deprecated: false + '/api/user_trip_work_logs/{id}': + get: + operationId: api_user_trip_work_logs_id_get + tags: + - UserTripWorkLog + responses: + '200': + description: 'UserTripWorkLog resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/UserTripWorkLog.jsonld' + '404': + description: 'Resource not found' + summary: 'Retrieves a UserTripWorkLog resource.' + description: 'Retrieves a UserTripWorkLog resource.' + parameters: - - name: gameAccountProfile - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_filter - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_order - in: query - description: '' - required: false + name: id + in: path + description: 'UserTripWorkLog identifier' + required: true deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string - style: form + style: simple explode: false allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false - parameters: [] - '/api/log_generals/{id}': - get: - operationId: api_log_generals_id_get + patch: + operationId: api_user_trip_work_logs_id_patch tags: - - LogGeneral + - UserTripWorkLog responses: - 200: - description: 'LogGeneral resource' + '200': + description: 'UserTripWorkLog resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/LogGeneral.jsonld' - 404: + $ref: '#/components/schemas/UserTripWorkLog.jsonld' + links: { } + '400': + description: 'Invalid input' + '422': + description: 'Unprocessable entity' + '404': description: 'Resource not found' - summary: 'Retrieves a LogGeneral resource.' - description: 'Retrieves a LogGeneral resource.' + summary: 'Updates the UserTripWorkLog resource.' + description: 'Updates the UserTripWorkLog resource.' parameters: - name: id in: path - description: 'LogGeneral identifier' + description: 'UserTripWorkLog identifier' required: true deprecated: false allowEmptyValue: false @@ -1458,29 +1484,35 @@ paths: style: simple explode: false allowReserved: false + requestBody: + description: 'The updated UserTripWorkLog resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/UserTripWorkLog' + required: true deprecated: false - parameters: [] - /api/log_total_profits: + /api/vessels: get: - operationId: api_log_total_profits_get_collection + operationId: api_vessels_get_collection tags: - - LogTotalProfit + - Vessel responses: - 200: - description: 'LogTotalProfit collection' + '200': + description: 'Vessel collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogTotalProfit.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/Vessel.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of LogTotalProfit resources.' - description: 'Retrieves the collection of LogTotalProfit resources.' + - member + summary: 'Retrieves the collection of Vessel resources.' + description: 'Retrieves the collection of Vessel resources.' parameters: - name: page @@ -1510,56 +1542,91 @@ paths: style: form explode: false allowReserved: false + - + name: name + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: false + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_filter + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: false + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: false + schema: + type: string + style: form + explode: false + allowReserved: false deprecated: false post: - operationId: api_log_total_profits_post + operationId: api_vessels_post tags: - - LogTotalProfit + - Vessel responses: - 201: - description: 'LogTotalProfit resource created' + '201': + description: 'Vessel resource created' content: application/ld+json: schema: - $ref: '#/components/schemas/LogTotalProfit.jsonld' + $ref: '#/components/schemas/Vessel.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - summary: 'Creates a LogTotalProfit resource.' - description: 'Creates a LogTotalProfit resource.' + summary: 'Creates a Vessel resource.' + description: 'Creates a Vessel resource.' parameters: [] requestBody: - description: 'The new LogTotalProfit resource' + description: 'The new Vessel resource' content: application/ld+json: schema: - $ref: '#/components/schemas/LogTotalProfit.jsonld' + $ref: '#/components/schemas/Vessel.jsonld' required: true deprecated: false - parameters: [] - '/api/log_total_profits/{id}': + '/api/vessels/{id}': get: - operationId: api_log_total_profits_id_get + operationId: api_vessels_id_get tags: - - LogTotalProfit + - Vessel responses: - 200: - description: 'LogTotalProfit resource' + '200': + description: 'Vessel resource' content: application/ld+json: schema: - $ref: '#/components/schemas/LogTotalProfit.jsonld' - 404: + $ref: '#/components/schemas/Vessel.jsonld' + '404': description: 'Resource not found' - summary: 'Retrieves a LogTotalProfit resource.' - description: 'Retrieves a LogTotalProfit resource.' + summary: 'Retrieves a Vessel resource.' + description: 'Retrieves a Vessel resource.' parameters: - name: id in: path - description: 'LogTotalProfit identifier' + description: 'Vessel identifier' required: true deprecated: false allowEmptyValue: false @@ -1570,30 +1637,30 @@ paths: allowReserved: false deprecated: false patch: - operationId: api_log_total_profits_id_patch + operationId: api_vessels_id_patch tags: - - LogTotalProfit + - Vessel responses: - 200: - description: 'LogTotalProfit resource updated' + '200': + description: 'Vessel resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/LogTotalProfit.jsonld' + $ref: '#/components/schemas/Vessel.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - 404: + '404': description: 'Resource not found' - summary: 'Updates the LogTotalProfit resource.' - description: 'Updates the LogTotalProfit resource.' + summary: 'Updates the Vessel resource.' + description: 'Updates the Vessel resource.' parameters: - name: id in: path - description: 'LogTotalProfit identifier' + description: 'Vessel identifier' required: true deprecated: false allowEmptyValue: false @@ -1603,222 +1670,34 @@ paths: explode: false allowReserved: false requestBody: - description: 'The updated LogTotalProfit resource' + description: 'The updated Vessel resource' content: application/merge-patch+json: schema: - $ref: '#/components/schemas/LogTotalProfit' + $ref: '#/components/schemas/Vessel' required: true deprecated: false - parameters: [] - /api/media_objects: + /api/zones: get: - operationId: api_media_objects_get_collection + operationId: api_zones_get_collection tags: - - MediaObject + - Zone responses: - 200: - description: 'MediaObject collection' + '200': + description: 'Zone collection' content: application/ld+json: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + member: { type: array, items: { $ref: '#/components/schemas/Zone.jsonld' } } + totalItems: { type: integer, minimum: 0 } + view: { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, first: { type: string, format: iri-reference }, last: { type: string, format: iri-reference }, previous: { type: string, format: iri-reference }, next: { type: string, format: iri-reference } }, example: { '@id': string, type: string, first: string, last: string, previous: string, next: string } } + search: { type: object, properties: { '@type': { type: string }, template: { type: string }, variableRepresentation: { type: string }, mapping: { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } required: - - 'hydra:member' - summary: 'Retrieves the collection of MediaObject resources.' - description: 'Retrieves the collection of MediaObject resources.' - parameters: - - - name: page - in: query - description: 'The collection page number' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: integer - default: 1 - style: form - explode: false - allowReserved: false - - - name: itemsPerPage - in: query - description: 'The number of items per page' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: integer - default: 50 - minimum: 0 - maximum: 100 - style: form - explode: false - allowReserved: false - deprecated: false - post: - operationId: api_media_objects_post - tags: - - MediaObject - responses: - 201: - description: 'MediaObject resource created' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' - links: { } - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - summary: 'Creates a MediaObject resource.' - description: 'Creates a MediaObject resource.' - parameters: [] - requestBody: - description: '' - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - required: false - deprecated: false - parameters: [] - '/api/media_objects/{id}': - get: - operationId: api_media_objects_id_get - tags: - - MediaObject - responses: - 200: - description: 'MediaObject resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' - 404: - description: 'Resource not found' - summary: 'Retrieves a MediaObject resource.' - description: 'Retrieves a MediaObject resource.' - parameters: - - - name: id - in: path - description: 'MediaObject identifier' - required: true - deprecated: false - allowEmptyValue: false - schema: - type: string - style: simple - explode: false - allowReserved: false - deprecated: false - delete: - operationId: api_media_objects_id_delete - tags: - - MediaObject - responses: - 204: - description: 'MediaObject resource deleted' - 404: - description: 'Resource not found' - summary: 'Removes the MediaObject resource.' - description: 'Removes the MediaObject resource.' - parameters: - - - name: id - in: path - description: 'MediaObject identifier' - required: true - deprecated: false - allowEmptyValue: false - schema: - type: string - style: simple - explode: false - allowReserved: false - deprecated: false - parameters: [] - /api/mode_config: - get: - operationId: api_mode_config_get - tags: - - ModeConfig - responses: - 200: - description: 'ModeConfig resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/ModeConfig.jsonld' - 404: - description: 'Resource not found' - summary: 'Retrieves a ModeConfig resource.' - description: 'Retrieves a ModeConfig resource.' - parameters: [] - deprecated: false - patch: - operationId: api_mode_config_patch - tags: - - ModeConfig - responses: - 200: - description: 'ModeConfig resource updated' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/ModeConfig.jsonld' - links: { } - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - 404: - description: 'Resource not found' - summary: 'Updates the ModeConfig resource.' - description: 'Updates the ModeConfig resource.' - parameters: [] - requestBody: - description: 'The updated ModeConfig resource' - content: - application/merge-patch+json: - schema: - $ref: '#/components/schemas/ModeConfig' - required: true - deprecated: false - parameters: [] - /api/players: - get: - operationId: api_players_get_collection - tags: - - Player - responses: - 200: - description: 'Player collection' - content: - application/ld+json: - schema: - type: object - properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/Player.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } - required: - - 'hydra:member' - summary: 'Retrieves the collection of Player resources.' - description: 'Retrieves the collection of Player resources.' + - member + summary: 'Retrieves the collection of Zone resources.' + description: 'Retrieves the collection of Zone resources.' parameters: - name: page @@ -1849,166 +1728,26 @@ paths: explode: false allowReserved: false - - name: custom_json_order + name: name in: query description: '' required: false deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' - deprecated: false - post: - operationId: api_players_post - tags: - - Player - responses: - 201: - description: 'Player resource created' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/Player.jsonld' - links: { } - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - summary: 'Creates a Player resource.' - description: 'Creates a Player resource.' - parameters: [] - requestBody: - description: 'The new Player resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/Player.jsonld' - required: true - deprecated: false - parameters: [] - '/api/players/{id}': - get: - operationId: api_players_id_get - tags: - - Player - responses: - 200: - description: 'Player resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/Player.jsonld' - 404: - description: 'Resource not found' - summary: 'Retrieves a Player resource.' - description: 'Retrieves a Player resource.' - parameters: - - - name: id - in: path - description: 'Player identifier' - required: true - deprecated: false - allowEmptyValue: false - schema: - type: string - style: simple - explode: false - allowReserved: false - deprecated: false - patch: - operationId: api_players_id_patch - tags: - - Player - responses: - 200: - description: 'Player resource updated' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/Player.jsonld' - links: { } - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - 404: - description: 'Resource not found' - summary: 'Updates the Player resource.' - description: 'Updates the Player resource.' - parameters: - - - name: id - in: path - description: 'Player identifier' - required: true - deprecated: false allowEmptyValue: false schema: type: string - style: simple - explode: false - allowReserved: false - requestBody: - description: 'The updated Player resource' - content: - application/merge-patch+json: - schema: - $ref: '#/components/schemas/Player' - required: true - deprecated: false - parameters: [] - /api/rarities: - get: - operationId: api_rarities_get_collection - tags: - - Rarity - responses: - 200: - description: 'Rarity collection' - content: - application/ld+json: - schema: - type: object - properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/Rarity.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } - required: - - 'hydra:member' - summary: 'Retrieves the collection of Rarity resources.' - description: 'Retrieves the collection of Rarity resources.' - parameters: - - - name: page - in: query - description: 'The collection page number' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: integer - default: 1 style: form explode: false allowReserved: false - - name: itemsPerPage + name: custom_json_filter in: query - description: 'The number of items per page' + description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: - type: integer - default: 50 - minimum: 0 - maximum: 100 + type: string style: form explode: false allowReserved: false @@ -2018,63 +1757,61 @@ paths: description: '' required: false deprecated: false - allowEmptyValue: true + allowEmptyValue: false schema: type: string style: form explode: false allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' deprecated: false post: - operationId: api_rarities_post + operationId: api_zones_post tags: - - Rarity + - Zone responses: - 201: - description: 'Rarity resource created' + '201': + description: 'Zone resource created' content: application/ld+json: schema: - $ref: '#/components/schemas/Rarity.jsonld' + $ref: '#/components/schemas/Zone.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - summary: 'Creates a Rarity resource.' - description: 'Creates a Rarity resource.' + summary: 'Creates a Zone resource.' + description: 'Creates a Zone resource.' parameters: [] requestBody: - description: 'The new Rarity resource' + description: 'The new Zone resource' content: application/ld+json: schema: - $ref: '#/components/schemas/Rarity.jsonld' + $ref: '#/components/schemas/Zone.jsonld' required: true deprecated: false - parameters: [] - '/api/rarities/{id}': + '/api/zones/{id}': get: - operationId: api_rarities_id_get + operationId: api_zones_id_get tags: - - Rarity + - Zone responses: - 200: - description: 'Rarity resource' + '200': + description: 'Zone resource' content: application/ld+json: schema: - $ref: '#/components/schemas/Rarity.jsonld' - 404: + $ref: '#/components/schemas/Zone.jsonld' + '404': description: 'Resource not found' - summary: 'Retrieves a Rarity resource.' - description: 'Retrieves a Rarity resource.' + summary: 'Retrieves a Zone resource.' + description: 'Retrieves a Zone resource.' parameters: - name: id in: path - description: 'Rarity identifier' + description: 'Zone identifier' required: true deprecated: false allowEmptyValue: false @@ -2085,30 +1822,30 @@ paths: allowReserved: false deprecated: false patch: - operationId: api_rarities_id_patch + operationId: api_zones_id_patch tags: - - Rarity + - Zone responses: - 200: - description: 'Rarity resource updated' + '200': + description: 'Zone resource updated' content: application/ld+json: schema: - $ref: '#/components/schemas/Rarity.jsonld' + $ref: '#/components/schemas/Zone.jsonld' links: { } - 400: + '400': description: 'Invalid input' - 422: + '422': description: 'Unprocessable entity' - 404: + '404': description: 'Resource not found' - summary: 'Updates the Rarity resource.' - description: 'Updates the Rarity resource.' + summary: 'Updates the Zone resource.' + description: 'Updates the Zone resource.' parameters: - name: id in: path - description: 'Rarity identifier' + description: 'Zone identifier' required: true deprecated: false allowEmptyValue: false @@ -2118,1820 +1855,43 @@ paths: explode: false allowReserved: false requestBody: - description: 'The updated Rarity resource' + description: 'The updated Zone resource' content: application/merge-patch+json: schema: - $ref: '#/components/schemas/Rarity' + $ref: '#/components/schemas/Zone' required: true deprecated: false - parameters: [] - /api/system_stats: - get: - operationId: api_system_stats_get - tags: - - SystemStat - responses: - 200: - description: 'SystemStat resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/SystemStat.jsonld' - 404: - description: 'Resource not found' - summary: 'Retrieves a SystemStat resource.' - description: 'Retrieves a SystemStat resource.' - parameters: [] +components: + schemas: + Location: + type: object + description: '' deprecated: false - parameters: [] - /api/users: - get: - operationId: api_users_get_collection - tags: - - User - responses: - 200: - description: 'User collection' - content: - application/ld+json: - schema: - type: object - properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/User.jsonld' } } - 'hydra:totalItems': { type: integer, minimum: 0 } - 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } - 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } - required: - - 'hydra:member' - summary: 'Retrieves the collection of User resources.' - description: 'Retrieves the collection of User resources.' - parameters: - - - name: page - in: query - description: 'The collection page number' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: integer - default: 1 - style: form - explode: false - allowReserved: false - - - name: itemsPerPage - in: query - description: 'The number of items per page' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: integer - default: 50 - minimum: 0 - maximum: 100 - style: form - explode: false - allowReserved: false - - - name: firstName - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: lastName - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: userNameSearch - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - - - name: custom_json_order - in: query - description: '' - required: false - deprecated: false - allowEmptyValue: true - schema: - type: string - style: form - explode: false - allowReserved: false - example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' - deprecated: false - post: - operationId: api_users_post - tags: - - User - responses: - 201: - description: 'User resource created' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/User.jsonld' - links: { } - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - summary: 'Creates a User resource.' - description: 'Creates a User resource.' - parameters: [] - requestBody: - description: 'The new User resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/User.jsonld' - required: true - deprecated: false - parameters: [] - '/api/users/{id}': - get: - operationId: api_users_id_get - tags: - - User - responses: - 200: - description: 'User resource' - content: - application/ld+json: - schema: - $ref: '#/components/schemas/User.jsonld' - 404: - description: 'Resource not found' - summary: 'Retrieves a User resource.' - description: 'Retrieves a User resource.' - parameters: - - - name: id - in: path - description: 'User identifier' - required: true - deprecated: false - allowEmptyValue: false - schema: - type: string - style: simple - explode: false - allowReserved: false - deprecated: false - parameters: [] -components: - schemas: - AccountTradePileItem: - type: object - description: '' - deprecated: false - properties: - dbId: - readOnly: true - type: - - integer - - 'null' - account: - readOnly: true - type: string - format: iri-reference - example: 'https://example.com/' - candidateItem: - readOnly: true - type: string - format: iri-reference - example: 'https://example.com/' - eaId: - readOnly: true - type: integer - eaAssetId: - readOnly: true - type: integer - eaResourceId: - readOnly: true - type: integer - rareFlag: - readOnly: true - type: integer - itemType: - readOnly: true - type: string - rating: - readOnly: true - type: integer - contracts: - readOnly: true - type: - - integer - - 'null' - playStyle: - readOnly: true - type: - - integer - - 'null' - startingBid: - type: integer - binPrice: - type: integer - individualPrice: - default: true - example: true - type: boolean - minRange: - readOnly: true - type: integer - maxRange: - readOnly: true - type: integer - lastSalePrice: - readOnly: true - type: integer - tradeState: - readOnly: true - type: - - string - - 'null' - eaTradeId: - readOnly: true - type: - - integer - - 'null' - rebuy: - readOnly: true - default: true - example: true - type: boolean - leagueId: - readOnly: true - type: - - integer - - 'null' - teamId: - readOnly: true - type: - - integer - - 'null' - nationId: - readOnly: true - type: - - integer - - 'null' - listCnt: - readOnly: true - type: integer - openBidCnt: - readOnly: true - type: - - integer - - 'null' - snipedItem: - readOnly: true - default: true - example: true - type: boolean - marketAverage: - readOnly: true - type: - - integer - - 'null' - creationDate: - readOnly: true - type: string - format: date-time - AccountTradePileItem.jsonld: - type: object - description: '' - deprecated: false - properties: - '@context': - readOnly: true - oneOf: - - - type: string - - - type: object - properties: - '@vocab': - type: string - hydra: - type: string - enum: ['http://www.w3.org/ns/hydra/core#'] - required: - - '@vocab' - - hydra - additionalProperties: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - dbId: - readOnly: true - type: - - integer - - 'null' - account: - readOnly: true - $ref: '#/components/schemas/GameAccount.jsonld' - candidateItem: - readOnly: true - $ref: '#/components/schemas/Candidate.jsonld' - eaId: - readOnly: true - type: integer - eaAssetId: - readOnly: true - type: integer - eaResourceId: - readOnly: true - type: integer - rareFlag: - readOnly: true - type: integer - itemType: - readOnly: true - type: string - rating: - readOnly: true - type: integer - contracts: - readOnly: true - type: - - integer - - 'null' - playStyle: - readOnly: true - type: - - integer - - 'null' - startingBid: - type: integer - binPrice: - type: integer - individualPrice: - default: true - example: true - type: boolean - minRange: - readOnly: true - type: integer - maxRange: - readOnly: true - type: integer - lastSalePrice: - readOnly: true - type: integer - tradeState: - readOnly: true - type: - - string - - 'null' - eaTradeId: - readOnly: true - type: - - integer - - 'null' - rebuy: - readOnly: true - default: true - example: true - type: boolean - leagueId: - readOnly: true - type: - - integer - - 'null' - teamId: - readOnly: true - type: - - integer - - 'null' - nationId: - readOnly: true - type: - - integer - - 'null' - listCnt: - readOnly: true - type: integer - openBidCnt: - readOnly: true - type: - - integer - - 'null' - snipedItem: - readOnly: true - default: true - example: true - type: boolean - marketAverage: - readOnly: true - type: - - integer - - 'null' - creationDate: - readOnly: true - type: string - format: date-time - Candidate: - type: object - description: '' - deprecated: false - properties: - dbId: - readOnly: true - type: - - integer - - 'null' - rarity: - readOnly: true - type: string - format: iri-reference - example: 'https://example.com/' - candidateStat: - readOnly: true - type: string - format: iri-reference - example: 'https://example.com/' - player: - readOnly: true - type: string - format: iri-reference - example: 'https://example.com/' - firstname: - readOnly: true - type: - - string - - 'null' - lastname: - readOnly: true - type: - - string - - 'null' - nickname: - readOnly: true - type: - - string - - 'null' - fullDisplayInfo: - readOnly: true - type: - - string - - 'null' - eaAssetId: - readOnly: true - type: - - integer - - 'null' - eaResourceId: - readOnly: true - type: - - integer - - 'null' - rareFlag: - readOnly: true - type: - - integer - - 'null' - rarityName: - readOnly: true - type: - - string - - 'null' - image: - readOnly: true - type: - - string - - 'null' - format: iri-reference - example: 'https://example.com/' - imageUrl: - readOnly: true - type: - - string - - 'null' - cardImageUrl: - readOnly: true - type: - - string - - 'null' - stockCountTotal: - readOnly: true - type: - - integer - - 'null' - stockCountReal: - readOnly: true - type: - - integer - - 'null' - futBinId: - type: - - integer - - 'null' - futBinName: - type: - - string - - 'null' - futBinPrice: - type: - - integer - - 'null' - futBinSellingPrice: - type: - - integer - - 'null' - lastFutBinUpdate: - readOnly: true - type: - - string - - 'null' - format: date-time - futWizId: - type: - - integer - - 'null' - futWizPrice: - type: - - integer - - 'null' - futwizName: - type: - - string - - 'null' - futWizSellingPrice: - type: - - integer - - 'null' - lastFutWizUpdate: - readOnly: true - type: - - string - - 'null' - format: date-time - rating: - type: - - integer - - 'null' - highestBuyBinPrice: - type: - - integer - - 'null' - sellStartingBid: - type: - - integer - - 'null' - sellBinPrice: - type: - - integer - - 'null' - lastFoundMinRange: - type: - - integer - - 'null' - lastFoundMaxRange: - type: - - integer - - 'null' - lastFoundLowestBin: - type: - - integer - - 'null' - lowestBinUpdateDate: - readOnly: true - type: - - string - - 'null' - format: date-time - buy: - type: - - boolean - - 'null' - maxBuyPrice: - type: - - integer - - 'null' - buyStyle: - type: - - integer - - 'null' - newBuySelective: - type: - - boolean - - 'null' - remove: - type: - - boolean - - 'null' - leagueId: - type: - - integer - - 'null' - nationId: - type: - - integer - - 'null' - prio: - type: - - integer - - 'null' - listCnt: - type: - - integer - - 'null' - soldCnt: - type: - - integer - - 'null' - note: - type: - - string - - 'null' - relevant: - type: - - boolean - - 'null' - adjust100: - type: - - boolean - - 'null' - directReBuy: - type: - - boolean - - 'null' - marketAverage: - readOnly: true - type: - - integer - - 'null' - creationDate: - readOnly: true - type: - - string - - 'null' - format: date-time - required: - - eaAssetId - - eaResourceId - - rareFlag - - rating - - buy - - buyStyle - - newBuySelective - - remove - - listCnt - - soldCnt - - relevant - - adjust100 - - directReBuy - - creationDate - Candidate.jsonld: - type: object - description: '' - deprecated: false - properties: - '@context': - readOnly: true - oneOf: - - - type: string - - - type: object - properties: - '@vocab': - type: string - hydra: - type: string - enum: ['http://www.w3.org/ns/hydra/core#'] - required: - - '@vocab' - - hydra - additionalProperties: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - dbId: - readOnly: true - type: - - integer - - 'null' - rarity: - readOnly: true - $ref: '#/components/schemas/Rarity.jsonld' - candidateStat: - readOnly: true - $ref: '#/components/schemas/CandidateStat.jsonld' - player: - readOnly: true - $ref: '#/components/schemas/Player.jsonld' - firstname: - readOnly: true - type: - - string - - 'null' - lastname: - readOnly: true - type: - - string - - 'null' - nickname: - readOnly: true - type: - - string - - 'null' - fullDisplayInfo: - readOnly: true - type: - - string - - 'null' - eaAssetId: - readOnly: true - type: - - integer - - 'null' - eaResourceId: - readOnly: true - type: - - integer - - 'null' - rareFlag: - readOnly: true - type: - - integer - - 'null' - rarityName: - readOnly: true - type: - - string - - 'null' - image: - readOnly: true - type: - - string - - 'null' - format: iri-reference - example: 'https://example.com/' - imageUrl: - readOnly: true - type: - - string - - 'null' - cardImageUrl: - readOnly: true - type: - - string - - 'null' - stockCountTotal: - readOnly: true - type: - - integer - - 'null' - stockCountReal: - readOnly: true - type: - - integer - - 'null' - futBinId: - type: - - integer - - 'null' - futBinName: - type: - - string - - 'null' - futBinPrice: - type: - - integer - - 'null' - futBinSellingPrice: - type: - - integer - - 'null' - lastFutBinUpdate: - readOnly: true - type: - - string - - 'null' - format: date-time - futWizId: - type: - - integer - - 'null' - futWizPrice: - type: - - integer - - 'null' - futwizName: - type: - - string - - 'null' - futWizSellingPrice: - type: - - integer - - 'null' - lastFutWizUpdate: - readOnly: true - type: - - string - - 'null' - format: date-time - rating: - type: - - integer - - 'null' - highestBuyBinPrice: - type: - - integer - - 'null' - sellStartingBid: - type: - - integer - - 'null' - sellBinPrice: - type: - - integer - - 'null' - lastFoundMinRange: - type: - - integer - - 'null' - lastFoundMaxRange: - type: - - integer - - 'null' - lastFoundLowestBin: - type: - - integer - - 'null' - lowestBinUpdateDate: - readOnly: true - type: - - string - - 'null' - format: date-time - buy: - type: - - boolean - - 'null' - maxBuyPrice: - type: - - integer - - 'null' - buyStyle: - type: - - integer - - 'null' - newBuySelective: - type: - - boolean - - 'null' - remove: - type: - - boolean - - 'null' - leagueId: - type: - - integer - - 'null' - nationId: - type: - - integer - - 'null' - prio: - type: - - integer - - 'null' - listCnt: - type: - - integer - - 'null' - soldCnt: - type: - - integer - - 'null' - note: - type: - - string - - 'null' - relevant: - type: - - boolean - - 'null' - adjust100: - type: - - boolean - - 'null' - directReBuy: - type: - - boolean - - 'null' - marketAverage: - readOnly: true - type: - - integer - - 'null' - creationDate: - readOnly: true - type: - - string - - 'null' - format: date-time - required: - - eaAssetId - - eaResourceId - - rareFlag - - rating - - buy - - buyStyle - - newBuySelective - - remove - - listCnt - - soldCnt - - relevant - - adjust100 - - directReBuy - - creationDate - CandidateStat.jsonld: - type: object - description: '' - deprecated: false - properties: - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - '@context': - readOnly: true - oneOf: - - - type: string - - - type: object - properties: - '@vocab': - type: string - hydra: - type: string - enum: ['http://www.w3.org/ns/hydra/core#'] - required: - - '@vocab' - - hydra - additionalProperties: true - candidateItem: - readOnly: true - $ref: '#/components/schemas/Candidate.jsonld' - revRl6: - type: number - rl6: - type: integer - sold6: - type: integer - rat6: - type: number - rev6: - type: integer - revRl12: - type: number - rl12: - type: integer - sold12: - type: integer - rat12: - type: number - rev12: - type: integer - revRl24: - type: number - rl24: - type: integer - sold24: - type: integer - rat24: - type: number - rev24: - type: integer - revRl3d: - type: number - rl3d: - type: integer - sold3d: - type: integer - rat3d: - type: number - rev3d: - type: integer - revRl1w: - type: number - rl1w: - type: integer - sold1w: - type: integer - rat1w: - type: number - rev1w: - type: integer - revRl2w: - type: number - rl2w: - type: integer - sold2w: - type: integer - rat2w: - type: number - rev2w: - type: integer - revRl3w: - type: number - rl3w: - type: integer - sold3w: - type: integer - rat3w: - type: number - rev3w: - type: integer - revRl4w: - type: number - rl4w: - type: integer - sold4w: - type: integer - rat4w: - type: number - rev4w: - type: integer - revRl: - type: number - rl: - type: integer - sold: - type: integer - rat: - type: number - rev: - type: integer - snipingRev: - type: integer - creationDate: - readOnly: true - type: - - string - - 'null' - format: date-time - lastUpdateDate: - readOnly: true - type: - - string - - 'null' - format: date-time - CandidateStockAccounts.jsonld: - type: object - description: '' - deprecated: false - properties: - '@context': - readOnly: true - oneOf: - - - type: string - - - type: object - properties: - '@vocab': - type: string - hydra: - type: string - enum: ['http://www.w3.org/ns/hydra/core#'] - required: - - '@vocab' - - hydra - additionalProperties: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - candidatesStockAccounts: - type: array - items: - $ref: '#/components/schemas/GameAccount.jsonld' - candidatesMissingAccounts: - type: array - items: - $ref: '#/components/schemas/GameAccount.jsonld' - Config: - type: object - description: '' - deprecated: false - properties: - systemActive: - type: boolean - systemRunning: - type: boolean - lastUpdateDate: - readOnly: true - type: string - format: date-time - lastCheckDate: - readOnly: true - type: string - format: date-time - processCnt: - readOnly: true - type: integer - sleepHourStart: - minimum: 0 - maximum: 23 - type: - - integer - - 'null' - sleepHourEnd: - minimum: 0 - maximum: 23 - type: - - integer - - 'null' - checkMaxSales: - type: boolean - numMaxSales: - minimum: 0 - maximum: 20 - type: - - integer - - 'null' - Config.jsonld: - type: object - description: '' - deprecated: false - properties: - '@context': - readOnly: true - oneOf: - - - type: string - - - type: object - properties: - '@vocab': - type: string - hydra: - type: string - enum: ['http://www.w3.org/ns/hydra/core#'] - required: - - '@vocab' - - hydra - additionalProperties: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - systemActive: - type: boolean - systemRunning: - type: boolean - lastUpdateDate: - readOnly: true - type: string - format: date-time - lastCheckDate: - readOnly: true - type: string - format: date-time - processCnt: - readOnly: true - type: integer - sleepHourStart: - minimum: 0 - maximum: 23 - type: - - integer - - 'null' - sleepHourEnd: - minimum: 0 - maximum: 23 - type: - - integer - - 'null' - checkMaxSales: - type: boolean - numMaxSales: - minimum: 0 - maximum: 20 - type: - - integer - - 'null' - GameAccount: - type: object - description: '' - deprecated: false - properties: - dbId: - readOnly: true - type: - - integer - - 'null' - email: - format: email - externalDocs: - url: 'https://schema.org/email' - type: - - string - - 'null' - profile: - type: - - string - - 'null' - password: - type: - - string - - 'null' - emailPw: - type: - - string - - 'null' - credits: - readOnly: true - type: - - integer - - 'null' - cntItems: - readOnly: true - type: - - integer - - 'null' - cntSoldItems: - readOnly: true - type: - - integer - - 'null' - cntInactiveItems: - readOnly: true - type: - - integer - - 'null' - active: - type: - - boolean - - 'null' - running: - type: - - boolean - - 'null' - relist: - type: - - boolean - - 'null' - relistDate: - type: - - string - - 'null' - format: date-time - blocked: - type: - - boolean - - 'null' - sniping: - type: - - boolean - - 'null' - snipingDate: - readOnly: true - type: - - string - - 'null' - format: date-time - tmOpen: - type: - - boolean - - 'null' - tmState: - type: - - integer - - 'null' - dead: - type: - - boolean - - 'null' - lockedMsg: - type: - - boolean - - 'null' - dynPrices: - type: - - boolean - - 'null' - newBuy: - type: - - boolean - - 'null' - newBuyDate: - readOnly: true - type: - - string - - 'null' - format: date-time - newBuySelective: - type: - - boolean - - 'null' - reBuy: - type: - - boolean - - 'null' - rebuyDate: - readOnly: true - type: - - string - - 'null' - format: date-time - connectionDate: - readOnly: true - type: - - string - - 'null' - format: date-time - importWatchlist: - type: - - boolean - - 'null' - autoReBuy: - type: - - boolean - - 'null' - directReBuy: - type: - - boolean - - 'null' - itemMaxBuyPrice: - minimum: 0 - maximum: 15000000 - type: - - integer - - 'null' - revenue: - readOnly: true - type: - - integer - - 'null' - futWizValue: - readOnly: true - type: - - integer - - 'null' - eaMarketAvgValue: - readOnly: true - type: - - integer - - 'null' - mfaCode: - type: - - string - - 'null' - twoFactorAuthKey: - type: - - string - - 'null' - login2FaViaApp: - type: - - boolean - - 'null' - eaCode1: - type: - - string - - 'null' - eaCode2: - type: - - string - - 'null' - eaCode3: - type: - - string - - 'null' - eaCode4: - type: - - string - - 'null' - eaCode5: - type: - - string - - 'null' - eaCode6: - type: - - string - - 'null' - snipingCnt1h: - type: - - integer - - 'null' - snipingCnt3h: - type: - - integer - - 'null' - snipingCnt6h: - type: - - integer - - 'null' - snipingCnt12h: - type: - - integer - - 'null' - snipingCnt24h: - type: - - integer - - 'null' - snipingCnt3d: - type: - - integer - - 'null' - snipingCnt1w: - type: - - integer - - 'null' - note: - type: - - string - - 'null' - loopStartDate: - readOnly: true - type: - - string - - 'null' - format: date-time - loopFinishDate: - readOnly: true - type: - - string - - 'null' - format: date-time - creationDate: - readOnly: true - type: - - string - - 'null' - format: date-time - owner: - readOnly: true - type: string - format: iri-reference - example: 'https://example.com/' - required: - - email - - profile - - password - - active - - running - - relist - - blocked - - sniping - - tmOpen - - dead - - lockedMsg - - dynPrices - - newBuy - - newBuySelective - - reBuy - - importWatchlist - - autoReBuy - - directReBuy - GameAccount.jsonld: - type: object - description: '' - deprecated: false - properties: - '@context': - readOnly: true - oneOf: - - - type: string - - - type: object - properties: - '@vocab': - type: string - hydra: - type: string - enum: ['http://www.w3.org/ns/hydra/core#'] - required: - - '@vocab' - - hydra - additionalProperties: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - dbId: - readOnly: true - type: - - integer - - 'null' - email: - format: email - externalDocs: - url: 'https://schema.org/email' - type: - - string - - 'null' - profile: - type: - - string - - 'null' - password: - type: - - string - - 'null' - emailPw: - type: - - string - - 'null' - credits: - readOnly: true - type: - - integer - - 'null' - cntItems: - readOnly: true - type: - - integer - - 'null' - cntSoldItems: - readOnly: true - type: - - integer - - 'null' - cntInactiveItems: - readOnly: true - type: - - integer - - 'null' - active: - type: - - boolean - - 'null' - running: - type: - - boolean - - 'null' - relist: - type: - - boolean - - 'null' - relistDate: - type: - - string - - 'null' - format: date-time - blocked: - type: - - boolean - - 'null' - sniping: - type: - - boolean - - 'null' - snipingDate: - readOnly: true - type: - - string - - 'null' - format: date-time - tmOpen: - type: - - boolean - - 'null' - tmState: - type: - - integer - - 'null' - dead: - type: - - boolean - - 'null' - lockedMsg: - type: - - boolean - - 'null' - dynPrices: - type: - - boolean - - 'null' - newBuy: - type: - - boolean - - 'null' - newBuyDate: - readOnly: true - type: - - string - - 'null' - format: date-time - newBuySelective: - type: - - boolean - - 'null' - reBuy: - type: - - boolean - - 'null' - rebuyDate: - readOnly: true - type: - - string - - 'null' - format: date-time - connectionDate: - readOnly: true - type: - - string - - 'null' - format: date-time - importWatchlist: - type: - - boolean - - 'null' - autoReBuy: - type: - - boolean - - 'null' - directReBuy: - type: - - boolean - - 'null' - itemMaxBuyPrice: - minimum: 0 - maximum: 15000000 - type: - - integer - - 'null' - revenue: - readOnly: true - type: - - integer - - 'null' - futWizValue: - readOnly: true - type: - - integer - - 'null' - eaMarketAvgValue: - readOnly: true - type: - - integer - - 'null' - mfaCode: - type: - - string - - 'null' - twoFactorAuthKey: - type: - - string - - 'null' - login2FaViaApp: - type: - - boolean - - 'null' - eaCode1: - type: - - string - - 'null' - eaCode2: - type: - - string - - 'null' - eaCode3: - type: - - string - - 'null' - eaCode4: - type: - - string - - 'null' - eaCode5: - type: - - string - - 'null' - eaCode6: - type: - - string - - 'null' - snipingCnt1h: - type: - - integer - - 'null' - snipingCnt3h: - type: - - integer - - 'null' - snipingCnt6h: - type: - - integer - - 'null' - snipingCnt12h: - type: - - integer - - 'null' - snipingCnt24h: - type: - - integer - - 'null' - snipingCnt3d: - type: - - integer - - 'null' - snipingCnt1w: - type: - - integer - - 'null' - note: - type: - - string - - 'null' - loopStartDate: + properties: + zone: readOnly: true - type: - - string - - 'null' - format: date-time - loopFinishDate: + type: string + format: iri-reference + example: 'https://example.com/' + name: + type: string + zoneName: readOnly: true - type: - - string - - 'null' - format: date-time - creationDate: + type: string + createdAt: readOnly: true type: - string - 'null' format: date-time - owner: - readOnly: true - $ref: '#/components/schemas/User.jsonld' required: - - email - - profile - - password - - active - - running - - relist - - blocked - - sniping - - tmOpen - - dead - - lockedMsg - - dynPrices - - newBuy - - newBuySelective - - reBuy - - importWatchlist - - autoReBuy - - directReBuy - LogAccountCredit.jsonld: + - name + Location.jsonld: type: object description: '' deprecated: false properties: - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string '@context': readOnly: true oneOf: @@ -3949,36 +1909,35 @@ components: - '@vocab' - hydra additionalProperties: true - gameAccount: + '@id': readOnly: true - $ref: '#/components/schemas/GameAccount.jsonld' - credits: + type: string + '@type': readOnly: true - type: - - integer - - 'null' - revenue: + type: string + zone: readOnly: true - type: - - integer - - 'null' - creationDate: + $ref: '#/components/schemas/Zone.jsonld' + name: + type: string + zoneName: + readOnly: true + type: string + createdAt: readOnly: true type: - string - 'null' format: date-time - LogAccountProfit.jsonld: + required: + - name + MediaObject.jsonld-media_object.read: type: object description: '' deprecated: false + externalDocs: + url: 'https://schema.org/MediaObject' properties: - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string '@context': readOnly: true oneOf: @@ -3996,145 +1955,122 @@ components: - '@vocab' - hydra additionalProperties: true - gameAccount: + '@id': readOnly: true - $ref: '#/components/schemas/GameAccount.jsonld' - credits: - type: - - integer - - 'null' - revenue: - type: - - integer - - 'null' - tpValue: - type: - - integer - - 'null' - revToday: - type: - - integer - - 'null' - rev3hours: - type: - - integer - - 'null' - rev6hours: - type: - - integer - - 'null' - rev12hours: - type: - - integer - - 'null' - rev24hours: - type: - - integer - - 'null' - rev3days: - type: - - integer - - 'null' - rev1week: - type: - - integer - - 'null' - rev2weeks: - type: - - integer - - 'null' - rev3weeks: - type: - - integer - - 'null' - rev4weeks: - type: - - integer - - 'null' - rev2months: - type: - - integer - - 'null' - rev3months: - type: - - integer - - 'null' - revTotal: - type: - - integer - - 'null' - numSalesToday: - type: - - integer - - 'null' - numSales3hours: - type: - - integer - - 'null' - numSales6hours: - type: - - integer - - 'null' - numSales12hours: - type: - - integer - - 'null' - numSales24hours: - type: - - integer - - 'null' - numSales3days: - type: - - integer - - 'null' - numSales1week: - type: - - integer - - 'null' - numSales2weeks: - type: - - integer - - 'null' - numSales3weeks: + type: string + '@type': + readOnly: true + type: string + contentUrl: + externalDocs: + url: 'https://schema.org/contentUrl' type: - - integer + - string - 'null' - numSales4weeks: + ShippingCompany: + type: object + description: '' + deprecated: false + required: + - name + properties: + name: + type: string + createdAt: + readOnly: true type: - - integer + - string - 'null' - numSales2months: + format: date-time + ShippingCompany.jsonld: + type: object + description: '' + deprecated: false + required: + - name + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + name: + type: string + createdAt: + readOnly: true type: - - integer + - string - 'null' - numSales3months: + format: date-time + Trip: + type: object + description: '' + deprecated: false + properties: + vessel: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + pilotReference: + type: string + captainName: type: - - integer + - string - 'null' - numSalesTotal: + startLocation: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + endLocation: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + startDate: type: - - integer + - string - 'null' - isDailyProfit: + format: date-time + endDate: type: - - boolean + - string - 'null' - creationDate: + format: date-time + createdAt: + readOnly: true type: - string - 'null' format: date-time - LogAccountSoldItem.jsonld: + required: + - pilotReference + - startDate + - endDate + Trip.jsonld: type: object description: '' deprecated: false properties: - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string '@context': readOnly: true oneOf: @@ -4152,87 +2088,80 @@ components: - '@vocab' - hydra additionalProperties: true - dbId: + '@id': readOnly: true - type: - - integer - - 'null' - gameAccount: + type: string + '@type': readOnly: true - $ref: '#/components/schemas/GameAccount.jsonld' - candidateItem: + type: string + vessel: readOnly: true - $ref: '#/components/schemas/Candidate.jsonld' - eaId: + $ref: '#/components/schemas/Vessel.jsonld' + pilotReference: + type: string + captainName: + type: + - string + - 'null' + startLocation: readOnly: true - type: integer - contracts: + $ref: '#/components/schemas/Location.jsonld' + endLocation: readOnly: true + $ref: '#/components/schemas/Location.jsonld' + startDate: type: - - integer + - string - 'null' - playStyle: - readOnly: true + format: date-time + endDate: type: - - integer + - string - 'null' - lastSalePrice: - readOnly: true - type: integer - currentBid: - readOnly: true - type: integer - startingBid: - readOnly: true - type: integer - binPrice: - readOnly: true - type: integer - minRange: - readOnly: true - type: integer - maxRange: + format: date-time + createdAt: readOnly: true - type: integer - tradeState: + type: + - string + - 'null' + format: date-time + required: + - pilotReference + - startDate + - endDate + TripLocation: + type: object + description: '' + deprecated: false + properties: + trip: readOnly: true type: string - eaTradeId: - readOnly: true - type: integer - listCnt: - readOnly: true - type: integer - revenue: - readOnly: true - type: integer - reBought: - readOnly: true - type: boolean - snipedItem: - readOnly: true - type: boolean - firstListDate: + format: iri-reference + example: 'https://example.com/' + location: readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + date: type: - string - 'null' format: date-time - creationDate: + createdAt: readOnly: true - type: string + type: + - string + - 'null' format: date-time - LogGeneral.jsonld: + required: + - date + TripLocation.jsonld: type: object description: '' deprecated: false properties: - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string '@context': readOnly: true oneOf: @@ -4250,188 +2179,93 @@ components: - '@vocab' - hydra additionalProperties: true - dbId: - readOnly: true - type: integer - gameAccount: + '@id': readOnly: true - $ref: '#/components/schemas/GameAccount.jsonld' - candidateItem: + type: string + '@type': readOnly: true - $ref: '#/components/schemas/Candidate.jsonld' - logType: type: string - enum: - - alert - - alert_low - - cant_buy - - debug - - debug_server_logs - - info - - moved_to_club - - new_buy - - player_price_changed - - preview_pack - - preview_pack_alert - - price_range_errors - - profit_overview - - removed - - rebuy - - sales - - server_logs - - stats - - hourly_stats - message: + trip: readOnly: true + $ref: '#/components/schemas/Trip.jsonld' + location: + readOnly: true + $ref: '#/components/schemas/Location.jsonld' + date: type: - string - 'null' - creationDate: + format: date-time + createdAt: readOnly: true type: - string - 'null' format: date-time required: - - logType - LogTotalProfit: + - date + User: type: object description: '' deprecated: false + required: + - email + - firstName + - lastName properties: - credits: - type: - - integer - - 'null' - revenue: - type: - - integer - - 'null' - tpValueFutwiz: - type: - - integer - - 'null' - tpValueEaAverage: - type: - - integer - - 'null' - revToday: - type: - - integer - - 'null' - rev3hours: - type: - - integer - - 'null' - rev6hours: - type: - - integer - - 'null' - rev12hours: - type: - - integer - - 'null' - rev24hours: - type: - - integer - - 'null' - rev3days: - type: - - integer - - 'null' - rev1week: - type: - - integer - - 'null' - rev2weeks: - type: - - integer - - 'null' - rev3weeks: - type: - - integer - - 'null' - rev4weeks: - type: - - integer - - 'null' - rev2months: - type: - - integer - - 'null' - rev3months: - type: - - integer - - 'null' - revTotal: - type: - - integer - - 'null' - numSalesToday: - type: - - integer - - 'null' - numSales3hours: - type: - - integer - - 'null' - numSales6hours: - type: - - integer - - 'null' - numSales12hours: - type: - - integer - - 'null' - numSales24hours: - type: - - integer - - 'null' - numSales3days: - type: - - integer - - 'null' - numSales1week: - type: - - integer - - 'null' - numSales2weeks: + email: + format: email + externalDocs: + url: 'https://schema.org/email' type: - - integer + - string - 'null' - numSales3weeks: + firstName: type: - - integer + - string - 'null' - numSales4weeks: + lastName: type: - - integer + - string - 'null' - numSales2months: + image: type: - - integer + - string - 'null' - numSales3months: + format: iri-reference + example: 'https://example.com/' + imageUrl: + readOnly: true type: - - integer + - string - 'null' - numSalesTotal: + fullName: + readOnly: true type: - - integer + - string - 'null' - isDailyProfit: + password: + writeOnly: true + description: 'The plaintext password when being set or changed.' type: - - boolean + - string - 'null' - creationDate: + active: + type: boolean + createdAt: + readOnly: true type: - string - 'null' format: date-time - LogTotalProfit.jsonld: + User.jsonld: type: object description: '' deprecated: false + required: + - email + - firstName + - lastName properties: '@context': readOnly: true @@ -4456,189 +2290,89 @@ components: '@type': readOnly: true type: string - credits: - type: - - integer - - 'null' - revenue: - type: - - integer - - 'null' - tpValueFutwiz: - type: - - integer - - 'null' - tpValueEaAverage: - type: - - integer - - 'null' - revToday: - type: - - integer - - 'null' - rev3hours: - type: - - integer - - 'null' - rev6hours: - type: - - integer - - 'null' - rev12hours: - type: - - integer - - 'null' - rev24hours: - type: - - integer - - 'null' - rev3days: - type: - - integer - - 'null' - rev1week: - type: - - integer - - 'null' - rev2weeks: - type: - - integer - - 'null' - rev3weeks: - type: - - integer - - 'null' - rev4weeks: - type: - - integer - - 'null' - rev2months: - type: - - integer - - 'null' - rev3months: - type: - - integer - - 'null' - revTotal: - type: - - integer - - 'null' - numSalesToday: - type: - - integer - - 'null' - numSales3hours: - type: - - integer - - 'null' - numSales6hours: - type: - - integer - - 'null' - numSales12hours: - type: - - integer - - 'null' - numSales24hours: - type: - - integer - - 'null' - numSales3days: - type: - - integer - - 'null' - numSales1week: - type: - - integer - - 'null' - numSales2weeks: + email: + format: email + externalDocs: + url: 'https://schema.org/email' type: - - integer + - string - 'null' - numSales3weeks: + firstName: type: - - integer + - string - 'null' - numSales4weeks: + lastName: type: - - integer + - string - 'null' - numSales2months: + image: type: - - integer + - string - 'null' - numSales3months: + format: iri-reference + example: 'https://example.com/' + imageUrl: + readOnly: true type: - - integer + - string - 'null' - numSalesTotal: + fullName: + readOnly: true type: - - integer + - string - 'null' - isDailyProfit: + password: + writeOnly: true + description: 'The plaintext password when being set or changed.' type: - - boolean + - string - 'null' - creationDate: + active: + type: boolean + createdAt: + readOnly: true type: - string - 'null' format: date-time - MediaObject.jsonld-media_object.read: + UserTrip: type: object description: '' deprecated: false - externalDocs: - url: 'https://schema.org/MediaObject' properties: - '@context': - readOnly: true - oneOf: - - - type: string - - - type: object - properties: - '@vocab': - type: string - hydra: - type: string - enum: ['http://www.w3.org/ns/hydra/core#'] - required: - - '@vocab' - - hydra - additionalProperties: true - '@id': + trip: readOnly: true type: string - '@type': + format: iri-reference + example: 'https://example.com/' + user: readOnly: true type: string - contentUrl: - externalDocs: - url: 'https://schema.org/contentUrl' + format: iri-reference + example: 'https://example.com/' + captainName: + type: string + startDate: type: - string - 'null' - ModeConfig: - type: object - description: '' - deprecated: false - properties: - autoReBuyMinSoldItems: - minimum: 0 - maximum: 20 - default: 3 - example: 3 - type: integer - autoReBuyMinLastHours: - minimum: 0 - maximum: 20 - default: 3 - example: 3 - type: integer - ModeConfig.jsonld: + format: date-time + endDate: + type: + - string + - 'null' + format: date-time + createdAt: + readOnly: true + type: + - string + - 'null' + format: date-time + required: + - captainName + - startDate + - endDate + UserTrip.jsonld: type: object description: '' deprecated: false @@ -4666,44 +2400,63 @@ components: '@type': readOnly: true type: string - autoReBuyMinSoldItems: - minimum: 0 - maximum: 20 - default: 3 - example: 3 - type: integer - autoReBuyMinLastHours: - minimum: 0 - maximum: 20 - default: 3 - example: 3 - type: integer - Player: - type: object - description: '' - deprecated: false - properties: - eaAssetId: - type: integer - firstname: + trip: + readOnly: true + $ref: '#/components/schemas/Trip.jsonld' + user: + readOnly: true + $ref: '#/components/schemas/User.jsonld' + captainName: + type: string + startDate: type: - string - 'null' - lastname: + format: date-time + endDate: type: - string - 'null' - nickname: + format: date-time + createdAt: + readOnly: true type: - string - 'null' - rating: - type: integer - creationDate: + format: date-time + required: + - captainName + - startDate + - endDate + UserTripLocation: + type: object + description: '' + deprecated: false + properties: + userTrip: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + location: readOnly: true type: string + format: iri-reference + example: 'https://example.com/' + plannedDate: + type: + - string + - 'null' + format: date-time + createdAt: + readOnly: true + type: + - string + - 'null' format: date-time - Player.jsonld: + required: + - plannedDate + UserTripLocation.jsonld: type: object description: '' deprecated: false @@ -4731,61 +2484,65 @@ components: '@type': readOnly: true type: string - eaAssetId: - type: integer - firstname: - type: - - string - - 'null' - lastname: + userTrip: + readOnly: true + $ref: '#/components/schemas/UserTrip.jsonld' + location: + readOnly: true + $ref: '#/components/schemas/Location.jsonld' + plannedDate: type: - string - 'null' - nickname: + format: date-time + createdAt: + readOnly: true type: - string - 'null' - rating: - type: integer - creationDate: - readOnly: true - type: string format: date-time - Rarity: + required: + - plannedDate + UserTripWorkLog: type: object description: '' deprecated: false properties: - rareFlag: + userTrip: readOnly: true - type: integer - name: - type: - - string - - 'null' - untradable: + type: string + format: iri-reference + example: 'https://example.com/' + startLocation: readOnly: true - type: boolean - image: + type: string + format: iri-reference + example: 'https://example.com/' + endLocation: readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + startDate: type: - string - 'null' - format: iri-reference - example: 'https://example.com/' - imageUrl: - readOnly: true + format: date-time + endDate: type: - string - 'null' - imageBronze: + format: date-time + createdAt: readOnly: true type: - string - 'null' - format: iri-reference - example: 'https://example.com/' - Rarity.jsonld: + format: date-time + required: + - startDate + - endDate + UserTripWorkLog.jsonld: type: object description: '' deprecated: false @@ -4813,39 +2570,60 @@ components: '@type': readOnly: true type: string - rareFlag: + userTrip: readOnly: true - type: integer - name: - type: - - string - - 'null' - untradable: + $ref: '#/components/schemas/UserTrip.jsonld' + startLocation: readOnly: true - type: boolean - image: + $ref: '#/components/schemas/Location.jsonld' + endLocation: readOnly: true + $ref: '#/components/schemas/Location.jsonld' + startDate: type: - string - 'null' - format: iri-reference - example: 'https://example.com/' - imageUrl: - readOnly: true + format: date-time + endDate: type: - string - 'null' - imageBronze: + format: date-time + createdAt: readOnly: true type: - string - 'null' + format: date-time + required: + - startDate + - endDate + Vessel: + type: object + description: '' + deprecated: false + required: + - name + properties: + name: + type: string + company: + readOnly: true + type: string format: iri-reference example: 'https://example.com/' - SystemStat.jsonld: + createdAt: + readOnly: true + type: + - string + - 'null' + format: date-time + Vessel.jsonld: type: object description: '' deprecated: false + required: + - name properties: '@context': readOnly: true @@ -4870,87 +2648,38 @@ components: '@type': readOnly: true type: string - totalLogProfit: - readOnly: true - $ref: '#/components/schemas/LogTotalProfit.jsonld' - config: + name: + type: string + company: readOnly: true - $ref: '#/components/schemas/Config.jsonld' - modeConfig: + $ref: '#/components/schemas/ShippingCompany.jsonld' + createdAt: readOnly: true - $ref: '#/components/schemas/ModeConfig.jsonld' - numAccounts: - type: - - integer - - 'null' - numDeadAccounts: - type: - - integer - - 'null' - numActiveAccounts: - type: - - integer - - 'null' - numTmOpenAccounts: - type: - - integer - - 'null' - numTmClosedAccounts: - type: - - integer - - 'null' - numBlockedAccounts: - type: - - integer - - 'null' - numRunningAccounts: - type: - - integer - - 'null' - numTradepileItems: - type: - - integer - - 'null' - numSoldTradepileItems: - type: - - integer - - 'null' - numActiveTradepileItems: - type: - - integer - - 'null' - numExpiredTradepileItems: - type: - - integer - - 'null' - numInactiveTradepileItems: type: - - integer - - 'null' - numCandidates: - type: - - integer - - 'null' - numRelevantCandidates: - type: - - integer - - 'null' - numBuyCandidates: - type: - - integer + - string - 'null' - totalSnipingRev: + format: date-time + Zone: + type: object + description: '' + deprecated: false + required: + - name + properties: + name: + type: string + createdAt: + readOnly: true type: - - integer + - string - 'null' - User.jsonld: + format: date-time + Zone.jsonld: type: object description: '' deprecated: false required: - - email - - firstName - - lastName + - name properties: '@context': readOnly: true @@ -4975,45 +2704,8 @@ components: '@type': readOnly: true type: string - email: - format: email - externalDocs: - url: 'https://schema.org/email' - type: - - string - - 'null' - firstName: - type: - - string - - 'null' - lastName: - type: - - string - - 'null' - image: - type: - - string - - 'null' - format: iri-reference - example: 'https://example.com/' - imageUrl: - readOnly: true - type: - - string - - 'null' - fullName: - readOnly: true - type: - - string - - 'null' - password: - writeOnly: true - description: 'The plaintext password when being set or changed.' - type: - - string - - 'null' - active: - type: boolean + name: + type: string createdAt: readOnly: true type: @@ -5034,4 +2726,5 @@ security: - JWT: [] tags: [] +webhooks: { } diff --git a/angular/src/app/_components/filter-bar/filter-bar.component.html b/angular/src/app/_components/filter-bar/filter-bar.component.html index b08de56..9c03517 100644 --- a/angular/src/app/_components/filter-bar/filter-bar.component.html +++ b/angular/src/app/_components/filter-bar/filter-bar.component.html @@ -9,13 +9,13 @@ -

{{ getColumnText(filter.field) | translate }}

+ (change)="onFilterActiveChanged(filter.name, $event)"> +

{{ getColumnText(filter.name) | translate }}

@@ -28,13 +28,13 @@ - + (change)="onFilterActiveChanged(filter.name, $event)"> + + (input)="onTextFilterChanged(filter.name, $event)"> @@ -45,21 +45,21 @@ - + (change)="onFilterActiveChanged(filter.name, $event)"> +
+ (change)="onDateFilterChanged(filter.name, 'start', $event)">
+ (change)="onDateFilterChanged(filter.name, 'end', $event)">
@@ -72,22 +72,22 @@ - + (change)="onFilterActiveChanged(filter.name, $event)"> +
@@ -99,8 +99,8 @@ -

{{ getColumnText(filter.field) | translate }}

+ (change)="onFilterActiveChanged(filter.name, $event)"> +

{{ getColumnText(filter.name) | translate }}

@@ -110,7 +110,7 @@
+
diff --git a/angular/src/app/_components/paging/paging.component.ts b/angular/src/app/_components/paging/paging.component.ts index e7a40a7..5ecc6f8 100644 --- a/angular/src/app/_components/paging/paging.component.ts +++ b/angular/src/app/_components/paging/paging.component.ts @@ -27,7 +27,9 @@ export class PagingComponent implements OnInit, AfterViewInit { @Input() public hidePageSize: boolean; @Input() public displayOptions!: { [key: string]: any }; @Input() public defaultDisplayOption!: string; + @Input() public showCreateDataButton: boolean; @Output() public displayOptionChange = new EventEmitter(); + @Output() public createNewData = new EventEmitter(); @ViewChild(MatPaginator) public paginator!: MatPaginator; @@ -50,6 +52,7 @@ export class PagingComponent implements OnInit, AfterViewInit { this.pageIndex = 0; this.searchable = false; this.hidePageSize = false; + this.showCreateDataButton = false; } ngOnInit() { @@ -88,6 +91,10 @@ export class PagingComponent implements OnInit, AfterViewInit { ); } + onCreateData() { + this.createNewData.emit(); + } + handlePageEvent(e: PageEvent) { this.pageEvent = e; this.dataLength = e.length; diff --git a/angular/src/app/_forms/apiForms.ts b/angular/src/app/_forms/apiForms.ts index aea914b..f349615 100644 --- a/angular/src/app/_forms/apiForms.ts +++ b/angular/src/app/_forms/apiForms.ts @@ -1,620 +1,161 @@ import { FormGroup, FormControl, Validators } from '@angular/forms'; -export const accountTradePileItemForm = new FormGroup({ - dbId: new FormControl(null, []), - account: new FormControl(null, []), - candidateItem: new FormControl(null, []), - eaId: new FormControl(null, []), - eaAssetId: new FormControl(null, []), - eaResourceId: new FormControl(null, []), - rareFlag: new FormControl(null, []), - itemType: new FormControl(null, []), - rating: new FormControl(null, []), - contracts: new FormControl(null, []), - playStyle: new FormControl(null, []), - startingBid: new FormControl(null, []), - binPrice: new FormControl(null, []), - individualPrice: new FormControl(null, []), - minRange: new FormControl(null, []), - maxRange: new FormControl(null, []), - lastSalePrice: new FormControl(null, []), - tradeState: new FormControl(null, []), - eaTradeId: new FormControl(null, []), - rebuy: new FormControl(null, []), - leagueId: new FormControl(null, []), - teamId: new FormControl(null, []), - nationId: new FormControl(null, []), - listCnt: new FormControl(null, []), - openBidCnt: new FormControl(null, []), - snipedItem: new FormControl(null, []), - marketAverage: new FormControl(null, []), - creationDate: new FormControl(null, []) +export const locationForm = new FormGroup({ + zone: new FormControl(null, []), + name: new FormControl(null, [Validators.required]), + zoneName: new FormControl(null, []), + createdAt: new FormControl(null, []) }); -export const accountTradePileItemJsonldForm = new FormGroup({ - dbId: new FormControl(null, []), - account: new FormControl(null, []), - candidateItem: new FormControl(null, []), - eaId: new FormControl(null, []), - eaAssetId: new FormControl(null, []), - eaResourceId: new FormControl(null, []), - rareFlag: new FormControl(null, []), - itemType: new FormControl(null, []), - rating: new FormControl(null, []), - contracts: new FormControl(null, []), - playStyle: new FormControl(null, []), - startingBid: new FormControl(null, []), - binPrice: new FormControl(null, []), - individualPrice: new FormControl(null, []), - minRange: new FormControl(null, []), - maxRange: new FormControl(null, []), - lastSalePrice: new FormControl(null, []), - tradeState: new FormControl(null, []), - eaTradeId: new FormControl(null, []), - rebuy: new FormControl(null, []), - leagueId: new FormControl(null, []), - teamId: new FormControl(null, []), - nationId: new FormControl(null, []), - listCnt: new FormControl(null, []), - openBidCnt: new FormControl(null, []), - snipedItem: new FormControl(null, []), - marketAverage: new FormControl(null, []), - creationDate: new FormControl(null, []) +export const locationJsonldForm = new FormGroup({ + zone: new FormControl(null, []), + name: new FormControl(null, [Validators.required]), + zoneName: new FormControl(null, []), + createdAt: new FormControl(null, []) }); -export const candidateForm = new FormGroup({ - dbId: new FormControl(null, []), - rarity: new FormControl(null, []), - candidateStat: new FormControl(null, []), - player: new FormControl(null, []), - firstname: new FormControl(null, []), - lastname: new FormControl(null, []), - nickname: new FormControl(null, []), - fullDisplayInfo: new FormControl(null, []), - eaAssetId: new FormControl(null, [Validators.required]), - eaResourceId: new FormControl(null, [Validators.required]), - rareFlag: new FormControl(null, [Validators.required]), - rarityName: new FormControl(null, []), - image: new FormControl(null, []), - imageUrl: new FormControl(null, []), - cardImageUrl: new FormControl(null, []), - stockCountTotal: new FormControl(null, []), - stockCountReal: new FormControl(null, []), - futBinId: new FormControl(null, []), - futBinName: new FormControl(null, []), - futBinPrice: new FormControl(null, []), - futBinSellingPrice: new FormControl(null, []), - lastFutBinUpdate: new FormControl(null, []), - futWizId: new FormControl(null, []), - futWizPrice: new FormControl(null, []), - futwizName: new FormControl(null, []), - futWizSellingPrice: new FormControl(null, []), - lastFutWizUpdate: new FormControl(null, []), - rating: new FormControl(null, [Validators.required]), - highestBuyBinPrice: new FormControl(null, []), - sellStartingBid: new FormControl(null, []), - sellBinPrice: new FormControl(null, []), - lastFoundMinRange: new FormControl(null, []), - lastFoundMaxRange: new FormControl(null, []), - lastFoundLowestBin: new FormControl(null, []), - lowestBinUpdateDate: new FormControl(null, []), - buy: new FormControl(null, [Validators.required]), - maxBuyPrice: new FormControl(null, []), - buyStyle: new FormControl(null, [Validators.required]), - newBuySelective: new FormControl(null, [Validators.required]), - remove: new FormControl(null, [Validators.required]), - leagueId: new FormControl(null, []), - nationId: new FormControl(null, []), - prio: new FormControl(null, []), - listCnt: new FormControl(null, [Validators.required]), - soldCnt: new FormControl(null, [Validators.required]), - note: new FormControl(null, []), - relevant: new FormControl(null, [Validators.required]), - adjust100: new FormControl(null, [Validators.required]), - directReBuy: new FormControl(null, [Validators.required]), - marketAverage: new FormControl(null, []), - creationDate: new FormControl(null, [Validators.required]) +export const mediaObjectJsonldMediaObjectReadForm = new FormGroup({ + contentUrl: new FormControl(null, []) }); -export const candidateJsonldForm = new FormGroup({ - dbId: new FormControl(null, []), - rarity: new FormControl(null, []), - candidateStat: new FormControl(null, []), - player: new FormControl(null, []), - firstname: new FormControl(null, []), - lastname: new FormControl(null, []), - nickname: new FormControl(null, []), - fullDisplayInfo: new FormControl(null, []), - eaAssetId: new FormControl(null, [Validators.required]), - eaResourceId: new FormControl(null, [Validators.required]), - rareFlag: new FormControl(null, [Validators.required]), - rarityName: new FormControl(null, []), - image: new FormControl(null, []), - imageUrl: new FormControl(null, []), - cardImageUrl: new FormControl(null, []), - stockCountTotal: new FormControl(null, []), - stockCountReal: new FormControl(null, []), - futBinId: new FormControl(null, []), - futBinName: new FormControl(null, []), - futBinPrice: new FormControl(null, []), - futBinSellingPrice: new FormControl(null, []), - lastFutBinUpdate: new FormControl(null, []), - futWizId: new FormControl(null, []), - futWizPrice: new FormControl(null, []), - futwizName: new FormControl(null, []), - futWizSellingPrice: new FormControl(null, []), - lastFutWizUpdate: new FormControl(null, []), - rating: new FormControl(null, [Validators.required]), - highestBuyBinPrice: new FormControl(null, []), - sellStartingBid: new FormControl(null, []), - sellBinPrice: new FormControl(null, []), - lastFoundMinRange: new FormControl(null, []), - lastFoundMaxRange: new FormControl(null, []), - lastFoundLowestBin: new FormControl(null, []), - lowestBinUpdateDate: new FormControl(null, []), - buy: new FormControl(null, [Validators.required]), - maxBuyPrice: new FormControl(null, []), - buyStyle: new FormControl(null, [Validators.required]), - newBuySelective: new FormControl(null, [Validators.required]), - remove: new FormControl(null, [Validators.required]), - leagueId: new FormControl(null, []), - nationId: new FormControl(null, []), - prio: new FormControl(null, []), - listCnt: new FormControl(null, [Validators.required]), - soldCnt: new FormControl(null, [Validators.required]), - note: new FormControl(null, []), - relevant: new FormControl(null, [Validators.required]), - adjust100: new FormControl(null, [Validators.required]), - directReBuy: new FormControl(null, [Validators.required]), - marketAverage: new FormControl(null, []), - creationDate: new FormControl(null, [Validators.required]) +export const shippingCompanyForm = new FormGroup({ + name: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const candidateStatJsonldForm = new FormGroup({ - candidateItem: new FormControl(null, []), - revRl6: new FormControl(null, []), - rl6: new FormControl(null, []), - sold6: new FormControl(null, []), - rat6: new FormControl(null, []), - rev6: new FormControl(null, []), - revRl12: new FormControl(null, []), - rl12: new FormControl(null, []), - sold12: new FormControl(null, []), - rat12: new FormControl(null, []), - rev12: new FormControl(null, []), - revRl24: new FormControl(null, []), - rl24: new FormControl(null, []), - sold24: new FormControl(null, []), - rat24: new FormControl(null, []), - rev24: new FormControl(null, []), - revRl3d: new FormControl(null, []), - rl3d: new FormControl(null, []), - sold3d: new FormControl(null, []), - rat3d: new FormControl(null, []), - rev3d: new FormControl(null, []), - revRl1w: new FormControl(null, []), - rl1w: new FormControl(null, []), - sold1w: new FormControl(null, []), - rat1w: new FormControl(null, []), - rev1w: new FormControl(null, []), - revRl2w: new FormControl(null, []), - rl2w: new FormControl(null, []), - sold2w: new FormControl(null, []), - rat2w: new FormControl(null, []), - rev2w: new FormControl(null, []), - revRl3w: new FormControl(null, []), - rl3w: new FormControl(null, []), - sold3w: new FormControl(null, []), - rat3w: new FormControl(null, []), - rev3w: new FormControl(null, []), - revRl4w: new FormControl(null, []), - rl4w: new FormControl(null, []), - sold4w: new FormControl(null, []), - rat4w: new FormControl(null, []), - rev4w: new FormControl(null, []), - revRl: new FormControl(null, []), - rl: new FormControl(null, []), - sold: new FormControl(null, []), - rat: new FormControl(null, []), - rev: new FormControl(null, []), - snipingRev: new FormControl(null, []), - creationDate: new FormControl(null, []), - lastUpdateDate: new FormControl(null, []) +export const shippingCompanyJsonldForm = new FormGroup({ + name: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const candidateStockAccountsJsonldForm = new FormGroup({ - candidatesStockAccounts: new FormControl(null, []), - candidatesMissingAccounts: new FormControl(null, []) +export const tripForm = new FormGroup({ + vessel: new FormControl(null, []), + pilotReference: new FormControl(null, [Validators.required]), + captainName: new FormControl(null, []), + startLocation: new FormControl(null, []), + endLocation: new FormControl(null, []), + startDate: new FormControl(null, [Validators.required]), + endDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const configForm = new FormGroup({ - systemActive: new FormControl(null, []), - systemRunning: new FormControl(null, []), - lastUpdateDate: new FormControl(null, []), - lastCheckDate: new FormControl(null, []), - processCnt: new FormControl(null, []), - sleepHourStart: new FormControl(null, [ - Validators.min(0), - Validators.max(23) - ]), - sleepHourEnd: new FormControl(null, [Validators.min(0), Validators.max(23)]), - checkMaxSales: new FormControl(null, []), - numMaxSales: new FormControl(null, [Validators.min(0), Validators.max(20)]) +export const tripJsonldForm = new FormGroup({ + vessel: new FormControl(null, []), + pilotReference: new FormControl(null, [Validators.required]), + captainName: new FormControl(null, []), + startLocation: new FormControl(null, []), + endLocation: new FormControl(null, []), + startDate: new FormControl(null, [Validators.required]), + endDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const configJsonldForm = new FormGroup({ - systemActive: new FormControl(null, []), - systemRunning: new FormControl(null, []), - lastUpdateDate: new FormControl(null, []), - lastCheckDate: new FormControl(null, []), - processCnt: new FormControl(null, []), - sleepHourStart: new FormControl(null, [ - Validators.min(0), - Validators.max(23) - ]), - sleepHourEnd: new FormControl(null, [Validators.min(0), Validators.max(23)]), - checkMaxSales: new FormControl(null, []), - numMaxSales: new FormControl(null, [Validators.min(0), Validators.max(20)]) +export const tripLocationForm = new FormGroup({ + trip: new FormControl(null, []), + location: new FormControl(null, []), + date: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const gameAccountForm = new FormGroup({ - dbId: new FormControl(null, []), - email: new FormControl(null, [Validators.required, Validators.email]), - profile: new FormControl(null, [Validators.required]), - password: new FormControl(null, [Validators.required]), - emailPw: new FormControl(null, []), - credits: new FormControl(null, []), - cntItems: new FormControl(null, []), - cntSoldItems: new FormControl(null, []), - cntInactiveItems: new FormControl(null, []), - active: new FormControl(null, [Validators.required]), - running: new FormControl(null, [Validators.required]), - relist: new FormControl(null, [Validators.required]), - relistDate: new FormControl(null, []), - blocked: new FormControl(null, [Validators.required]), - sniping: new FormControl(null, [Validators.required]), - snipingDate: new FormControl(null, []), - tmOpen: new FormControl(null, [Validators.required]), - tmState: new FormControl(null, []), - dead: new FormControl(null, [Validators.required]), - lockedMsg: new FormControl(null, [Validators.required]), - dynPrices: new FormControl(null, [Validators.required]), - newBuy: new FormControl(null, [Validators.required]), - newBuyDate: new FormControl(null, []), - newBuySelective: new FormControl(null, [Validators.required]), - reBuy: new FormControl(null, [Validators.required]), - rebuyDate: new FormControl(null, []), - connectionDate: new FormControl(null, []), - importWatchlist: new FormControl(null, [Validators.required]), - autoReBuy: new FormControl(null, [Validators.required]), - directReBuy: new FormControl(null, [Validators.required]), - itemMaxBuyPrice: new FormControl(null, [ - Validators.min(0), - Validators.max(15000000) - ]), - revenue: new FormControl(null, []), - futWizValue: new FormControl(null, []), - eaMarketAvgValue: new FormControl(null, []), - mfaCode: new FormControl(null, []), - twoFactorAuthKey: new FormControl(null, []), - login2FaViaApp: new FormControl(null, []), - eaCode1: new FormControl(null, []), - eaCode2: new FormControl(null, []), - eaCode3: new FormControl(null, []), - eaCode4: new FormControl(null, []), - eaCode5: new FormControl(null, []), - eaCode6: new FormControl(null, []), - snipingCnt1h: new FormControl(null, []), - snipingCnt3h: new FormControl(null, []), - snipingCnt6h: new FormControl(null, []), - snipingCnt12h: new FormControl(null, []), - snipingCnt24h: new FormControl(null, []), - snipingCnt3d: new FormControl(null, []), - snipingCnt1w: new FormControl(null, []), - note: new FormControl(null, []), - loopStartDate: new FormControl(null, []), - loopFinishDate: new FormControl(null, []), - creationDate: new FormControl(null, []), - owner: new FormControl(null, []) +export const tripLocationJsonldForm = new FormGroup({ + trip: new FormControl(null, []), + location: new FormControl(null, []), + date: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const gameAccountJsonldForm = new FormGroup({ - dbId: new FormControl(null, []), +export const userForm = new FormGroup({ email: new FormControl(null, [Validators.required, Validators.email]), - profile: new FormControl(null, [Validators.required]), - password: new FormControl(null, [Validators.required]), - emailPw: new FormControl(null, []), - credits: new FormControl(null, []), - cntItems: new FormControl(null, []), - cntSoldItems: new FormControl(null, []), - cntInactiveItems: new FormControl(null, []), - active: new FormControl(null, [Validators.required]), - running: new FormControl(null, [Validators.required]), - relist: new FormControl(null, [Validators.required]), - relistDate: new FormControl(null, []), - blocked: new FormControl(null, [Validators.required]), - sniping: new FormControl(null, [Validators.required]), - snipingDate: new FormControl(null, []), - tmOpen: new FormControl(null, [Validators.required]), - tmState: new FormControl(null, []), - dead: new FormControl(null, [Validators.required]), - lockedMsg: new FormControl(null, [Validators.required]), - dynPrices: new FormControl(null, [Validators.required]), - newBuy: new FormControl(null, [Validators.required]), - newBuyDate: new FormControl(null, []), - newBuySelective: new FormControl(null, [Validators.required]), - reBuy: new FormControl(null, [Validators.required]), - rebuyDate: new FormControl(null, []), - connectionDate: new FormControl(null, []), - importWatchlist: new FormControl(null, [Validators.required]), - autoReBuy: new FormControl(null, [Validators.required]), - directReBuy: new FormControl(null, [Validators.required]), - itemMaxBuyPrice: new FormControl(null, [ - Validators.min(0), - Validators.max(15000000) - ]), - revenue: new FormControl(null, []), - futWizValue: new FormControl(null, []), - eaMarketAvgValue: new FormControl(null, []), - mfaCode: new FormControl(null, []), - twoFactorAuthKey: new FormControl(null, []), - login2FaViaApp: new FormControl(null, []), - eaCode1: new FormControl(null, []), - eaCode2: new FormControl(null, []), - eaCode3: new FormControl(null, []), - eaCode4: new FormControl(null, []), - eaCode5: new FormControl(null, []), - eaCode6: new FormControl(null, []), - snipingCnt1h: new FormControl(null, []), - snipingCnt3h: new FormControl(null, []), - snipingCnt6h: new FormControl(null, []), - snipingCnt12h: new FormControl(null, []), - snipingCnt24h: new FormControl(null, []), - snipingCnt3d: new FormControl(null, []), - snipingCnt1w: new FormControl(null, []), - note: new FormControl(null, []), - loopStartDate: new FormControl(null, []), - loopFinishDate: new FormControl(null, []), - creationDate: new FormControl(null, []), - owner: new FormControl(null, []) -}); - -export const logAccountCreditJsonldForm = new FormGroup({ - gameAccount: new FormControl(null, []), - credits: new FormControl(null, []), - revenue: new FormControl(null, []), - creationDate: new FormControl(null, []) -}); - -export const logAccountProfitJsonldForm = new FormGroup({ - gameAccount: new FormControl(null, []), - credits: new FormControl(null, []), - revenue: new FormControl(null, []), - tpValue: new FormControl(null, []), - revToday: new FormControl(null, []), - rev3hours: new FormControl(null, []), - rev6hours: new FormControl(null, []), - rev12hours: new FormControl(null, []), - rev24hours: new FormControl(null, []), - rev3days: new FormControl(null, []), - rev1week: new FormControl(null, []), - rev2weeks: new FormControl(null, []), - rev3weeks: new FormControl(null, []), - rev4weeks: new FormControl(null, []), - rev2months: new FormControl(null, []), - rev3months: new FormControl(null, []), - revTotal: new FormControl(null, []), - numSalesToday: new FormControl(null, []), - numSales3hours: new FormControl(null, []), - numSales6hours: new FormControl(null, []), - numSales12hours: new FormControl(null, []), - numSales24hours: new FormControl(null, []), - numSales3days: new FormControl(null, []), - numSales1week: new FormControl(null, []), - numSales2weeks: new FormControl(null, []), - numSales3weeks: new FormControl(null, []), - numSales4weeks: new FormControl(null, []), - numSales2months: new FormControl(null, []), - numSales3months: new FormControl(null, []), - numSalesTotal: new FormControl(null, []), - isDailyProfit: new FormControl(null, []), - creationDate: new FormControl(null, []) -}); - -export const logAccountSoldItemJsonldForm = new FormGroup({ - dbId: new FormControl(null, []), - gameAccount: new FormControl(null, []), - candidateItem: new FormControl(null, []), - eaId: new FormControl(null, []), - contracts: new FormControl(null, []), - playStyle: new FormControl(null, []), - lastSalePrice: new FormControl(null, []), - currentBid: new FormControl(null, []), - startingBid: new FormControl(null, []), - binPrice: new FormControl(null, []), - minRange: new FormControl(null, []), - maxRange: new FormControl(null, []), - tradeState: new FormControl(null, []), - eaTradeId: new FormControl(null, []), - listCnt: new FormControl(null, []), - revenue: new FormControl(null, []), - reBought: new FormControl(null, []), - snipedItem: new FormControl(null, []), - firstListDate: new FormControl(null, []), - creationDate: new FormControl(null, []) -}); - -export const logGeneralJsonldForm = new FormGroup({ - dbId: new FormControl(null, []), - gameAccount: new FormControl(null, []), - candidateItem: new FormControl(null, []), - logType: new FormControl(null, [Validators.required]), - message: new FormControl(null, []), - creationDate: new FormControl(null, []) + firstName: new FormControl(null, [Validators.required]), + lastName: new FormControl(null, [Validators.required]), + image: new FormControl(null, []), + imageUrl: new FormControl(null, []), + fullName: new FormControl(null, []), + password: new FormControl(null, []), + active: new FormControl(null, []), + createdAt: new FormControl(null, []) }); -export const logTotalProfitForm = new FormGroup({ - credits: new FormControl(null, []), - revenue: new FormControl(null, []), - tpValueFutwiz: new FormControl(null, []), - tpValueEaAverage: new FormControl(null, []), - revToday: new FormControl(null, []), - rev3hours: new FormControl(null, []), - rev6hours: new FormControl(null, []), - rev12hours: new FormControl(null, []), - rev24hours: new FormControl(null, []), - rev3days: new FormControl(null, []), - rev1week: new FormControl(null, []), - rev2weeks: new FormControl(null, []), - rev3weeks: new FormControl(null, []), - rev4weeks: new FormControl(null, []), - rev2months: new FormControl(null, []), - rev3months: new FormControl(null, []), - revTotal: new FormControl(null, []), - numSalesToday: new FormControl(null, []), - numSales3hours: new FormControl(null, []), - numSales6hours: new FormControl(null, []), - numSales12hours: new FormControl(null, []), - numSales24hours: new FormControl(null, []), - numSales3days: new FormControl(null, []), - numSales1week: new FormControl(null, []), - numSales2weeks: new FormControl(null, []), - numSales3weeks: new FormControl(null, []), - numSales4weeks: new FormControl(null, []), - numSales2months: new FormControl(null, []), - numSales3months: new FormControl(null, []), - numSalesTotal: new FormControl(null, []), - isDailyProfit: new FormControl(null, []), - creationDate: new FormControl(null, []) +export const userJsonldForm = new FormGroup({ + email: new FormControl(null, [Validators.required, Validators.email]), + firstName: new FormControl(null, [Validators.required]), + lastName: new FormControl(null, [Validators.required]), + image: new FormControl(null, []), + imageUrl: new FormControl(null, []), + fullName: new FormControl(null, []), + password: new FormControl(null, []), + active: new FormControl(null, []), + createdAt: new FormControl(null, []) }); -export const logTotalProfitJsonldForm = new FormGroup({ - credits: new FormControl(null, []), - revenue: new FormControl(null, []), - tpValueFutwiz: new FormControl(null, []), - tpValueEaAverage: new FormControl(null, []), - revToday: new FormControl(null, []), - rev3hours: new FormControl(null, []), - rev6hours: new FormControl(null, []), - rev12hours: new FormControl(null, []), - rev24hours: new FormControl(null, []), - rev3days: new FormControl(null, []), - rev1week: new FormControl(null, []), - rev2weeks: new FormControl(null, []), - rev3weeks: new FormControl(null, []), - rev4weeks: new FormControl(null, []), - rev2months: new FormControl(null, []), - rev3months: new FormControl(null, []), - revTotal: new FormControl(null, []), - numSalesToday: new FormControl(null, []), - numSales3hours: new FormControl(null, []), - numSales6hours: new FormControl(null, []), - numSales12hours: new FormControl(null, []), - numSales24hours: new FormControl(null, []), - numSales3days: new FormControl(null, []), - numSales1week: new FormControl(null, []), - numSales2weeks: new FormControl(null, []), - numSales3weeks: new FormControl(null, []), - numSales4weeks: new FormControl(null, []), - numSales2months: new FormControl(null, []), - numSales3months: new FormControl(null, []), - numSalesTotal: new FormControl(null, []), - isDailyProfit: new FormControl(null, []), - creationDate: new FormControl(null, []) +export const userTripForm = new FormGroup({ + trip: new FormControl(null, []), + user: new FormControl(null, []), + captainName: new FormControl(null, [Validators.required]), + startDate: new FormControl(null, [Validators.required]), + endDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const mediaObjectJsonldMediaObjectReadForm = new FormGroup({ - contentUrl: new FormControl(null, []) +export const userTripJsonldForm = new FormGroup({ + trip: new FormControl(null, []), + user: new FormControl(null, []), + captainName: new FormControl(null, [Validators.required]), + startDate: new FormControl(null, [Validators.required]), + endDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const modeConfigForm = new FormGroup({ - autoReBuyMinSoldItems: new FormControl(null, [ - Validators.min(0), - Validators.max(20) - ]), - autoReBuyMinLastHours: new FormControl(null, [ - Validators.min(0), - Validators.max(20) - ]) +export const userTripLocationForm = new FormGroup({ + userTrip: new FormControl(null, []), + location: new FormControl(null, []), + plannedDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const modeConfigJsonldForm = new FormGroup({ - autoReBuyMinSoldItems: new FormControl(null, [ - Validators.min(0), - Validators.max(20) - ]), - autoReBuyMinLastHours: new FormControl(null, [ - Validators.min(0), - Validators.max(20) - ]) +export const userTripLocationJsonldForm = new FormGroup({ + userTrip: new FormControl(null, []), + location: new FormControl(null, []), + plannedDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const playerForm = new FormGroup({ - eaAssetId: new FormControl(null, []), - firstname: new FormControl(null, []), - lastname: new FormControl(null, []), - nickname: new FormControl(null, []), - rating: new FormControl(null, []), - creationDate: new FormControl(null, []) +export const userTripWorkLogForm = new FormGroup({ + userTrip: new FormControl(null, []), + startLocation: new FormControl(null, []), + endLocation: new FormControl(null, []), + startDate: new FormControl(null, [Validators.required]), + endDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const playerJsonldForm = new FormGroup({ - eaAssetId: new FormControl(null, []), - firstname: new FormControl(null, []), - lastname: new FormControl(null, []), - nickname: new FormControl(null, []), - rating: new FormControl(null, []), - creationDate: new FormControl(null, []) +export const userTripWorkLogJsonldForm = new FormGroup({ + userTrip: new FormControl(null, []), + startLocation: new FormControl(null, []), + endLocation: new FormControl(null, []), + startDate: new FormControl(null, [Validators.required]), + endDate: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const rarityForm = new FormGroup({ - rareFlag: new FormControl(null, []), - name: new FormControl(null, []), - untradable: new FormControl(null, []), - image: new FormControl(null, []), - imageUrl: new FormControl(null, []), - imageBronze: new FormControl(null, []) +export const vesselForm = new FormGroup({ + name: new FormControl(null, [Validators.required]), + company: new FormControl(null, []), + createdAt: new FormControl(null, []) }); -export const rarityJsonldForm = new FormGroup({ - rareFlag: new FormControl(null, []), - name: new FormControl(null, []), - untradable: new FormControl(null, []), - image: new FormControl(null, []), - imageUrl: new FormControl(null, []), - imageBronze: new FormControl(null, []) +export const vesselJsonldForm = new FormGroup({ + name: new FormControl(null, [Validators.required]), + company: new FormControl(null, []), + createdAt: new FormControl(null, []) }); -export const systemStatJsonldForm = new FormGroup({ - totalLogProfit: new FormControl(null, []), - config: new FormControl(null, []), - modeConfig: new FormControl(null, []), - numAccounts: new FormControl(null, []), - numDeadAccounts: new FormControl(null, []), - numActiveAccounts: new FormControl(null, []), - numTmOpenAccounts: new FormControl(null, []), - numTmClosedAccounts: new FormControl(null, []), - numBlockedAccounts: new FormControl(null, []), - numRunningAccounts: new FormControl(null, []), - numTradepileItems: new FormControl(null, []), - numSoldTradepileItems: new FormControl(null, []), - numActiveTradepileItems: new FormControl(null, []), - numExpiredTradepileItems: new FormControl(null, []), - numInactiveTradepileItems: new FormControl(null, []), - numCandidates: new FormControl(null, []), - numRelevantCandidates: new FormControl(null, []), - numBuyCandidates: new FormControl(null, []), - totalSnipingRev: new FormControl(null, []) +export const zoneForm = new FormGroup({ + name: new FormControl(null, [Validators.required]), + createdAt: new FormControl(null, []) }); -export const userJsonldForm = new FormGroup({ - email: new FormControl(null, [Validators.required, Validators.email]), - firstName: new FormControl(null, [Validators.required]), - lastName: new FormControl(null, [Validators.required]), - image: new FormControl(null, []), - imageUrl: new FormControl(null, []), - fullName: new FormControl(null, []), - password: new FormControl(null, []), - active: new FormControl(null, []), +export const zoneJsonldForm = new FormGroup({ + name: new FormControl(null, [Validators.required]), createdAt: new FormControl(null, []) }); diff --git a/angular/src/app/_interfaces/AbstractCreateDataComponent.ts b/angular/src/app/_interfaces/AbstractCreateDataComponent.ts new file mode 100644 index 0000000..061f01b --- /dev/null +++ b/angular/src/app/_interfaces/AbstractCreateDataComponent.ts @@ -0,0 +1,19 @@ +import {ModalStatus} from "@app/_helpers/modal.states"; +import {FormGroup} from "@angular/forms"; +import {Directive, EventEmitter} from "@angular/core"; +import {CreateDataComponentInterface} from "@app/_interfaces/CreateDataComponentInterface"; +import {FormGroupInitializer} from "@app/_helpers/formgroup.initializer"; + +@Directive() +export abstract class AbstractCreateDataComponent implements CreateDataComponentInterface { + data!: T; + submit = new EventEmitter(); + form!: FormGroup; + + ngOnInit(): void { + this.form = FormGroupInitializer.initFormGroup(this.form, this.data); + } + + abstract getInitialData(): T; + abstract onSubmit(): void; +} \ No newline at end of file diff --git a/angular/src/app/_interfaces/CreateDataComponentInterface.ts b/angular/src/app/_interfaces/CreateDataComponentInterface.ts new file mode 100644 index 0000000..cb90f46 --- /dev/null +++ b/angular/src/app/_interfaces/CreateDataComponentInterface.ts @@ -0,0 +1,12 @@ +import {ModalStatus} from "@app/_helpers/modal.states"; +import {FormGroup} from "@angular/forms"; +import {EventEmitter} from "@angular/core"; + +export interface CreateDataComponentInterface { + data: T; + submit: EventEmitter; + form: FormGroup; + onSubmit(): void; + ngOnInit(): void; + getInitialData(): T; +} \ No newline at end of file diff --git a/angular/src/app/_models/priceError.ts b/angular/src/app/_models/priceError.ts deleted file mode 100644 index b54f310..0000000 --- a/angular/src/app/_models/priceError.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface PriceError { - message: string; - error: boolean; -} \ No newline at end of file diff --git a/angular/src/app/_models/snipingResponse.ts b/angular/src/app/_models/snipingResponse.ts deleted file mode 100644 index fa06b50..0000000 --- a/angular/src/app/_models/snipingResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface SnipingResponse { - messages: string[]; - excludedAccountIds: number[], - errorAccountIds: number[], - snipingAccountIds: number[], - abortSniping: boolean, - boughtItems: number; - priceCheckFoundItems: number; - priceCheckFoundPrices: number[]; - priceCheckMessages: string[]; -} \ No newline at end of file diff --git a/angular/src/app/_views/base-data/base-data.component.html b/angular/src/app/_views/base-data/base-data.component.html new file mode 100644 index 0000000..82c9082 --- /dev/null +++ b/angular/src/app/_views/base-data/base-data.component.html @@ -0,0 +1,19 @@ +
+
+

{{ 'view.base_data' | translate }}

+
+ + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/angular/src/app/_views/base-data/base-data.component.scss b/angular/src/app/_views/base-data/base-data.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/base-data/base-data.component.spec.ts b/angular/src/app/_views/base-data/base-data.component.spec.ts new file mode 100644 index 0000000..841a69c --- /dev/null +++ b/angular/src/app/_views/base-data/base-data.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BaseDataComponent } from './base-data.component'; + +describe('BaseDataComponent', () => { + let component: BaseDataComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [BaseDataComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(BaseDataComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/base-data/base-data.component.ts b/angular/src/app/_views/base-data/base-data.component.ts new file mode 100644 index 0000000..555c1dc --- /dev/null +++ b/angular/src/app/_views/base-data/base-data.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-base-data', + templateUrl: './base-data.component.html', + styleUrl: './base-data.component.scss' +}) +export class BaseDataComponent { + +} diff --git a/angular/src/app/_views/dashboard/dashboard.component.html b/angular/src/app/_views/dashboard/dashboard.component.html index 3400001..94efa18 100644 --- a/angular/src/app/_views/dashboard/dashboard.component.html +++ b/angular/src/app/_views/dashboard/dashboard.component.html @@ -2,12 +2,5 @@

{{ 'dashboard.view' | translate }}

- - - OVERVIEW - - - OVERVIEW 2 - - + Space for important stuff. diff --git a/angular/src/app/_views/dashboard/dashboard.component.ts b/angular/src/app/_views/dashboard/dashboard.component.ts index 56120f4..9062db4 100644 --- a/angular/src/app/_views/dashboard/dashboard.component.ts +++ b/angular/src/app/_views/dashboard/dashboard.component.ts @@ -1,5 +1,4 @@ import {AfterViewInit, Component, OnInit, ViewChild} from '@angular/core'; -import {SystemStatService, SystemStatJsonld} from "@app/core/api/v1"; import {LogService} from "@app/_services/log.service"; import {FormControl} from "@angular/forms"; diff --git a/angular/src/app/_views/location/location-list/location-list.component.html b/angular/src/app/_views/location/location-list/location-list.component.html new file mode 100644 index 0000000..d89cf02 --- /dev/null +++ b/angular/src/app/_views/location/location-list/location-list.component.html @@ -0,0 +1,9 @@ +
+ +
\ No newline at end of file diff --git a/angular/src/app/_views/location/location-list/location-list.component.scss b/angular/src/app/_views/location/location-list/location-list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/location/location-list/location-list.component.spec.ts b/angular/src/app/_views/location/location-list/location-list.component.spec.ts new file mode 100644 index 0000000..89bb944 --- /dev/null +++ b/angular/src/app/_views/location/location-list/location-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationListComponent } from './location-list.component'; + +describe('LocationListComponent', () => { + let component: LocationListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LocationListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LocationListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/location/location-list/location-list.component.ts b/angular/src/app/_views/location/location-list/location-list.component.ts new file mode 100644 index 0000000..1a8e830 --- /dev/null +++ b/angular/src/app/_views/location/location-list/location-list.component.ts @@ -0,0 +1,88 @@ +import {AfterViewInit, Component, OnInit, ViewChild} from '@angular/core'; +import {ListColDefinition} from "@app/_components/list/list-col-definition"; +import {ListComponent} from "@app/_components/list/list.component"; +import {LocationJsonld, LocationService, UserService} from "@app/core/api/v1"; +import {Router} from "@angular/router"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; +import {OrderFilter} from "@app/_models/orderFilter"; +import {FilterBarComponent} from "@app/_components/filter-bar/filter-bar.component"; +import {ListGetDataFunctionType} from "@app/_components/list/list-get-data-function-type"; +import {ROUTE_LOCATIONS} from "@app/app-routing.module"; +import {Sort} from "@angular/material/sort"; + +@Component({ + selector: 'app-location-list', + templateUrl: './location-list.component.html', + styleUrl: './location-list.component.scss' +}) +export class LocationListComponent implements OnInit, AfterViewInit { + + @ViewChild("listComponent", {static: false}) listComponent!: ListComponent; + + protected listColDefinitions!: ListColDefinition[]; + + constructor( + private locationService: LocationService, + private router: Router, + protected appHelperService: AppHelperService, + ) { + + this.listColDefinitions = [ + { + name: 'name', + text: 'common.name', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'name', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_TEXT, + } as ListColDefinition, + { + name: 'zone', + text: 'location.zone', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'name', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_TEXT, + } as ListColDefinition, + { + name: 'creationDate', + text: 'common.creation_date', + type: ListComponent.COLUMN_TYPE_DATE, + field: 'creationDate', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_DATE, + } as ListColDefinition, + ]; + } + + ngOnInit() { + + } + + ngAfterViewInit(): void { + this.listComponent.getData(); + } + + getData: ListGetDataFunctionType = ( + index: number, + pageSize: number, + term?: string, + ) => { + return this.locationService.locationsGetCollection( + index, + pageSize, + term, + this.listComponent.getFilterJsonString(), + this.listComponent.getSortingJsonString() + ); + } + + onSortChange = (sortState: Sort) => { + } + + navigateToLocationDetail = (element: any) => { + const location: LocationJsonld = element as LocationJsonld; + this.router.navigate(['/' + ROUTE_LOCATIONS, this.appHelperService.extractId(location.id)]); + } + +} diff --git a/angular/src/app/_views/location/location.component.html b/angular/src/app/_views/location/location.component.html new file mode 100644 index 0000000..ebd0258 --- /dev/null +++ b/angular/src/app/_views/location/location.component.html @@ -0,0 +1 @@ +

location works!

diff --git a/angular/src/app/_views/location/location.component.scss b/angular/src/app/_views/location/location.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/location/location.component.spec.ts b/angular/src/app/_views/location/location.component.spec.ts new file mode 100644 index 0000000..045572f --- /dev/null +++ b/angular/src/app/_views/location/location.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationComponent } from './location.component'; + +describe('LocationComponent', () => { + let component: LocationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LocationComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LocationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/location/location.component.ts b/angular/src/app/_views/location/location.component.ts new file mode 100644 index 0000000..d589d67 --- /dev/null +++ b/angular/src/app/_views/location/location.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-location', + templateUrl: './location.component.html', + styleUrl: './location.component.scss' +}) +export class LocationComponent { + +} diff --git a/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.html b/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.html new file mode 100644 index 0000000..5768716 --- /dev/null +++ b/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.html @@ -0,0 +1,9 @@ +
+ +
\ No newline at end of file diff --git a/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.scss b/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.spec.ts b/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.spec.ts new file mode 100644 index 0000000..a0d640f --- /dev/null +++ b/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ShippingCompanyListComponent } from './shipping-company-list.component'; + +describe('ShippingCompanyListComponent', () => { + let component: ShippingCompanyListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ShippingCompanyListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ShippingCompanyListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.ts b/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.ts new file mode 100644 index 0000000..581461f --- /dev/null +++ b/angular/src/app/_views/shipping-company/shipping-company-list/shipping-company-list.component.ts @@ -0,0 +1,80 @@ +import {Component, ViewChild} from '@angular/core'; +import {ListComponent} from "@app/_components/list/list.component"; +import {ListColDefinition} from "@app/_components/list/list-col-definition"; +import { + ShippingCompanyJsonld, + ShippingCompanyService, +} from "@app/core/api/v1"; +import {Router} from "@angular/router"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; +import {FilterBarComponent} from "@app/_components/filter-bar/filter-bar.component"; +import {ListGetDataFunctionType} from "@app/_components/list/list-get-data-function-type"; +import {Sort} from "@angular/material/sort"; +import {ROUTE_SHIPPING_COMPANIES, ROUTE_VESSELS} from "@app/app-routing.module"; + +@Component({ + selector: 'app-shipping-company-list', + templateUrl: './shipping-company-list.component.html', + styleUrl: './shipping-company-list.component.scss' +}) +export class ShippingCompanyListComponent { + @ViewChild("listComponent", {static: false}) listComponent!: ListComponent; + + protected listColDefinitions!: ListColDefinition[]; + + constructor( + private shippingCompanyService: ShippingCompanyService, + private router: Router, + protected appHelperService: AppHelperService, + ) { + + this.listColDefinitions = [ + { + name: 'name', + text: 'common.name', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'name', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_TEXT, + } as ListColDefinition, + { + name: 'creationDate', + text: 'common.creation_date', + type: ListComponent.COLUMN_TYPE_DATE, + field: 'creationDate', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_DATE, + } as ListColDefinition, + ]; + } + + ngOnInit() { + + } + + ngAfterViewInit(): void { + this.listComponent.getData(); + } + + getData: ListGetDataFunctionType = ( + index: number, + pageSize: number, + term?: string, + ) => { + return this.shippingCompanyService.shippingCompaniesGetCollection( + index, + pageSize, + term, + this.listComponent.getFilterJsonString(), + this.listComponent.getSortingJsonString() + ); + } + + onSortChange = (sortState: Sort) => { + } + + navigateToZoneDetail = (element: any) => { + const shippingCompany: ShippingCompanyJsonld = element as ShippingCompanyJsonld; + this.router.navigate(['/' + ROUTE_SHIPPING_COMPANIES, this.appHelperService.extractId(shippingCompany.id)]); + } +} diff --git a/angular/src/app/_views/shipping-company/shipping-company.component.html b/angular/src/app/_views/shipping-company/shipping-company.component.html new file mode 100644 index 0000000..56d5f15 --- /dev/null +++ b/angular/src/app/_views/shipping-company/shipping-company.component.html @@ -0,0 +1 @@ +

shipping-company works!

diff --git a/angular/src/app/_views/shipping-company/shipping-company.component.scss b/angular/src/app/_views/shipping-company/shipping-company.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/shipping-company/shipping-company.component.spec.ts b/angular/src/app/_views/shipping-company/shipping-company.component.spec.ts new file mode 100644 index 0000000..bf0e811 --- /dev/null +++ b/angular/src/app/_views/shipping-company/shipping-company.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ShippingCompanyComponent } from './shipping-company.component'; + +describe('ShippingCompanyComponent', () => { + let component: ShippingCompanyComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ShippingCompanyComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ShippingCompanyComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/shipping-company/shipping-company.component.ts b/angular/src/app/_views/shipping-company/shipping-company.component.ts new file mode 100644 index 0000000..3c732c2 --- /dev/null +++ b/angular/src/app/_views/shipping-company/shipping-company.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-shipping-company', + templateUrl: './shipping-company.component.html', + styleUrl: './shipping-company.component.scss' +}) +export class ShippingCompanyComponent { + +} diff --git a/angular/src/app/_views/trip-location/trip-location.component.html b/angular/src/app/_views/trip-location/trip-location.component.html new file mode 100644 index 0000000..3aac2a1 --- /dev/null +++ b/angular/src/app/_views/trip-location/trip-location.component.html @@ -0,0 +1 @@ +

trip-location works!

diff --git a/angular/src/app/_views/trip-location/trip-location.component.scss b/angular/src/app/_views/trip-location/trip-location.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/trip-location/trip-location.component.spec.ts b/angular/src/app/_views/trip-location/trip-location.component.spec.ts new file mode 100644 index 0000000..c005657 --- /dev/null +++ b/angular/src/app/_views/trip-location/trip-location.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TripLocationComponent } from './trip-location.component'; + +describe('TripLocationComponent', () => { + let component: TripLocationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TripLocationComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TripLocationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/trip-location/trip-location.component.ts b/angular/src/app/_views/trip-location/trip-location.component.ts new file mode 100644 index 0000000..dc070c6 --- /dev/null +++ b/angular/src/app/_views/trip-location/trip-location.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-trip-location', + templateUrl: './trip-location.component.html', + styleUrl: './trip-location.component.scss' +}) +export class TripLocationComponent { + +} diff --git a/angular/src/app/_views/trip-work-log/trip-work-log.component.html b/angular/src/app/_views/trip-work-log/trip-work-log.component.html new file mode 100644 index 0000000..269562f --- /dev/null +++ b/angular/src/app/_views/trip-work-log/trip-work-log.component.html @@ -0,0 +1 @@ +

trip-work-log works!

diff --git a/angular/src/app/_views/trip-work-log/trip-work-log.component.scss b/angular/src/app/_views/trip-work-log/trip-work-log.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/trip-work-log/trip-work-log.component.spec.ts b/angular/src/app/_views/trip-work-log/trip-work-log.component.spec.ts new file mode 100644 index 0000000..5cfa9e1 --- /dev/null +++ b/angular/src/app/_views/trip-work-log/trip-work-log.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TripWorkLogComponent } from './trip-work-log.component'; + +describe('TripWorkLogComponent', () => { + let component: TripWorkLogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TripWorkLogComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TripWorkLogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/trip-work-log/trip-work-log.component.ts b/angular/src/app/_views/trip-work-log/trip-work-log.component.ts new file mode 100644 index 0000000..5474e22 --- /dev/null +++ b/angular/src/app/_views/trip-work-log/trip-work-log.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-trip-work-log', + templateUrl: './trip-work-log.component.html', + styleUrl: './trip-work-log.component.scss' +}) +export class TripWorkLogComponent { + +} diff --git a/angular/src/app/_views/trip/trip.component.html b/angular/src/app/_views/trip/trip.component.html new file mode 100644 index 0000000..66e5e2f --- /dev/null +++ b/angular/src/app/_views/trip/trip.component.html @@ -0,0 +1 @@ +

trip works!

diff --git a/angular/src/app/_views/trip/trip.component.scss b/angular/src/app/_views/trip/trip.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/trip/trip.component.spec.ts b/angular/src/app/_views/trip/trip.component.spec.ts new file mode 100644 index 0000000..498035e --- /dev/null +++ b/angular/src/app/_views/trip/trip.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TripComponent } from './trip.component'; + +describe('TripComponent', () => { + let component: TripComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TripComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TripComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/trip/trip.component.ts b/angular/src/app/_views/trip/trip.component.ts new file mode 100644 index 0000000..a90da56 --- /dev/null +++ b/angular/src/app/_views/trip/trip.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-trip', + templateUrl: './trip.component.html', + styleUrl: './trip.component.scss' +}) +export class TripComponent { + +} diff --git a/angular/src/app/_views/vessel/vessel-list/vessel-list.component.html b/angular/src/app/_views/vessel/vessel-list/vessel-list.component.html new file mode 100644 index 0000000..3f932ec --- /dev/null +++ b/angular/src/app/_views/vessel/vessel-list/vessel-list.component.html @@ -0,0 +1,9 @@ +
+ +
\ No newline at end of file diff --git a/angular/src/app/_views/vessel/vessel-list/vessel-list.component.scss b/angular/src/app/_views/vessel/vessel-list/vessel-list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/vessel/vessel-list/vessel-list.component.spec.ts b/angular/src/app/_views/vessel/vessel-list/vessel-list.component.spec.ts new file mode 100644 index 0000000..69a08c4 --- /dev/null +++ b/angular/src/app/_views/vessel/vessel-list/vessel-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VesselListComponent } from './vessel-list.component'; + +describe('VesselListComponent', () => { + let component: VesselListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [VesselListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(VesselListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/vessel/vessel-list/vessel-list.component.ts b/angular/src/app/_views/vessel/vessel-list/vessel-list.component.ts new file mode 100644 index 0000000..cb9b523 --- /dev/null +++ b/angular/src/app/_views/vessel/vessel-list/vessel-list.component.ts @@ -0,0 +1,77 @@ +import {Component, ViewChild} from '@angular/core'; +import {ListComponent} from "@app/_components/list/list.component"; +import {ListColDefinition} from "@app/_components/list/list-col-definition"; +import {VesselJsonld, VesselService} from "@app/core/api/v1"; +import {Router} from "@angular/router"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; +import {FilterBarComponent} from "@app/_components/filter-bar/filter-bar.component"; +import {ListGetDataFunctionType} from "@app/_components/list/list-get-data-function-type"; +import {Sort} from "@angular/material/sort"; +import {ROUTE_VESSELS} from "@app/app-routing.module"; + +@Component({ + selector: 'app-vessel-list', + templateUrl: './vessel-list.component.html', + styleUrl: './vessel-list.component.scss' +}) +export class VesselListComponent { + @ViewChild("listComponent", {static: false}) listComponent!: ListComponent; + + protected listColDefinitions!: ListColDefinition[]; + + constructor( + private vesselService: VesselService, + private router: Router, + protected appHelperService: AppHelperService, + ) { + + this.listColDefinitions = [ + { + name: 'name', + text: 'common.name', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'name', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_TEXT, + } as ListColDefinition, + { + name: 'creationDate', + text: 'common.creation_date', + type: ListComponent.COLUMN_TYPE_DATE, + field: 'creationDate', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_DATE, + } as ListColDefinition, + ]; + } + + ngOnInit() { + + } + + ngAfterViewInit(): void { + this.listComponent.getData(); + } + + getData: ListGetDataFunctionType = ( + index: number, + pageSize: number, + term?: string, + ) => { + return this.vesselService.vesselsGetCollection( + index, + pageSize, + term, + this.listComponent.getFilterJsonString(), + this.listComponent.getSortingJsonString() + ); + } + + onSortChange = (sortState: Sort) => { + } + + navigateToVesselDetail = (element: any) => { + const vessel: VesselJsonld = element as VesselJsonld; + this.router.navigate(['/' + ROUTE_VESSELS, this.appHelperService.extractId(vessel.id)]); + } +} diff --git a/angular/src/app/_views/vessel/vessel.component.html b/angular/src/app/_views/vessel/vessel.component.html new file mode 100644 index 0000000..9eebfd1 --- /dev/null +++ b/angular/src/app/_views/vessel/vessel.component.html @@ -0,0 +1 @@ +

vessel works!

diff --git a/angular/src/app/_views/vessel/vessel.component.scss b/angular/src/app/_views/vessel/vessel.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/vessel/vessel.component.spec.ts b/angular/src/app/_views/vessel/vessel.component.spec.ts new file mode 100644 index 0000000..a3ba2f3 --- /dev/null +++ b/angular/src/app/_views/vessel/vessel.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VesselComponent } from './vessel.component'; + +describe('VesselComponent', () => { + let component: VesselComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [VesselComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(VesselComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/vessel/vessel.component.ts b/angular/src/app/_views/vessel/vessel.component.ts new file mode 100644 index 0000000..aa19025 --- /dev/null +++ b/angular/src/app/_views/vessel/vessel.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-vessel', + templateUrl: './vessel.component.html', + styleUrl: './vessel.component.scss' +}) +export class VesselComponent { + +} diff --git a/angular/src/app/_views/zone/zone-list/zone-list.component.html b/angular/src/app/_views/zone/zone-list/zone-list.component.html new file mode 100644 index 0000000..221a66b --- /dev/null +++ b/angular/src/app/_views/zone/zone-list/zone-list.component.html @@ -0,0 +1,10 @@ +
+ +
\ No newline at end of file diff --git a/angular/src/app/_views/zone/zone-list/zone-list.component.scss b/angular/src/app/_views/zone/zone-list/zone-list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/zone/zone-list/zone-list.component.spec.ts b/angular/src/app/_views/zone/zone-list/zone-list.component.spec.ts new file mode 100644 index 0000000..54e7131 --- /dev/null +++ b/angular/src/app/_views/zone/zone-list/zone-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ZoneListComponent } from './zone-list.component'; + +describe('ZoneListComponent', () => { + let component: ZoneListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ZoneListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ZoneListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/zone/zone-list/zone-list.component.ts b/angular/src/app/_views/zone/zone-list/zone-list.component.ts new file mode 100644 index 0000000..48830f3 --- /dev/null +++ b/angular/src/app/_views/zone/zone-list/zone-list.component.ts @@ -0,0 +1,79 @@ +import {Component, ViewChild} from '@angular/core'; +import {ListComponent} from "@app/_components/list/list.component"; +import {ListColDefinition} from "@app/_components/list/list-col-definition"; +import {ZoneJsonld, ZoneService} from "@app/core/api/v1"; +import {Router} from "@angular/router"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; +import {FilterBarComponent} from "@app/_components/filter-bar/filter-bar.component"; +import {ListGetDataFunctionType} from "@app/_components/list/list-get-data-function-type"; +import {Sort} from "@angular/material/sort"; +import {ROUTE_ZONES} from "@app/app-routing.module"; +import {ZoneNewComponent} from "@app/_views/zone/zone-new/zone-new.component"; + +@Component({ + selector: 'app-zone-list', + templateUrl: './zone-list.component.html', + styleUrl: './zone-list.component.scss' +}) +export class ZoneListComponent { + @ViewChild("listComponent", {static: false}) listComponent!: ListComponent; + + protected listColDefinitions!: ListColDefinition[]; + + constructor( + private zoneService: ZoneService, + private router: Router, + protected appHelperService: AppHelperService, + ) { + + this.listColDefinitions = [ + { + name: 'name', + text: 'common.name', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'name', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_TEXT, + } as ListColDefinition, + { + name: 'creationDate', + text: 'common.creation_date', + type: ListComponent.COLUMN_TYPE_DATE, + field: 'creationDate', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_DATE, + } as ListColDefinition, + ]; + } + + ngOnInit() { + + } + + ngAfterViewInit(): void { + this.listComponent.getData(); + } + + getData: ListGetDataFunctionType = ( + index: number, + pageSize: number, + term?: string, + ) => { + return this.zoneService.zonesGetCollection( + index, + pageSize, + term, + this.listComponent.getFilterJsonString(), + this.listComponent.getSortingJsonString() + ); + } + + onSortChange = (sortState: Sort) => { + } + + navigateToZoneDetail = (element: any) => { + const zone: ZoneJsonld = element as ZoneJsonld; + this.router.navigate(['/' + ROUTE_ZONES, this.appHelperService.extractId(zone.id)]); + } + protected readonly ZoneNewComponent = ZoneNewComponent; +} diff --git a/angular/src/app/_views/zone/zone-new/zone-new.component.html b/angular/src/app/_views/zone/zone-new/zone-new.component.html new file mode 100644 index 0000000..88c90b9 --- /dev/null +++ b/angular/src/app/_views/zone/zone-new/zone-new.component.html @@ -0,0 +1 @@ +

zone-new works!

diff --git a/angular/src/app/_views/zone/zone-new/zone-new.component.scss b/angular/src/app/_views/zone/zone-new/zone-new.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/zone/zone-new/zone-new.component.spec.ts b/angular/src/app/_views/zone/zone-new/zone-new.component.spec.ts new file mode 100644 index 0000000..7fbe5ec --- /dev/null +++ b/angular/src/app/_views/zone/zone-new/zone-new.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ZoneNewComponent } from './zone-new.component'; + +describe('ZoneNewComponent', () => { + let component: ZoneNewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ZoneNewComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ZoneNewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/zone/zone-new/zone-new.component.ts b/angular/src/app/_views/zone/zone-new/zone-new.component.ts new file mode 100644 index 0000000..157334f --- /dev/null +++ b/angular/src/app/_views/zone/zone-new/zone-new.component.ts @@ -0,0 +1,43 @@ +import {Component, EventEmitter, Input, Output} from '@angular/core'; +import {ZoneJsonld, ZoneService} from "@app/core/api/v1"; +import {ModalStatus} from "@app/_helpers/modal.states"; +import {FormGroup} from "@angular/forms"; +import {zoneForm} from "@app/_forms/apiForms"; +import {AbstractCreateDataComponent} from "@app/_interfaces/AbstractCreateDataComponent"; + +@Component({ + selector: 'app-zone-new', + templateUrl: './zone-new.component.html', + styleUrl: './zone-new.component.scss' +}) +export class ZoneNewComponent extends AbstractCreateDataComponent{ + + @Input() public override data!: ZoneJsonld; + @Output() public override submit: EventEmitter = new EventEmitter(); + + override form: FormGroup = zoneForm; + + constructor( + private zoneService: ZoneService + ) { + super(); + } + + getInitialData(): ZoneJsonld { + let zone: ZoneJsonld = {} as ZoneJsonld; + return zone; + } + + onSubmit() { + if (this.form.valid) { + this.zoneService.zonesPost( + this.form.value as ZoneJsonld + ).subscribe( + data => { + this.form.reset(); + this.submit.emit(ModalStatus.Submitted); + } + ); + } + } +} diff --git a/angular/src/app/_views/zone/zone.component.html b/angular/src/app/_views/zone/zone.component.html new file mode 100644 index 0000000..59b0f36 --- /dev/null +++ b/angular/src/app/_views/zone/zone.component.html @@ -0,0 +1 @@ +

zone works!

diff --git a/angular/src/app/_views/zone/zone.component.scss b/angular/src/app/_views/zone/zone.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/zone/zone.component.spec.ts b/angular/src/app/_views/zone/zone.component.spec.ts new file mode 100644 index 0000000..debb5fc --- /dev/null +++ b/angular/src/app/_views/zone/zone.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ZoneComponent } from './zone.component'; + +describe('ZoneComponent', () => { + let component: ZoneComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ZoneComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ZoneComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/zone/zone.component.ts b/angular/src/app/_views/zone/zone.component.ts new file mode 100644 index 0000000..c3f9f58 --- /dev/null +++ b/angular/src/app/_views/zone/zone.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-zone', + templateUrl: './zone.component.html', + styleUrl: './zone.component.scss' +}) +export class ZoneComponent { + +} diff --git a/angular/src/app/app-routing.module.ts b/angular/src/app/app-routing.module.ts index 7b906b4..0a7329c 100644 --- a/angular/src/app/app-routing.module.ts +++ b/angular/src/app/app-routing.module.ts @@ -7,12 +7,19 @@ import {adminGuard} from "@app/_guards/admin.guard"; import {UsersComponent} from "@app/_views/user/users.component"; import {TwoColumnComponent} from "@app/_components/layout/two-column/two-column.component"; import {DashboardComponent} from "@app/_views/dashboard/dashboard.component"; +import {BaseDataComponent} from "@app/_views/base-data/base-data.component"; const accountModule = () => import('@app/_views/account/account.module').then(x => x.AccountModule); export const ROUTE_DASHBOARD = 'dashboard'; +export const ROUTE_BASE_DATA = 'base-data'; +export const ROUTE_LOCATIONS = 'locations'; +export const ROUTE_SHIPPING_COMPANIES = 'shipping-companies'; +export const ROUTE_TRIPS = 'trips'; export const ROUTE_PROFILE = 'profile'; export const ROUTE_USERS = 'users'; +export const ROUTE_VESSELS = 'vessels'; +export const ROUTE_ZONES = 'zones'; const routes: Routes = [ { @@ -28,6 +35,14 @@ const routes: Routes = [ {path: '', component: DashboardComponent}, ] }, + { + path: ROUTE_BASE_DATA, + component: TwoColumnComponent, + canActivate: [userGuard], + children: [ + {path: '', component: BaseDataComponent}, + ] + }, { path: ROUTE_PROFILE, component: TwoColumnComponent, diff --git a/angular/src/app/app.module.ts b/angular/src/app/app.module.ts index 12a234f..30717b6 100644 --- a/angular/src/app/app.module.ts +++ b/angular/src/app/app.module.ts @@ -41,6 +41,19 @@ import {MatTabsModule} from "@angular/material/tabs"; import {DashboardComponent} from './_views/dashboard/dashboard.component'; import localeDe from '@angular/common/locales/de'; import { FilterBarComponent } from './_components/filter-bar/filter-bar.component'; +import { LocationComponent } from './_views/location/location.component'; +import { ZoneComponent } from './_views/zone/zone.component'; +import { ShippingCompanyComponent } from './_views/shipping-company/shipping-company.component'; +import { TripComponent } from './_views/trip/trip.component'; +import { TripLocationComponent } from './_views/trip-location/trip-location.component'; +import { TripWorkLogComponent } from './_views/trip-work-log/trip-work-log.component'; +import { VesselComponent } from './_views/vessel/vessel.component'; +import { BaseDataComponent } from './_views/base-data/base-data.component'; +import { LocationListComponent } from './_views/location/location-list/location-list.component'; +import { ZoneListComponent } from './_views/zone/zone-list/zone-list.component'; +import { VesselListComponent } from './_views/vessel/vessel-list/vessel-list.component'; +import { ShippingCompanyListComponent } from './_views/shipping-company/shipping-company-list/shipping-company-list.component'; +import { ZoneNewComponent } from './_views/zone/zone-new/zone-new.component'; registerLocaleData(localeDe, 'de-DE'); @@ -104,6 +117,19 @@ export function HttpLoaderFactory(http: HttpClient) { ListComponent, DashboardComponent, FilterBarComponent, + LocationComponent, + ZoneComponent, + ShippingCompanyComponent, + TripComponent, + TripLocationComponent, + TripWorkLogComponent, + VesselComponent, + BaseDataComponent, + LocationListComponent, + ZoneListComponent, + VesselListComponent, + ShippingCompanyListComponent, + ZoneNewComponent, ], providers: [ {provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true}, diff --git a/angular/src/app/core/api/v1/.openapi-generator/FILES b/angular/src/app/core/api/v1/.openapi-generator/FILES index e0382e8..49ad28a 100644 --- a/angular/src/app/core/api/v1/.openapi-generator/FILES +++ b/angular/src/app/core/api/v1/.openapi-generator/FILES @@ -1,74 +1,62 @@ .gitignore README.md api.module.ts -api/accountTradePileItem.service.ts api/api.ts -api/candidate.service.ts -api/candidateStat.service.ts -api/candidateStockAccounts.service.ts -api/config.service.ts -api/gameAccount.service.ts -api/logAccountCredit.service.ts -api/logAccountProfit.service.ts -api/logAccountSoldItem.service.ts -api/logGeneral.service.ts -api/logTotalProfit.service.ts +api/location.service.ts api/loginCheck.service.ts api/mediaObject.service.ts -api/modeConfig.service.ts -api/player.service.ts -api/rarity.service.ts -api/systemStat.service.ts +api/shippingCompany.service.ts +api/trip.service.ts +api/tripLocation.service.ts api/user.service.ts +api/userTrip.service.ts +api/userTripLocation.service.ts +api/userTripWorkLog.service.ts +api/vessel.service.ts +api/zone.service.ts configuration.ts encoder.ts git_push.sh index.ts -model/accountTradePileItem.ts -model/accountTradePileItemJsonld.ts -model/accountTradePileItemJsonldContext.ts -model/accountTradePileItemJsonldContextOneOf.ts -model/apiAccountTradePileItemsGetCollection200Response.ts -model/apiAccountTradePileItemsGetCollection200ResponseHydraSearch.ts -model/apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner.ts -model/apiAccountTradePileItemsGetCollection200ResponseHydraView.ts -model/apiCandidateStatsGetCollection200Response.ts -model/apiCandidatesGetCollection200Response.ts -model/apiGameAccountsGetCollection200Response.ts -model/apiLogAccountCreditsGetCollection200Response.ts -model/apiLogAccountProfitsGetCollection200Response.ts -model/apiLogAccountSoldItemsGetCollection200Response.ts -model/apiLogGeneralsGetCollection200Response.ts -model/apiLogTotalProfitsGetCollection200Response.ts +model/apiLocationsGetCollection200Response.ts +model/apiLocationsGetCollection200ResponseSearch.ts +model/apiLocationsGetCollection200ResponseSearchMappingInner.ts +model/apiLocationsGetCollection200ResponseView.ts model/apiMediaObjectsGetCollection200Response.ts -model/apiPlayersGetCollection200Response.ts -model/apiRaritiesGetCollection200Response.ts +model/apiShippingCompaniesGetCollection200Response.ts +model/apiTripLocationsGetCollection200Response.ts +model/apiTripsGetCollection200Response.ts +model/apiUserTripLocationsGetCollection200Response.ts +model/apiUserTripWorkLogsGetCollection200Response.ts +model/apiUserTripsGetCollection200Response.ts model/apiUsersGetCollection200Response.ts -model/candidate.ts -model/candidateJsonld.ts -model/candidateStatJsonld.ts -model/candidateStockAccountsJsonld.ts -model/config.ts -model/configJsonld.ts -model/gameAccount.ts -model/gameAccountJsonld.ts -model/logAccountCreditJsonld.ts -model/logAccountProfitJsonld.ts -model/logAccountSoldItemJsonld.ts -model/logGeneralJsonld.ts -model/logTotalProfit.ts -model/logTotalProfitJsonld.ts +model/apiVesselsGetCollection200Response.ts +model/apiZonesGetCollection200Response.ts +model/location.ts +model/locationJsonld.ts +model/locationJsonldContext.ts +model/locationJsonldContextOneOf.ts model/loginCheckPost200Response.ts model/loginCheckPostRequest.ts model/mediaObjectJsonldMediaObjectRead.ts -model/modeConfig.ts -model/modeConfigJsonld.ts model/models.ts -model/player.ts -model/playerJsonld.ts -model/rarity.ts -model/rarityJsonld.ts -model/systemStatJsonld.ts +model/shippingCompany.ts +model/shippingCompanyJsonld.ts +model/trip.ts +model/tripJsonld.ts +model/tripLocation.ts +model/tripLocationJsonld.ts +model/user.ts model/userJsonld.ts +model/userTrip.ts +model/userTripJsonld.ts +model/userTripLocation.ts +model/userTripLocationJsonld.ts +model/userTripWorkLog.ts +model/userTripWorkLogJsonld.ts +model/vessel.ts +model/vesselJsonld.ts +model/zone.ts +model/zoneJsonld.ts param.ts variables.ts diff --git a/angular/src/app/core/api/v1/api/api.ts b/angular/src/app/core/api/v1/api/api.ts index 2c562c6..90af7ac 100644 --- a/angular/src/app/core/api/v1/api/api.ts +++ b/angular/src/app/core/api/v1/api/api.ts @@ -1,37 +1,25 @@ -export * from './accountTradePileItem.service'; -import { AccountTradePileItemService } from './accountTradePileItem.service'; -export * from './candidate.service'; -import { CandidateService } from './candidate.service'; -export * from './candidateStat.service'; -import { CandidateStatService } from './candidateStat.service'; -export * from './candidateStockAccounts.service'; -import { CandidateStockAccountsService } from './candidateStockAccounts.service'; -export * from './config.service'; -import { ConfigService } from './config.service'; -export * from './gameAccount.service'; -import { GameAccountService } from './gameAccount.service'; -export * from './logAccountCredit.service'; -import { LogAccountCreditService } from './logAccountCredit.service'; -export * from './logAccountProfit.service'; -import { LogAccountProfitService } from './logAccountProfit.service'; -export * from './logAccountSoldItem.service'; -import { LogAccountSoldItemService } from './logAccountSoldItem.service'; -export * from './logGeneral.service'; -import { LogGeneralService } from './logGeneral.service'; -export * from './logTotalProfit.service'; -import { LogTotalProfitService } from './logTotalProfit.service'; +export * from './location.service'; +import { LocationService } from './location.service'; export * from './loginCheck.service'; import { LoginCheckService } from './loginCheck.service'; export * from './mediaObject.service'; import { MediaObjectService } from './mediaObject.service'; -export * from './modeConfig.service'; -import { ModeConfigService } from './modeConfig.service'; -export * from './player.service'; -import { PlayerService } from './player.service'; -export * from './rarity.service'; -import { RarityService } from './rarity.service'; -export * from './systemStat.service'; -import { SystemStatService } from './systemStat.service'; +export * from './shippingCompany.service'; +import { ShippingCompanyService } from './shippingCompany.service'; +export * from './trip.service'; +import { TripService } from './trip.service'; +export * from './tripLocation.service'; +import { TripLocationService } from './tripLocation.service'; export * from './user.service'; import { UserService } from './user.service'; -export const APIS = [AccountTradePileItemService, CandidateService, CandidateStatService, CandidateStockAccountsService, ConfigService, GameAccountService, LogAccountCreditService, LogAccountProfitService, LogAccountSoldItemService, LogGeneralService, LogTotalProfitService, LoginCheckService, MediaObjectService, ModeConfigService, PlayerService, RarityService, SystemStatService, UserService]; +export * from './userTrip.service'; +import { UserTripService } from './userTrip.service'; +export * from './userTripLocation.service'; +import { UserTripLocationService } from './userTripLocation.service'; +export * from './userTripWorkLog.service'; +import { UserTripWorkLogService } from './userTripWorkLog.service'; +export * from './vessel.service'; +import { VesselService } from './vessel.service'; +export * from './zone.service'; +import { ZoneService } from './zone.service'; +export const APIS = [LocationService, LoginCheckService, MediaObjectService, ShippingCompanyService, TripService, TripLocationService, UserService, UserTripService, UserTripLocationService, UserTripWorkLogService, VesselService, ZoneService]; diff --git a/angular/src/app/core/api/v1/api/location.service.ts b/angular/src/app/core/api/v1/api/location.service.ts new file mode 100644 index 0000000..c2de5ca --- /dev/null +++ b/angular/src/app/core/api/v1/api/location.service.ts @@ -0,0 +1,434 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiLocationsGetCollection200Response } from '../model/apiLocationsGetCollection200Response'; +// @ts-ignore +import { Location } from '../model/location'; +// @ts-ignore +import { LocationJsonld } from '../model/locationJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class LocationService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of Location resources. + * Retrieves the collection of Location resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param name + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public locationsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public locationsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (name !== undefined && name !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + name, 'name'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/locations`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a Location resource. + * Retrieves a Location resource. + * @param id Location identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public locationsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public locationsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling locationsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/locations/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Location resource. + * Updates the Location resource. + * @param id Location identifier + * @param location The updated Location resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public locationsIdPatch(id: string, location: Location, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public locationsIdPatch(id: string, location: Location, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsIdPatch(id: string, location: Location, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsIdPatch(id: string, location: Location, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling locationsIdPatch.'); + } + if (location === null || location === undefined) { + throw new Error('Required parameter location was null or undefined when calling locationsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/locations/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: location, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a Location resource. + * Creates a Location resource. + * @param locationJsonld The new Location resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public locationsPost(locationJsonld: LocationJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public locationsPost(locationJsonld: LocationJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsPost(locationJsonld: LocationJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public locationsPost(locationJsonld: LocationJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (locationJsonld === null || locationJsonld === undefined) { + throw new Error('Required parameter locationJsonld was null or undefined when calling locationsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/locations`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: locationJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/loginCheck.service.ts b/angular/src/app/core/api/v1/api/loginCheck.service.ts index e9cfb64..6a5c15d 100644 --- a/angular/src/app/core/api/v1/api/loginCheck.service.ts +++ b/angular/src/app/core/api/v1/api/loginCheck.service.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 diff --git a/angular/src/app/core/api/v1/api/mediaObject.service.ts b/angular/src/app/core/api/v1/api/mediaObject.service.ts index 6575af0..a3ab982 100644 --- a/angular/src/app/core/api/v1/api/mediaObject.service.ts +++ b/angular/src/app/core/api/v1/api/mediaObject.service.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 diff --git a/angular/src/app/core/api/v1/api/shippingCompany.service.ts b/angular/src/app/core/api/v1/api/shippingCompany.service.ts new file mode 100644 index 0000000..273045d --- /dev/null +++ b/angular/src/app/core/api/v1/api/shippingCompany.service.ts @@ -0,0 +1,434 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiShippingCompaniesGetCollection200Response } from '../model/apiShippingCompaniesGetCollection200Response'; +// @ts-ignore +import { ShippingCompany } from '../model/shippingCompany'; +// @ts-ignore +import { ShippingCompanyJsonld } from '../model/shippingCompanyJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class ShippingCompanyService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of ShippingCompany resources. + * Retrieves the collection of ShippingCompany resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param name + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public shippingCompaniesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public shippingCompaniesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (name !== undefined && name !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + name, 'name'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/shipping_companies`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a ShippingCompany resource. + * Retrieves a ShippingCompany resource. + * @param id ShippingCompany identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public shippingCompaniesIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public shippingCompaniesIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling shippingCompaniesIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/shipping_companies/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the ShippingCompany resource. + * Updates the ShippingCompany resource. + * @param id ShippingCompany identifier + * @param shippingCompany The updated ShippingCompany resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public shippingCompaniesIdPatch(id: string, shippingCompany: ShippingCompany, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public shippingCompaniesIdPatch(id: string, shippingCompany: ShippingCompany, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesIdPatch(id: string, shippingCompany: ShippingCompany, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesIdPatch(id: string, shippingCompany: ShippingCompany, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling shippingCompaniesIdPatch.'); + } + if (shippingCompany === null || shippingCompany === undefined) { + throw new Error('Required parameter shippingCompany was null or undefined when calling shippingCompaniesIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/shipping_companies/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: shippingCompany, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a ShippingCompany resource. + * Creates a ShippingCompany resource. + * @param shippingCompanyJsonld The new ShippingCompany resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public shippingCompaniesPost(shippingCompanyJsonld: ShippingCompanyJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public shippingCompaniesPost(shippingCompanyJsonld: ShippingCompanyJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesPost(shippingCompanyJsonld: ShippingCompanyJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public shippingCompaniesPost(shippingCompanyJsonld: ShippingCompanyJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (shippingCompanyJsonld === null || shippingCompanyJsonld === undefined) { + throw new Error('Required parameter shippingCompanyJsonld was null or undefined when calling shippingCompaniesPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/shipping_companies`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: shippingCompanyJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/trip.service.ts b/angular/src/app/core/api/v1/api/trip.service.ts new file mode 100644 index 0000000..9d5fff2 --- /dev/null +++ b/angular/src/app/core/api/v1/api/trip.service.ts @@ -0,0 +1,419 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiTripsGetCollection200Response } from '../model/apiTripsGetCollection200Response'; +// @ts-ignore +import { Trip } from '../model/trip'; +// @ts-ignore +import { TripJsonld } from '../model/tripJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class TripService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of Trip resources. + * Retrieves the collection of Trip resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripsGetCollection(page?: number, itemsPerPage?: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripsGetCollection(page?: number, itemsPerPage?: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsGetCollection(page?: number, itemsPerPage?: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsGetCollection(page?: number, itemsPerPage?: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trips`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a Trip resource. + * Retrieves a Trip resource. + * @param id Trip identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling tripsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trips/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Trip resource. + * Updates the Trip resource. + * @param id Trip identifier + * @param trip The updated Trip resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripsIdPatch(id: string, trip: Trip, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripsIdPatch(id: string, trip: Trip, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsIdPatch(id: string, trip: Trip, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsIdPatch(id: string, trip: Trip, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling tripsIdPatch.'); + } + if (trip === null || trip === undefined) { + throw new Error('Required parameter trip was null or undefined when calling tripsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trips/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: trip, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a Trip resource. + * Creates a Trip resource. + * @param tripJsonld The new Trip resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripsPost(tripJsonld: TripJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripsPost(tripJsonld: TripJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsPost(tripJsonld: TripJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripsPost(tripJsonld: TripJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (tripJsonld === null || tripJsonld === undefined) { + throw new Error('Required parameter tripJsonld was null or undefined when calling tripsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trips`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: tripJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/tripLocation.service.ts b/angular/src/app/core/api/v1/api/tripLocation.service.ts new file mode 100644 index 0000000..35cace8 --- /dev/null +++ b/angular/src/app/core/api/v1/api/tripLocation.service.ts @@ -0,0 +1,419 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiTripLocationsGetCollection200Response } from '../model/apiTripLocationsGetCollection200Response'; +// @ts-ignore +import { TripLocation } from '../model/tripLocation'; +// @ts-ignore +import { TripLocationJsonld } from '../model/tripLocationJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class TripLocationService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of TripLocation resources. + * Retrieves the collection of TripLocation resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripLocationsGetCollection(page?: number, itemsPerPage?: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripLocationsGetCollection(page?: number, itemsPerPage?: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsGetCollection(page?: number, itemsPerPage?: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsGetCollection(page?: number, itemsPerPage?: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trip_locations`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a TripLocation resource. + * Retrieves a TripLocation resource. + * @param id TripLocation identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripLocationsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripLocationsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling tripLocationsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trip_locations/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the TripLocation resource. + * Updates the TripLocation resource. + * @param id TripLocation identifier + * @param tripLocation The updated TripLocation resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripLocationsIdPatch(id: string, tripLocation: TripLocation, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripLocationsIdPatch(id: string, tripLocation: TripLocation, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsIdPatch(id: string, tripLocation: TripLocation, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsIdPatch(id: string, tripLocation: TripLocation, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling tripLocationsIdPatch.'); + } + if (tripLocation === null || tripLocation === undefined) { + throw new Error('Required parameter tripLocation was null or undefined when calling tripLocationsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trip_locations/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: tripLocation, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a TripLocation resource. + * Creates a TripLocation resource. + * @param tripLocationJsonld The new TripLocation resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public tripLocationsPost(tripLocationJsonld: TripLocationJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public tripLocationsPost(tripLocationJsonld: TripLocationJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsPost(tripLocationJsonld: TripLocationJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public tripLocationsPost(tripLocationJsonld: TripLocationJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (tripLocationJsonld === null || tripLocationJsonld === undefined) { + throw new Error('Required parameter tripLocationJsonld was null or undefined when calling tripLocationsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/trip_locations`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: tripLocationJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/user.service.ts b/angular/src/app/core/api/v1/api/user.service.ts index 15751b8..ef5bb53 100644 --- a/angular/src/app/core/api/v1/api/user.service.ts +++ b/angular/src/app/core/api/v1/api/user.service.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 @@ -21,6 +21,8 @@ import { Observable } from 'rxjs'; // @ts-ignore import { ApiUsersGetCollection200Response } from '../model/apiUsersGetCollection200Response'; // @ts-ignore +import { User } from '../model/user'; +// @ts-ignore import { UserJsonld } from '../model/userJsonld'; // @ts-ignore @@ -266,6 +268,92 @@ export class UserService { ); } + /** + * Updates the User resource. + * Updates the User resource. + * @param id User identifier + * @param user The updated User resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public usersIdPatch(id: string, user: User, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public usersIdPatch(id: string, user: User, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersIdPatch(id: string, user: User, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersIdPatch(id: string, user: User, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling usersIdPatch.'); + } + if (user === null || user === undefined) { + throw new Error('Required parameter user was null or undefined when calling usersIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/users/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: user, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + /** * Creates a User resource. * Creates a User resource. diff --git a/angular/src/app/core/api/v1/api/userTrip.service.ts b/angular/src/app/core/api/v1/api/userTrip.service.ts new file mode 100644 index 0000000..2e15b4f --- /dev/null +++ b/angular/src/app/core/api/v1/api/userTrip.service.ts @@ -0,0 +1,419 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiUserTripsGetCollection200Response } from '../model/apiUserTripsGetCollection200Response'; +// @ts-ignore +import { UserTrip } from '../model/userTrip'; +// @ts-ignore +import { UserTripJsonld } from '../model/userTripJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class UserTripService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of UserTrip resources. + * Retrieves the collection of UserTrip resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripsGetCollection(page?: number, itemsPerPage?: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripsGetCollection(page?: number, itemsPerPage?: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsGetCollection(page?: number, itemsPerPage?: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsGetCollection(page?: number, itemsPerPage?: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trips`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a UserTrip resource. + * Retrieves a UserTrip resource. + * @param id UserTrip identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling userTripsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trips/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the UserTrip resource. + * Updates the UserTrip resource. + * @param id UserTrip identifier + * @param userTrip The updated UserTrip resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripsIdPatch(id: string, userTrip: UserTrip, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripsIdPatch(id: string, userTrip: UserTrip, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsIdPatch(id: string, userTrip: UserTrip, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsIdPatch(id: string, userTrip: UserTrip, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling userTripsIdPatch.'); + } + if (userTrip === null || userTrip === undefined) { + throw new Error('Required parameter userTrip was null or undefined when calling userTripsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trips/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: userTrip, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a UserTrip resource. + * Creates a UserTrip resource. + * @param userTripJsonld The new UserTrip resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripsPost(userTripJsonld: UserTripJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripsPost(userTripJsonld: UserTripJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsPost(userTripJsonld: UserTripJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripsPost(userTripJsonld: UserTripJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (userTripJsonld === null || userTripJsonld === undefined) { + throw new Error('Required parameter userTripJsonld was null or undefined when calling userTripsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trips`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: userTripJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/userTripLocation.service.ts b/angular/src/app/core/api/v1/api/userTripLocation.service.ts new file mode 100644 index 0000000..f2301dc --- /dev/null +++ b/angular/src/app/core/api/v1/api/userTripLocation.service.ts @@ -0,0 +1,419 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiUserTripLocationsGetCollection200Response } from '../model/apiUserTripLocationsGetCollection200Response'; +// @ts-ignore +import { UserTripLocation } from '../model/userTripLocation'; +// @ts-ignore +import { UserTripLocationJsonld } from '../model/userTripLocationJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class UserTripLocationService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of UserTripLocation resources. + * Retrieves the collection of UserTripLocation resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripLocationsGetCollection(page?: number, itemsPerPage?: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripLocationsGetCollection(page?: number, itemsPerPage?: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsGetCollection(page?: number, itemsPerPage?: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsGetCollection(page?: number, itemsPerPage?: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_locations`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a UserTripLocation resource. + * Retrieves a UserTripLocation resource. + * @param id UserTripLocation identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripLocationsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripLocationsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling userTripLocationsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_locations/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the UserTripLocation resource. + * Updates the UserTripLocation resource. + * @param id UserTripLocation identifier + * @param userTripLocation The updated UserTripLocation resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripLocationsIdPatch(id: string, userTripLocation: UserTripLocation, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripLocationsIdPatch(id: string, userTripLocation: UserTripLocation, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsIdPatch(id: string, userTripLocation: UserTripLocation, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsIdPatch(id: string, userTripLocation: UserTripLocation, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling userTripLocationsIdPatch.'); + } + if (userTripLocation === null || userTripLocation === undefined) { + throw new Error('Required parameter userTripLocation was null or undefined when calling userTripLocationsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_locations/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: userTripLocation, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a UserTripLocation resource. + * Creates a UserTripLocation resource. + * @param userTripLocationJsonld The new UserTripLocation resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripLocationsPost(userTripLocationJsonld: UserTripLocationJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripLocationsPost(userTripLocationJsonld: UserTripLocationJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsPost(userTripLocationJsonld: UserTripLocationJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripLocationsPost(userTripLocationJsonld: UserTripLocationJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (userTripLocationJsonld === null || userTripLocationJsonld === undefined) { + throw new Error('Required parameter userTripLocationJsonld was null or undefined when calling userTripLocationsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_locations`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: userTripLocationJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/userTripWorkLog.service.ts b/angular/src/app/core/api/v1/api/userTripWorkLog.service.ts new file mode 100644 index 0000000..feff8c7 --- /dev/null +++ b/angular/src/app/core/api/v1/api/userTripWorkLog.service.ts @@ -0,0 +1,419 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiUserTripWorkLogsGetCollection200Response } from '../model/apiUserTripWorkLogsGetCollection200Response'; +// @ts-ignore +import { UserTripWorkLog } from '../model/userTripWorkLog'; +// @ts-ignore +import { UserTripWorkLogJsonld } from '../model/userTripWorkLogJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class UserTripWorkLogService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of UserTripWorkLog resources. + * Retrieves the collection of UserTripWorkLog resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripWorkLogsGetCollection(page?: number, itemsPerPage?: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripWorkLogsGetCollection(page?: number, itemsPerPage?: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsGetCollection(page?: number, itemsPerPage?: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsGetCollection(page?: number, itemsPerPage?: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_work_logs`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a UserTripWorkLog resource. + * Retrieves a UserTripWorkLog resource. + * @param id UserTripWorkLog identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripWorkLogsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripWorkLogsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling userTripWorkLogsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_work_logs/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the UserTripWorkLog resource. + * Updates the UserTripWorkLog resource. + * @param id UserTripWorkLog identifier + * @param userTripWorkLog The updated UserTripWorkLog resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripWorkLogsIdPatch(id: string, userTripWorkLog: UserTripWorkLog, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripWorkLogsIdPatch(id: string, userTripWorkLog: UserTripWorkLog, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsIdPatch(id: string, userTripWorkLog: UserTripWorkLog, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsIdPatch(id: string, userTripWorkLog: UserTripWorkLog, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling userTripWorkLogsIdPatch.'); + } + if (userTripWorkLog === null || userTripWorkLog === undefined) { + throw new Error('Required parameter userTripWorkLog was null or undefined when calling userTripWorkLogsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_work_logs/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: userTripWorkLog, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a UserTripWorkLog resource. + * Creates a UserTripWorkLog resource. + * @param userTripWorkLogJsonld The new UserTripWorkLog resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public userTripWorkLogsPost(userTripWorkLogJsonld: UserTripWorkLogJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public userTripWorkLogsPost(userTripWorkLogJsonld: UserTripWorkLogJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsPost(userTripWorkLogJsonld: UserTripWorkLogJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public userTripWorkLogsPost(userTripWorkLogJsonld: UserTripWorkLogJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (userTripWorkLogJsonld === null || userTripWorkLogJsonld === undefined) { + throw new Error('Required parameter userTripWorkLogJsonld was null or undefined when calling userTripWorkLogsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/user_trip_work_logs`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: userTripWorkLogJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/vessel.service.ts b/angular/src/app/core/api/v1/api/vessel.service.ts new file mode 100644 index 0000000..fc740ee --- /dev/null +++ b/angular/src/app/core/api/v1/api/vessel.service.ts @@ -0,0 +1,434 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiVesselsGetCollection200Response } from '../model/apiVesselsGetCollection200Response'; +// @ts-ignore +import { Vessel } from '../model/vessel'; +// @ts-ignore +import { VesselJsonld } from '../model/vesselJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class VesselService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of Vessel resources. + * Retrieves the collection of Vessel resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param name + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public vesselsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public vesselsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (name !== undefined && name !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + name, 'name'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/vessels`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a Vessel resource. + * Retrieves a Vessel resource. + * @param id Vessel identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public vesselsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public vesselsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling vesselsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/vessels/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Vessel resource. + * Updates the Vessel resource. + * @param id Vessel identifier + * @param vessel The updated Vessel resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public vesselsIdPatch(id: string, vessel: Vessel, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public vesselsIdPatch(id: string, vessel: Vessel, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsIdPatch(id: string, vessel: Vessel, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsIdPatch(id: string, vessel: Vessel, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling vesselsIdPatch.'); + } + if (vessel === null || vessel === undefined) { + throw new Error('Required parameter vessel was null or undefined when calling vesselsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/vessels/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: vessel, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a Vessel resource. + * Creates a Vessel resource. + * @param vesselJsonld The new Vessel resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public vesselsPost(vesselJsonld: VesselJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public vesselsPost(vesselJsonld: VesselJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsPost(vesselJsonld: VesselJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public vesselsPost(vesselJsonld: VesselJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (vesselJsonld === null || vesselJsonld === undefined) { + throw new Error('Required parameter vesselJsonld was null or undefined when calling vesselsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/vessels`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: vesselJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/zone.service.ts b/angular/src/app/core/api/v1/api/zone.service.ts new file mode 100644 index 0000000..aa53cfc --- /dev/null +++ b/angular/src/app/core/api/v1/api/zone.service.ts @@ -0,0 +1,434 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiZonesGetCollection200Response } from '../model/apiZonesGetCollection200Response'; +// @ts-ignore +import { Zone } from '../model/zone'; +// @ts-ignore +import { ZoneJsonld } from '../model/zoneJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class ZoneService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of Zone resources. + * Retrieves the collection of Zone resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param name + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public zonesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public zonesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesGetCollection(page?: number, itemsPerPage?: number, name?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (name !== undefined && name !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + name, 'name'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/zones`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a Zone resource. + * Retrieves a Zone resource. + * @param id Zone identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public zonesIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public zonesIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling zonesIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/zones/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Zone resource. + * Updates the Zone resource. + * @param id Zone identifier + * @param zone The updated Zone resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public zonesIdPatch(id: string, zone: Zone, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public zonesIdPatch(id: string, zone: Zone, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesIdPatch(id: string, zone: Zone, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesIdPatch(id: string, zone: Zone, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling zonesIdPatch.'); + } + if (zone === null || zone === undefined) { + throw new Error('Required parameter zone was null or undefined when calling zonesIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/zones/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: zone, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a Zone resource. + * Creates a Zone resource. + * @param zoneJsonld The new Zone resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public zonesPost(zoneJsonld: ZoneJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public zonesPost(zoneJsonld: ZoneJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesPost(zoneJsonld: ZoneJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public zonesPost(zoneJsonld: ZoneJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (zoneJsonld === null || zoneJsonld === undefined) { + throw new Error('Required parameter zoneJsonld was null or undefined when calling zonesPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/zones`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: zoneJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/model/apiLocationsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200Response.ts new file mode 100644 index 0000000..5a1c33e --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { LocationJsonld } from './locationJsonld'; + + +export interface ApiLocationsGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearch.ts b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearch.ts new file mode 100644 index 0000000..e5c9000 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearch.ts @@ -0,0 +1,21 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearchMappingInner } from './apiLocationsGetCollection200ResponseSearchMappingInner'; + + +export interface ApiLocationsGetCollection200ResponseSearch { + type?: string; + template?: string; + variableRepresentation?: string; + mapping?: Array; +} + diff --git a/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearchMappingInner.ts b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearchMappingInner.ts new file mode 100644 index 0000000..99607e2 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseSearchMappingInner.ts @@ -0,0 +1,20 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface ApiLocationsGetCollection200ResponseSearchMappingInner { + type?: string; + variable?: string; + property?: string | null; + required?: boolean; +} + diff --git a/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseView.ts b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseView.ts new file mode 100644 index 0000000..32cc610 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLocationsGetCollection200ResponseView.ts @@ -0,0 +1,22 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface ApiLocationsGetCollection200ResponseView { + id?: string; + type?: string; + first?: string; + last?: string; + previous?: string; + next?: string; +} + diff --git a/angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts index c25e377..e176ea8 100644 --- a/angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts +++ b/angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 @@ -9,15 +9,15 @@ * https://openapi-generator.tech * Do not edit the class manually. */ -import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; -import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; import { MediaObjectJsonldMediaObjectRead } from './mediaObjectJsonldMediaObjectRead'; export interface ApiMediaObjectsGetCollection200Response { - 'hydra:member': Array; - 'hydra:totalItems'?: number; - 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; - 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; } diff --git a/angular/src/app/core/api/v1/model/apiShippingCompaniesGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiShippingCompaniesGetCollection200Response.ts new file mode 100644 index 0000000..957aa88 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiShippingCompaniesGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { ShippingCompanyJsonld } from './shippingCompanyJsonld'; + + +export interface ApiShippingCompaniesGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiTripLocationsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiTripLocationsGetCollection200Response.ts new file mode 100644 index 0000000..da6ed06 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiTripLocationsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { TripLocationJsonld } from './tripLocationJsonld'; + + +export interface ApiTripLocationsGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiTripsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiTripsGetCollection200Response.ts new file mode 100644 index 0000000..4af3e85 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiTripsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { TripJsonld } from './tripJsonld'; + + +export interface ApiTripsGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiUserTripLocationsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiUserTripLocationsGetCollection200Response.ts new file mode 100644 index 0000000..f393b69 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiUserTripLocationsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { UserTripLocationJsonld } from './userTripLocationJsonld'; + + +export interface ApiUserTripLocationsGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiUserTripWorkLogsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiUserTripWorkLogsGetCollection200Response.ts new file mode 100644 index 0000000..a82286b --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiUserTripWorkLogsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { UserTripWorkLogJsonld } from './userTripWorkLogJsonld'; + + +export interface ApiUserTripWorkLogsGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiUserTripsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiUserTripsGetCollection200Response.ts new file mode 100644 index 0000000..9ef1eb3 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiUserTripsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { UserTripJsonld } from './userTripJsonld'; + + +export interface ApiUserTripsGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts index 183aeef..fe00593 100644 --- a/angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts +++ b/angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 @@ -9,15 +9,15 @@ * https://openapi-generator.tech * Do not edit the class manually. */ -import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; import { UserJsonld } from './userJsonld'; -import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; export interface ApiUsersGetCollection200Response { - 'hydra:member': Array; - 'hydra:totalItems'?: number; - 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; - 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; } diff --git a/angular/src/app/core/api/v1/model/apiVesselsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiVesselsGetCollection200Response.ts new file mode 100644 index 0000000..976d2aa --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiVesselsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { VesselJsonld } from './vesselJsonld'; + + +export interface ApiVesselsGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiZonesGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiZonesGetCollection200Response.ts new file mode 100644 index 0000000..8ced97a --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiZonesGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiLocationsGetCollection200ResponseSearch } from './apiLocationsGetCollection200ResponseSearch'; +import { ApiLocationsGetCollection200ResponseView } from './apiLocationsGetCollection200ResponseView'; +import { ZoneJsonld } from './zoneJsonld'; + + +export interface ApiZonesGetCollection200Response { + member: Array; + totalItems?: number; + view?: ApiLocationsGetCollection200ResponseView; + search?: ApiLocationsGetCollection200ResponseSearch; +} + diff --git a/angular/src/app/core/api/v1/model/location.ts b/angular/src/app/core/api/v1/model/location.ts new file mode 100644 index 0000000..96d26b4 --- /dev/null +++ b/angular/src/app/core/api/v1/model/location.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Location { + readonly zone?: string; + name: string; + readonly zoneName?: string; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/locationJsonld.ts b/angular/src/app/core/api/v1/model/locationJsonld.ts new file mode 100644 index 0000000..44b447e --- /dev/null +++ b/angular/src/app/core/api/v1/model/locationJsonld.ts @@ -0,0 +1,28 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { LocationJsonldContext } from './locationJsonldContext'; +import { ZoneJsonld } from './zoneJsonld'; + + +/** + * + */ +export interface LocationJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + readonly zone?: ZoneJsonld; + name: string; + readonly zoneName?: string; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/locationJsonldContext.ts b/angular/src/app/core/api/v1/model/locationJsonldContext.ts new file mode 100644 index 0000000..b297fc8 --- /dev/null +++ b/angular/src/app/core/api/v1/model/locationJsonldContext.ts @@ -0,0 +1,20 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { LocationJsonldContextOneOf } from './locationJsonldContextOneOf'; + + +/** + * @type LocationJsonldContext + * @export + */ +export type LocationJsonldContext = LocationJsonldContextOneOf | string; + diff --git a/angular/src/app/core/api/v1/model/locationJsonldContextOneOf.ts b/angular/src/app/core/api/v1/model/locationJsonldContextOneOf.ts new file mode 100644 index 0000000..e8f17b1 --- /dev/null +++ b/angular/src/app/core/api/v1/model/locationJsonldContextOneOf.ts @@ -0,0 +1,28 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface LocationJsonldContextOneOf { + [key: string]: any | any; + + + vocab: string; + hydra: LocationJsonldContextOneOf.HydraEnum; +} +export namespace LocationJsonldContextOneOf { + export type HydraEnum = 'http://www.w3.org/ns/hydra/core#'; + export const HydraEnum = { + HttpWwwW3OrgNsHydraCore: 'http://www.w3.org/ns/hydra/core#' as HydraEnum + }; +} + + diff --git a/angular/src/app/core/api/v1/model/loginCheckPost200Response.ts b/angular/src/app/core/api/v1/model/loginCheckPost200Response.ts index ee7303b..fab630b 100644 --- a/angular/src/app/core/api/v1/model/loginCheckPost200Response.ts +++ b/angular/src/app/core/api/v1/model/loginCheckPost200Response.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 diff --git a/angular/src/app/core/api/v1/model/loginCheckPostRequest.ts b/angular/src/app/core/api/v1/model/loginCheckPostRequest.ts index 1d223b5..1360d9f 100644 --- a/angular/src/app/core/api/v1/model/loginCheckPostRequest.ts +++ b/angular/src/app/core/api/v1/model/loginCheckPostRequest.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 diff --git a/angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts b/angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts index 2fcbe96..998b0b9 100644 --- a/angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts +++ b/angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 @@ -9,14 +9,14 @@ * https://openapi-generator.tech * Do not edit the class manually. */ -import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; +import { LocationJsonldContext } from './locationJsonldContext'; /** * */ export interface MediaObjectJsonldMediaObjectRead { - context?: AccountTradePileItemJsonldContext; + context?: LocationJsonldContext; readonly id?: string; readonly type?: string; contentUrl?: string | null; diff --git a/angular/src/app/core/api/v1/model/models.ts b/angular/src/app/core/api/v1/model/models.ts index 5d5198e..b18b4e9 100644 --- a/angular/src/app/core/api/v1/model/models.ts +++ b/angular/src/app/core/api/v1/model/models.ts @@ -1,45 +1,39 @@ -export * from './accountTradePileItem'; -export * from './accountTradePileItemJsonld'; -export * from './accountTradePileItemJsonldContext'; -export * from './accountTradePileItemJsonldContextOneOf'; -export * from './apiAccountTradePileItemsGetCollection200Response'; -export * from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; -export * from './apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner'; -export * from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; -export * from './apiCandidateStatsGetCollection200Response'; -export * from './apiCandidatesGetCollection200Response'; -export * from './apiGameAccountsGetCollection200Response'; -export * from './apiLogAccountCreditsGetCollection200Response'; -export * from './apiLogAccountProfitsGetCollection200Response'; -export * from './apiLogAccountSoldItemsGetCollection200Response'; -export * from './apiLogGeneralsGetCollection200Response'; -export * from './apiLogTotalProfitsGetCollection200Response'; +export * from './apiLocationsGetCollection200Response'; +export * from './apiLocationsGetCollection200ResponseSearch'; +export * from './apiLocationsGetCollection200ResponseSearchMappingInner'; +export * from './apiLocationsGetCollection200ResponseView'; export * from './apiMediaObjectsGetCollection200Response'; -export * from './apiPlayersGetCollection200Response'; -export * from './apiRaritiesGetCollection200Response'; +export * from './apiShippingCompaniesGetCollection200Response'; +export * from './apiTripLocationsGetCollection200Response'; +export * from './apiTripsGetCollection200Response'; +export * from './apiUserTripLocationsGetCollection200Response'; +export * from './apiUserTripWorkLogsGetCollection200Response'; +export * from './apiUserTripsGetCollection200Response'; export * from './apiUsersGetCollection200Response'; -export * from './candidate'; -export * from './candidateJsonld'; -export * from './candidateStatJsonld'; -export * from './candidateStockAccountsJsonld'; -export * from './config'; -export * from './configJsonld'; -export * from './gameAccount'; -export * from './gameAccountJsonld'; -export * from './logAccountCreditJsonld'; -export * from './logAccountProfitJsonld'; -export * from './logAccountSoldItemJsonld'; -export * from './logGeneralJsonld'; -export * from './logTotalProfit'; -export * from './logTotalProfitJsonld'; +export * from './apiVesselsGetCollection200Response'; +export * from './apiZonesGetCollection200Response'; +export * from './location'; +export * from './locationJsonld'; +export * from './locationJsonldContext'; +export * from './locationJsonldContextOneOf'; export * from './loginCheckPost200Response'; export * from './loginCheckPostRequest'; export * from './mediaObjectJsonldMediaObjectRead'; -export * from './modeConfig'; -export * from './modeConfigJsonld'; -export * from './player'; -export * from './playerJsonld'; -export * from './rarity'; -export * from './rarityJsonld'; -export * from './systemStatJsonld'; +export * from './shippingCompany'; +export * from './shippingCompanyJsonld'; +export * from './trip'; +export * from './tripJsonld'; +export * from './tripLocation'; +export * from './tripLocationJsonld'; +export * from './user'; export * from './userJsonld'; +export * from './userTrip'; +export * from './userTripJsonld'; +export * from './userTripLocation'; +export * from './userTripLocationJsonld'; +export * from './userTripWorkLog'; +export * from './userTripWorkLogJsonld'; +export * from './vessel'; +export * from './vesselJsonld'; +export * from './zone'; +export * from './zoneJsonld'; diff --git a/angular/src/app/core/api/v1/model/shippingCompany.ts b/angular/src/app/core/api/v1/model/shippingCompany.ts new file mode 100644 index 0000000..00f1a77 --- /dev/null +++ b/angular/src/app/core/api/v1/model/shippingCompany.ts @@ -0,0 +1,21 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface ShippingCompany { + name: string; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/shippingCompanyJsonld.ts b/angular/src/app/core/api/v1/model/shippingCompanyJsonld.ts new file mode 100644 index 0000000..e5fc411 --- /dev/null +++ b/angular/src/app/core/api/v1/model/shippingCompanyJsonld.ts @@ -0,0 +1,25 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface ShippingCompanyJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + name: string; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/trip.ts b/angular/src/app/core/api/v1/model/trip.ts new file mode 100644 index 0000000..8009427 --- /dev/null +++ b/angular/src/app/core/api/v1/model/trip.ts @@ -0,0 +1,27 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Trip { + readonly vessel?: string; + pilotReference: string; + captainName?: string | null; + readonly startLocation?: string; + readonly endLocation?: string; + startDate: string | null; + endDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/tripJsonld.ts b/angular/src/app/core/api/v1/model/tripJsonld.ts new file mode 100644 index 0000000..1398d6f --- /dev/null +++ b/angular/src/app/core/api/v1/model/tripJsonld.ts @@ -0,0 +1,33 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { VesselJsonld } from './vesselJsonld'; +import { LocationJsonld } from './locationJsonld'; +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface TripJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + readonly vessel?: VesselJsonld; + pilotReference: string; + captainName?: string | null; + readonly startLocation?: LocationJsonld; + readonly endLocation?: LocationJsonld; + startDate: string | null; + endDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/tripLocation.ts b/angular/src/app/core/api/v1/model/tripLocation.ts new file mode 100644 index 0000000..9442eca --- /dev/null +++ b/angular/src/app/core/api/v1/model/tripLocation.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface TripLocation { + readonly trip?: string; + readonly location?: string; + date: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/tripLocationJsonld.ts b/angular/src/app/core/api/v1/model/tripLocationJsonld.ts new file mode 100644 index 0000000..7e7a868 --- /dev/null +++ b/angular/src/app/core/api/v1/model/tripLocationJsonld.ts @@ -0,0 +1,29 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { TripJsonld } from './tripJsonld'; +import { LocationJsonld } from './locationJsonld'; +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface TripLocationJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + readonly trip?: TripJsonld; + readonly location?: LocationJsonld; + date: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/user.ts b/angular/src/app/core/api/v1/model/user.ts new file mode 100644 index 0000000..da1af13 --- /dev/null +++ b/angular/src/app/core/api/v1/model/user.ts @@ -0,0 +1,31 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface User { + email: string | null; + firstName: string | null; + lastName: string | null; + image?: string | null; + readonly imageUrl?: string | null; + readonly fullName?: string | null; + /** + * The plaintext password when being set or changed. + */ + password?: string | null; + active?: boolean; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/userJsonld.ts b/angular/src/app/core/api/v1/model/userJsonld.ts index 8721099..c04f03e 100644 --- a/angular/src/app/core/api/v1/model/userJsonld.ts +++ b/angular/src/app/core/api/v1/model/userJsonld.ts @@ -1,5 +1,5 @@ /** - * Hello API Platform + * Imaq Platform * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * * The version of the OpenAPI document: 1.0.0 @@ -9,14 +9,14 @@ * https://openapi-generator.tech * Do not edit the class manually. */ -import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; +import { LocationJsonldContext } from './locationJsonldContext'; /** * */ export interface UserJsonld { - context?: AccountTradePileItemJsonldContext; + context?: LocationJsonldContext; readonly id?: string; readonly type?: string; email: string | null; diff --git a/angular/src/app/core/api/v1/model/userTrip.ts b/angular/src/app/core/api/v1/model/userTrip.ts new file mode 100644 index 0000000..a7a6b93 --- /dev/null +++ b/angular/src/app/core/api/v1/model/userTrip.ts @@ -0,0 +1,25 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface UserTrip { + readonly trip?: string; + readonly user?: string; + captainName: string; + startDate: string | null; + endDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/userTripJsonld.ts b/angular/src/app/core/api/v1/model/userTripJsonld.ts new file mode 100644 index 0000000..f47ea25 --- /dev/null +++ b/angular/src/app/core/api/v1/model/userTripJsonld.ts @@ -0,0 +1,31 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { TripJsonld } from './tripJsonld'; +import { UserJsonld } from './userJsonld'; +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface UserTripJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + readonly trip?: TripJsonld; + readonly user?: UserJsonld; + captainName: string; + startDate: string | null; + endDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/userTripLocation.ts b/angular/src/app/core/api/v1/model/userTripLocation.ts new file mode 100644 index 0000000..7d3ae0a --- /dev/null +++ b/angular/src/app/core/api/v1/model/userTripLocation.ts @@ -0,0 +1,23 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface UserTripLocation { + readonly userTrip?: string; + readonly location?: string; + plannedDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/userTripLocationJsonld.ts b/angular/src/app/core/api/v1/model/userTripLocationJsonld.ts new file mode 100644 index 0000000..58a5f76 --- /dev/null +++ b/angular/src/app/core/api/v1/model/userTripLocationJsonld.ts @@ -0,0 +1,29 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { UserTripJsonld } from './userTripJsonld'; +import { LocationJsonld } from './locationJsonld'; +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface UserTripLocationJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + readonly userTrip?: UserTripJsonld; + readonly location?: LocationJsonld; + plannedDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/userTripWorkLog.ts b/angular/src/app/core/api/v1/model/userTripWorkLog.ts new file mode 100644 index 0000000..25a1637 --- /dev/null +++ b/angular/src/app/core/api/v1/model/userTripWorkLog.ts @@ -0,0 +1,25 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface UserTripWorkLog { + readonly userTrip?: string; + readonly startLocation?: string; + readonly endLocation?: string; + startDate: string | null; + endDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/userTripWorkLogJsonld.ts b/angular/src/app/core/api/v1/model/userTripWorkLogJsonld.ts new file mode 100644 index 0000000..b6d7c33 --- /dev/null +++ b/angular/src/app/core/api/v1/model/userTripWorkLogJsonld.ts @@ -0,0 +1,31 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { UserTripJsonld } from './userTripJsonld'; +import { LocationJsonld } from './locationJsonld'; +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface UserTripWorkLogJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + readonly userTrip?: UserTripJsonld; + readonly startLocation?: LocationJsonld; + readonly endLocation?: LocationJsonld; + startDate: string | null; + endDate: string | null; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/vessel.ts b/angular/src/app/core/api/v1/model/vessel.ts new file mode 100644 index 0000000..2e23b90 --- /dev/null +++ b/angular/src/app/core/api/v1/model/vessel.ts @@ -0,0 +1,22 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Vessel { + name: string; + readonly company?: string; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/vesselJsonld.ts b/angular/src/app/core/api/v1/model/vesselJsonld.ts new file mode 100644 index 0000000..7b4afec --- /dev/null +++ b/angular/src/app/core/api/v1/model/vesselJsonld.ts @@ -0,0 +1,27 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ShippingCompanyJsonld } from './shippingCompanyJsonld'; +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface VesselJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + name: string; + readonly company?: ShippingCompanyJsonld; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/zone.ts b/angular/src/app/core/api/v1/model/zone.ts new file mode 100644 index 0000000..f500cb4 --- /dev/null +++ b/angular/src/app/core/api/v1/model/zone.ts @@ -0,0 +1,21 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Zone { + name: string; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/zoneJsonld.ts b/angular/src/app/core/api/v1/model/zoneJsonld.ts new file mode 100644 index 0000000..7a434c6 --- /dev/null +++ b/angular/src/app/core/api/v1/model/zoneJsonld.ts @@ -0,0 +1,25 @@ +/** + * Imaq Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { LocationJsonldContext } from './locationJsonldContext'; + + +/** + * + */ +export interface ZoneJsonld { + context?: LocationJsonldContext; + readonly id?: string; + readonly type?: string; + name: string; + readonly createdAt?: string | null; +} + diff --git a/angular/src/assets/i18n/en.json b/angular/src/assets/i18n/en.json index 13ad89c..5a5d8b1 100644 --- a/angular/src/assets/i18n/en.json +++ b/angular/src/assets/i18n/en.json @@ -4,6 +4,29 @@ "view": "Dashboard", "overview": "Overview" }, + "view": + { + "dashboard": "Dashboard", + "base_data": "Base data" + }, + "common": + { + "name": "Name", + "zone": "Zone", + "creation_date": "Creation date" + }, + "base_data": + { + "view": "Base data", + "locations": "Locations", + "zones": "Zones", + "vessels": "Vessels", + "shipping_companies": "Shipping companies" + }, + "location": + { + "zone": "Zone" + }, "profile": { "view": "Profile" diff --git a/docs/Matrix over Lods certificeringer - Januar 2024.numbers b/docs/Matrix over Lods certificeringer - Januar 2024.numbers new file mode 100644 index 0000000000000000000000000000000000000000..59541924f7d8619f46489449ffa036ad208049db GIT binary patch literal 236206 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ⅆcXEEM&=Gmte7E3M;;-_Zp$Bi@f9?<+ncYJ#Q{D1 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 literal 0 HcmV?d00001 diff --git a/docs/shipping-class-diagramV2.mermaid b/docs/shipping-class-diagramV2.mermaid new file mode 100644 index 0000000..ff04fae --- /dev/null +++ b/docs/shipping-class-diagramV2.mermaid @@ -0,0 +1,110 @@ +classDiagram + class ShippingCompany { + +Int id* + +String name* + +Date createdAt* + +Collection~Vessel~ vessels* + } + + class Vessel { + +Int id* + +ShippingCompany company* + +String name* + +String type* + +Date createdAt* + +Collection~Trip~ trips* + } + + class Trip { + +Int id* + +Vessel vessel* + +String pilotageReference* + +String captainName + +Location startLocation* + +Location endLocation* + +Date startDate* + +Date endDate* + +Date createdAt* + +Collection~TripLocation~ tripLocations* + +Collection~UserTrip~ userTrips* + } + + class TripLocation { + +Int id* + +Trip trip* + +Location location* + +Date date* + +Date createdAt* + } + + class Location { + +Int id* + +Zone zone* + +String name* + +Date createdAt* + +Collection~TripLocation~ tripLocations* + +Collection~UserTripLocation~ userTripLocations* + +Collection~UserTripWorkLog~ startWorkLogs* + +Collection~UserTripWorkLog~ endWorkLogs* + } + + class Zone { + +Int id* + +String name* + +Date createdAt* + +Collection~Location~ locations* + } + + class User { + +Int id* + +String firstName* + +String lastName* + +String email* + +String pilotageId* + +Boolean active* + +Date createdAt* + +Collection~UserTrip~ userTrips* + } + + class UserTrip { + +Int id* + +Trip trip* + +User user* + +String captainName* + +Date startDate* + +Date endDate* + +Date createdAt* + +Collection~UserTripLocation~ tripLocations* + +Collection~UserTripWorkLog~ workLogs* + } + + class UserTripLocation { + +Int id* + +UserTrip userTrip* + +Location location* + +Date plannedDate* + +Date createdAt* + } + + class UserTripWorkLog { + +Int id* + +UserTrip userTrip* + +Location startLocation* + +Location endLocation* + +Date startDate* + +Date endDate* + +Date createdAt* + } + + ShippingCompany "1" -- "*" Vessel + Vessel "1" -- "*" Trip + Trip "1" -- "*" TripLocation + Trip "1" -- "*" UserTrip + TripLocation "1" -- "1" Location + UserTrip "1" -- "*" UserTripWorkLog + UserTrip "1" -- "*" UserTripLocation + UserTripLocation "1" -- "1" Location + UserTripWorkLog "1" -- "1" Location : startLocation + UserTripWorkLog "1" -- "1" Location : endLocation + User "1" -- "*" UserTrip + Zone "1" -- "*" Location \ No newline at end of file diff --git a/httpdocs/exportApi.sh b/httpdocs/exportApi.sh index 968aadf..85ec12b 100644 --- a/httpdocs/exportApi.sh +++ b/httpdocs/exportApi.sh @@ -18,7 +18,7 @@ fi bin/console api:openapi:export --yaml > "${EXPORT_DIR}/openapi.yaml" # URL der JSON-Datei -JSON_URL="https://futbase.ddev.site:8453/api/docs.json" +JSON_URL="https://imaq.ddev.site:8454/api/docs.json" # JSON von der URL abrufen und im Export-Verzeichnis speichern curl -o "${EXPORT_DIR}/openapi.json" "${JSON_URL}" diff --git a/httpdocs/migrations/Version20241114121031.php b/httpdocs/migrations/Version20241114121031.php new file mode 100644 index 0000000..5b75e81 --- /dev/null +++ b/httpdocs/migrations/Version20241114121031.php @@ -0,0 +1,75 @@ +addSql('CREATE TABLE location (id INT AUTO_INCREMENT NOT NULL, zone_id INT NOT NULL, name VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_5E9E89CB9F2C3FAB (zone_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE shipping_company (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE trip (id INT AUTO_INCREMENT NOT NULL, vessel_id INT NOT NULL, start_location_id INT NOT NULL, end_location_id INT NOT NULL, pilot_reference VARCHAR(255) NOT NULL, captain_name VARCHAR(255) DEFAULT NULL, start_date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', end_date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_7656F53B14AF1953 (vessel_id), INDEX IDX_7656F53B5C3A313A (start_location_id), INDEX IDX_7656F53BC43C7F1 (end_location_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE trip_location (id INT AUTO_INCREMENT NOT NULL, trip_id INT NOT NULL, location_id INT NOT NULL, date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_F6CFBADBA5BC2E0E (trip_id), INDEX IDX_F6CFBADB64D218E (location_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE user_trip (id INT AUTO_INCREMENT NOT NULL, trip_id INT NOT NULL, user_id INT NOT NULL, captain_name VARCHAR(255) NOT NULL, start_date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', end_date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_CD7B9F2A5BC2E0E (trip_id), INDEX IDX_CD7B9F2A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE user_trip_location (id INT AUTO_INCREMENT NOT NULL, user_trip_id INT NOT NULL, location_id INT NOT NULL, planned_date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_1841178BFDB13004 (user_trip_id), INDEX IDX_1841178B64D218E (location_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE user_trip_work_log (id INT AUTO_INCREMENT NOT NULL, user_trip_id INT NOT NULL, start_location_id INT NOT NULL, end_location_id INT NOT NULL, start_date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', end_date DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_B38EA119FDB13004 (user_trip_id), INDEX IDX_B38EA1195C3A313A (start_location_id), INDEX IDX_B38EA119C43C7F1 (end_location_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE vessel (id INT AUTO_INCREMENT NOT NULL, company_id INT NOT NULL, name VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_4ED8DCA8979B1AD6 (company_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE zone (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE location ADD CONSTRAINT FK_5E9E89CB9F2C3FAB FOREIGN KEY (zone_id) REFERENCES zone (id)'); + $this->addSql('ALTER TABLE trip ADD CONSTRAINT FK_7656F53B14AF1953 FOREIGN KEY (vessel_id) REFERENCES vessel (id)'); + $this->addSql('ALTER TABLE trip ADD CONSTRAINT FK_7656F53B5C3A313A FOREIGN KEY (start_location_id) REFERENCES location (id)'); + $this->addSql('ALTER TABLE trip ADD CONSTRAINT FK_7656F53BC43C7F1 FOREIGN KEY (end_location_id) REFERENCES location (id)'); + $this->addSql('ALTER TABLE trip_location ADD CONSTRAINT FK_F6CFBADBA5BC2E0E FOREIGN KEY (trip_id) REFERENCES trip (id)'); + $this->addSql('ALTER TABLE trip_location ADD CONSTRAINT FK_F6CFBADB64D218E FOREIGN KEY (location_id) REFERENCES location (id)'); + $this->addSql('ALTER TABLE user_trip ADD CONSTRAINT FK_CD7B9F2A5BC2E0E FOREIGN KEY (trip_id) REFERENCES trip (id)'); + $this->addSql('ALTER TABLE user_trip ADD CONSTRAINT FK_CD7B9F2A76ED395 FOREIGN KEY (user_id) REFERENCES `user` (id)'); + $this->addSql('ALTER TABLE user_trip_location ADD CONSTRAINT FK_1841178BFDB13004 FOREIGN KEY (user_trip_id) REFERENCES user_trip (id)'); + $this->addSql('ALTER TABLE user_trip_location ADD CONSTRAINT FK_1841178B64D218E FOREIGN KEY (location_id) REFERENCES location (id)'); + $this->addSql('ALTER TABLE user_trip_work_log ADD CONSTRAINT FK_B38EA119FDB13004 FOREIGN KEY (user_trip_id) REFERENCES user_trip (id)'); + $this->addSql('ALTER TABLE user_trip_work_log ADD CONSTRAINT FK_B38EA1195C3A313A FOREIGN KEY (start_location_id) REFERENCES location (id)'); + $this->addSql('ALTER TABLE user_trip_work_log ADD CONSTRAINT FK_B38EA119C43C7F1 FOREIGN KEY (end_location_id) REFERENCES location (id)'); + $this->addSql('ALTER TABLE vessel ADD CONSTRAINT FK_4ED8DCA8979B1AD6 FOREIGN KEY (company_id) REFERENCES shipping_company (id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE location DROP FOREIGN KEY FK_5E9E89CB9F2C3FAB'); + $this->addSql('ALTER TABLE trip DROP FOREIGN KEY FK_7656F53B14AF1953'); + $this->addSql('ALTER TABLE trip DROP FOREIGN KEY FK_7656F53B5C3A313A'); + $this->addSql('ALTER TABLE trip DROP FOREIGN KEY FK_7656F53BC43C7F1'); + $this->addSql('ALTER TABLE trip_location DROP FOREIGN KEY FK_F6CFBADBA5BC2E0E'); + $this->addSql('ALTER TABLE trip_location DROP FOREIGN KEY FK_F6CFBADB64D218E'); + $this->addSql('ALTER TABLE user_trip DROP FOREIGN KEY FK_CD7B9F2A5BC2E0E'); + $this->addSql('ALTER TABLE user_trip DROP FOREIGN KEY FK_CD7B9F2A76ED395'); + $this->addSql('ALTER TABLE user_trip_location DROP FOREIGN KEY FK_1841178BFDB13004'); + $this->addSql('ALTER TABLE user_trip_location DROP FOREIGN KEY FK_1841178B64D218E'); + $this->addSql('ALTER TABLE user_trip_work_log DROP FOREIGN KEY FK_B38EA119FDB13004'); + $this->addSql('ALTER TABLE user_trip_work_log DROP FOREIGN KEY FK_B38EA1195C3A313A'); + $this->addSql('ALTER TABLE user_trip_work_log DROP FOREIGN KEY FK_B38EA119C43C7F1'); + $this->addSql('ALTER TABLE vessel DROP FOREIGN KEY FK_4ED8DCA8979B1AD6'); + $this->addSql('DROP TABLE location'); + $this->addSql('DROP TABLE shipping_company'); + $this->addSql('DROP TABLE trip'); + $this->addSql('DROP TABLE trip_location'); + $this->addSql('DROP TABLE user_trip'); + $this->addSql('DROP TABLE user_trip_location'); + $this->addSql('DROP TABLE user_trip_work_log'); + $this->addSql('DROP TABLE vessel'); + $this->addSql('DROP TABLE zone'); + } +} diff --git a/httpdocs/src/ApiResource/LocationApi.php b/httpdocs/src/ApiResource/LocationApi.php new file mode 100644 index 0000000..307baeb --- /dev/null +++ b/httpdocs/src/ApiResource/LocationApi.php @@ -0,0 +1,77 @@ + 'ipartial', +])] +#[ApiFilter(CustomJsonFilter::class)] +#[ApiFilter(CustomJsonOrderFilter::class)] +class LocationApi +{ + #[ApiProperty(readable: false, writable: false, identifier: true)] + public ?int $id = null; + + /** + * @var ZoneApi + */ + #[ApiProperty( + writable: false, + readableLink: true, + writableLink: false, + builtinTypes: [ + new Type( + 'object', + class: ZoneApi::class, + ) + ] + )] + public ?ZoneApi $zone = null; + + #[Assert\NotBlank] + public string $name; + + #[ApiProperty(writable: false)] + public string $zoneName; + + #[ApiProperty(writable: false)] + public ?\DateTimeImmutable $createdAt = null; +} \ No newline at end of file diff --git a/httpdocs/src/ApiResource/ShippingCompanyApi.php b/httpdocs/src/ApiResource/ShippingCompanyApi.php new file mode 100644 index 0000000..7786404 --- /dev/null +++ b/httpdocs/src/ApiResource/ShippingCompanyApi.php @@ -0,0 +1,57 @@ + 'ipartial', +])] +#[ApiFilter(CustomJsonFilter::class)] +#[ApiFilter(CustomJsonOrderFilter::class)] +class ShippingCompanyApi +{ + #[ApiProperty(readable: false, writable: false, identifier: true)] + public ?int $id = null; + + #[Assert\NotBlank] + public string $name; + + #[ApiProperty(writable: false)] + public ?\DateTimeImmutable $createdAt = null; +} \ No newline at end of file diff --git a/httpdocs/src/ApiResource/TripApi.php b/httpdocs/src/ApiResource/TripApi.php new file mode 100644 index 0000000..6ede6d4 --- /dev/null +++ b/httpdocs/src/ApiResource/TripApi.php @@ -0,0 +1,105 @@ + ['Default', 'postValidation']] ), -// new Patch( -// security: 'is_granted("is_granted("EDIT", object)")' -// ), + new Patch( + security: 'is_granted("is_granted("EDIT", object)")' + ), ], security: 'is_granted("ROLE_USER")', provider: EntityToDtoStateProvider::class, diff --git a/httpdocs/src/ApiResource/UserTripApi.php b/httpdocs/src/ApiResource/UserTripApi.php new file mode 100644 index 0000000..29110c1 --- /dev/null +++ b/httpdocs/src/ApiResource/UserTripApi.php @@ -0,0 +1,87 @@ + 'ipartial', +])] +#[ApiFilter(CustomJsonFilter::class)] +#[ApiFilter(CustomJsonOrderFilter::class)] +class VesselApi +{ + #[ApiProperty(readable: false, writable: false, identifier: true)] + public ?int $id = null; + + #[Assert\NotBlank] + public string $name; + + /** + * @var ShippingCompanyApi + */ + #[ApiProperty( + writable: false, + readableLink: true, + writableLink: false, + builtinTypes: [ + new Type( + 'object', + class: ShippingCompanyApi::class, + ) + ] + )] + public ?ShippingCompanyApi $company = null; + + #[ApiProperty(writable: false)] + public ?\DateTimeImmutable $createdAt = null; +} \ No newline at end of file diff --git a/httpdocs/src/ApiResource/ZoneApi.php b/httpdocs/src/ApiResource/ZoneApi.php new file mode 100644 index 0000000..64545e4 --- /dev/null +++ b/httpdocs/src/ApiResource/ZoneApi.php @@ -0,0 +1,57 @@ + 'ipartial', +])] +#[ApiFilter(CustomJsonFilter::class)] +#[ApiFilter(CustomJsonOrderFilter::class)] +class ZoneApi +{ + #[ApiProperty(readable: false, writable: false, identifier: true)] + public ?int $id = null; + + #[Assert\NotBlank] + public string $name; + + #[ApiProperty(writable: false)] + public ?\DateTimeImmutable $createdAt = null; +} \ No newline at end of file diff --git a/httpdocs/src/Entity/Location.php b/httpdocs/src/Entity/Location.php new file mode 100644 index 0000000..393ce49 --- /dev/null +++ b/httpdocs/src/Entity/Location.php @@ -0,0 +1,106 @@ +zone = $zone; + $this->name = $name; + $this->createdAt = new DateTimeImmutable(); + $this->tripLocations = new ArrayCollection(); + $this->userTripLocations = new ArrayCollection(); + $this->startWorkLogs = new ArrayCollection(); + $this->endWorkLogs = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getZone(): Zone + { + return $this->zone; + } + + public function setZone(Zone $zone): self + { + $this->zone = $zone; + return $this; + } + + public function getName(): string + { + return $this->name; + } + + public function setName(string $name): self + { + $this->name = $name; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + public function getTripLocations(): Collection + { + return $this->tripLocations; + } + + public function getUserTripLocations(): Collection + { + return $this->userTripLocations; + } + + public function getStartWorkLogs(): Collection + { + return $this->startWorkLogs; + } + + public function getEndWorkLogs(): Collection + { + return $this->endWorkLogs; + } + +} \ No newline at end of file diff --git a/httpdocs/src/Entity/ShippingCompany.php b/httpdocs/src/Entity/ShippingCompany.php new file mode 100644 index 0000000..2a8e5b2 --- /dev/null +++ b/httpdocs/src/Entity/ShippingCompany.php @@ -0,0 +1,63 @@ +name = $name; + $this->createdAt = new DateTimeImmutable(); + $this->vessels = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): string + { + return $this->name; + } + + public function setName(string $name): self + { + $this->name = $name; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + public function getVessels(): Collection + { + return $this->vessels; + } + +} \ No newline at end of file diff --git a/httpdocs/src/Entity/Trip.php b/httpdocs/src/Entity/Trip.php new file mode 100644 index 0000000..24f2e82 --- /dev/null +++ b/httpdocs/src/Entity/Trip.php @@ -0,0 +1,169 @@ +vessel = $vessel; + $this->pilotReference = $pilotageReference; + $this->startLocation = $startLocation; + $this->endLocation = $endLocation; + $this->startDate = $startDate; + $this->endDate = $endDate; + $this->createdAt = new DateTimeImmutable(); + $this->tripLocations = new ArrayCollection(); + $this->userTrips = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getVessel(): Vessel + { + return $this->vessel; + } + + public function setVessel(Vessel $vessel): self + { + $this->vessel = $vessel; + return $this; + } + + public function getPilotReference(): string + { + return $this->pilotReference; + } + + public function setPilotReference(string $pilotReference): self + { + $this->pilotReference = $pilotReference; + return $this; + } + + public function getCaptainName(): ?string + { + return $this->captainName; + } + + public function setCaptainName(?string $captainName): self + { + $this->captainName = $captainName; + return $this; + } + + public function getStartLocation(): Location + { + return $this->startLocation; + } + + public function setStartLocation(Location $startLocation): self + { + $this->startLocation = $startLocation; + return $this; + } + + public function getEndLocation(): Location + { + return $this->endLocation; + } + + public function setEndLocation(Location $endLocation): self + { + $this->endLocation = $endLocation; + return $this; + } + + public function getStartDate(): DateTimeImmutable + { + return $this->startDate; + } + + public function setStartDate(DateTimeImmutable $startDate): self + { + $this->startDate = $startDate; + return $this; + } + + public function getEndDate(): DateTimeImmutable + { + return $this->endDate; + } + + public function setEndDate(DateTimeImmutable $endDate): self + { + $this->endDate = $endDate; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + public function getTripLocations(): Collection + { + return $this->tripLocations; + } + + public function getUserTrips(): Collection + { + return $this->userTrips; + } +} \ No newline at end of file diff --git a/httpdocs/src/Entity/TripLocation.php b/httpdocs/src/Entity/TripLocation.php new file mode 100644 index 0000000..12a7301 --- /dev/null +++ b/httpdocs/src/Entity/TripLocation.php @@ -0,0 +1,83 @@ +trip = $trip; + $this->location = $location; + $this->date = $date; + $this->createdAt = new DateTimeImmutable(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTrip(): Trip + { + return $this->trip; + } + + public function setTrip(Trip $trip): self + { + $this->trip = $trip; + return $this; + } + + public function getLocation(): Location + { + return $this->location; + } + + public function setLocation(Location $location): self + { + $this->location = $location; + return $this; + } + + public function getDate(): DateTimeImmutable + { + return $this->date; + } + + public function setDate(DateTimeImmutable $date): self + { + $this->date = $date; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } +} \ No newline at end of file diff --git a/httpdocs/src/Entity/UserTrip.php b/httpdocs/src/Entity/UserTrip.php new file mode 100644 index 0000000..bc8ac5c --- /dev/null +++ b/httpdocs/src/Entity/UserTrip.php @@ -0,0 +1,176 @@ +trip = $trip; + $this->user = $user; + $this->captainName = $captainName; + $this->startDate = $startDate; + $this->endDate = $endDate; + $this->createdAt = new DateTimeImmutable(); + $this->tripLocations = new ArrayCollection(); + $this->workLogs = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTrip(): Trip + { + return $this->trip; + } + + public function setTrip(Trip $trip): self + { + $this->trip = $trip; + return $this; + } + + public function getUser(): User + { + return $this->user; + } + + public function setUser(User $user): self + { + $this->user = $user; + return $this; + } + + public function getCaptainName(): string + { + return $this->captainName; + } + + public function setCaptainName(string $captainName): self + { + $this->captainName = $captainName; + return $this; + } + + public function getStartDate(): DateTimeImmutable + { + return $this->startDate; + } + + public function setStartDate(DateTimeImmutable $startDate): self + { + $this->startDate = $startDate; + return $this; + } + + public function getEndDate(): DateTimeImmutable + { + return $this->endDate; + } + + public function setEndDate(DateTimeImmutable $endDate): self + { + $this->endDate = $endDate; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + public function getTripLocations(): Collection + { + return $this->tripLocations; + } + + public function addTripLocation(UserTripLocation $tripLocation): self + { + if (!$this->tripLocations->contains($tripLocation)) { + $this->tripLocations->add($tripLocation); + $tripLocation->setUserTrip($this); + } + return $this; + } + + public function removeTripLocation(UserTripLocation $tripLocation): self + { + if ($this->tripLocations->removeElement($tripLocation)) { + if ($tripLocation->getUserTrip() === $this) { + $tripLocation->setUserTrip(null); + } + } + return $this; + } + + public function getWorkLogs(): Collection + { + return $this->workLogs; + } + + public function addWorkLog(UserTripWorkLog $workLog): self + { + if (!$this->workLogs->contains($workLog)) { + $this->workLogs->add($workLog); + $workLog->setUserTrip($this); + } + return $this; + } + + public function removeWorkLog(UserTripWorkLog $workLog): self + { + if ($this->workLogs->removeElement($workLog)) { + if ($workLog->getUserTrip() === $this) { + $workLog->setUserTrip(null); + } + } + return $this; + } +} \ No newline at end of file diff --git a/httpdocs/src/Entity/UserTripLocation.php b/httpdocs/src/Entity/UserTripLocation.php new file mode 100644 index 0000000..6a22d96 --- /dev/null +++ b/httpdocs/src/Entity/UserTripLocation.php @@ -0,0 +1,83 @@ +userTrip = $userTrip; + $this->location = $location; + $this->plannedDate = $plannedDate; + $this->createdAt = new DateTimeImmutable(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getUserTrip(): UserTrip + { + return $this->userTrip; + } + + public function setUserTrip(UserTrip $userTrip): self + { + $this->userTrip = $userTrip; + return $this; + } + + public function getLocation(): Location + { + return $this->location; + } + + public function setLocation(Location $location): self + { + $this->location = $location; + return $this; + } + + public function getPlannedDate(): DateTimeImmutable + { + return $this->plannedDate; + } + + public function setPlannedDate(DateTimeImmutable $plannedDate): self + { + $this->plannedDate = $plannedDate; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } +} \ No newline at end of file diff --git a/httpdocs/src/Entity/UserTripWorkLog.php b/httpdocs/src/Entity/UserTripWorkLog.php new file mode 100644 index 0000000..aecd2be --- /dev/null +++ b/httpdocs/src/Entity/UserTripWorkLog.php @@ -0,0 +1,119 @@ +userTrip = $userTrip; + $this->startLocation = $startLocation; + $this->endLocation = $endLocation; + $this->startDate = $startDate; + $this->endDate = $endDate; + $this->createdAt = new DateTimeImmutable(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getUserTrip(): UserTrip + { + return $this->userTrip; + } + + public function setUserTrip(UserTrip $userTrip): self + { + $this->userTrip = $userTrip; + return $this; + } + + public function getStartLocation(): Location + { + return $this->startLocation; + } + + public function setStartLocation(Location $startLocation): self + { + $this->startLocation = $startLocation; + return $this; + } + + public function getEndLocation(): Location + { + return $this->endLocation; + } + + public function setEndLocation(Location $endLocation): self + { + $this->endLocation = $endLocation; + return $this; + } + + public function getStartDate(): DateTimeImmutable + { + return $this->startDate; + } + + public function setStartDate(DateTimeImmutable $startDate): self + { + $this->startDate = $startDate; + return $this; + } + + public function getEndDate(): DateTimeImmutable + { + return $this->endDate; + } + + public function setEndDate(DateTimeImmutable $endDate): self + { + $this->endDate = $endDate; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } +} \ No newline at end of file diff --git a/httpdocs/src/Entity/Vessel.php b/httpdocs/src/Entity/Vessel.php new file mode 100644 index 0000000..b11fbd0 --- /dev/null +++ b/httpdocs/src/Entity/Vessel.php @@ -0,0 +1,78 @@ +company = $company; + $this->name = $name; + $this->createdAt = new DateTimeImmutable(); + $this->trips = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getCompany(): ShippingCompany + { + return $this->company; + } + + public function setCompany(ShippingCompany $company): self + { + $this->company = $company; + return $this; + } + + public function getName(): string + { + return $this->name; + } + + public function setName(string $name): self + { + $this->name = $name; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + public function getTrips(): Collection + { + return $this->trips; + } +} \ No newline at end of file diff --git a/httpdocs/src/Entity/Zone.php b/httpdocs/src/Entity/Zone.php new file mode 100644 index 0000000..7949049 --- /dev/null +++ b/httpdocs/src/Entity/Zone.php @@ -0,0 +1,62 @@ +name = $name; + $this->createdAt = new DateTimeImmutable(); + $this->locations = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): string + { + return $this->name; + } + + public function setName(string $name): self + { + $this->name = $name; + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + public function getLocations(): Collection + { + return $this->locations; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/LocationApiToEntityMapper.php b/httpdocs/src/Mapper/LocationApiToEntityMapper.php new file mode 100644 index 0000000..1e33181 --- /dev/null +++ b/httpdocs/src/Mapper/LocationApiToEntityMapper.php @@ -0,0 +1,59 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('Location not found'); + } + return $entity; + } + + // For new locations, we need the zone + if (!$dto->zone?->id) { + throw new \Exception('Zone is required for new locations'); + } + + $zone = $this->zoneRepository->find($dto->zone->id); + if (!$zone) { + throw new \Exception('Zone not found'); + } + + return new Location($zone, $dto->name); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof LocationApi); + assert($entity instanceof Location); + + $entity->setName($dto->name); + + return $entity; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/LocationEntityToApiMapper.php b/httpdocs/src/Mapper/LocationEntityToApiMapper.php new file mode 100644 index 0000000..71f080a --- /dev/null +++ b/httpdocs/src/Mapper/LocationEntityToApiMapper.php @@ -0,0 +1,49 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof Location); + assert($dto instanceof LocationApi); + + $dto->name = $entity->getName(); + $dto->createdAt = $entity->getCreatedAt(); + + $dto->zone = $this->microMapper->map($entity->getZone(), ZoneApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->zoneName = $dto->zone->name; + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/ShippingCompanyApiToEntityMapper.php b/httpdocs/src/Mapper/ShippingCompanyApiToEntityMapper.php new file mode 100644 index 0000000..a08f6f6 --- /dev/null +++ b/httpdocs/src/Mapper/ShippingCompanyApiToEntityMapper.php @@ -0,0 +1,43 @@ +id ? $this->repository->find($dto->id) : new ShippingCompany($dto->name); + if ($dto->id && !$entity) { + throw new \Exception('ShippingCompany not found'); + } + + return $entity; + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof ShippingCompanyApi); + assert($entity instanceof ShippingCompany); + + $entity->setName($dto->name); + + return $entity; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/ShippingCompanyEntityToApiMapper.php b/httpdocs/src/Mapper/ShippingCompanyEntityToApiMapper.php new file mode 100644 index 0000000..57c5fa9 --- /dev/null +++ b/httpdocs/src/Mapper/ShippingCompanyEntityToApiMapper.php @@ -0,0 +1,42 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof ShippingCompany); + assert($dto instanceof ShippingCompanyApi); + + $dto->name = $entity->getName(); + $dto->createdAt = $entity->getCreatedAt(); + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/TripApiToEntityMapper.php b/httpdocs/src/Mapper/TripApiToEntityMapper.php new file mode 100644 index 0000000..f85a7db --- /dev/null +++ b/httpdocs/src/Mapper/TripApiToEntityMapper.php @@ -0,0 +1,84 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('Trip not found'); + } + return $entity; + } + + // For new trips, we need the vessel and locations + if (!$dto->vessel?->id) { + throw new \Exception('Vessel is required for new trips'); + } + if (!$dto->startLocation?->id || !$dto->endLocation?->id) { + throw new \Exception('Start and end locations are required for new trips'); + } + + $vessel = $this->vesselRepository->find($dto->vessel->id); + if (!$vessel) { + throw new \Exception('Vessel not found'); + } + + $startLocation = $this->locationRepository->find($dto->startLocation->id); + if (!$startLocation) { + throw new \Exception('Start location not found'); + } + + $endLocation = $this->locationRepository->find($dto->endLocation->id); + if (!$endLocation) { + throw new \Exception('End location not found'); + } + + return new Trip( + $vessel, + $dto->pilotReference, + $startLocation, + $endLocation, + $dto->startDate, + $dto->endDate + ); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof TripApi); + assert($entity instanceof Trip); + + $entity->setPilotReference($dto->pilotReference); + $entity->setCaptainName($dto->captainName); + $entity->setStartDate($dto->startDate); + $entity->setEndDate($dto->endDate); + + return $entity; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/TripEntityToApiMapper.php b/httpdocs/src/Mapper/TripEntityToApiMapper.php new file mode 100644 index 0000000..ab16054 --- /dev/null +++ b/httpdocs/src/Mapper/TripEntityToApiMapper.php @@ -0,0 +1,60 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof Trip); + assert($dto instanceof TripApi); + + $dto->pilotReference = $entity->getPilotReference(); + $dto->captainName = $entity->getCaptainName(); + $dto->startDate = $entity->getStartDate(); + $dto->endDate = $entity->getEndDate(); + $dto->createdAt = $entity->getCreatedAt(); + + // Map related entities + $dto->vessel = $this->microMapper->map($entity->getVessel(), VesselApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->startLocation = $this->microMapper->map($entity->getStartLocation(), LocationApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->endLocation = $this->microMapper->map($entity->getEndLocation(), LocationApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/TripLocationApiToEntityMapper.php b/httpdocs/src/Mapper/TripLocationApiToEntityMapper.php new file mode 100644 index 0000000..a5fbef2 --- /dev/null +++ b/httpdocs/src/Mapper/TripLocationApiToEntityMapper.php @@ -0,0 +1,66 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('TripLocation not found'); + } + return $entity; + } + + // For new trip locations, we need trip and location + if (!$dto->trip?->id || !$dto->location?->id) { + throw new \Exception('Trip and Location are required for new trip locations'); + } + + $trip = $this->tripRepository->find($dto->trip->id); + if (!$trip) { + throw new \Exception('Trip not found'); + } + + $location = $this->locationRepository->find($dto->location->id); + if (!$location) { + throw new \Exception('Location not found'); + } + + return new TripLocation($trip, $location, $dto->date); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof TripLocationApi); + assert($entity instanceof TripLocation); + + $entity->setDate($dto->date); + + return $entity; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/TripLocationEntityToApiMapper.php b/httpdocs/src/Mapper/TripLocationEntityToApiMapper.php new file mode 100644 index 0000000..45df511 --- /dev/null +++ b/httpdocs/src/Mapper/TripLocationEntityToApiMapper.php @@ -0,0 +1,52 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof TripLocation); + assert($dto instanceof TripLocationApi); + + $dto->date = $entity->getDate(); + $dto->createdAt = $entity->getCreatedAt(); + + $dto->trip = $this->microMapper->map($entity->getTrip(), TripApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->location = $this->microMapper->map($entity->getLocation(), LocationApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/UserTripApiToEntityMapper.php b/httpdocs/src/Mapper/UserTripApiToEntityMapper.php new file mode 100644 index 0000000..9a8d270 --- /dev/null +++ b/httpdocs/src/Mapper/UserTripApiToEntityMapper.php @@ -0,0 +1,74 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('UserTrip not found'); + } + return $entity; + } + + // For new user trips, we need trip and user + if (!$dto->trip?->id || !$dto->user?->id) { + throw new \Exception('Trip and User are required for new user trips'); + } + + $trip = $this->tripRepository->find($dto->trip->id); + if (!$trip) { + throw new \Exception('Trip not found'); + } + + $user = $this->userRepository->find($dto->user->id); + if (!$user) { + throw new \Exception('User not found'); + } + + return new UserTrip( + $trip, + $user, + $dto->captainName, + $dto->startDate, + $dto->endDate + ); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof UserTripApi); + assert($entity instanceof UserTrip); + + $entity->setCaptainName($dto->captainName); + $entity->setStartDate($dto->startDate); + $entity->setEndDate($dto->endDate); + + return $entity; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/UserTripEntityToApiMapper.php b/httpdocs/src/Mapper/UserTripEntityToApiMapper.php new file mode 100644 index 0000000..ff6924a --- /dev/null +++ b/httpdocs/src/Mapper/UserTripEntityToApiMapper.php @@ -0,0 +1,54 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof UserTrip); + assert($dto instanceof UserTripApi); + + $dto->captainName = $entity->getCaptainName(); + $dto->startDate = $entity->getStartDate(); + $dto->endDate = $entity->getEndDate(); + $dto->createdAt = $entity->getCreatedAt(); + + $dto->trip = $this->microMapper->map($entity->getTrip(), TripApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->user = $this->microMapper->map($entity->getUser(), UserApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/UserTripLocationApiToEntityMapper.php b/httpdocs/src/Mapper/UserTripLocationApiToEntityMapper.php new file mode 100644 index 0000000..ed26739 --- /dev/null +++ b/httpdocs/src/Mapper/UserTripLocationApiToEntityMapper.php @@ -0,0 +1,70 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('UserTripLocation not found'); + } + return $entity; + } + + // For new user trip locations, we need userTrip and location + if (!$dto->userTrip?->id || !$dto->location?->id) { + throw new \Exception('UserTrip and Location are required for new user trip locations'); + } + + $userTrip = $this->userTripRepository->find($dto->userTrip->id); + if (!$userTrip) { + throw new \Exception('UserTrip not found'); + } + + $location = $this->locationRepository->find($dto->location->id); + if (!$location) { + throw new \Exception('Location not found'); + } + + return new UserTripLocation( + $userTrip, + $location, + $dto->plannedDate + ); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof UserTripLocationApi); + assert($entity instanceof UserTripLocation); + + $entity->setPlannedDate($dto->plannedDate); + + return $entity; + } +} diff --git a/httpdocs/src/Mapper/UserTripLocationEntityToApiMapper.php b/httpdocs/src/Mapper/UserTripLocationEntityToApiMapper.php new file mode 100644 index 0000000..fa73309 --- /dev/null +++ b/httpdocs/src/Mapper/UserTripLocationEntityToApiMapper.php @@ -0,0 +1,52 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof UserTripLocation); + assert($dto instanceof UserTripLocationApi); + + $dto->plannedDate = $entity->getPlannedDate(); + $dto->createdAt = $entity->getCreatedAt(); + + $dto->userTrip = $this->microMapper->map($entity->getUserTrip(), UserTripApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->location = $this->microMapper->map($entity->getLocation(), LocationApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/UserTripWorkLogApiToEntityMapper.php b/httpdocs/src/Mapper/UserTripWorkLogApiToEntityMapper.php new file mode 100644 index 0000000..2238cea --- /dev/null +++ b/httpdocs/src/Mapper/UserTripWorkLogApiToEntityMapper.php @@ -0,0 +1,78 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('UserTripWorkLog not found'); + } + return $entity; + } + + // For new work logs, we need userTrip and both locations + if (!$dto->userTrip?->id || !$dto->startLocation?->id || !$dto->endLocation?->id) { + throw new \Exception('UserTrip, start location and end location are required for new work logs'); + } + + $userTrip = $this->userTripRepository->find($dto->userTrip->id); + if (!$userTrip) { + throw new \Exception('UserTrip not found'); + } + + $startLocation = $this->locationRepository->find($dto->startLocation->id); + if (!$startLocation) { + throw new \Exception('Start location not found'); + } + + $endLocation = $this->locationRepository->find($dto->endLocation->id); + if (!$endLocation) { + throw new \Exception('End location not found'); + } + + return new UserTripWorkLog( + $userTrip, + $startLocation, + $endLocation, + $dto->startDate, + $dto->endDate + ); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof UserTripWorkLogApi); + assert($entity instanceof UserTripWorkLog); + + $entity->setStartDate($dto->startDate); + $entity->setEndDate($dto->endDate); + + return $entity; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/UserTripWorkLogEntityToApiMapper.php b/httpdocs/src/Mapper/UserTripWorkLogEntityToApiMapper.php new file mode 100644 index 0000000..93dd37b --- /dev/null +++ b/httpdocs/src/Mapper/UserTripWorkLogEntityToApiMapper.php @@ -0,0 +1,57 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof UserTripWorkLog); + assert($dto instanceof UserTripWorkLogApi); + + $dto->startDate = $entity->getStartDate(); + $dto->endDate = $entity->getEndDate(); + $dto->createdAt = $entity->getCreatedAt(); + + $dto->userTrip = $this->microMapper->map($entity->getUserTrip(), UserTripApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->startLocation = $this->microMapper->map($entity->getStartLocation(), LocationApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + $dto->endLocation = $this->microMapper->map($entity->getEndLocation(), LocationApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/VesselApiToEntityMapper.php b/httpdocs/src/Mapper/VesselApiToEntityMapper.php new file mode 100644 index 0000000..772b50b --- /dev/null +++ b/httpdocs/src/Mapper/VesselApiToEntityMapper.php @@ -0,0 +1,59 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('Vessel not found'); + } + return $entity; + } + + // For new vessels, we need the shipping company + if (!$dto->company?->id) { + throw new \Exception('ShippingCompany is required for new vessels'); + } + + $company = $this->shippingCompanyRepository->find($dto->company->id); + if (!$company) { + throw new \Exception('ShippingCompany not found'); + } + + return new Vessel($company, $dto->name); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof VesselApi); + assert($entity instanceof Vessel); + + $entity->setName($dto->name); + + return $entity; + } +} diff --git a/httpdocs/src/Mapper/VesselEntityToApiMapper.php b/httpdocs/src/Mapper/VesselEntityToApiMapper.php new file mode 100644 index 0000000..66f490f --- /dev/null +++ b/httpdocs/src/Mapper/VesselEntityToApiMapper.php @@ -0,0 +1,47 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof Vessel); + assert($dto instanceof VesselApi); + + $dto->name = $entity->getName(); + $dto->createdAt = $entity->getCreatedAt(); + + $dto->company = $this->microMapper->map($entity->getCompany(), ShippingCompanyApi::class, [ + MicroMapperInterface::MAX_DEPTH => 1, + ]); + + return $dto; + } +} diff --git a/httpdocs/src/Mapper/ZoneApiToEntityMapper.php b/httpdocs/src/Mapper/ZoneApiToEntityMapper.php new file mode 100644 index 0000000..201e363 --- /dev/null +++ b/httpdocs/src/Mapper/ZoneApiToEntityMapper.php @@ -0,0 +1,46 @@ +id) { + $entity = $this->repository->find($dto->id); + if (!$entity) { + throw new \Exception('Zone not found'); + } + return $entity; + } + + return new Zone($dto->name); + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + $entity = $to; + assert($dto instanceof ZoneApi); + assert($entity instanceof Zone); + + $entity->setName($dto->name); + + return $entity; + } +} \ No newline at end of file diff --git a/httpdocs/src/Mapper/ZoneEntityToApiMapper.php b/httpdocs/src/Mapper/ZoneEntityToApiMapper.php new file mode 100644 index 0000000..0095927 --- /dev/null +++ b/httpdocs/src/Mapper/ZoneEntityToApiMapper.php @@ -0,0 +1,36 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof Zone); + assert($dto instanceof ZoneApi); + + $dto->name = $entity->getName(); + $dto->createdAt = $entity->getCreatedAt(); + + return $dto; + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/LocationRepository.php b/httpdocs/src/Repository/LocationRepository.php new file mode 100644 index 0000000..912c2d0 --- /dev/null +++ b/httpdocs/src/Repository/LocationRepository.php @@ -0,0 +1,58 @@ +getEntityManager()->persist($location); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Location $location, bool $flush = false): void + { + $this->getEntityManager()->remove($location); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return Location[] + */ + public function findByZone(Zone $zone): array + { + return $this->createQueryBuilder('l') + ->andWhere('l.zone = :zone') + ->setParameter('zone', $zone) + ->orderBy('l.name', 'ASC') + ->getQuery() + ->getResult(); + } + + public function findOneByNameAndZone(string $name, Zone $zone): ?Location + { + return $this->createQueryBuilder('l') + ->andWhere('l.name = :name') + ->andWhere('l.zone = :zone') + ->setParameter('name', $name) + ->setParameter('zone', $zone) + ->getQuery() + ->getOneOrNullResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/ShippingCompanyRepository.php b/httpdocs/src/Repository/ShippingCompanyRepository.php new file mode 100644 index 0000000..c31ac64 --- /dev/null +++ b/httpdocs/src/Repository/ShippingCompanyRepository.php @@ -0,0 +1,53 @@ +getEntityManager()->persist($company); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(ShippingCompany $company, bool $flush = false): void + { + $this->getEntityManager()->remove($company); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return ShippingCompany[] + */ + public function findAllOrderedByName(): array + { + return $this->createQueryBuilder('sc') + ->orderBy('sc.name', 'ASC') + ->getQuery() + ->getResult(); + } + + public function findOneByName(string $name): ?ShippingCompany + { + return $this->createQueryBuilder('sc') + ->andWhere('sc.name = :name') + ->setParameter('name', $name) + ->getQuery() + ->getOneOrNullResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/TripLocationRepository.php b/httpdocs/src/Repository/TripLocationRepository.php new file mode 100644 index 0000000..d0daafd --- /dev/null +++ b/httpdocs/src/Repository/TripLocationRepository.php @@ -0,0 +1,77 @@ +getEntityManager()->persist($tripLocation); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(TripLocation $tripLocation, bool $flush = false): void + { + $this->getEntityManager()->remove($tripLocation); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return TripLocation[] + */ + public function findByTrip(Trip $trip): array + { + return $this->createQueryBuilder('tl') + ->andWhere('tl.trip = :trip') + ->setParameter('trip', $trip) + ->orderBy('tl.date', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return TripLocation[] + */ + public function findByLocation(Location $location): array + { + return $this->createQueryBuilder('tl') + ->andWhere('tl.location = :location') + ->setParameter('location', $location) + ->orderBy('tl.date', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return TripLocation[] + */ + public function findByDateRange(DateTimeImmutable $start, DateTimeImmutable $end): array + { + return $this->createQueryBuilder('tl') + ->andWhere('tl.date >= :start') + ->andWhere('tl.date <= :end') + ->setParameter('start', $start) + ->setParameter('end', $end) + ->orderBy('tl.date', 'ASC') + ->getQuery() + ->getResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/TripRepository.php b/httpdocs/src/Repository/TripRepository.php new file mode 100644 index 0000000..219ace4 --- /dev/null +++ b/httpdocs/src/Repository/TripRepository.php @@ -0,0 +1,73 @@ +getEntityManager()->persist($trip); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Trip $trip, bool $flush = false): void + { + $this->getEntityManager()->remove($trip); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return Trip[] + */ + public function findByVessel(Vessel $vessel): array + { + return $this->createQueryBuilder('t') + ->andWhere('t.vessel = :vessel') + ->setParameter('vessel', $vessel) + ->orderBy('t.startDate', 'DESC') + ->getQuery() + ->getResult(); + } + + /** + * @return Trip[] + */ + public function findByDateRange(DateTimeImmutable $start, DateTimeImmutable $end): array + { + return $this->createQueryBuilder('t') + ->andWhere('t.startDate >= :start') + ->andWhere('t.endDate <= :end') + ->setParameter('start', $start) + ->setParameter('end', $end) + ->orderBy('t.startDate', 'ASC') + ->getQuery() + ->getResult(); + } + + public function findByPilotReference(string $pilotReference): ?Trip + { + return $this->createQueryBuilder('t') + ->andWhere('t.pilotReference = :pilotReference') + ->setParameter('pilotReference', $pilotReference) + ->getQuery() + ->getOneOrNullResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/UserTripLocationRepository.php b/httpdocs/src/Repository/UserTripLocationRepository.php new file mode 100644 index 0000000..e8c23d7 --- /dev/null +++ b/httpdocs/src/Repository/UserTripLocationRepository.php @@ -0,0 +1,77 @@ +getEntityManager()->persist($userTripLocation); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(UserTripLocation $userTripLocation, bool $flush = false): void + { + $this->getEntityManager()->remove($userTripLocation); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return UserTripLocation[] + */ + public function findByUserTrip(UserTrip $userTrip): array + { + return $this->createQueryBuilder('utl') + ->andWhere('utl.userTrip = :userTrip') + ->setParameter('userTrip', $userTrip) + ->orderBy('utl.plannedDate', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return UserTripLocation[] + */ + public function findByLocation(Location $location): array + { + return $this->createQueryBuilder('utl') + ->andWhere('utl.location = :location') + ->setParameter('location', $location) + ->orderBy('utl.plannedDate', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return UserTripLocation[] + */ + public function findByDateRange(DateTimeImmutable $start, DateTimeImmutable $end): array + { + return $this->createQueryBuilder('utl') + ->andWhere('utl.plannedDate >= :start') + ->andWhere('utl.plannedDate <= :end') + ->setParameter('start', $start) + ->setParameter('end', $end) + ->orderBy('utl.plannedDate', 'ASC') + ->getQuery() + ->getResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/UserTripRepository.php b/httpdocs/src/Repository/UserTripRepository.php new file mode 100644 index 0000000..331ab80 --- /dev/null +++ b/httpdocs/src/Repository/UserTripRepository.php @@ -0,0 +1,77 @@ +getEntityManager()->persist($userTrip); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(UserTrip $userTrip, bool $flush = false): void + { + $this->getEntityManager()->remove($userTrip); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return UserTrip[] + */ + public function findByTrip(Trip $trip): array + { + return $this->createQueryBuilder('ut') + ->andWhere('ut.trip = :trip') + ->setParameter('trip', $trip) + ->orderBy('ut.startDate', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return UserTrip[] + */ + public function findByUser(User $user): array + { + return $this->createQueryBuilder('ut') + ->andWhere('ut.user = :user') + ->setParameter('user', $user) + ->orderBy('ut.startDate', 'DESC') + ->getQuery() + ->getResult(); + } + + /** + * @return UserTrip[] + */ + public function findByDateRange(DateTimeImmutable $start, DateTimeImmutable $end): array + { + return $this->createQueryBuilder('ut') + ->andWhere('ut.startDate >= :start') + ->andWhere('ut.endDate <= :end') + ->setParameter('start', $start) + ->setParameter('end', $end) + ->orderBy('ut.startDate', 'ASC') + ->getQuery() + ->getResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/UserTripWorkLogRepository.php b/httpdocs/src/Repository/UserTripWorkLogRepository.php new file mode 100644 index 0000000..57a9a36 --- /dev/null +++ b/httpdocs/src/Repository/UserTripWorkLogRepository.php @@ -0,0 +1,90 @@ +getEntityManager()->persist($workLog); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(UserTripWorkLog $workLog, bool $flush = false): void + { + $this->getEntityManager()->remove($workLog); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return UserTripWorkLog[] + */ + public function findByUserTrip(UserTrip $userTrip): array + { + return $this->createQueryBuilder('wl') + ->andWhere('wl.userTrip = :userTrip') + ->setParameter('userTrip', $userTrip) + ->orderBy('wl.startDate', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return UserTripWorkLog[] + */ + public function findByStartLocation(Location $location): array + { + return $this->createQueryBuilder('wl') + ->andWhere('wl.startLocation = :location') + ->setParameter('location', $location) + ->orderBy('wl.startDate', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return UserTripWorkLog[] + */ + public function findByEndLocation(Location $location): array + { + return $this->createQueryBuilder('wl') + ->andWhere('wl.endLocation = :location') + ->setParameter('location', $location) + ->orderBy('wl.startDate', 'ASC') + ->getQuery() + ->getResult(); + } + + /** + * @return UserTripWorkLog[] + */ + public function findByDateRange(DateTimeImmutable $start, DateTimeImmutable $end): array + { + return $this->createQueryBuilder('wl') + ->andWhere('wl.startDate >= :start') + ->andWhere('wl.endDate <= :end') + ->setParameter('start', $start) + ->setParameter('end', $end) + ->orderBy('wl.startDate', 'ASC') + ->getQuery() + ->getResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/VesselRepository.php b/httpdocs/src/Repository/VesselRepository.php new file mode 100644 index 0000000..6ca436a --- /dev/null +++ b/httpdocs/src/Repository/VesselRepository.php @@ -0,0 +1,58 @@ +getEntityManager()->persist($vessel); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Vessel $vessel, bool $flush = false): void + { + $this->getEntityManager()->remove($vessel); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * @return Vessel[] + */ + public function findByCompany(ShippingCompany $company): array + { + return $this->createQueryBuilder('v') + ->andWhere('v.company = :company') + ->setParameter('company', $company) + ->orderBy('v.name', 'ASC') + ->getQuery() + ->getResult(); + } + + public function findOneByNameAndCompany(string $name, ShippingCompany $company): ?Vessel + { + return $this->createQueryBuilder('v') + ->andWhere('v.name = :name') + ->andWhere('v.company = :company') + ->setParameter('name', $name) + ->setParameter('company', $company) + ->getQuery() + ->getOneOrNullResult(); + } +} \ No newline at end of file diff --git a/httpdocs/src/Repository/ZoneRepository.php b/httpdocs/src/Repository/ZoneRepository.php new file mode 100644 index 0000000..3817e4f --- /dev/null +++ b/httpdocs/src/Repository/ZoneRepository.php @@ -0,0 +1,53 @@ +getEntityManager()->persist($zone); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Zone $zone, bool $flush = false): void + { + $this->getEntityManager()->remove($zone); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function findByName(string $name): ?Zone + { + return $this->createQueryBuilder('z') + ->andWhere('z.name = :name') + ->setParameter('name', $name) + ->getQuery() + ->getOneOrNullResult(); + } + + /** + * @return Zone[] + */ + public function findAllOrderedByName(): array + { + return $this->createQueryBuilder('z') + ->orderBy('z.name', 'ASC') + ->getQuery() + ->getResult(); + } +} \ No newline at end of file