"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.start = exports.port = exports.baseUrl = exports.app = void 0; const express_1 = __importDefault(require("express")); const database_1 = require("./config/database"); const Activity_1 = require("./models/Activity"); const Leaderboard_1 = require("./models/Leaderboard"); const Team_1 = require("./models/Team"); const User_1 = require("./models/User"); const Workout_1 = require("./models/Workout"); const app = (0, express_1.default)(); exports.app = app; const port = Number(process.env.PORT) || 8000; exports.port = port; const codespaceName = process.env.CODESPACE_NAME; const baseUrl = codespaceName ? `https://${codespaceName}-8000.app.github.dev` : `http://localhost:${port}`; exports.baseUrl = baseUrl; app.use(express_1.default.json()); app.get("/health", (_req, res) => { res.status(200).json({ status: "ok", baseUrl }); }); app.get("/api/users/", async (_req, res) => { try { const items = await User_1.UserModel.find().sort({ createdAt: -1 }).lean(); res.status(200).json({ resource: "users", count: items.length, items }); } catch (error) { res.status(500).json({ message: "Failed to fetch users", error }); } }); app.get("/api/teams/", async (_req, res) => { try { const items = await Team_1.TeamModel.find() .populate("captain", "username email") .populate("members", "username email") .sort({ createdAt: -1 }) .lean(); res.status(200).json({ resource: "teams", count: items.length, items }); } catch (error) { res.status(500).json({ message: "Failed to fetch teams", error }); } }); app.get("/api/activities/", async (_req, res) => { try { const items = await Activity_1.ActivityModel.find() .populate("user", "username email") .populate("team", "name city") .sort({ completedAt: -1 }) .lean(); res.status(200).json({ resource: "activities", count: items.length, items }); } catch (error) { res.status(500).json({ message: "Failed to fetch activities", error }); } }); app.get("/api/leaderboard/", async (_req, res) => { try { const items = await Leaderboard_1.LeaderboardModel.find() .populate("entries.user", "username email") .populate("entries.team", "name city") .sort({ generatedAt: -1 }) .lean(); res.status(200).json({ resource: "leaderboard", count: items.length, items }); } catch (error) { res.status(500).json({ message: "Failed to fetch leaderboard", error }); } }); app.get("/api/workouts/", async (_req, res) => { try { const items = await Workout_1.WorkoutModel.find().sort({ createdAt: -1 }).lean(); res.status(200).json({ resource: "workouts", count: items.length, items }); } catch (error) { res.status(500).json({ message: "Failed to fetch workouts", error }); } }); const start = async () => { try { await (0, database_1.connectDatabase)(); app.listen(port, () => { console.log(`OctoFit backend listening on ${baseUrl}`); }); } catch (error) { console.error("Failed to start backend:", error); process.exit(1); } }; exports.start = start; void start();