mirror of
https://github.com/farcasclaudiu/learn-build-apps-copilot-agent.git
synced 2026-06-22 07:01:37 +03:00
feat: refactor server structure by moving server logic to server.js and updating index.ts
This commit is contained in:
+1
-90
@@ -1,92 +1,3 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const express_1 = __importDefault(require("express"));
|
require("./server");
|
||||||
const Activity_1 = require("./models/Activity");
|
|
||||||
const database_1 = require("./config/database");
|
|
||||||
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)();
|
|
||||||
const port = Number(process.env.PORT) || 8000;
|
|
||||||
const codespaceName = process.env.CODESPACE_NAME;
|
|
||||||
const baseUrl = codespaceName
|
|
||||||
? `https://${codespaceName}-8000.app.github.dev`
|
|
||||||
: `http://localhost:${port}`;
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
void start();
|
|
||||||
|
|||||||
+97
@@ -0,0 +1,97 @@
|
|||||||
|
"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();
|
||||||
@@ -1,91 +1 @@
|
|||||||
import express from "express";
|
import "./server";
|
||||||
import { ActivityModel } from "./models/Activity";
|
|
||||||
import { connectDatabase } from "./config/database";
|
|
||||||
import { LeaderboardModel } from "./models/Leaderboard";
|
|
||||||
import { TeamModel } from "./models/Team";
|
|
||||||
import { UserModel } from "./models/User";
|
|
||||||
import { WorkoutModel } from "./models/Workout";
|
|
||||||
|
|
||||||
const app = express();
|
|
||||||
const port = Number(process.env.PORT) || 8000;
|
|
||||||
const codespaceName = process.env.CODESPACE_NAME;
|
|
||||||
const baseUrl = codespaceName
|
|
||||||
? `https://${codespaceName}-8000.app.github.dev`
|
|
||||||
: `http://localhost:${port}`;
|
|
||||||
|
|
||||||
app.use(express.json());
|
|
||||||
|
|
||||||
app.get("/health", (_req, res) => {
|
|
||||||
res.status(200).json({ status: "ok", baseUrl });
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get("/api/users/", async (_req, res) => {
|
|
||||||
try {
|
|
||||||
const items = await 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 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 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 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 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 connectDatabase();
|
|
||||||
app.listen(port, () => {
|
|
||||||
console.log(`OctoFit backend listening on ${baseUrl}`);
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to start backend:", error);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void start();
|
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
import express from "express";
|
||||||
|
import { connectDatabase } from "./config/database";
|
||||||
|
import { ActivityModel } from "./models/Activity";
|
||||||
|
import { LeaderboardModel } from "./models/Leaderboard";
|
||||||
|
import { TeamModel } from "./models/Team";
|
||||||
|
import { UserModel } from "./models/User";
|
||||||
|
import { WorkoutModel } from "./models/Workout";
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const port = Number(process.env.PORT) || 8000;
|
||||||
|
const codespaceName = process.env.CODESPACE_NAME;
|
||||||
|
const baseUrl = codespaceName
|
||||||
|
? `https://${codespaceName}-8000.app.github.dev`
|
||||||
|
: `http://localhost:${port}`;
|
||||||
|
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
app.get("/health", (_req, res) => {
|
||||||
|
res.status(200).json({ status: "ok", baseUrl });
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/api/users/", async (_req, res) => {
|
||||||
|
try {
|
||||||
|
const items = await 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 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 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 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 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 connectDatabase();
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`OctoFit backend listening on ${baseUrl}`);
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to start backend:", error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export { app, baseUrl, port, start };
|
||||||
|
|
||||||
|
void start();
|
||||||
Reference in New Issue
Block a user