Advertisement
djbob2000

Untitled

Mar 2nd, 2024
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. const ctrlWrapper = require('../../helpers/ctrlWrapper');
  2. const express = require('express');
  3. const { Op } = require('sequelize');
  4. const { Events, EventTypes, EventAddress } = require('../../models'); // Подключение моделей Sequelize
  5.  
  6. const searchEventsController = ctrlWrapper(async (req, res) => {
  7. const { query = '', page, limit } = req.query;
  8. const pageNumber = parseInt(page) || 1;
  9. const limitNumber = parseInt(limit) || 10;
  10.  
  11. const { count, rows: events } = await Events.findAndCountAll({
  12. where: {
  13. [Op.or]: [
  14. { eventTitle: { [Op.like]: `%${query}%` } }, // Поиск по eventTitle содержащему search-word
  15. { '$EventTypes.eventType$': { [Op.like]: `%${query}%` } }, // Поиск по eventType (используя связь через EventTypes)
  16. { '$eventAddress.city$': { [Op.like]: `%${query}%` } }, // Поиск по city (используя связь через eventAddress)
  17. ],
  18. },
  19. include: [
  20. {
  21. model: EventTypes,
  22. attributes: ['eventType'], // Используем пустые атрибуты, чтобы исключить eventType из результатов, так как он уже будет доступен в атрибутах события
  23. },
  24. {
  25. model: EventAddress,
  26. as: 'eventAddress',
  27. attributes: ['city'], // Используем пустые атрибуты, чтобы исключить city из результатов, так как он уже будет доступен в атрибутах события
  28. },
  29. ],
  30. });
  31.  
  32. res.status(200).json({ events, count, page: pageNumber, limit: limitNumber });
  33. });
  34.  
  35. module.exports = searchEventsController;
  36.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement