Skip to content

Commit 3dac116

Browse files
committed
add search for beer by brewery functionality
1 parent 9e9a740 commit 3dac116

File tree

4 files changed

+94
-44
lines changed

4 files changed

+94
-44
lines changed

public/styles/brewery.css

+22-3
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@
7575
text-align: center;
7676
font-size: 1em;
7777
width: 100%;
78+
display: flex;
79+
align-items: center;
80+
justify-content: center;
7881
}
7982

8083
.symbol {
@@ -83,11 +86,27 @@
8386
margin-left: .5em;
8487
}
8588

86-
.details#beers {
87-
color: #cc6600
89+
#beers {
90+
color: #cc6600;
91+
display:inline-block;
92+
background-color: transparent;
93+
border: none;
94+
border-bottom: #cc6600 1px solid;
95+
outline:none;
96+
font-size: 16px;
97+
padding:0;
98+
cursor: pointer;
99+
}
100+
#beers:hover{
101+
color: #fc0;
102+
border-bottom: none;
103+
}
104+
#beers:active{
105+
background-color:none;
106+
88107
}
89108

90-
.brewery__desciption {
109+
.brewery__description {
91110
display: flex;
92111
flex-wrap: wrap;
93112
color: #999999;

routes/search.js

+62-32
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,27 @@ const router = express.Router();
77

88
router.get("/", asyncHandler( async(req,res)=>{
99
const search = req.query;
10-
console.log(search)
11-
const {searchType, query} = search;
10+
let {searchType, query, id} = search;
11+
id = parseInt(id,10);
1212
const accessToken = req.cookies["TAPPDIN_ACCESS_TOKEN"];
13+
1314
if(searchType === "beers"){
1415
const results = await searchBeers(query, accessToken)
1516
const beers = results.slice(0, 10);
16-
beers.forEach((beer) => {
17-
if (beer.Checkin && beer.Checkin.length) {
18-
const checkinsScores = checkins.map((checkin) => checkin.rating);
19-
beer.avgRating =
20-
checkinsScores.reduce((sum, rating) => {
21-
sum += rating;
22-
}) / checkins.length;
23-
}
24-
beer.image = beer.image || "/imgs/beer-default.jpg";
25-
date = new Date(beer.createdAt);
26-
beer.createdAt = date.toDateString();
27-
});
17+
cleanBeerData(beers);
2818
res.render("search-results", { query, beers });
19+
20+
} else if(searchType === "beersByBrewery"){
21+
const beers = await searchBeersByBrewery(id, accessToken);
22+
console.log(beers[1])
23+
24+
cleanBeerData(beers);
25+
res.render("search-results", {query, beers});
26+
2927
} else{
30-
const data = await FetchRouter.post(
31-
`${process.env.BACKEND_URL}/breweries/search`,
32-
accessToken,
33-
{ query }
34-
);
35-
const { results } = await data.json();
28+
const results = await searchBreweries(query, accessToken)
3629
const breweries = results.slice(0, 10);
37-
breweries.forEach((brewery) => {
38-
if (brewery.Checkin && brewery.Checkin.length) {
39-
const checkinsScores = checkins.map((checkin) => checkin.rating);
40-
brewery.avgRating =
41-
checkinsScores.reduce((sum, rating) => {
42-
sum += rating;
43-
}) / checkins.length;
44-
}
45-
// brewery.image = brewery.image || "/imgs/brewery-default.jpg";
46-
date = new Date(brewery.createdAt);
47-
brewery.createdAt = date.toDateString();
48-
});
30+
cleanBreweryData(breweries);
4931
res.render("search-results", { query, breweries });
5032
}
5133
}));
@@ -60,5 +42,53 @@ async function searchBeers(query, token){
6042
return results;
6143
}
6244

45+
async function searchBeersByBrewery(id, token){
46+
console.log("TOKEN",token)
47+
const data = await FetchRouter.get(
48+
`${process.env.BACKEND_URL}/beers/brewery/${id}`,
49+
token
50+
);
51+
const {beers} = await data.json();
52+
return beers;
53+
}
54+
async function searchBreweries(query,token){
55+
const data = await FetchRouter.post(
56+
`${process.env.BACKEND_URL}/breweries/search`,
57+
token,
58+
{ query }
59+
);
60+
const { results } = await data.json();
61+
return results;
62+
}
63+
64+
function cleanBeerData(beers){
65+
beers.forEach((beer) => {
66+
if (beer.Checkin && beer.Checkin.length) {
67+
const checkinsScores = checkins.map((checkin) => checkin.rating);
68+
beer.avgRating =
69+
checkinsScores.reduce((sum, rating) => {
70+
sum += rating;
71+
}) / checkins.length;
72+
}
73+
beer.image = beer.image || "/imgs/beer-default.jpg";
74+
date = new Date(beer.createdAt);
75+
beer.createdAt = date.toDateString();
76+
});
77+
}
78+
79+
function cleanBreweryData(breweries){
80+
breweries.forEach((brewery) => {
81+
if (brewery.Checkin && brewery.Checkin.length) {
82+
const checkinsScores = checkins.map((checkin) => checkin.rating);
83+
brewery.avgRating =
84+
checkinsScores.reduce((sum, rating) => {
85+
sum += rating;
86+
}) / checkins.length;
87+
}
88+
date = new Date(brewery.createdAt);
89+
brewery.createdAt = date.toDateString();
90+
});
91+
}
92+
6393

6494
module.exports = router;

views/beer-list.pug

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ mixin beerlist(beer)
66
.beer__main-info
77
a(href=`/beers/${beer.id}`).beer__name=beer.name
88
a(href=`/breweries/${beer.Brewery.id}`).beer_brewery=beer.Brewery.name
9-
p.beer__style=beer.BeerType.typeOfBeer
9+
if beer.BeerType && beer.BeerType.typeOfBeer
10+
p.beer__style=beer.BeerType.typeOfBeer
11+
else
12+
p.beer__style No Beer type listed 😕
1013
p.beer__description=beer.description
1114
.beer__checkin-container
1215
a.beer__checkin-box(href=`/checkins/${beer.id}`)

views/brewery.pug

+6-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ block content
1212
.brewery__info-name
1313
h1.brewery__name=brewery.name
1414
p.brewery__location=brewery.location
15-
p.brewery__type Micro Brewery
1615
.brewery__info-stats
1716
.brewery__details
1817
p.details#reviews
@@ -22,20 +21,19 @@ block content
2221
else
2322
span No ratings yet!
2423
p.details#rating #{brewery.numCheckins} review(s)
25-
p.details#beers #{brewery.numberOfBeers} Beer(s)
26-
//details#beers is a linked
24+
form.details(method="get" action="/search/")
25+
input(type="hidden" name="id" value=brewery.id)
26+
input(type="hidden" name="query" value=`Beers of ${brewery.name}`)
27+
input(type="hidden" name="searchType" value="beersByBrewery")
28+
input#beers(type="submit" value=`${brewery.numberOfBeers} Beer(s)`)
2729
.brewery__bottom
28-
.brewery__desciption=brewery.description
30+
.brewery__description=brewery.description
2931
.box-container
3032
a.facebook(href="https://www.facebook.com/")
3133
a.twitter(href="https://twitter.com/explore")
3234
a.instagram(href="https://www.instagram.com/")
3335
a.brewery__link(href=brewery.website)
34-
// boxes need to be linked
3536
.brewery__sidebar
3637

37-
// TODO: p.sidebar__info Sidebar stuff maybe
38-
//TODO: sidebar?
39-
4038
main
4139
include recent-activity

0 commit comments

Comments
 (0)