const AbonemmentService = require('../../services/abonemments/AbonemmentService'); const service = new AbonemmentService(); module.exports = { async subscribe(req, res) { try { const rawUser = req.user || {}; console.log('[CONTROLLER SUBSCRIBE] Raw req.user:', { id: rawUser.id, userId: rawUser.userId, email: rawUser.email, role: rawUser.role }); const actorUser = { ...rawUser, id: rawUser.id ?? rawUser.userId ?? null }; console.log('[CONTROLLER SUBSCRIBE] Normalized actorUser:', { id: actorUser.id, email: actorUser.email, role: actorUser.role }); const result = await service.subscribeOrder({ userId: actorUser.id || null, items: req.body.items, billingInterval: req.body.billing_interval, intervalCount: req.body.interval_count, isAutoRenew: req.body.is_auto_renew, firstName: req.body.firstName, lastName: req.body.lastName, email: req.body.email, street: req.body.street, postalCode: req.body.postalCode, city: req.body.city, country: req.body.country, frequency: req.body.frequency, startDate: req.body.startDate, actorUser, // normalized to include id referredBy: req.body.referred_by, }); return res.json({ success: true, data: result }); } catch (err) { console.error('[ABONEMENT SUBSCRIBE]', err); return res.status(400).json({ success: false, message: err.message }); } }, async pause(req, res) { try { const rawUser = req.user || {}; const actorUser = { ...rawUser, id: rawUser.id ?? rawUser.userId ?? null }; const data = await service.pause({ abonementId: req.params.id, actorUser }); return res.json({ success: true, data }); } catch (err) { console.error('[ABONEMENT PAUSE]', err); return res.status(400).json({ success: false, message: err.message }); } }, async resume(req, res) { try { const rawUser = req.user || {}; const actorUser = { ...rawUser, id: rawUser.id ?? rawUser.userId ?? null }; const data = await service.resume({ abonementId: req.params.id, actorUser }); return res.json({ success: true, data }); } catch (err) { console.error('[ABONEMENT RESUME]', err); return res.status(400).json({ success: false, message: err.message }); } }, async cancel(req, res) { try { const rawUser = req.user || {}; const actorUser = { ...rawUser, id: rawUser.id ?? rawUser.userId ?? null }; const data = await service.cancel({ abonementId: req.params.id, actorUser }); return res.json({ success: true, data }); } catch (err) { console.error('[ABONEMENT CANCEL]', err); return res.status(400).json({ success: false, message: err.message }); } }, async renew(req, res) { try { const rawUser = req.user || {}; const actorUser = { ...rawUser, id: rawUser.id ?? rawUser.userId ?? null }; const data = await service.adminRenew({ abonementId: req.params.id, actorUser }); return res.json({ success: true, data }); } catch (err) { console.error('[ABONEMENT RENEW]', err); return res.status(403).json({ success: false, message: err.message }); } }, async getMine(req, res) { try { const rawUser = req.user || {}; const id = rawUser.id ?? rawUser.userId; console.log('[CONTROLLER GET MINE] Using user id:', id); const data = await service.getMyAbonements({ userId: id }); return res.json({ success: true, data }); } catch (err) { console.error('[ABONEMENT MINE]', err); return res.status(500).json({ success: false, message: 'Internal error' }); } }, async getHistory(req, res) { try { return res.json({ success: true, data: await service.getHistory({ abonementId: req.params.id }) }); } catch (err) { console.error('[ABONEMENT HISTORY]', err); return res.status(400).json({ success: false, message: err.message }); } }, async adminList(req, res) { try { return res.json({ success: true, data: await service.adminList({ status: req.query.status }) }); } catch (err) { console.error('[ABONEMENT ADMIN LIST]', err); return res.status(403).json({ success: false, message: err.message }); } }, async getReferredSubscriptions(req, res) { try { const rawUser = req.user || {}; const id = rawUser.id ?? rawUser.userId; return res.json({ success: true, data: await service.getReferredSubscriptions({ userId: id, email: rawUser.email }) }); } catch (err) { console.error('[ABONEMENT REFERRED SUBSCRIPTIONS]', err); return res.status(400).json({ success: false, message: err.message }); } }, };