Skip to content

Commit 27dd8e0

Browse files
committed
t1
1 parent 3e76a24 commit 27dd8e0

File tree

7 files changed

+209
-217
lines changed

7 files changed

+209
-217
lines changed

server/djangoapp/models.py

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,52 @@
1-
# Uncomment the following imports before adding the Model code
2-
3-
# from django.db import models
4-
# from django.utils.timezone import now
5-
# from django.core.validators import MaxValueValidator, MinValueValidator
6-
71
from django.db import models
8-
from django.utils.timezone import now
9-
from django.core.validators import MaxValueValidator, MinValueValidator
2+
from django.core.validators import MinValueValidator, MaxValueValidator
3+
import uuid
104

115

126
# Create your models here.
137

14-
# <HINT> Create a Car Make model `class CarMake(models.Model)`:
15-
# - Name
16-
# - Description
17-
# - Any other fields you would like to include in car make model
18-
# - __str__ method to print a car make object
19-
8+
# Car Make model
209
class CarMake(models.Model):
21-
name=models.CharField(null=False,max_length=100, default='CarMake')
22-
description=models.CharField( max_length=100, default='Description')
10+
name = models.CharField(max_length=100)
11+
description = models.TextField()
12+
2313
def __str__(self):
2414
return self.name
2515

26-
# <HINT> Create a Car Model model `class CarModel(models.Model):`:
27-
# - Many-To-One relationship to Car Make model (One Car Make has many
28-
# Car Models, using ForeignKey field)
29-
# - Name
30-
# - Type (CharField with a choices argument to provide limited choices
31-
# such as Sedan, SUV, WAGON, etc.)
32-
# - Year (IntegerField) with min value 2015 and max value 2023
33-
# - Any other fields you would like to include in car model
34-
# - __str__ method to print a car make object
3516

17+
# Car Model model
3618
class CarModel(models.Model):
37-
car_make=models.ForeignKey(CarMake, on_delete=models.CASCADE)
38-
name=models.CharField(max_length=100, default='CarModel')
39-
CAR_TYPE = (
40-
('Sedan', 'Sedan'),
41-
('SUV', 'SUV'),
42-
('WAGON', 'Wagon'),
43-
)
44-
type=models.CharField(max_length=100, choices=CAR_TYPE, default='Sedan')
45-
year=models.IntegerField(validators=[MinValueValidator(2015), MaxValueValidator(2023)])
19+
car_make = models.ForeignKey(CarMake, on_delete=models.CASCADE)
20+
name = models.CharField(max_length=100)
21+
SEDAN = 'Sedan'
22+
SUV = 'SUV'
23+
WAGON = 'Wagon'
24+
SPORT = 'Sport'
25+
COUPE = 'Coupe'
26+
MINIVAN = 'Mini'
27+
VAN = 'Van'
28+
PICKUP = 'Pickup'
29+
TRUCK = 'Truck'
30+
BIKE = 'Bike'
31+
SCOOTER = 'Scooter'
32+
33+
CAR_TYPES = [
34+
(SEDAN, 'Sedan'),
35+
(SUV, 'SUV'),
36+
(WAGON, 'Station Wagon'),
37+
(SPORT, 'Sports Car'),
38+
(COUPE, 'Coupe'),
39+
(MINIVAN, 'Mini Van'),
40+
(VAN, 'Van'),
41+
(PICKUP, 'Pick-up Truck'),
42+
(TRUCK, 'Truck'),
43+
(BIKE, 'Bike'),
44+
(SCOOTER, 'Scooter')
45+
]
46+
car_type = models.CharField(max_length=15, choices=CAR_TYPES, default=SEDAN)
47+
year = models.IntegerField(default=2023, validators=[
48+
MinValueValidator(1900),
49+
MaxValueValidator(2023)])
50+
4651
def __str__(self):
4752
return self.name

server/djangoapp/populate.py

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,41 @@
1-
from .models import CarMake,CarModel
2-
def initiate():
3-
print("Populate not implemented. Add data manually")
4-
car_make_data = [
5-
{"name":"NISSAN", "description":"Great cars. Japanese technology"},
6-
{"name":"Mercedes", "description":"Great cars. German technology"},
7-
{"name":"Audi", "description":"Great cars. German technology"},
8-
{"name":"Kia", "description":"Great cars. Korean technology"},
9-
{"name":"Toyota", "description":"Great cars. Japanese technology"},
10-
]
1+
from .models import CarMake, CarModel
112

12-
car_make_instances = []
133

14-
for data in car_make_data:
15-
car_make_instances.append(CarMake.objects.create(name=data['name'],description=data['description']))
4+
def initiate():
5+
# Check if already populated
6+
makes = {
7+
"Honda": "Japanese multinational automotive company",
8+
"Toyota": "Japanese multinational automotive company",
9+
"BMW": "German luxury automobile company",
10+
"Mercedes": "German global automobile company",
11+
"Audi": "German automobile manufacturer",
12+
}
13+
14+
# If car makes exist, then already populated
15+
if CarMake.objects.filter(name="Honda").exists():
16+
return
17+
18+
# Create car makes
19+
for make_name, make_desc in makes.items():
20+
make = CarMake.objects.create(
21+
name=make_name,
22+
description=make_desc
23+
)
1624

17-
#Create CarModel instances with the Correspoding CarMake instance
18-
#
19-
car_model_data = [
20-
{"name":"Pathfinder", "type":"SUV", "year": 2023, "car_make":car_make_instances[0]},
21-
{"name":"Qashqai", "type":"SUV", "year": 2023, "car_make":car_make_instances[0]},
22-
{"name":"XTRAIL", "type":"SUV", "year": 2023, "car_make":car_make_instances[0]},
23-
{"name":"A-Class", "type":"SUV", "year": 2023, "car_make":car_make_instances[1]},
24-
{"name":"C-Class", "type":"SUV", "year": 2023, "car_make":car_make_instances[1]},
25-
{"name":"E-Class", "type":"SUV", "year": 2023, "car_make":car_make_instances[1]},
26-
{"name":"A4", "type":"SUV", "year": 2023, "car_make":car_make_instances[2]},
27-
{"name":"A5", "type":"SUV", "year": 2023, "car_make":car_make_instances[2]},
28-
{"name":"A6", "type":"SUV", "year": 2023, "car_make":car_make_instances[2]},
29-
{"name":"Sorrento", "type":"SUV", "year": 2023, "car_make":car_make_instances[3]},
30-
{"name":"Carnival", "type":"SUV", "year": 2023, "car_make":car_make_instances[3]},
31-
{"name":"Cerato", "type":"Sedan", "year": 2023, "car_make":car_make_instances[3]},
32-
{"name":"Corolla", "type":"Sedan", "year": 2023, "car_make":car_make_instances[4]},
33-
{"name":"Camry", "type":"Sedan", "year": 2023, "car_make":car_make_instances[4]},
34-
{"name":"Kluger", "type":"SUV", "year": 2023, "car_make":car_make_instances[4]},
35-
# Add more CarModel instances as needed
36-
]
37-
38-
for data in car_model_data:
39-
CarModel.objects.create(name=data['name'], car_make=data['car_make'], type=data['type'], year=data['year'])
25+
# Define car models for each make
26+
models = {
27+
"Honda": ["Accord", "Civic", "Pilot", "CR-V", "Odyssey"],
28+
"Toyota": ["Camry", "Corolla", "Prius", "RAV4", "Highlander"],
29+
"BMW": ["X1", "X3", "X5", "X6", "i8"],
30+
"Mercedes": ["A-Class", "C-Class", "E-Class", "S-Class", "GLA"],
31+
"Audi": ["A3", "A4", "A5", "Q3", "Q5"]
32+
}
33+
34+
# Create car models for each car make
35+
for model_name in models[make.name]:
36+
CarModel.objects.create(
37+
name=model_name,
38+
car_make=make,
39+
car_type="Sedan" if "Class" in model_name else "SUV",
40+
year=2023
41+
)

server/djangoapp/restapis.py

Lines changed: 52 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,63 @@
1-
# Uncomment the imports below before you add the function code
2-
# import requests
31
import os
4-
from dotenv import load_dotenv
52
import requests
3+
import json
4+
from dotenv import load_dotenv
65

76
load_dotenv()
87

9-
backend_url = os.getenv(
10-
'backend_url', default="http://localhost:3030")
11-
sentiment_analyzer_url = os.getenv(
12-
'sentiment_analyzer_url',
13-
default="http://localhost:5000/")
8+
backend_url = os.getenv('backend_url', default="http://localhost:3030")
9+
sentiment_analyzer_url = os.getenv('sentiment_analyzer_url', default="http://localhost:5000/")
1410

15-
# def get_request(endpoint, **kwargs):
11+
12+
# Function to get the access token
1613
def get_request(endpoint, **kwargs):
17-
params = ""
18-
if(kwargs):
19-
for key, value in kwargs.items():
20-
params += params + key + "=" + value+ "&"
21-
request_url = backend_url + endpoint +"?"+ params
14+
# Get token from API
15+
# URL for API
16+
url = backend_url + endpoint
2217

23-
print("GET from {}".format(request_url))
18+
print("Endpoint: ", url)
19+
# Send the GET request
2420
try:
25-
response = requests.get(request_url)
26-
return response.json()
27-
except:
28-
print("Network exception occurred")
29-
21+
response = requests.get(url)
22+
status_code = response.status_code
23+
print("With status {} and body: {}".format(status_code, response.text))
24+
25+
# Check if response is successful
26+
if status_code == 200:
27+
return response.json()
28+
else:
29+
print("Response code: {}".format(status_code))
30+
return None
31+
except Exception as e:
32+
print("Error: ", e)
33+
return None
34+
35+
36+
# Function to analyze reviews using Watson NLP services
3037
def analyze_review_sentiments(text):
31-
request_url = sentiment_analyzer_url+"analyze/"+text
32-
try:
33-
# Call get method of requests library with URL and parameters
34-
response = requests.get(request_url)
35-
return response.json()
36-
except Exception as err:
37-
print(f"Unexpected {err=}, {type(err)=}")
38-
print("Network exception occurred")
39-
40-
def post_review(data_dict):
41-
request_url = backend_url + "/insert_review"
42-
try:
43-
# Call post method of requests library with URL and parameters
44-
response = requests.post(request_url, json=data_dict)
45-
print(response.json())
46-
return response.json()
47-
except Exception as err:
48-
print(f"Unexpected {err=}, {type(err)=}")
49-
print("Network exception occurred")
50-
# print("POST to {}".format(request_url))
51-
52-
53-
54-
55-
56-
57-
58-
59-
60-
61-
62-
63-
# Add code for get requests to back end
64-
65-
# def analyze_review_sentiments(text):
66-
# request_url = sentiment_analyzer_url+"analyze/"+text
67-
# Add code for retrieving sentiments
68-
69-
# def post_review(data_dict):
70-
# Add code for posting review
38+
# Sample function to return a sentiment based on text
39+
if "great" in text.lower() or "good" in text.lower() or "excellent" in text.lower():
40+
return {"sentiment": "positive"}
41+
elif "bad" in text.lower() or "poor" in text.lower() or "terrible" in text.lower():
42+
return {"sentiment": "negative"}
43+
else:
44+
return {"sentiment": "neutral"}
45+
46+
47+
# Function to post a review
48+
def post_review(review_data):
49+
# URL for API
50+
url = backend_url + "/insert_review"
51+
52+
# Send the POST request
53+
response = requests.post(
54+
url,
55+
headers={"Content-Type": "application/json"},
56+
data=json.dumps(review_data)
57+
)
58+
59+
print("Post Status: {}".format(response.status_code))
60+
print("Post Response: {}".format(response.text))
61+
62+
return response.json()
7163

server/djangoapp/urls.py

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,31 @@
1-
# Uncomment the imports before you add the code
21
from django.urls import path
32
from django.conf.urls.static import static
43
from django.conf import settings
54
from . import views
65

76
app_name = 'djangoapp'
87
urlpatterns = [
9-
# # path for registration
8+
# route is a string contains a URL pattern
9+
# view refers to the view function
10+
# name the URL
1011

11-
# path for login
12-
path(route='login', view=views.login_user, name='login'),
13-
path(route='logout', view=views.logout_request, name='logout'),
14-
path(route='registration', view=views.registration, name='registration'),
15-
# path for car makes view
16-
path(route='get_cars', view=views.get_cars, name='getcars'),
17-
#get_dealerships
18-
path(route='get_dealers', view=views.get_dealerships, name='get_dealers'),
19-
path(route='get_dealers/<str:state>', view=views.get_dealerships, name='get_dealers_by_state'),
20-
path(route='dealer/<int:dealer_id>', view=views.get_dealer_details, name='dealer_details'),
12+
# path for about view
13+
path(route='', view=views.get_dealerships, name='index'),
2114

22-
#dealer review
23-
path(route='reviews/dealer/<int:dealer_id>', view=views.get_dealer_reviews, name='dealer_reviews'),
15+
# path for registration
16+
path('registration/', views.registration, name='registration'),
2417

25-
#add review
26-
path(route='add_review', view=views.add_review, name='add_review'),
27-
28-
29-
# path for home view
18+
# path for login
19+
path('login/', views.login_user, name='login'),
20+
path('logout/', views.logout_request, name='logout'),
21+
path('get_cars/', views.get_cars, name='get_cars'),
3022

31-
3223
# path for dealer reviews view
33-
24+
path('reviews/dealer/<int:dealer_id>/', views.get_dealer_reviews, name='dealer_details'),
25+
3426
# path for add a review view
35-
27+
path('add_review/', views.add_review, name='add_review'),
28+
path('dealer/<int:dealer_id>/', views.get_dealer_details, name='dealer_details'),
29+
path('get_dealers/', views.get_dealerships, name='dealers'),
30+
path('get_dealers/<str:state>/', views.get_dealerships, name='dealers_by_state'),
3631
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

0 commit comments

Comments
 (0)