Skip to content

Commit 0d3c6c8

Browse files
committed
⭐ feat(api): add city endpoint with filters
1 parent be03f76 commit 0d3c6c8

File tree

2 files changed

+168
-31
lines changed

2 files changed

+168
-31
lines changed

data/cars.json

+144-31
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,145 @@
11
[
2-
{
3-
"id": 1,
4-
"name": "Range Rover Sport",
5-
"price": "84,777",
6-
"url": "https://www.carhelpcanada.com/wp-content/uploads/2019/12/2020-Range-Rover-Evoque-2.jpg",
7-
"seats": 5,
8-
"miles": "14,666",
9-
"features": ["No Accidents", "Low KM", "Vehicle Detailed", "Leather Interior"],
10-
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et laboriosam!"
11-
},
12-
{
13-
"id": 2,
14-
"name": "Rolls Royce Ghost",
15-
"price": "455,000",
16-
"url": "https://robbreport.com/wp-content/uploads/2021/03/1-5.jpg?w=1000",
17-
"seats": 5,
18-
"miles": "53,666",
19-
"features": ["No Accidents", "Low KM", "Vehicle Detailed", "Leather Interior"],
20-
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et laboriosam! Numquam ut rem, blanditiis est rerum tenetur maxime delectus"
21-
},
22-
{
23-
"id": 4,
24-
"name": "Porsche Taycan",
25-
"price": "180,434",
26-
"url": "https://www.topgear.com/sites/default/files/cars-car/carousel/2021/02/pcgb20_1441_fine.jpg",
27-
"seats": 5,
28-
"miles": "0",
29-
"features": ["No Accidents", "Low KM", "Vehicle Detailed", "Leather Interior"],
30-
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et"
31-
}
32-
]
2+
{
3+
"id": 1,
4+
"year": 2018,
5+
"name": "Range Rover Sport",
6+
"price": 84777,
7+
"city": "Toronto",
8+
"make": "Land Rover",
9+
"url": "https://www.carhelpcanada.com/wp-content/uploads/2019/12/2020-Range-Rover-Evoque-2.jpg",
10+
"seats": 5,
11+
"miles": "14,666",
12+
"features": [
13+
"No Accidents",
14+
"Low KM",
15+
"Vehicle Detailed",
16+
"Leather Interior"
17+
],
18+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et laboriosam!"
19+
},
20+
{
21+
"id": 2,
22+
"year": 2021,
23+
"name": "Rolls Royce Ghost",
24+
"price": 455000,
25+
"url": "https://robbreport.com/wp-content/uploads/2021/03/1-5.jpg?w=1000",
26+
"seats": 5,
27+
"city": "Miami",
28+
"make": "Rolls-Royce",
29+
"miles": "53,666",
30+
"features": [
31+
"No Accidents",
32+
"Low KM",
33+
"Vehicle Detailed",
34+
"Leather Interior"
35+
],
36+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et laboriosam! Numquam ut rem, blanditiis est rerum tenetur maxime delectus"
37+
},
38+
{
39+
"id": 4,
40+
"year": 2020,
41+
"name": "Porsche Taycan",
42+
"price": 180434,
43+
"url": "https://www.topgear.com/sites/default/files/cars-car/carousel/2021/02/pcgb20_1441_fine.jpg",
44+
"seats": 5,
45+
"make": "Porsche",
46+
"city": "Toronto",
47+
"miles": "0",
48+
"features": [
49+
"No Accidents",
50+
"Low KM",
51+
"Vehicle Detailed",
52+
"Leather Interior"
53+
],
54+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et"
55+
},
56+
{
57+
"id": 5,
58+
"name": "Land Rover Luxury",
59+
"price": 200434,
60+
"url": "https://www.motortrend.com/uploads/2022/04/2022-Range-Rover-First-Edition-P530-SWB-on-road-1.jpg?fit=around%7C875:492",
61+
"seats": 5,
62+
"make": "Land Rover",
63+
"city": "Toronto",
64+
"miles": "0",
65+
"features": [
66+
"No Accidents",
67+
"Low KM",
68+
"Vehicle Detailed",
69+
"Leather Interior"
70+
],
71+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et"
72+
},
73+
{
74+
"id": 6,
75+
"name": "Toyota Corolla",
76+
"year": 2015,
77+
"price": 23000,
78+
"url": "https://crdms.images.consumerreports.org/c_lfill,w_470,q_auto,f_auto/prod/cars/chrome/white/2022TOC040001_1280_01",
79+
"seats": 5,
80+
"make": "Toyota",
81+
"city": "Toronto",
82+
"miles": "0",
83+
"features": [
84+
"No Accidents",
85+
"Low KM",
86+
"Vehicle Detailed",
87+
"Leather Interior"
88+
],
89+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et"
90+
},
91+
{
92+
"id": 7,
93+
"name": "Toyota Sienna",
94+
"year": 2019,
95+
"price": 34000,
96+
"url": "https://upload.wikimedia.org/wikipedia/commons/2/22/2021_Toyota_Sienna_XLE_Hybrid%2C_front_12.21.21.jpg",
97+
"seats": 5,
98+
"make": "Toyota",
99+
"city": "Toronto",
100+
"miles": "0",
101+
"features": [
102+
"No Accidents",
103+
"Low KM",
104+
"Vehicle Detailed",
105+
"Leather Interior"
106+
],
107+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et"
108+
},
109+
{
110+
"id": 8,
111+
"name": "Porsche Targa",
112+
"year": 2014,
113+
"price": 250000,
114+
"url": "https://hips.hearstapps.com/hmg-prod/images/2021-porsche-911-targa-4-4s-108-1597085217.jpg?crop=0.521xw:0.389xh;0.274xw,0.413xh&resize=1200:*",
115+
"seats": 5,
116+
"make": "Porsche",
117+
"city": "Toronto",
118+
"miles": "0",
119+
"features": [
120+
"No Accidents",
121+
"Low KM",
122+
"Vehicle Detailed",
123+
"Leather Interior"
124+
],
125+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et"
126+
},
127+
{
128+
"id": 9,
129+
"name": "Kia Seltos",
130+
"year": 2012,
131+
"price": 39000,
132+
"url": "https://i.gaw.to/content/photos/53/04/530444-kia-seltos-2024-une-bonne-mise-a-jour-s-en-vient.jpg?1024x640",
133+
"seats": 5,
134+
"make": "Kia",
135+
"city": "Miami",
136+
"miles": "0",
137+
"features": [
138+
"No Accidents",
139+
"Low KM",
140+
"Vehicle Detailed",
141+
"Leather Interior"
142+
],
143+
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis odio et"
144+
}
145+
]

server/api/cars/[city].js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import cars from "@/data/cars.json";
2+
3+
export default defineEventHandler((event) => {
4+
const { city } = event.context.params;
5+
const { make, minPrice, maxPrice } = getQuery(event);
6+
7+
let filteredCars = cars;
8+
filteredCars = filteredCars.filter(
9+
(car) => car.city.toLowerCase() === city.toLowerCase()
10+
);
11+
if (make) {
12+
filteredCars = filteredCars.filter(
13+
(car) => car.make.toLowerCase() === make.toLowerCase()
14+
);
15+
}
16+
if (minPrice) {
17+
filteredCars = filteredCars.filter((car) => car.price > parseInt(minPrice));
18+
}
19+
20+
if (maxPrice) {
21+
filteredCars = filteredCars.filter((car) => car.price < parseInt(maxPrice));
22+
}
23+
return filteredCars;
24+
});

0 commit comments

Comments
 (0)