Skip to content

Commit af57491

Browse files
committed
Fix dealer reviews and sentiment analyzer integration
1 parent 68fcf9b commit af57491

File tree

175 files changed

+32339
-36
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+32339
-36
lines changed

server/database/.dockerignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules
2+
npm-debug.log
3+
Dockerfile
4+
docker-compose.yml

server/database/docker-compose.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ services:
1313

1414
# Node api service
1515
api:
16-
image: nodeapp
16+
build: .
17+
container_name: database-api
1718
ports:
1819
- 3030:3030
19-
depends_on:
20+
depends_on:
2021
- mongo_db
2122

23+
2224
volumes:
2325
mongo_data: {}

server/djangoapp/.env

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
# backend_url=https://baamranemoua-3030.theiadockernext-0-labs-prod-theiak8s-4-tor01.proxy.cognitiveclass.ai
2-
backend_url=http://localhost:3030
3-
sentiment_analyzer_url=https://sentianalyzer.23rrh7pzq52h.us-south.codeengine.appdomain.cloud/
1+
backend_url=https://baamranemoua-3030.theiadockernext-0-labs-prod-theiak8s-4-tor01.proxy.cognitiveclass.ai
2+
# backend_url=http://localhost:3030
3+
sentiment_analyzer_url=https://sentianalyzer.241t04ssgghv.us-south.codeengine.appdomain.cloud/

server/djangoproj/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@
3030
TemplateView.as_view(template_name="index.html"),
3131
),
3232
path('register/', TemplateView.as_view(template_name="index.html")),
33+
path('postreview/<int:dealer_id>',TemplateView.as_view(template_name="index.html")),
3334
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

server/frontend/src/App.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import LoginPanel from "./components/Login/Login"
22
import Register from "./components/Register/Register";
33
import { Routes, Route } from "react-router-dom";
44
import Dealers from './components/Dealers/Dealers';
5-
import Dealer from "./components/Dealers/Dealer"
5+
import Dealer from "./components/Dealers/Dealer";
6+
import PostReview from "./components/Dealers/PostReview"
67

78
function App() {
89
return (
@@ -11,6 +12,7 @@ function App() {
1112
<Route path="/register" element={<Register />} />
1213
<Route path="/dealers" element={<Dealers/>} />
1314
<Route path="/dealer/:id" element={<Dealer/>} />
15+
<Route path="/postreview/:id" element={<PostReview/>} />
1416
</Routes>
1517
);
1618
}

server/frontend/src/components/Dealers/Dealer.jsx

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,16 @@ const Dealer = () => {
2424
let reviews_url = root_url+`djangoapp/reviews/dealer/${id}`;
2525
let post_review = root_url+`postreview/${id}`;
2626

27-
const get_dealer = async ()=>{
28-
const res = await fetch(dealer_url, {
29-
method: "GET"
30-
});
31-
const retobj = await res.json();
32-
33-
if(retobj.status === 200) {
34-
let dealerobjs = Array.from(retobj.dealer)
35-
setDealer(dealerobjs[0])
36-
}
27+
28+
const get_dealer = async () => {
29+
const res = await fetch(dealer_url, { method: "GET" });
30+
const retobj = await res.json();
31+
32+
if (retobj.status === 200 && retobj.dealer) {
33+
setDealer(retobj.dealer); // ✅ it's already an object
3734
}
35+
};
36+
3837

3938
const get_reviews = async ()=>{
4039
const res = await fetch(reviews_url, {
@@ -74,9 +73,9 @@ return(
7473
<h1 style={{color:"grey"}}>{dealer.full_name}{postReview}</h1>
7574
<h4 style={{color:"grey"}}>{dealer['city']},{dealer['address']}, Zip - {dealer['zip']}, {dealer['state']} </h4>
7675
</div>
77-
<div class="reviews_panel">
76+
<div className="reviews_panel">
7877
{reviews.length === 0 && unreviewed === false ? (
79-
<text>Loading Reviews....</text>
78+
<p>Loading Reviews....</p>
8079
): unreviewed === true? <div>No reviews yet! </div> :
8180
reviews.map(review => (
8281
<div className='review_panel'>

server/frontend/src/components/Dealers/PostReview.jsx

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const PostReview = () => {
3838

3939
let jsoninput = JSON.stringify({
4040
"name": name,
41-
"dealership": id,
41+
"dealership": parseInt(id, 10),
4242
"review": review,
4343
"purchase": true,
4444
"purchase_date": date,
@@ -62,18 +62,15 @@ const PostReview = () => {
6262
}
6363

6464
}
65-
const get_dealer = async ()=>{
66-
const res = await fetch(dealer_url, {
67-
method: "GET"
68-
});
69-
const retobj = await res.json();
70-
71-
if(retobj.status === 200) {
72-
let dealerobjs = Array.from(retobj.dealer)
73-
if(dealerobjs.length > 0)
74-
setDealer(dealerobjs[0])
75-
}
65+
const get_dealer = async () => {
66+
const res = await fetch(dealer_url, { method: "GET" });
67+
const retobj = await res.json();
68+
69+
if (retobj.status === 200) {
70+
setDealer(retobj.dealer); // ✅ dealer is an object
7671
}
72+
};
73+
7774

7875
const get_cars = async ()=>{
7976
const res = await fetch(carmodels_url, {
@@ -101,12 +98,23 @@ const PostReview = () => {
10198
</div>
10299
<div className='input_field'>
103100
Car Make
104-
<select name="cars" id="cars" onChange={(e) => setModel(e.target.value)}>
105-
<option value="" selected disabled hidden>Choose Car Make and Model</option>
106-
{carmodels.map(carmodel => (
107-
<option value={carmodel.CarMake+" "+carmodel.CarModel}>{carmodel.CarMake} {carmodel.CarModel}</option>
108-
))}
109-
</select>
101+
<select
102+
name="cars"
103+
id="cars"
104+
defaultValue=""
105+
onChange={(e) => setModel(e.target.value)}
106+
>
107+
<option value="" disabled hidden>Choose Car Make and Model</option>
108+
{carmodels.map((carmodel) => (
109+
<option
110+
key={`${carmodel.CarMake}-${carmodel.CarModel}`}
111+
value={`${carmodel.CarMake} ${carmodel.CarModel}`}
112+
>
113+
{carmodel.CarMake} {carmodel.CarModel}
114+
</option>
115+
))}
116+
</select>
117+
110118
</div >
111119

112120
<div className='input_field'>

server/static/About.html

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<html>
2+
<head>
3+
<!-- Link the style sheet here -->
4+
</head>
5+
<div>
6+
<nav class="navbar navbar-expand-lg navbar-light" style="background-color:darkturquoise; height: 1in;">
7+
<div class="container-fluid">
8+
<h2 style="padding-right: 5%;">Dealerships</h2>
9+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
10+
<span class="navbar-toggler-icon"></span>
11+
</button>
12+
<div class="collapse navbar-collapse" id="navbarText">
13+
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
14+
<li class="nav-item">
15+
<a class="nav-link" style="font-size: larger;" aria-current="page" href="/">Home</a>
16+
</li>
17+
<li class="nav-item">
18+
<a class="nav-link active" style="font-size: larger;" href="/about">About Us</a>
19+
</li>
20+
<li class="nav-item">
21+
<a class="nav-link" style="font-size: larger;" href="/contact">Contact Us</a>
22+
</li>
23+
</ul>
24+
</div>
25+
</div>
26+
</nav>
27+
28+
<div class="card" style="width: 80%;margin: auto; margin-top:5%;">
29+
<div class="banner" name="about-header">
30+
<!-- Insert header information here -->
31+
</div>
32+
<div style="display: flex;flex-direction: row; margin:auto">
33+
<div class="card" style="width: 30%;">
34+
<img class="card-img-top" src="/static/person.png" alt="Card image">
35+
<div class="card-body">
36+
<p class="title">Person1</p>
37+
<p>Person1 Title</p>
38+
<p class="card-text">Some text that explains the person1 in about 2 short sentences</p>
39+
40+
</div>
41+
</div>
42+
43+
<div class="card" style="width: 30%;">
44+
<img class="card-img-top" src="/static/person.png" alt="Card image">
45+
<div class="card-body">
46+
<p class="title">Person2</p>
47+
<p>Person2 Title</p>
48+
<p class="card-text">Some text that explains the person2 in about 2 short sentences</p>
49+
50+
</div>
51+
</div>
52+
53+
<div class="card" style="width: 30%;">
54+
<img class="card-img-top" src="/static/person.png" alt="Card image">
55+
<div class="card-body">
56+
<p class="title">Person3</p>
57+
<p>Person3 Title</p>
58+
<p class="card-text">Some text that explains the person3 in about 2 short sentences</p>
59+
60+
</div>
61+
</div>
62+
</div>
63+
</div>
64+
</div>
65+
66+
</div>
67+
68+
</html>

server/static/Home.html

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<html>
2+
<head>
3+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
4+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
5+
<link rel="stylesheet" href="static/style.css">
6+
<link rel="stylesheet" href="static/bootstrap.min.css">
7+
<script>
8+
9+
const logout = async (e) => {
10+
// Build logout URL and Make GET request to logout endpoint
11+
let logout_url = window.location.origin+"/djangoapp/logout";
12+
const res = await fetch(logout_url, {
13+
method: "GET",
14+
});
15+
16+
const json = await res.json();
17+
if (json) {
18+
// Clear session storage and reload page
19+
let username = sessionStorage.getItem('username');
20+
sessionStorage.removeItem('username');
21+
window.location.href = window.location.origin;
22+
window.location.reload();
23+
// Notify user of logout
24+
alert("Logging out "+username+"...")
25+
}
26+
else {
27+
alert("The user could not be logged out.")
28+
}
29+
};
30+
31+
let checkSession = ()=>{
32+
let curr_user = sessionStorage.getItem("username");
33+
34+
if (curr_user && curr_user !== "") {
35+
document.getElementById("loginlogout").innerHTML =
36+
'<span class="homepage_links">' + curr_user +'</span>' +
37+
'<a class="homepage_links" onclick="logout()" href="/">Logout</a>'
38+
} else {
39+
document.getElementById("loginlogout").innerHTML =
40+
'<a class="homepage_links" href="/login">Login</a>'+
41+
'<a class="homepage_links" href="/register">Register</a>'
42+
}
43+
44+
}
45+
</script>
46+
</head>
47+
<body onload="checkSession()">
48+
<nav class="navbar navbar-expand-lg navbar-light" style="background-color:darkturquoise; height: 1in;">
49+
<div class="container-fluid">
50+
<h2 style="padding-right: 5%;">Dealerships</h2>
51+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
52+
<span class="navbar-toggler-icon"></span>
53+
</button>
54+
<div class="collapse navbar-collapse" id="navbarText">
55+
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
56+
<li class="nav-item">
57+
<a class="nav-link active" style="font-size: larger;" aria-current="page" href="#">Home</a>
58+
</li>
59+
<li class="nav-item">
60+
<a class="nav-link" style="font-size: larger;" href="/about">About Us</a>
61+
</li>
62+
<li class="nav-item">
63+
<a class="nav-link" style="font-size: larger;" href="/contact">Contact Us</a>
64+
</li>
65+
</ul>
66+
<span class="navbar-text">
67+
<div class="loginlink" id="loginlogout">
68+
</div>
69+
</span>
70+
</div>
71+
</div>
72+
</nav>
73+
<div style="display: flex;flex-direction: column;">
74+
<div class="card" style="width: 50%;margin-top: 50px;align-self: center;">
75+
<img src="static/car_dealership.jpg" class="card-img-top" alt="...">
76+
<div class="banner">
77+
<h5>Welcome to our Dealerships!</h5>
78+
<a href="/dealers" class="btn" style="background-color: aqua;margin:10px">View Dealerships</a>
79+
</div>
80+
</div>
81+
</div>
82+
</body>
83+
</html>

0 commit comments

Comments
 (0)