Skip to content
63 changes: 27 additions & 36 deletions server/database/app.js
Original file line number Diff line number Diff line change
@@ -1,39 +1,36 @@
/* jshint esversion: 8 */
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'));
const dealerships_data = JSON.parse(fs.readFileSync("dealerships.json", 'utf8'));

mongoose.connect("mongodb://mongo_db:27017/",{'dbName':'dealershipsDB'});

mongoose.connect("mongodb://mongo_db:27017/", { 'dbName': 'dealershipsDB' });

const Reviews = require('./review');

const Dealerships = require('./dealership');

try {
Reviews.deleteMany({}).then(()=>{
Reviews.insertMany(reviews_data['reviews']);
Reviews.deleteMany({}).then(() => {
Reviews.insertMany(reviews_data.reviews);
});
Dealerships.deleteMany({}).then(()=>{
Dealerships.insertMany(dealerships_data['dealerships']);
Dealerships.deleteMany({}).then(() => {
Dealerships.insertMany(dealerships_data.dealerships);
});

} catch (error) {
res.status(500).json({ error: 'Error fetching documents' });
console.error(error);
}


// 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
Expand All @@ -49,7 +46,7 @@ app.get('/fetchReviews', async (req, res) => {
// Express route to fetch reviews by a particular dealer
app.get('/fetchReviews/dealer/:id', async (req, res) => {
try {
const documents = await Reviews.find({dealership: req.params.id});
const documents = await Reviews.find({ dealership: req.params.id });
res.json(documents);
} catch (error) {
res.status(500).json({ error: 'Error fetching documents' });
Expand All @@ -58,7 +55,6 @@ app.get('/fetchReviews/dealer/:id', async (req, res) => {

// Express route to fetch all dealerships
app.get('/fetchDealers', async (req, res) => {

try {
const documents = await Dealerships.find();
res.json(documents);
Expand All @@ -69,7 +65,6 @@ app.get('/fetchDealers', async (req, res) => {

// Express route to fetch Dealers by a particular state
app.get('/fetchDealers/:state', async (req, res) => {

try {
const documents = await Dealerships.find({ state: req.params.state });
res.json(documents);
Expand All @@ -80,44 +75,40 @@ app.get('/fetchDealers/:state', async (req, res) => {

// Express route to fetch dealer by a particular id
app.get('/fetchDealer/:id', async (req, res) => {

try {
// We search using the custom numeric id field from your JSON file structure
const document = await Dealerships.findOne({ id: req.params.id });

if (!document) {
return res.status(404).json({ error: 'Dealership not found' });
}

res.json(document);
} catch (error) {
res.status(500).json({ error: 'Error fetching dealership by id' });
}
});

//Express route to insert review
// 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 } )
let new_id = documents[0]['id']+1
const data = JSON.parse(req.body);
const documents = await Reviews.find().sort({ 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'],
});
"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
});

try {
const savedReview = await review.save();
res.json(savedReview);
} catch (error) {
console.log(error);
console.log(error);
res.status(500).json({ error: 'Error inserting review' });
}
});
Expand Down
11 changes: 6 additions & 5 deletions server/database/dealership.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
/* jshint esversion: 6 */
const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const dealerships = new Schema({
id: {
id: {
type: Number,
required: true,
},
city: {
required: true
},
city: {
type: String,
required: true
},
Expand All @@ -32,7 +33,7 @@ const dealerships = new Schema({
required: true
},
short_name: {
type: String,
type: String
},
full_name: {
type: String,
Expand Down
15 changes: 8 additions & 7 deletions server/database/inventory.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
/* jshint esversion: 6 */
const { Int32 } = require('mongodb');
const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const cars = new Schema({
dealer_id: {
dealer_id: {
type: Number,
required: true
},
make: {
},
make: {
type: String,
required: true
},
model: {
model: {
type: String,
required: true
},
bodyType: {
bodyType: {
type: String,
required: true
},
year: {
year: {
type: Number,
required: true
},
mileage: {
mileage: {
type: Number,
required: true
}
Expand Down
13 changes: 7 additions & 6 deletions server/database/review.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
/* jshint esversion: 6 */
const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const reviews = new Schema({
id: {
id: {
type: Number,
required: true,
},
name: {
required: true
},
name: {
type: String,
required: true
},
dealership: {
type: Number,
required: true,
required: true
},
review: {
type: String,
Expand All @@ -38,7 +39,7 @@ const reviews = new Schema({
car_year: {
type: Number,
required: true
},
}
});

module.exports = mongoose.model('reviews', reviews);
21 changes: 11 additions & 10 deletions server/djangoapp/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from django.db import models
from django.utils.timezone import now
from django.core.validators import MaxValueValidator, MinValueValidator


Expand All @@ -14,27 +13,29 @@ def __str__(self):
return self.name # Return the name as the string representation



# <HINT> Create a Car Model model `class CarModel(models.Model):`:
class CarModel(models.Model):
car_make = models.ForeignKey(CarMake, on_delete=models.CASCADE) # Many-to-One relationship
dealer_id = models.IntegerField() # <- instructions asked this missing field
# Many-to-One relationship
car_make = models.ForeignKey(CarMake, on_delete=models.CASCADE)
dealer_id = models.IntegerField()
name = models.CharField(max_length=100)

CAR_TYPES = [
('SEDAN', 'Sedan'),
('SUV', 'SUV'),
('WAGON', 'Wagon'),
]
type = models.CharField(max_length=10, choices=CAR_TYPES, default='SUV')

# Updated default to 2026 and MaxValueValidator to 2026 to avoid validation errors
year = models.IntegerField(default=2026,

# Updated default to 2026 to avoid validation errors
year = models.IntegerField(
default=2026,
validators=[
MaxValueValidator(2026),
MinValueValidator(2015)
])
]
)

def __str__(self):
return self.car_make.name + " " + self.name # Returns full name (e.g. "Toyota Corolla")
return self.car_make.name + " " + self.name

8 changes: 5 additions & 3 deletions server/djangoapp/populate.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
from .models import CarMake, CarModel


def initiate():
# 1. Create CarMake instances
makes = {
"NISSAN": "Japanese", "Mercedes": "German",
"NISSAN": "Japanese", "Mercedes": "German",
"Audi": "German", "Kia": "Korean", "Toyota": "Japanese"
}
make_objs = {}
for name, tech in makes.items():
make_objs[name] = CarMake.objects.create(
name=name,
name=name,
description=f"Great cars. {tech} technology"
)

Expand All @@ -34,6 +35,7 @@ def initiate():

for name, m_type, year, make in models:
CarModel.objects.create(
name=name, type=m_type, year=year,
name=name, type=m_type, year=year,
car_make=make, dealer_id=1
)

24 changes: 12 additions & 12 deletions server/djangoapp/restapis.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,28 @@
'sentiment_analyzer_url',
default="http://localhost:5050/")


# def get_request(endpoint, **kwargs):
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
request_url = backend_url + endpoint + "?" + params

print("GET from {} ".format(request_url))
try:
# Call get method of requests library with URL and parameters
response = requests.get(request_url)
return response.json()
except:
# If any error occurs
print("Network exception occurred")
except Exception as err:
print(f"Network exception occurred: {err}")


# def analyze_review_sentiments(text):
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)
Expand All @@ -42,11 +42,11 @@ def analyze_review_sentiments(text):


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:
print("Network exception occurred")
except Exception as err:
print(f"Network exception occurred: {err}")

Loading
Loading