const express = require('express'); const router = express.Router(); const { Op } = require('sequelize'); // Modello Mongoose per le Scommesse const Bet = require('../models/bet.model'); module.exports = (sequelize) => { const { User, Friendship, FriendRequest } = sequelize.models; const { populateBetsWithUsers } = require('../utils/populateBets')(sequelize); // GET /api/initial-data router.get('/initial-data', async (req, res) => { try { // --- Query PostgreSQL --- const currentUser = await User.findByPk(req.userId); const users = await User.findAll(); const friendships = await Friendship.findAll({ where: { [Op.or]: [{ user1Id: req.userId }, { user2Id: req.userId }] }, include: [{ model: User, as: 'user1' }, { model: User, as: 'user2' }] }); const friends = friendships.map(f => (f.user1Id === req.userId ? f.user2 : f.user1)); const receivedFriendRequests = await FriendRequest.findAll({ where: { toUserId: req.userId, status: 'PENDING' }, include: [{ model: User, as: 'fromUser' }, { model: User, as: 'toUser' }] }); const sentFriendRequests = await FriendRequest.findAll({ where: { fromUserId: req.userId, status: 'PENDING' }, include: [{ model: User, as: 'fromUser' }, { model: User, as: 'toUser' }] }); const userGroups = await currentUser.getGroups({ include: [{ model: User, as: 'members', through: { attributes: [] } }] }); // --- Query MongoDB --- const mongoBets = await Bet.find({ 'participants.user': req.userId }).sort({ startDate: -1 }); const mongoPublicBets = await Bet.find({ isPublic: true, 'participants.user': { $ne: req.userId } }); // --- Data Stitching --- const bets = await populateBetsWithUsers(mongoBets); const publicBets = await populateBetsWithUsers(mongoPublicBets); res.json({ currentUser, users, friends, receivedFriendRequests, sentFriendRequests, bets, publicBets, groups: userGroups }); } catch (error) { console.error('Error fetching initial data:', error); res.status(500).json({ message: 'Error fetching initial data', error: error.message }); } }); return router; };