import express from 'express'; import axios from 'axios'; import { authenticateApiKey, apiLimiter } from '../middleware/midware.js'; import { Federation } from '../models.js'; const FedsRoutes = express.Router(); FedsRoutes.post("/api/v1/fed/newfed", authenticateApiKey, apiLimiter, async (req, res) => { try { const { name, owner } = req.body; const existing = await Federation.findOne({ name }); if (existing) return res.status(400).json({ error: "Federation already exists" }); const federation = new Federation({ name, owner, banned_users: [], sub_federations: [] }); await federation.save(); res.json({ message: "Federation created successfully", federation }); } catch (err) { res.status(500).json({ error: err.message }); } }); FedsRoutes.post("/api/v1/fed/subfed", authenticateApiKey, apiLimiter, async (req, res) => { try { const { parent_uuid, child_uuid } = req.body; const parent = await Federation.findOne({ uuid: parent_uuid }); const child = await Federation.findOne({ uuid: child_uuid }); if (!parent || !child) return res.status(404).json({ error: "Federation not found" }); if (!parent.sub_federations.includes(child.uuid)) { parent.sub_federations.push(child.uuid); await parent.save(); } res.json({ message: `Federation ${child.name} is now a sub-federation of ${parent.name}` }); } catch (err) { res.status(500).json({ error: err.message }); } }); FedsRoutes.get("/api/v1/fed/getfed/:uuid", authenticateApiKey, apiLimiter, async (req, res) => { try { const federation = await Federation.findOne({ uuid: req.params.uuid }); if (!federation) return res.status(404).json({ error: "Federation not found" }); const subFeds = await Federation.find({ uuid: { $in: federation.sub_federations } }); res.json({ federation, sub_federations: subFeds }); } catch (err) { res.status(500).json({ error: err.message }); } }); FedsRoutes.post("/api/v1/fed/ban", authenticateApiKey, apiLimiter, async (req, res) => { try { const { federation_uuid, user_id } = req.body; const federation = await Federation.findOne({ uuid: federation_uuid }); if (!federation) return res.status(404).json({ error: "Federation not found" }); if (!federation.banned_users.includes(user_id)) { federation.banned_users.push(user_id); await federation.save(); } const subFeds = await Federation.find({ uuid: { $in: federation.sub_federations } }); for (const subFed of subFeds) { if (!subFed.banned_users.includes(user_id)) { subFed.banned_users.push(user_id); await subFed.save(); } } res.json({ message: `User ${user_id} banned in ${federation.name} and all its sub-federations` }); } catch (err) { res.status(500).json({ error: err.message }); } }); export { FedsRoutes };