Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const ctrlWrapper = require('../../helpers/ctrlWrapper');
- const express = require('express');
- const { Op } = require('sequelize');
- const { Events, EventTypes, EventAddress } = require('../../models'); // Подключение моделей Sequelize
- const searchEventsController = ctrlWrapper(async (req, res) => {
- const { query = '', page, limit } = req.query;
- const pageNumber = parseInt(page) || 1;
- const limitNumber = parseInt(limit) || 10;
- const { count, rows: events } = await Events.findAndCountAll({
- where: {
- [Op.or]: [
- { eventTitle: { [Op.like]: `%${query}%` } }, // Поиск по eventTitle содержащему search-word
- { '$EventTypes.eventType$': { [Op.like]: `%${query}%` } }, // Поиск по eventType (используя связь через EventTypes)
- { '$eventAddress.city$': { [Op.like]: `%${query}%` } }, // Поиск по city (используя связь через eventAddress)
- ],
- },
- include: [
- {
- model: EventTypes,
- attributes: ['eventType'], // Используем пустые атрибуты, чтобы исключить eventType из результатов, так как он уже будет доступен в атрибутах события
- },
- {
- model: EventAddress,
- as: 'eventAddress',
- attributes: ['city'], // Используем пустые атрибуты, чтобы исключить city из результатов, так как он уже будет доступен в атрибутах события
- },
- ],
- });
- res.status(200).json({ events, count, page: pageNumber, limit: limitNumber });
- });
- module.exports = searchEventsController;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement