84 lines
1.8 KiB
TypeScript
84 lines
1.8 KiB
TypeScript
import { Concert } from "../models/acts/concert.model";
|
|
import { Band } from "../models/acts/band.model";
|
|
import { Event } from "../models/acts/event.model";
|
|
import { Request, Response, Router } from "express";
|
|
import { Location } from "../models/locations/location.model";
|
|
import { Genre } from "../models/acts/genre.model";
|
|
import { City } from "../models/locations/city.model";
|
|
|
|
export const events = Router()
|
|
|
|
events.get("/", async (req: Request, res: Response) => {
|
|
let cityName = req.query.city
|
|
let genreName = req.query.genre
|
|
let sort = req.query.sort
|
|
let count = req.query.count
|
|
let cityFilter = {}
|
|
let genreFilter = {}
|
|
|
|
if (cityName != undefined) {
|
|
cityFilter = {
|
|
model: City,
|
|
where: { name: cityName }
|
|
}
|
|
} else {
|
|
cityFilter = {
|
|
model: City
|
|
}
|
|
}
|
|
|
|
|
|
if (genreName != undefined) {
|
|
genreFilter = {
|
|
model: Genre,
|
|
where: { name: genreName }
|
|
}
|
|
} else {
|
|
genreFilter = {
|
|
model: Genre
|
|
}
|
|
}
|
|
|
|
Event.findAll({
|
|
include: [
|
|
{
|
|
model: Concert,
|
|
required: true,
|
|
include: [
|
|
{
|
|
model: Location,
|
|
required: true,
|
|
include: [
|
|
cityFilter
|
|
]
|
|
}
|
|
],
|
|
},
|
|
{
|
|
model: Band,
|
|
required: true,
|
|
include: [
|
|
genreFilter
|
|
]
|
|
}
|
|
]
|
|
})
|
|
.then(events => {
|
|
if (sort != undefined) {
|
|
events.sort((event1, event2) => {
|
|
if (sort == "desc") {
|
|
return event2.dataValues.concerts.length - event1.dataValues.concerts.length
|
|
} else if (sort == "asc") {
|
|
return event1.dataValues.concerts.length - event2.dataValues.concerts.length
|
|
}
|
|
})
|
|
}
|
|
|
|
if (count != undefined) {
|
|
events.splice(Number(count))
|
|
}
|
|
|
|
res.status(200).json(events)
|
|
})
|
|
|
|
}) |