feat: implement backend API with models and seed data for OctoFit application

This commit is contained in:
2026-06-20 01:49:15 +00:00
parent 39ef098873
commit f8c4a57e78
17 changed files with 669 additions and 5 deletions
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActivityModel = void 0;
const mongoose_1 = require("mongoose");
const activitySchema = new mongoose_1.Schema({
user: { type: mongoose_1.Types.ObjectId, ref: "User", required: true },
team: { type: mongoose_1.Types.ObjectId, ref: "Team", required: true },
type: { type: String, required: true, trim: true },
durationMinutes: { type: Number, required: true, min: 1 },
caloriesBurned: { type: Number, required: true, min: 1 },
completedAt: { type: Date, required: true },
}, {
timestamps: true,
});
exports.ActivityModel = (0, mongoose_1.model)("Activity", activitySchema);
+18
View File
@@ -0,0 +1,18 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LeaderboardModel = void 0;
const mongoose_1 = require("mongoose");
const leaderboardEntrySchema = new mongoose_1.Schema({
user: { type: mongoose_1.Types.ObjectId, ref: "User", required: true },
team: { type: mongoose_1.Types.ObjectId, ref: "Team", required: true },
points: { type: Number, required: true, min: 0 },
rank: { type: Number, required: true, min: 1 },
}, { _id: false });
const leaderboardSchema = new mongoose_1.Schema({
period: { type: String, required: true, trim: true },
generatedAt: { type: Date, required: true },
entries: { type: [leaderboardEntrySchema], required: true },
}, {
timestamps: true,
});
exports.LeaderboardModel = (0, mongoose_1.model)("Leaderboard", leaderboardSchema);
+13
View File
@@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TeamModel = void 0;
const mongoose_1 = require("mongoose");
const teamSchema = new mongoose_1.Schema({
name: { type: String, required: true, trim: true },
city: { type: String, required: true, trim: true },
captain: { type: mongoose_1.Types.ObjectId, ref: "User", required: true },
members: [{ type: mongoose_1.Types.ObjectId, ref: "User", required: true }],
}, {
timestamps: true,
});
exports.TeamModel = (0, mongoose_1.model)("Team", teamSchema);
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserModel = void 0;
const mongoose_1 = require("mongoose");
const userSchema = new mongoose_1.Schema({
username: { type: String, required: true, trim: true },
email: { type: String, required: true, unique: true, lowercase: true, trim: true },
age: { type: Number, required: true, min: 13 },
heightCm: { type: Number, required: true, min: 100 },
weightKg: { type: Number, required: true, min: 30 },
fitnessGoal: { type: String, required: true, trim: true },
}, {
timestamps: true,
});
exports.UserModel = (0, mongoose_1.model)("User", userSchema);
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.WorkoutModel = void 0;
const mongoose_1 = require("mongoose");
const workoutSchema = new mongoose_1.Schema({
title: { type: String, required: true, trim: true },
category: { type: String, required: true, trim: true },
difficulty: { type: String, required: true, trim: true },
durationMinutes: { type: Number, required: true, min: 1 },
equipment: { type: [String], required: true },
targetMuscles: { type: [String], required: true },
}, {
timestamps: true,
});
exports.WorkoutModel = (0, mongoose_1.model)("Workout", workoutSchema);