From c2a8e21265548e8c0e72d199a20b504e79394ddb Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:20:51 -0500 Subject: [PATCH 01/29] Update Git Ignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b6e47617de1..d7a2274666b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,8 @@ share/python-wheels/ *.egg-info/ .installed.cfg *.egg -MANIFEST + +.idea/ # PyInstaller # Usually these files are written by a python script from a template From a756109349a56ad269ce561932cf93da2668d271 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:28:51 -0500 Subject: [PATCH 02/29] Settings.py --- server/djangoproj/settings.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/server/djangoproj/settings.py b/server/djangoproj/settings.py index 85edbac6f1b..9f6eb97615d 100644 --- a/server/djangoproj/settings.py +++ b/server/djangoproj/settings.py @@ -28,8 +28,11 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ['localhost', '127.0.0.1','https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] -CSRF_TRUSTED_ORIGINS = ['https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] +ALLOWED_HOSTS = [ + 'localhost', + '127.0.0.1','https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] +CSRF_TRUSTED_ORIGINS = [ + 'https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [], @@ -62,9 +65,9 @@ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ - os.path.join(BASE_DIR,'frontend/static'), - os.path.join(BASE_DIR,'frontend/build'), - os.path.join(BASE_DIR,'frontend/build/static'), + os.path.join(BASE_DIR, 'frontend/static'), + os.path.join(BASE_DIR, 'frontend/build'), + os.path.join(BASE_DIR, 'frontend/build/static'), ], 'APP_DIRS': True, 'OPTIONS': { @@ -139,7 +142,7 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' STATICFILES_DIRS = [ - os.path.join(BASE_DIR,'frontend/static'), - os.path.join(BASE_DIR,'frontend/build'), - os.path.join(BASE_DIR,'frontend/build/static'), + os.path.join(BASE_DIR, 'frontend/static'), + os.path.join(BASE_DIR, 'frontend/build'), + os.path.join(BASE_DIR, 'frontend/build/static'), ] \ No newline at end of file From 5c73768408dc4ca960ff34b83be41e35aa493212 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:30:26 -0500 Subject: [PATCH 03/29] Lint Settings.py --- server/djangoproj/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/djangoproj/settings.py b/server/djangoproj/settings.py index 9f6eb97615d..ed9384ea414 100644 --- a/server/djangoproj/settings.py +++ b/server/djangoproj/settings.py @@ -30,7 +30,8 @@ ALLOWED_HOSTS = [ 'localhost', - '127.0.0.1','https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] + '127.0.0.1', + 'https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] CSRF_TRUSTED_ORIGINS = [ 'https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] From fb5457dba5b6cbd17b22c2a4410a6370d0c55a36 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:34:44 -0500 Subject: [PATCH 04/29] Split --- server/djangoproj/settings.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/djangoproj/settings.py b/server/djangoproj/settings.py index ed9384ea414..141c60af45a 100644 --- a/server/djangoproj/settings.py +++ b/server/djangoproj/settings.py @@ -33,7 +33,9 @@ '127.0.0.1', 'https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] CSRF_TRUSTED_ORIGINS = [ - 'https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] + 'https://nicholassuta-8000.' + 'theianext-0-labs-prod-misc-tools-us-east-0.' + 'proxy.cognitiveclass.ai'] REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [], @@ -146,4 +148,4 @@ os.path.join(BASE_DIR, 'frontend/static'), os.path.join(BASE_DIR, 'frontend/build'), os.path.join(BASE_DIR, 'frontend/build/static'), -] \ No newline at end of file +] From 3f328e260fa21e939f21545c207047fd9c65ea55 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:38:08 -0500 Subject: [PATCH 05/29] Lint Views.py --- server/djangoapp/urls.py | 9 ++++++--- server/djangoapp/views.py | 17 ++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/server/djangoapp/urls.py b/server/djangoapp/urls.py index 793c506a7de..fd9318ba34d 100644 --- a/server/djangoapp/urls.py +++ b/server/djangoapp/urls.py @@ -14,9 +14,12 @@ path(route='registration', view=views.registration, name='registration'), path(route='get_cars', view=views.get_cars, name='getcars'), path(route='get_dealers/', view=views.get_dealerships, name='get_dealers'), - path(route='get_dealers/', view=views.get_dealerships, name='get_dealers_by_state'), - path(route='dealer/', view=views.get_dealer_details, name='dealer_details'), - path(route='reviews/dealer/', view=views.get_dealer_reviews, name='dealer_details'), + path(route='get_dealers/', + view=views.get_dealerships, name='get_dealers_by_state'), + path(route='dealer/', + view=views.get_dealer_details, name='dealer_details'), + path(route='reviews/dealer/', + view=views.get_dealer_reviews, name='dealer_details'), path(route='add_review', view=views.add_review, name='add_review'), # path for dealer reviews view diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index f5163751a08..b6c8a08bb5e 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -1,12 +1,12 @@ # Uncomment the required imports before adding the code -from django.shortcuts import render -from django.http import HttpResponseRedirect, HttpResponse +# from django.shortcuts import render +# from django.http import HttpResponseRedirect, HttpResponse from django.contrib.auth.models import User -from django.shortcuts import get_object_or_404, render, redirect +# from django.shortcuts import get_object_or_404, render, redirect from django.contrib.auth import logout -from django.contrib import messages -from datetime import datetime +# from django.contrib import messages +# from datetime import datetime from django.http import JsonResponse from django.contrib.auth import login, authenticate @@ -39,6 +39,7 @@ def login_user(request): data = {"userName": username, "status": "Authenticated"} return JsonResponse(data) + # Create a `logout_request` view to handle sign out request def logout_request(request): logout(request) # Terminate user session @@ -46,6 +47,7 @@ def logout_request(request): return JsonResponse(data) # ... + # Create a `registration` view to handle sign up request @csrf_exempt def registration(request): @@ -80,6 +82,7 @@ def registration(request): data = {"userName": username,"error": "Already Registered"} return JsonResponse(data) + @csrf_exempt def get_cars(request): count = CarMake.objects.filter().count() @@ -92,6 +95,7 @@ def get_cars(request): cars.append({"CarModel": car_model.name, "CarMake": car_model.car_make.name}) return JsonResponse({"CarModels": cars}) + # # Update the `get_dealerships` view to render the index page with # a list of dealerships # def get_dealerships(request): @@ -105,6 +109,7 @@ def get_dealerships(request, state="All"): dealerships = get_request(endpoint) return JsonResponse({"status": 200,"dealers": dealerships}) + # Create a `get_dealer_reviews` view to render the reviews of a dealer # def get_dealer_reviews(request,dealer_id): # ... @@ -121,6 +126,7 @@ def get_dealer_reviews(request, dealer_id): else: return JsonResponse({"status": 400,"message": "Bad Request"}) + # Create a `get_dealer_details` view to render the dealer details # def get_dealer_details(request, dealer_id): # ... @@ -132,6 +138,7 @@ def get_dealer_details(request, dealer_id): else: return JsonResponse({"status": 400,"message": "Bad Request"}) + # Create a `add_review` view to submit a review # def add_review(request): # ... From 826dfbd288a8ea584a0b853c8517c52ec3eee5ac Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:40:12 -0500 Subject: [PATCH 06/29] Fix views --- server/djangoapp/views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index b6c8a08bb5e..1c6c9e4f7dc 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -73,7 +73,11 @@ def registration(request): # If it is a new user if not username_exist: # Create user in auth_user table - user = User.objects.create_user(username=username, first_name=first_name, last_name=last_name,password=password, email=email) + user = User.objects.create_user(username=username, + first_name=first_name, + last_name=last_name, + password=password, + email=email) # Login the user and redirect to list page login(request, user) data = {"userName": username,"status": "Authenticated"} From 3350692775398099cf0b728c6b474334f4eca6d9 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:42:18 -0500 Subject: [PATCH 07/29] Fix comma --- server/djangoapp/views.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index 1c6c9e4f7dc..ac2b300ff78 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -80,10 +80,10 @@ def registration(request): email=email) # Login the user and redirect to list page login(request, user) - data = {"userName": username,"status": "Authenticated"} + data = {"userName": username, "status": "Authenticated"} return JsonResponse(data) else : - data = {"userName": username,"error": "Already Registered"} + data = {"userName": username, "error": "Already Registered"} return JsonResponse(data) @@ -111,7 +111,7 @@ def get_dealerships(request, state="All"): else: endpoint = "/fetchDealers/"+state dealerships = get_request(endpoint) - return JsonResponse({"status": 200,"dealers": dealerships}) + return JsonResponse({"status": 200, "dealers": dealerships}) # Create a `get_dealer_reviews` view to render the reviews of a dealer @@ -126,9 +126,9 @@ def get_dealer_reviews(request, dealer_id): response = analyze_review_sentiments(review_detail['review']) print(response) review_detail['sentiment'] = response['sentiment'] - return JsonResponse({"status": 200,"reviews": reviews}) + return JsonResponse({"status": 200, "reviews": reviews}) else: - return JsonResponse({"status": 400,"message": "Bad Request"}) + return JsonResponse({"status": 400, "message": "Bad Request"}) # Create a `get_dealer_details` view to render the dealer details @@ -138,9 +138,9 @@ def get_dealer_details(request, dealer_id): if(dealer_id): endpoint = "/fetchDealer/"+str(dealer_id) dealership = get_request(endpoint) - return JsonResponse({"status": 200,"dealer": dealership}) + return JsonResponse({"status": 200, "dealer": dealership}) else: - return JsonResponse({"status": 400,"message": "Bad Request"}) + return JsonResponse({"status": 400, "message": "Bad Request"}) # Create a `add_review` view to submit a review @@ -153,6 +153,6 @@ def add_review(request): response = post_review(data) return JsonResponse({"status": 200}) except: - return JsonResponse({"status": 401,"message": "Error in posting review"}) + return JsonResponse({"status": 401, "message": "Error in posting review"}) else: - return JsonResponse({"status": 403,"message": "Unauthorized"}) + return JsonResponse({"status": 403, "message": "Unauthorized"}) From a99f41bc0e439c4c1619c34ffa6036f3c03b938b Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:44:03 -0500 Subject: [PATCH 08/29] Lint --- server/djangoapp/views.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index ac2b300ff78..0f18deb70e3 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -106,7 +106,7 @@ def get_cars(request): # ... #Update the `get_dealerships` render list of dealerships all by default, particular state if state is passed def get_dealerships(request, state="All"): - if(state == "All"): + if (state == "All"): endpoint = "/fetchDealers" else: endpoint = "/fetchDealers/"+state @@ -119,7 +119,7 @@ def get_dealerships(request, state="All"): # ... def get_dealer_reviews(request, dealer_id): # if dealer id has been provided - if(dealer_id): + if (dealer_id): endpoint = "/fetchReviews/dealer/"+str(dealer_id) reviews = get_request(endpoint) for review_detail in reviews: @@ -135,7 +135,7 @@ def get_dealer_reviews(request, dealer_id): # def get_dealer_details(request, dealer_id): # ... def get_dealer_details(request, dealer_id): - if(dealer_id): + if (dealer_id): endpoint = "/fetchDealer/"+str(dealer_id) dealership = get_request(endpoint) return JsonResponse({"status": 200, "dealer": dealership}) @@ -147,12 +147,13 @@ def get_dealer_details(request, dealer_id): # def add_review(request): # ... def add_review(request): - if(request.user.is_anonymous == False): + if (request.user.is_anonymous == False): data = json.loads(request.body) try: response = post_review(data) return JsonResponse({"status": 200}) except: - return JsonResponse({"status": 401, "message": "Error in posting review"}) + return JsonResponse({"status": 401, + "message": "Error in posting review"}) else: return JsonResponse({"status": 403, "message": "Unauthorized"}) From 9c1bb7686eaf06a7b53d0b969a10e03e6c08ccad Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:46:48 -0500 Subject: [PATCH 09/29] Push changes --- server/djangoapp/views.py | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index 0f18deb70e3..c24a9af1926 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -82,7 +82,7 @@ def registration(request): login(request, user) data = {"userName": username, "status": "Authenticated"} return JsonResponse(data) - else : + else: data = {"userName": username, "error": "Already Registered"} return JsonResponse(data) @@ -91,20 +91,16 @@ def registration(request): def get_cars(request): count = CarMake.objects.filter().count() print(count) - if(count == 0): + if (count == 0): initiate() car_models = CarModel.objects.select_related('car_make') cars = [] for car_model in car_models: - cars.append({"CarModel": car_model.name, "CarMake": car_model.car_make.name}) + cars.append({"CarModel": car_model.name, + "CarMake": car_model.car_make.name}) return JsonResponse({"CarModels": cars}) -# # Update the `get_dealerships` view to render the index page with -# a list of dealerships -# def get_dealerships(request): -# ... -#Update the `get_dealerships` render list of dealerships all by default, particular state if state is passed def get_dealerships(request, state="All"): if (state == "All"): endpoint = "/fetchDealers" @@ -114,9 +110,6 @@ def get_dealerships(request, state="All"): return JsonResponse({"status": 200, "dealers": dealerships}) -# Create a `get_dealer_reviews` view to render the reviews of a dealer -# def get_dealer_reviews(request,dealer_id): -# ... def get_dealer_reviews(request, dealer_id): # if dealer id has been provided if (dealer_id): @@ -131,9 +124,6 @@ def get_dealer_reviews(request, dealer_id): return JsonResponse({"status": 400, "message": "Bad Request"}) -# Create a `get_dealer_details` view to render the dealer details -# def get_dealer_details(request, dealer_id): -# ... def get_dealer_details(request, dealer_id): if (dealer_id): endpoint = "/fetchDealer/"+str(dealer_id) @@ -143,9 +133,6 @@ def get_dealer_details(request, dealer_id): return JsonResponse({"status": 400, "message": "Bad Request"}) -# Create a `add_review` view to submit a review -# def add_review(request): -# ... def add_review(request): if (request.user.is_anonymous == False): data = json.loads(request.body) From 5351cfdb91049c26fd1b64c39d16bb43079dac07 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:49:43 -0500 Subject: [PATCH 10/29] Fix exception --- server/djangoapp/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index c24a9af1926..a145af405c2 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -51,7 +51,7 @@ def logout_request(request): # Create a `registration` view to handle sign up request @csrf_exempt def registration(request): - context = {} + # context = {} # Load JSON data from the request body data = json.loads(request.body) @@ -61,12 +61,12 @@ def registration(request): last_name = data['lastName'] email = data['email'] username_exist = False - email_exist = False + # email_exist = False try: # Check if user already exists User.objects.get(username=username) username_exist = True - except: + except Exception: # If not, simply log this is a new user logger.debug("{} is new user".format(username)) From a819855591c6cba0e411e6db1dd49343e0e40ca6 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:52:20 -0500 Subject: [PATCH 11/29] Push changes --- server/djangoapp/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index a145af405c2..ee58f3e7354 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -134,12 +134,12 @@ def get_dealer_details(request, dealer_id): def add_review(request): - if (request.user.is_anonymous == False): + if not request.user.is_anonymous: data = json.loads(request.body) try: - response = post_review(data) + # response = post_review(data) return JsonResponse({"status": 200}) - except: + except Exception: return JsonResponse({"status": 401, "message": "Error in posting review"}) else: From 097b36ddf5199379ed6e3cbb2c8134f196cd0d61 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:53:52 -0500 Subject: [PATCH 12/29] Final clean views.py --- server/djangoapp/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/djangoapp/views.py b/server/djangoapp/views.py index ee58f3e7354..f360a092e05 100644 --- a/server/djangoapp/views.py +++ b/server/djangoapp/views.py @@ -15,7 +15,8 @@ from django.views.decorators.csrf import csrf_exempt from .populate import initiate from .models import CarMake, CarModel -from .restapis import get_request, analyze_review_sentiments, post_review +from .restapis import (get_request, analyze_review_sentiments) +# post_review # Get an instance of a logger logger = logging.getLogger(__name__) @@ -135,7 +136,7 @@ def get_dealer_details(request, dealer_id): def add_review(request): if not request.user.is_anonymous: - data = json.loads(request.body) + # data = json.loads(request.body) try: # response = post_review(data) return JsonResponse({"status": 200}) From da49b790f129a3acb92f291da2b51f499a89390d Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:55:27 -0500 Subject: [PATCH 13/29] Settings.py --- server/djangoproj/settings.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/djangoproj/settings.py b/server/djangoproj/settings.py index 141c60af45a..4d34ff7123d 100644 --- a/server/djangoproj/settings.py +++ b/server/djangoproj/settings.py @@ -31,7 +31,9 @@ ALLOWED_HOSTS = [ 'localhost', '127.0.0.1', - 'https://nicholassuta-8000.theianext-0-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai'] + 'https://nicholassuta-8000.' + 'theianext-0-labs-prod-misc-tools-us-east-0.' + 'proxy.cognitiveclass.ai'] CSRF_TRUSTED_ORIGINS = [ 'https://nicholassuta-8000.' 'theianext-0-labs-prod-misc-tools-us-east-0.' @@ -100,7 +102,8 @@ AUTH_PASSWORD_VALIDATORS = [ { 'NAME': - 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + 'django.contrib.auth.password_validation.' + 'UserAttributeSimilarityValidator', }, { 'NAME': From e549d011f1bb9272911f3430b629d4dbf5a8f7aa Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:57:06 -0500 Subject: [PATCH 14/29] Populate.py --- server/djangoapp/populate.py | 69 ++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/server/djangoapp/populate.py b/server/djangoapp/populate.py index dc131d82e62..4841165332a 100644 --- a/server/djangoapp/populate.py +++ b/server/djangoapp/populate.py @@ -2,37 +2,62 @@ def initiate(): car_make_data = [ - {"name": "NISSAN", "description": "Great cars. Japanese technology"}, - {"name": "Mercedes", "description": "Great cars. German technology"}, - {"name": "Audi", "description": "Great cars. German technology"}, - {"name": "Kia", "description": "Great cars. Korean technology"}, - {"name": "Toyota", "description": "Great cars. Japanese technology"}, + {"name": "NISSAN", + "description": "Great cars. Japanese technology"}, + {"name": "Mercedes", + "description": "Great cars. German technology"}, + {"name": "Audi", + "description": "Great cars. German technology"}, + {"name": "Kia", + "description": "Great cars. Korean technology"}, + {"name": "Toyota", + "description": "Great cars. Japanese technology"}, ] car_make_instances = [] for data in car_make_data: - car_make_instances.append(CarMake.objects.create(name=data['name'], description=data['description'])) + car_make_instances.append( + CarMake.objects.create(name=data['name'], + description=data['description'])) # Create CarModel instances with the corresponding CarMake instances car_model_data = [ - {"name": "Pathfinder", "type": "SUV", "year": 2023, "car_make": car_make_instances[0]}, - {"name": "Qashqai", "type": "SUV", "year": 2023, "car_make": car_make_instances[0]}, - {"name": "XTRAIL", "type": "SUV", "year": 2023, "car_make": car_make_instances[0]}, - {"name": "A-Class", "type": "SUV", "year": 2023, "car_make": car_make_instances[1]}, - {"name": "C-Class", "type": "SUV", "year": 2023, "car_make": car_make_instances[1]}, - {"name": "E-Class", "type": "SUV", "year": 2023, "car_make": car_make_instances[1]}, - {"name": "A4", "type": "SUV", "year": 2023, "car_make": car_make_instances[2]}, - {"name": "A5", "type": "SUV", "year": 2023, "car_make": car_make_instances[2]}, - {"name": "A6", "type": "SUV", "year": 2023, "car_make": car_make_instances[2]}, - {"name": "Sorrento", "type": "SUV", "year": 2023, "car_make": car_make_instances[3]}, - {"name": "Carnival", "type": "SUV", "year": 2023, "car_make": car_make_instances[3]}, - {"name": "Cerato", "type": "Sedan", "year": 2023, "car_make": car_make_instances[3]}, - {"name": "Corolla", "type": "Sedan", "year": 2023, "car_make": car_make_instances[4]}, - {"name": "Camry", "type": "Sedan", "year": 2023, "car_make": car_make_instances[4]}, - {"name": "Kluger", "type": "SUV", "year": 2023, "car_make": car_make_instances[4]}, + {"name": "Pathfinder", "type": "SUV", + "year": 2023, "car_make": car_make_instances[0]}, + {"name": "Qashqai", "type": "SUV", + "year": 2023, "car_make": car_make_instances[0]}, + {"name": "XTRAIL", "type": "SUV", + "year": 2023, "car_make": car_make_instances[0]}, + {"name": "A-Class", "type": "SUV", + "year": 2023, "car_make": car_make_instances[1]}, + {"name": "C-Class", "type": "SUV", + "year": 2023, "car_make": car_make_instances[1]}, + {"name": "E-Class", "type": "SUV", + "year": 2023, "car_make": car_make_instances[1]}, + {"name": "A4", "type": "SUV", + "year": 2023, "car_make": car_make_instances[2]}, + {"name": "A5", "type": "SUV", + "year": 2023, "car_make": car_make_instances[2]}, + {"name": "A6", "type": "SUV", + "year": 2023, "car_make": car_make_instances[2]}, + {"name": "Sorrento", "type": "SUV", + "year": 2023, "car_make": car_make_instances[3]}, + {"name": "Carnival", "type": "SUV", + "year": 2023, "car_make": car_make_instances[3]}, + {"name": "Cerato", "type": "Sedan", + "year": 2023, "car_make": car_make_instances[3]}, + {"name": "Corolla", "type": "Sedan", + "year": 2023, "car_make": car_make_instances[4]}, + {"name": "Camry", "type": "Sedan", + "year": 2023, "car_make": car_make_instances[4]}, + {"name": "Kluger", "type": "SUV", + "year": 2023, "car_make": car_make_instances[4]}, # Add more CarModel instances as needed ] for data in car_model_data: - CarModel.objects.create(name=data['name'], car_make=data['car_make'], type=data['type'], year=data['year']) \ No newline at end of file + CarModel.objects.create(name=data['name'], + car_make=data['car_make'], + type=data['type'], + year=data['year']) \ No newline at end of file From aca183b4feb54e5ede10f03691e7441e630cab5f Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 22:58:55 -0500 Subject: [PATCH 15/29] Linting --- server/djangoapp/populate.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/server/djangoapp/populate.py b/server/djangoapp/populate.py index 4841165332a..4d5755587ee 100644 --- a/server/djangoapp/populate.py +++ b/server/djangoapp/populate.py @@ -1,5 +1,6 @@ from .models import CarMake, CarModel + def initiate(): car_make_data = [ {"name": "NISSAN", @@ -16,9 +17,9 @@ def initiate(): car_make_instances = [] for data in car_make_data: - car_make_instances.append( - CarMake.objects.create(name=data['name'], - description=data['description'])) + car_make_instances.append( + CarMake.objects.create(name=data['name'], + description=data['description'])) # Create CarModel instances with the corresponding CarMake instances @@ -57,7 +58,7 @@ def initiate(): ] for data in car_model_data: - CarModel.objects.create(name=data['name'], - car_make=data['car_make'], - type=data['type'], - year=data['year']) \ No newline at end of file + CarModel.objects.create(name=data['name'], + car_make=data['car_make'], + type=data['type'], + year=data['year']) \ No newline at end of file From e6e036080a2bb0e76cc743d2c3f299b744270040 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:00:49 -0500 Subject: [PATCH 16/29] Second Try --- server/djangoapp/populate.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/server/djangoapp/populate.py b/server/djangoapp/populate.py index 4d5755587ee..a304ea75b97 100644 --- a/server/djangoapp/populate.py +++ b/server/djangoapp/populate.py @@ -18,8 +18,9 @@ def initiate(): car_make_instances = [] for data in car_make_data: car_make_instances.append( - CarMake.objects.create(name=data['name'], - description=data['description'])) + CarMake.objects.create( + name=data['name'], + description=data['description'])) # Create CarModel instances with the corresponding CarMake instances @@ -58,7 +59,8 @@ def initiate(): ] for data in car_model_data: - CarModel.objects.create(name=data['name'], - car_make=data['car_make'], - type=data['type'], - year=data['year']) \ No newline at end of file + CarModel.objects.create( + name=data['name'], + car_make=data['car_make'], + type=data['type'], + year=data['year']) \ No newline at end of file From 3d160546fad92ccbf89422c986cdb25f99e5ccd4 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:03:10 -0500 Subject: [PATCH 17/29] Linting --- server/djangoapp/populate.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/server/djangoapp/populate.py b/server/djangoapp/populate.py index a304ea75b97..6275d69d7ad 100644 --- a/server/djangoapp/populate.py +++ b/server/djangoapp/populate.py @@ -22,8 +22,6 @@ def initiate(): name=data['name'], description=data['description'])) - - # Create CarModel instances with the corresponding CarMake instances car_model_data = [ {"name": "Pathfinder", "type": "SUV", "year": 2023, "car_make": car_make_instances[0]}, @@ -57,10 +55,10 @@ def initiate(): "year": 2023, "car_make": car_make_instances[4]}, # Add more CarModel instances as needed ] - + for data in car_model_data: CarModel.objects.create( name=data['name'], car_make=data['car_make'], type=data['type'], - year=data['year']) \ No newline at end of file + year=data['year']) From 716f2c97988973e074bd762bd2ee91d374259e1a Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:04:43 -0500 Subject: [PATCH 18/29] Try this --- server/djangoapp/populate.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/djangoapp/populate.py b/server/djangoapp/populate.py index 6275d69d7ad..2d49f003caf 100644 --- a/server/djangoapp/populate.py +++ b/server/djangoapp/populate.py @@ -52,10 +52,9 @@ def initiate(): {"name": "Camry", "type": "Sedan", "year": 2023, "car_make": car_make_instances[4]}, {"name": "Kluger", "type": "SUV", - "year": 2023, "car_make": car_make_instances[4]}, - # Add more CarModel instances as needed + "year": 2023, "car_make": car_make_instances[4] + } ] - for data in car_model_data: CarModel.objects.create( name=data['name'], From 17893d78e8ddf790a0812ceb781e00016d0e5350 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:08:24 -0500 Subject: [PATCH 19/29] Lint --- server/djangoapp/populate.py | 3 +-- server/djangoapp/restapis.py | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/server/djangoapp/populate.py b/server/djangoapp/populate.py index 2d49f003caf..603c9b60d33 100644 --- a/server/djangoapp/populate.py +++ b/server/djangoapp/populate.py @@ -52,8 +52,7 @@ def initiate(): {"name": "Camry", "type": "Sedan", "year": 2023, "car_make": car_make_instances[4]}, {"name": "Kluger", "type": "SUV", - "year": 2023, "car_make": car_make_instances[4] - } + "year": 2023, "car_make": car_make_instances[4]} ] for data in car_model_data: CarModel.objects.create( diff --git a/server/djangoapp/restapis.py b/server/djangoapp/restapis.py index c761676f501..3f438f907a3 100644 --- a/server/djangoapp/restapis.py +++ b/server/djangoapp/restapis.py @@ -11,13 +11,14 @@ 'sentiment_analyzer_url', default="http://localhost:5050/") + # def get_request(endpoint, **kwargs): # Add code for get requests to back end def get_request(endpoint, **kwargs): params = "" - if(kwargs): - for key,value in kwargs.items(): - params=params+key+"="+value+"&" + if (kwargs): + for key, value in kwargs.items(): + params = params + key + "=" + value + "&" request_url = backend_url+endpoint+"?"+params @@ -26,15 +27,16 @@ def get_request(endpoint, **kwargs): # Call get method of requests library with URL and parameters response = requests.get(request_url) return response.json() - except: + except Exception: # If any error occurs print("Network exception occurred") + # def analyze_review_sentiments(text): # request_url = sentiment_analyzer_url+"analyze/"+text # Add code for retrieving sentiments def analyze_review_sentiments(text): - request_url = sentiment_analyzer_url+"analyze/"+text + request_url = sentiment_analyzer_url + "analyze/" + text try: # Call get method of requests library with URL and parameters response = requests.get(request_url) @@ -43,13 +45,14 @@ def analyze_review_sentiments(text): print(f"Unexpected {err=}, {type(err)=}") print("Network exception occurred") + # def post_review(data_dict): # Add code for posting review def post_review(data_dict): - request_url = backend_url+"/insert_review" + request_url = backend_url + "/insert_review" try: - response = requests.post(request_url,json=data_dict) + response = requests.post(request_url, json = data_dict) print(response.json()) return response.json() - except: + except Exception: print("Network exception occurred") From 48da564ac4952e0b81b57b9eefa1866b5148b34a Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:09:45 -0500 Subject: [PATCH 20/29] Test --- server/djangoapp/restapis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/djangoapp/restapis.py b/server/djangoapp/restapis.py index 3f438f907a3..90f942c3d4b 100644 --- a/server/djangoapp/restapis.py +++ b/server/djangoapp/restapis.py @@ -51,7 +51,7 @@ def analyze_review_sentiments(text): def post_review(data_dict): request_url = backend_url + "/insert_review" try: - response = requests.post(request_url, json = data_dict) + response = requests.post(request_url,json=data_dict) print(response.json()) return response.json() except Exception: From 14fcbb41c8bd34f1217944a6a025e0bf6eb3768c Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:11:22 -0500 Subject: [PATCH 21/29] Test --- server/djangoapp/restapis.py | 2 +- server/djangoproj/urls.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/server/djangoapp/restapis.py b/server/djangoapp/restapis.py index 90f942c3d4b..82dbfa99e49 100644 --- a/server/djangoapp/restapis.py +++ b/server/djangoapp/restapis.py @@ -51,7 +51,7 @@ def analyze_review_sentiments(text): def post_review(data_dict): request_url = backend_url + "/insert_review" try: - response = requests.post(request_url,json=data_dict) + response = requests.post(request_url, json=data_dict) print(response.json()) return response.json() except Exception: diff --git a/server/djangoproj/urls.py b/server/djangoproj/urls.py index dd2799cfde5..9ade648f4af 100644 --- a/server/djangoproj/urls.py +++ b/server/djangoproj/urls.py @@ -31,7 +31,8 @@ path('dealer/', TemplateView.as_view(template_name="index.html")), path( 'dealer/', - TemplateView.as_view(template_name="index.html")), + TemplateView.as_view(template_name="index.html") + ), path( 'postreview/', TemplateView.as_view(template_name="index.html")), From bc4fb2fe6960f035bedf223784d58ffb80aec42d Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:14:27 -0500 Subject: [PATCH 22/29] Try this --- server/djangoapp/models.py | 14 +++++++------- server/djangoproj/urls.py | 7 +++---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/server/djangoapp/models.py b/server/djangoapp/models.py index 6a89edee919..ce3cb9dd019 100644 --- a/server/djangoapp/models.py +++ b/server/djangoapp/models.py @@ -1,10 +1,11 @@ # Uncomment the following imports before adding the Model code from django.db import models -from django.utils.timezone import now +# from django.utils.timezone import now from django.core.validators import MaxValueValidator, MinValueValidator # Create your models here. + # Create a Car Make model `class CarMake(models.Model)`: # - Name # - Description @@ -29,13 +30,14 @@ def __str__(self): # - Any other fields you would like to include in car model # - __str__ method to print a car make object class CarModel(models.Model): - car_make = models.ForeignKey(CarMake, on_delete=models.CASCADE) # Many-to-One relationship + car_make = models.ForeignKey( + CarMake, + on_delete=models.CASCADE) # Many-to-One relationship name = models.CharField(max_length=100) CAR_TYPES = [ ('SEDAN', 'Sedan'), ('SUV', 'SUV'), - ('WAGON', 'Wagon'), - # Add more choices as required + ('WAGON', 'Wagon'), # Add more choices as required ] type = models.CharField(max_length=10, choices=CAR_TYPES, default='SUV') year = models.IntegerField(default=2023, @@ -46,6 +48,4 @@ class CarModel(models.Model): # Other fields as needed def __str__(self): - return self.name # Return the name as the string representation - - + return self.name # Return the name as the string representation \ No newline at end of file diff --git a/server/djangoproj/urls.py b/server/djangoproj/urls.py index 9ade648f4af..a2771b5a348 100644 --- a/server/djangoproj/urls.py +++ b/server/djangoproj/urls.py @@ -30,10 +30,9 @@ path('dealers/', TemplateView.as_view(template_name="index.html")), path('dealer/', TemplateView.as_view(template_name="index.html")), path( - 'dealer/', - TemplateView.as_view(template_name="index.html") - ), + 'dealer/', + TemplateView.as_view(template_name="index.html")), path( - 'postreview/', + 'postreview/', TemplateView.as_view(template_name="index.html")), ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) From 47667533e2b28bbcac9fa5e118c8b92d96e1c7ca Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:16:18 -0500 Subject: [PATCH 23/29] Test --- server/djangoapp/models.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/server/djangoapp/models.py b/server/djangoapp/models.py index ce3cb9dd019..45ce9df73a4 100644 --- a/server/djangoapp/models.py +++ b/server/djangoapp/models.py @@ -37,15 +37,13 @@ class CarModel(models.Model): CAR_TYPES = [ ('SEDAN', 'Sedan'), ('SUV', 'SUV'), - ('WAGON', 'Wagon'), # Add more choices as required - ] + ('WAGON', 'Wagon')] type = models.CharField(max_length=10, choices=CAR_TYPES, default='SUV') year = models.IntegerField(default=2023, validators=[ MaxValueValidator(2023), - MinValueValidator(2015) - ]) + MinValueValidator(2015)]) # Other fields as needed def __str__(self): - return self.name # Return the name as the string representation \ No newline at end of file + return self.name # Return the name as the string representation From 83f941c3a258bd22e6a4fb48bc8a8867d168ba15 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:17:53 -0500 Subject: [PATCH 24/29] Lint --- server/djangoapp/models.py | 3 ++- server/djangoproj/urls.py | 6 ++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/server/djangoapp/models.py b/server/djangoapp/models.py index 45ce9df73a4..e2eee2f9414 100644 --- a/server/djangoapp/models.py +++ b/server/djangoapp/models.py @@ -39,7 +39,8 @@ class CarModel(models.Model): ('SUV', 'SUV'), ('WAGON', 'Wagon')] type = models.CharField(max_length=10, choices=CAR_TYPES, default='SUV') - year = models.IntegerField(default=2023, + year = models.IntegerField( + default=2023, validators=[ MaxValueValidator(2023), MinValueValidator(2015)]) diff --git a/server/djangoproj/urls.py b/server/djangoproj/urls.py index a2771b5a348..3a3a93c2005 100644 --- a/server/djangoproj/urls.py +++ b/server/djangoproj/urls.py @@ -29,10 +29,8 @@ path('register/', TemplateView.as_view(template_name="index.html")), path('dealers/', TemplateView.as_view(template_name="index.html")), path('dealer/', TemplateView.as_view(template_name="index.html")), - path( - 'dealer/', + path('dealer/', TemplateView.as_view(template_name="index.html")), - path( - 'postreview/', + path('postreview/', TemplateView.as_view(template_name="index.html")), ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) From ea3d2599afb550e4e61d0946b40ab64c06227c19 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:19:03 -0500 Subject: [PATCH 25/29] Test --- server/djangoproj/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/djangoproj/urls.py b/server/djangoproj/urls.py index 3a3a93c2005..45704641f29 100644 --- a/server/djangoproj/urls.py +++ b/server/djangoproj/urls.py @@ -32,5 +32,5 @@ path('dealer/', TemplateView.as_view(template_name="index.html")), path('postreview/', - TemplateView.as_view(template_name="index.html")), + TemplateView.as_view(template_name="index.html")) ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) From 07c9a6fe70831c2e610172d954efae1f7cec1207 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:22:48 -0500 Subject: [PATCH 26/29] Lint Java Script --- server/database/app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/database/app.js b/server/database/app.js index e623694ef2f..2f067ed19bc 100644 --- a/server/database/app.js +++ b/server/database/app.js @@ -1,3 +1,4 @@ +/*jshint esversion: 8 */ const express = require('express'); const mongoose = require('mongoose'); const fs = require('fs'); From 0625dd24785865a3438a2aaa2565373e7acf1d21 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:24:58 -0500 Subject: [PATCH 27/29] Fix linting --- server/database/dealership.js | 1 + server/database/inventory.js | 1 + server/database/review.js | 1 + 3 files changed, 3 insertions(+) diff --git a/server/database/dealership.js b/server/database/dealership.js index b10d6b47304..4c87270316e 100644 --- a/server/database/dealership.js +++ b/server/database/dealership.js @@ -1,3 +1,4 @@ +/*jshint esversion: 8 */ const mongoose = require('mongoose'); const Schema = mongoose.Schema; diff --git a/server/database/inventory.js b/server/database/inventory.js index 2c22fd092ce..6c04f39d229 100644 --- a/server/database/inventory.js +++ b/server/database/inventory.js @@ -1,3 +1,4 @@ +/*jshint esversion: 8 */ const { Int32 } = require('mongodb'); const mongoose = require('mongoose'); diff --git a/server/database/review.js b/server/database/review.js index 4759725a3a3..217c8289023 100644 --- a/server/database/review.js +++ b/server/database/review.js @@ -1,3 +1,4 @@ +/*jshint esversion: 8 */ const mongoose = require('mongoose'); const Schema = mongoose.Schema; From 46d460036ad06b8712819a46fe86ca74b5fca3f4 Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:28:28 -0500 Subject: [PATCH 28/29] Linting semi colon --- server/database/app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/database/app.js b/server/database/app.js index 2f067ed19bc..287386bf7be 100644 --- a/server/database/app.js +++ b/server/database/app.js @@ -2,11 +2,11 @@ const express = require('express'); const mongoose = require('mongoose'); const fs = require('fs'); -const cors = require('cors') -const app = express() +const cors = require('cors'); +const app = express(); const port = 3030; -app.use(cors()) +app.use(cors()); app.use(require('body-parser').urlencoded({ extended: false })); const reviews_data = JSON.parse(fs.readFileSync("reviews.json", 'utf8')); @@ -34,7 +34,7 @@ try { // Express route to home app.get('/', async (req, res) => { - res.send("Welcome to the Mongoose API") + res.send("Welcome to the Mongoose API"); }); // Express route to fetch all reviews @@ -92,7 +92,7 @@ app.get('/fetchDealer/:id', async (req, res) => { //Express route to insert review app.post('/insert_review', express.raw({ type: '*/*' }), async (req, res) => { data = JSON.parse(req.body); - const documents = await Reviews.find().sort( { id: -1 } ) + const documents = await Reviews.find().sort( { id: -1 } ); let new_id = documents[0]['id']+1 const review = new Reviews({ From a619d76ac9518921feb04beed25b154d4680781a Mon Sep 17 00:00:00 2001 From: nsutanto Date: Wed, 18 Jun 2025 23:31:46 -0500 Subject: [PATCH 29/29] Linting --- server/database/app.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/server/database/app.js b/server/database/app.js index 287386bf7be..e2cdfad0855 100644 --- a/server/database/app.js +++ b/server/database/app.js @@ -21,10 +21,10 @@ const Dealerships = require('./dealership'); try { Reviews.deleteMany({}).then(()=>{ - Reviews.insertMany(reviews_data['reviews']); + Reviews.insertMany(reviews_data.reviews); }); Dealerships.deleteMany({}).then(()=>{ - Dealerships.insertMany(dealerships_data['dealerships']); + Dealerships.insertMany(dealerships_data.dealerships); }); } catch (error) { @@ -93,18 +93,18 @@ app.get('/fetchDealer/:id', async (req, res) => { app.post('/insert_review', express.raw({ type: '*/*' }), async (req, res) => { data = JSON.parse(req.body); const documents = await Reviews.find().sort( { id: -1 } ); - let new_id = documents[0]['id']+1 + let new_id = documents[0].id+1; const review = new Reviews({ "id": new_id, - "name": data['name'], - "dealership": data['dealership'], - "review": data['review'], - "purchase": data['purchase'], - "purchase_date": data['purchase_date'], - "car_make": data['car_make'], - "car_model": data['car_model'], - "car_year": data['car_year'], + "name": data.name, + "dealership": data.dealership, + "review": data.review, + "purchase": data.purchase, + "purchase_date": data.purchase_date, + "car_make": data.car_make, + "car_model": data.car_model, + "car_year": data.car_year, }); try {