API === .. autosummary:: :toctree: generated 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/``, 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 }