2.1 KiB
2.1 KiB
PTV Street Ressource Task
- Create a service in dotnet. It has a REST API that serves a resource 'street'. A street can be created and deleted. It has a name, a geometry and a capacity (= how many vehicles can use it within a minute).
- The street data is stored in a Postgres database, and we use EF core to save data there.
- Implement an endpoint to add a given single point to the geometry of an existing street on either the beginning or the end, whatever fits better.
- Bonus: Note that this endpoint has a strange behavior from a user perspective when there are race conditions. Please take care of that in the implementation.
- Add a hidden feature flag to decide whether the operation (in bullet point 3.) is done on the database level, using PostGis, or withing the backend code, algorithmically.
- Add a Docker file and a Kubernetes manifest, so we can deploy it as a service with 3 replicas.
- Also create a docker compose file, so we can locally check everything.
Authentication and API documentation is not part of this task.
API
The following functions are supported:
-
POST
/api/streets/: Create new StreetCreates a new street when given the following format:
{ "name": String, "capacity": int, "geometry": [ { "x": int, "y": int } ] } -
DELETE
/api/streets/<streetname>: Delete a streetDeletes the street with the given name.
-
GET
/api/streets/<streetname>: Outputs a streetReturns the street with the given name in the following format:
{ "name": String, "capacity": int, "geometry": [ { "x": int, "y": int } ] } -
PATCH
/api/streets/<streetname>: Add a given point to a streetAdds a point to the end of the given street. Optionally, one can specify the method used for this operation. This can be one of either
"Backend","Database"or with"PostGIS". If a different value is specified, an Error is returned.{ "point": { "x": int, "y": int }, "method": "Backend" | "Database" | "PostGIS" // Optional, default is "Backend" }