-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblueprint.py
112 lines (85 loc) · 3.13 KB
/
blueprint.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
"""
auth blueprint
"""
from http.client import CREATED, FORBIDDEN, NOT_FOUND, OK
from flask import Blueprint, request
from marshmallow import Schema, fields, validate
from werkzeug.exceptions import Forbidden
from auth.decorator import admin_only, login_required
from auth.function import get_user
from car.service import CarService
from pagination.pagination import create_pagination_options_from_request
from user.service import UserService
from util.validate_request import validate_request
blueprint = Blueprint("car", __name__, url_prefix="/car")
class CarAddDto(Schema):
car_license_plate = fields.Str(
required=True, validate=validate.Length(min=2, max=10)
)
car_type = fields.Str(required=True, validate=validate.Length(min=3, max=10))
class CarUpdateDto(CarAddDto):
car_id = fields.Int(required=True)
class CarDeleteDto(Schema):
car_id = fields.Int(required=True)
class CarSearchDto(Schema):
car_license_plate = fields.Str(
required=True, validate=validate.Length(min=2, max=10)
)
@blueprint.route("/add", methods=["POST"])
@login_required
def add_car():
user = get_user()
data = validate_request(CarAddDto, request)
CarService.add(user, data.car_license_plate, data.car_type)
return {"message": "Car add."}, CREATED
@blueprint.route("/remove", methods=["DELETE"])
@login_required
def remove_car():
user = get_user()
data = validate_request(CarDeleteDto, request)
car = CarService.find_by_id(data.car_id)
if car:
car_owner_check = CarService.is_user_own_car(user, car)
if car_owner_check == True:
CarService.remove(car)
return {"message": "Car delete."}, OK
return {"error": "Forbidden"}, FORBIDDEN
return {"error": "Car not found!"}, NOT_FOUND
@blueprint.route("/list", methods=["GET"])
@login_required
def list_user_car():
response = []
user = get_user()
all_user_cars = CarService.find_all_car_by_user(user)
for car in all_user_cars:
response.append(car.json())
return response
@blueprint.route("/update", methods=["PATCH"])
@login_required
def update_car():
user = get_user()
data = validate_request(CarUpdateDto, request)
car = CarService.find_by_id(data.car_id)
if car.car_owner_id != user.id:
raise Forbidden("Car not owned by user!")
car.car_license_plate = data.car_license_plate
car.car_type = data.car_type
CarService.update(car)
return {"message": "Successfully updated car."}, 200
@blueprint.route("/search", methods=["POST"])
@login_required
def search_car_by_license_plate():
data = validate_request(CarSearchDto, request)
car = CarService.find_by_license_plate(data.car_license_plate)
response = car.json()
response["car_owner"] = UserService.find_by_id(car.car_owner_id).json_shareable()
return response
@blueprint.route("/admin/list", methods=["GET"])
@admin_only
def admin_pagination_car():
pagination_options = create_pagination_options_from_request(request)
result = CarService.admin_pagination_car(pagination_options)
response = []
for obj in result:
response.append(obj.json())
return response