Files
eventmaster/software/backend/routes/events.routes.ts
2024-10-08 14:30:39 +02:00

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)
})
})