129 lines
2.7 KiB
JavaScript
129 lines
2.7 KiB
JavaScript
import express from "express";
|
|
import cors from "cors";
|
|
import dotenv from "dotenv";
|
|
dotenv.config();
|
|
|
|
const app = express();
|
|
|
|
// Middleware
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// =========================
|
|
// ROOT (optional)
|
|
// =========================
|
|
app.get("/", (req, res) => {
|
|
res.send("Encore API is running");
|
|
});
|
|
|
|
// =========================
|
|
// TICKETMASTER EVENTS (PROXY)
|
|
// =========================
|
|
const TM_API_KEY = process.env.TM_API_KEY;
|
|
|
|
app.get("/api/events", async (req, res) => {
|
|
|
|
const city = req.query.city;
|
|
|
|
if (!city) {
|
|
return res.status(400).json({ message: "City is required" });
|
|
}
|
|
|
|
try {
|
|
const url = `https://app.ticketmaster.com/discovery/v2/events.json?apikey=${TM_API_KEY}&city=${city}`;
|
|
|
|
const response = await fetch(url);
|
|
const data = await response.json();
|
|
|
|
res.json(data);
|
|
|
|
} catch (error) {
|
|
console.error("Event fetch error:", error);
|
|
res.status(500).json({ message: "Error fetching events" });
|
|
}
|
|
});
|
|
|
|
// =========================
|
|
// INVITATIONS SYSTEM
|
|
// =========================
|
|
let invitations = [];
|
|
let idCounter = 1;
|
|
|
|
// SEND INVITATION
|
|
app.post("/api/invitation", (req, res) => {
|
|
|
|
if (!req.body) {
|
|
return res.status(400).json({ message: "Missing request body" });
|
|
}
|
|
|
|
const fromUser = req.header("X-Username");
|
|
const { toUser, eventId, eventName } = req.body;
|
|
|
|
if (!fromUser || !toUser) {
|
|
return res.status(400).json({ message: "Missing users" });
|
|
}
|
|
|
|
const invitation = {
|
|
id: idCounter++,
|
|
fromUser,
|
|
toUser,
|
|
eventId,
|
|
eventName,
|
|
status: "pending"
|
|
};
|
|
|
|
invitations.push(invitation);
|
|
|
|
res.json(invitation);
|
|
});
|
|
|
|
// GET INVITATIONS FOR USER
|
|
app.get("/api/invitation", (req, res) => {
|
|
|
|
const user = req.header("X-Username");
|
|
|
|
if (!user) {
|
|
return res.status(400).json({ message: "Missing username" });
|
|
}
|
|
|
|
const userInvitations = invitations.filter(
|
|
inv => inv.toUser === user
|
|
);
|
|
|
|
res.json(userInvitations);
|
|
});
|
|
|
|
// ACCEPT INVITATION
|
|
app.post("/api/invitation/:id/accept", (req, res) => {
|
|
|
|
const inv = invitations.find(i => i.id == req.params.id);
|
|
|
|
if (!inv) {
|
|
return res.status(404).json({ message: "Invitation not found" });
|
|
}
|
|
|
|
inv.status = "accepted";
|
|
|
|
res.json(inv);
|
|
});
|
|
|
|
// DECLINE INVITATION
|
|
app.post("/api/invitation/:id/decline", (req, res) => {
|
|
|
|
const inv = invitations.find(i => i.id == req.params.id);
|
|
|
|
if (!inv) {
|
|
return res.status(404).json({ message: "Invitation not found" });
|
|
}
|
|
|
|
inv.status = "declined";
|
|
|
|
res.json(inv);
|
|
});
|
|
|
|
// =========================
|
|
// START SERVER
|
|
// =========================
|
|
app.listen(3000, () => {
|
|
console.log("Server running on http://localhost:3000");
|
|
}); |