2025-04-02 09:31:50 +02:00
2025-04-02 09:32:19 +02:00
2025-04-02 09:29:28 +02:00
2025-04-02 09:32:19 +02:00
2025-04-02 09:28:35 +02:00

PTV Street Ressource Task

  1. 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).
  2. The street data is stored in a Postgres database, and we use EF core to save data there.
  3. 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.
  4. 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.
  5. Add a Docker file and a Kubernetes manifest, so we can deploy it as a service with 3 replicas.
  6. 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 Street

    Creates a new street when given the following format:

    {
      "name": String,
      "capacity": int,
      "geometry": [
        {
          "x": int,
          "y": int
        }
      ]
    }
    
  • DELETE /api/streets/<streetname>: Delete a street

    Deletes the street with the given name.

  • GET /api/streets/<streetname>: Outputs a street

    Returns 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 street

    Adds 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"
    }
    
Description
Take-Home assignment for the PTV-Group. Web-API for an update-able street resource.
Readme 81 KiB
Languages
C# 97.9%
Dockerfile 2.1%