Skip to content

Commit 8d7851f

Browse files
committed
t3
1 parent db58687 commit 8d7851f

File tree

6 files changed

+220
-141
lines changed

6 files changed

+220
-141
lines changed

server/djangoapp/models.py

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,49 @@
11
from django.db import models
2-
from django.core.validators import MinValueValidator, MaxValueValidator
3-
4-
5-
# Create your models here.
62

73
# Car Make model
84
class CarMake(models.Model):
95
name = models.CharField(max_length=100)
106
description = models.TextField()
11-
7+
128
def __str__(self):
139
return self.name
1410

15-
1611
# Car Model model
1712
class CarModel(models.Model):
13+
# Define a car make foreign key
1814
car_make = models.ForeignKey(CarMake, on_delete=models.CASCADE)
1915
name = models.CharField(max_length=100)
20-
SEDAN = 'Sedan'
21-
SUV = 'SUV'
22-
WAGON = 'Wagon'
23-
SPORT = 'Sport'
24-
COUPE = 'Coupe'
25-
MINIVAN = 'Mini'
26-
VAN = 'Van'
27-
PICKUP = 'Pickup'
28-
TRUCK = 'Truck'
29-
BIKE = 'Bike'
30-
SCOOTER = 'Scooter'
16+
# Define car model types
17+
SEDAN = 'sedan'
18+
SUV = 'suv'
19+
WAGON = 'wagon'
20+
TRUCK = 'truck'
21+
COUPE = 'coupe'
22+
CONVERTIBLE = 'convertible'
23+
VAN = 'van'
24+
SPORTS = 'sports'
25+
HYBRID = 'hybrid'
26+
ELECTRIC = 'electric'
3127

3228
CAR_TYPES = [
3329
(SEDAN, 'Sedan'),
3430
(SUV, 'SUV'),
35-
(WAGON, 'Station Wagon'),
36-
(SPORT, 'Sports Car'),
31+
(WAGON, 'Wagon'),
32+
(TRUCK, 'Truck'),
3733
(COUPE, 'Coupe'),
38-
(MINIVAN, 'Mini Van'),
34+
(CONVERTIBLE, 'Convertible'),
3935
(VAN, 'Van'),
40-
(PICKUP, 'Pick-up Truck'),
41-
(TRUCK, 'Truck'),
42-
(BIKE, 'Bike'),
43-
(SCOOTER, 'Scooter')
36+
(SPORTS, 'Sports'),
37+
(HYBRID, 'Hybrid'),
38+
(ELECTRIC, 'Electric')
4439
]
45-
car_type = models.CharField(max_length=15, choices=CAR_TYPES, default=SEDAN)
46-
year = models.IntegerField(
47-
default=2023,
48-
validators=[MinValueValidator(1900), MaxValueValidator(2023)]
49-
)
5040

41+
type = models.CharField(
42+
max_length=20,
43+
choices=CAR_TYPES,
44+
default=SEDAN
45+
)
46+
year = models.IntegerField()
47+
5148
def __str__(self):
52-
return self.name
49+
return f"{self.car_make.name} {self.name} {self.year}"

server/djangoapp/populate.py

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
11
import os
2+
import django
23
import json
3-
from .models import CarMake, CarModel
44

5+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproj.settings')
6+
django.setup()
57

6-
def initiate():
7-
# Delete all data from tables
8-
CarModel.objects.all().delete()
9-
CarMake.objects.all().delete()
8+
from djangoapp.models import CarMake, CarModel
109

11-
# Load car makes and models from JSON file
12-
script_dir = os.path.dirname(__file__)
13-
with open(os.path.join(script_dir, 'car_models.json'), 'r') as file:
14-
car_data = json.load(file)
15-
16-
# Create car makes and models
17-
for make_name, models in car_data.items():
18-
# Create car make
19-
car_make = CarMake.objects.create(
20-
name=make_name,
21-
description=f"This is the {make_name} manufacturer"
10+
# Load data from car_makes.json
11+
with open('djangoapp/data/car_makes.json') as file:
12+
car_makes_data = json.load(file)
13+
for make_data in car_makes_data['car_makes']:
14+
make = CarMake.objects.create(
15+
name=make_data['name'],
16+
description=make_data['description']
2217
)
2318

24-
# Create car models for this make
25-
for model in models:
26-
CarModel.objects.create(
27-
car_make=car_make,
28-
name=model['name'],
29-
car_type=model['type'],
30-
year=model.get('year', 2023)
31-
)
19+
# Load data from car_models.json
20+
with open('djangoapp/data/car_models.json') as file:
21+
car_models_data = json.load(file)
22+
for model_data in car_models_data['car_models']:
23+
make = CarMake.objects.get(name=model_data['make'])
24+
CarModel.objects.create(
25+
car_make=make,
26+
name=model_data['name'],
27+
type=model_data['type'],
28+
year=model_data['year']
29+
)

server/djangoapp/restapis.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import requests
22
import json
3-
from .models import CarMake
3+
from .models import CarMake, CarModel
4+
from django.http import JsonResponse
45

56

67
# Create your tests here.
@@ -57,3 +58,59 @@ def post_review(review_json):
5758
print(f"Error: {response.status_code}")
5859
return {"status": "error"}
5960

61+
62+
# Create an API request to the dealership backend
63+
def get_dealers_from_cf(url, **kwargs):
64+
results = []
65+
try:
66+
# Call get dealers API endpoint from backend
67+
response = requests.get(
68+
url,
69+
headers={
70+
'Content-Type': 'application/json'
71+
},
72+
params=kwargs
73+
)
74+
return response.json()
75+
except:
76+
# If there is any error, return empty results
77+
return results
78+
79+
80+
# Create an API request to get dealer reviews from the backend
81+
def get_dealer_reviews_from_cf(url, dealer_id):
82+
results = []
83+
try:
84+
# Call get reviews API endpoint from backend
85+
response = requests.get(
86+
url,
87+
headers={
88+
'Content-Type': 'application/json'
89+
},
90+
params={
91+
'dealerId': dealer_id
92+
}
93+
)
94+
return response.json()
95+
except:
96+
# If there is any error, return empty results
97+
return results
98+
99+
100+
# Create an API request to post a review
101+
def post_request(url, payload, **kwargs):
102+
try:
103+
# Call post review API endpoint from backend
104+
response = requests.post(
105+
url,
106+
headers={
107+
'Content-Type': 'application/json'
108+
},
109+
params=kwargs,
110+
json=payload
111+
)
112+
return response.json()
113+
except:
114+
# If there is any error, return empty JSON
115+
return {}
116+

server/djangoapp/urls.py

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,30 @@
55

66
app_name = 'djangoapp'
77
urlpatterns = [
8-
# route is a string contains a URL pattern
9-
# view refers to the view function
10-
# name the URL
11-
path('', views.registration, name='index'),
12-
13-
# path for registration
14-
path('registration/', views.registration, name='registration'),
8+
# Route to home page
9+
path('', views.get_dealerships, name='index'),
1510

16-
# path for login
17-
path('login/', views.login_user, name='login'),
11+
# Route for dealer reviews
12+
path('dealer/<int:dealer_id>/', views.get_dealer_details, name='dealer_details'),
1813

19-
# path for logout
20-
path('logout/', views.logout_request, name='logout'),
21-
22-
path('get_cars/', views.get_cars, name='get_cars'),
14+
# Route for adding a review
15+
path('dealer/<int:dealer_id>/add_review/', views.add_review, name='add_review'),
2316

24-
# path for dealer reviews view
25-
path('dealer_details/<int:dealer_id>/', views.get_dealer_details, name='dealer_details'),
17+
# API routes
18+
path('api/v1/get_dealers', views.get_dealerships, name='get_dealerships'),
2619

27-
# path for dealers
28-
path('dealerships/', views.get_dealerships, name='dealerships'),
29-
path('dealerships/<str:state>/', views.get_dealerships, name='dealerships_st'),
20+
path(
21+
'api/v1/get_dealer_reviews/<int:dealer_id>/',
22+
views.get_dealer_reviews,
23+
name='dealer_reviews'
24+
),
3025

31-
# path for dealer reviews view
32-
path('dealer_reviews/<int:dealer_id>/', views.get_dealer_reviews, name='dealer_reviews'),
33-
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
26+
path(
27+
'api/v1/post_review/<int:dealer_id>/',
28+
views.add_review,
29+
name='post_review'
30+
),
31+
]
32+
33+
# Serving static files in development
34+
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

0 commit comments

Comments
 (0)