API

API Routes for different parts of the app.

Responses are in JSON format but are portrayed in this documentation as the Python dictionaries used to generate the JSON contained within the source code.

Authentication

Authentication encompasses logging in and signing up.

Logging in

Route: /login Request type: POST and DELETE.

Sending a DELETE request will delete the user.

POST

Parameters: - email, string, required - password, string, required

Response:

{
   "process": "Sign In",
   "result": True,
   "user_id": user.get("user_id"),
   "email": user.get("email"),
   "first_name": user.get("first_name") or user.get("name"),
   "last_name": user.get("last_name") or user.get("lastname"),
   "name": user.get("first_name") or user.get("name"),
   "lastname": user.get("last_name") or user.get("lastname"),
   "access_token": token,
   "token_type": "Bearer",
   "expires_in": JWT_EXPIRES_MINUTES * 60,
}, 200

DELETE

Parameters: Same as POST.

Response (on success):

{
   "process": "Delete User",
   "name": user["name"],
   "result": True
}, 200

Response (on failure):

{"process": "Delete User", "error": "An error occurred while deleting the user"}, 500

Signing up

Creates a new user

POST

Route: /signup

Parameters: - name, string, required - lastname, string, required - email, string, required - password, string, required

Response (on success):

{
   "process": "Sign Up",
   "result": True,
   "user_id": created_user.get("user_id"),
   "first_name": name,
   "last_name": lastname,
   "name": name,
   "lastname": lastname,
   "email": email,
}, 201

Response (on failure):

{
   "process": "Sign Up",
   "result": False,
   "error": "An error occurred during sign up",
}, 500

Car parks (listing and creating)

Methods for listing and creating new car parks.

Route: /car-park

GET

Returns a list of all car parks.

Parameters: None.

Response:

{
   "data": CarParkSchema().dump(car_park_data)
}, 200

POST

Parameters: - name, string, required - spaces, int, required - location, float, required

Response:

{
   "data": CarParkSchema().dump(response.data[0])
}, 201

Reviews

Creating and deleting reviews.

Route: /review

GET

Parameters: - carpark_id, int, required

Response (on success):

{"data": [ReviewSchema().dump(rev) for rev in response.data]}, 200

Response (on failure):

{"error": "Car park does not exist"}

POST

Parameters: - carpark_id, int, required - review, int, required, 0-5 - title, string, required

Response (on success): None

Response (on failure):

{"error": e}, 500

DELETE

Parameters: - review_id, int, required

Response (on success): None.

Response (on failure):

{"error": e}, 500

Searching

Searching only supports GET requests.

Route: /search

GET

Parameters: - query, string, required, e.g. the name of a car park or a particular location - minDistance, float, required - maxDistance, float, required - longitude, float, required - latitude, float, required

Response (on success):

CarParkSchema(many=True).dump(filtered_results)

Response (on failure):

{"error": "Failed to fetch car parks"}

Parking sessions

Route: /parking-session

GET

Get the parking sessions for a user.

Parameters: - user_id, string, required

Response (on success):

{
   "data": [
      ParkingSessionSchema().dump(session)
      for session in response.data
   ]
}

Where ParkingSessionSchema is:

{
   "user_id": str,
   "carpark_id": int,
   "user_rating": int,

   "start_time": int,
   "end_time": int,
   "expiry_time": int,
}
Response (on failure): ::

{“error”: e}

POST

Create a new car parking session.

Parameters: - user_id, int, required - vehicle_id, int, required - carpark_id, int, required - duration, int, required

Response (on success): None.

Response (on failure):

{"error": e}

PUT

Modify a car parking session, either extending or cancelling it.

Parameters: - user_id, int, required - session_id, int, required - action, string, required, extend, cancel - action_data, string

Response (on success): None.

Response (on failure):

{"error": e}

Users

Getting and modifying users.

Route: /users/<string:email>, the email parameter is required for both methods.

GET

Gets the data for a users profile.

Response (on success):

{
   "process": "Get User",
   "user_id": user.get("user_id"),
   "name": user.get("first_name") or user.get("name"),
   "lastname": user.get("last_name") or user.get("lastname"),
   "email": user.get("email"),
   "vehicles": vehicles,
   "payment_methods": payment_methods,
   "result": True,
}

Response (on failure):

{
   "process": "Get User",
   "user_id": None,
   "name": None,
   "lastname": None,
   "email": email,
   "vehicles": [],
   "payment_methods": [],
   "error": "User not found",
   "result": False
}

PUT

Updates the data for a users profile, with the addition of updating vehicle information

Response (on success):

{
"process": "Update User",
"user_id": user_id,
"name": name,
"lastname": lastname,
"email": updated_email or email,
"result": True,
}

Response (on failure):

{
   "process": "Update User",
   "result": False
}