build: add TypeScript configuration and generate declaration files

- Add tsconfig.json for TypeScript compilation with declaration and source map generation
- Generate .d.ts declaration files for all modules, services, controllers, and models
- Update package.json with NestJS dependencies and TypeScript development tools
- Include database files in the distribution output for persistence
This commit is contained in:
Jp
2026-01-31 09:00:26 +08:00
parent 0fa0343798
commit f521970a65
174 changed files with 7205 additions and 1633 deletions

View File

@@ -0,0 +1,52 @@
import { UtilsService } from '../utils/utils.service';
import { UserGoal } from '../models/user-goal.model';
import { WeightLog } from '../models/weight-log.model';
import { Response } from 'express';
export declare class DashboardController {
private utilsService;
private userGoalModel;
private weightLogModel;
constructor(utilsService: UtilsService, userGoalModel: typeof UserGoal, weightLogModel: typeof WeightLog);
getDashboard(req: any, res: Response): Promise<{
user: any;
nutrition: {
calories: number;
protein: number;
carbs: number;
fat: number;
meals: any[];
};
water: {
total_ml: number;
logs: {
id: any;
amount_ml: number;
time: string;
}[];
};
goals: UserGoal;
weightLogToday: WeightLog;
weightChange: any;
remaining: {
calories: number;
protein: number;
carbs: number;
fat: number;
water: number;
};
macroPercentages: {
protein: number;
carbs: number;
fat: number;
};
} | {
user?: undefined;
nutrition?: undefined;
water?: undefined;
goals?: undefined;
weightLogToday?: undefined;
weightChange?: undefined;
remaining?: undefined;
macroPercentages?: undefined;
}>;
}

100
dist/dashboard/dashboard.controller.js vendored Normal file
View File

@@ -0,0 +1,100 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DashboardController = void 0;
const common_1 = require("@nestjs/common");
const authenticated_guard_1 = require("../auth/guards/authenticated.guard");
const utils_service_1 = require("../utils/utils.service");
const user_goal_model_1 = require("../models/user-goal.model");
const weight_log_model_1 = require("../models/weight-log.model");
const sequelize_1 = require("@nestjs/sequelize");
let DashboardController = class DashboardController {
constructor(utilsService, userGoalModel, weightLogModel) {
this.utilsService = utilsService;
this.userGoalModel = userGoalModel;
this.weightLogModel = weightLogModel;
}
async getDashboard(req, res) {
try {
const today = new Date();
const dateStr = today.toISOString().split('T')[0];
const nutrition = await this.utilsService.calculateDailyTotals(req.user.id, dateStr);
const water = await this.utilsService.calculateWaterTotal(req.user.id, dateStr);
let goals = await this.userGoalModel.findOne({ where: { UserId: req.user.id } });
if (!goals) {
goals = await this.userGoalModel.create({
UserId: req.user.id,
target_protein_g: 150,
target_carbs_g: 200,
target_fat_g: 60,
target_water_ml: 2000,
});
}
const weightLogToday = await this.weightLogModel.findOne({
where: { UserId: req.user.id, date: dateStr },
});
const yesterday = new Date(today);
yesterday.setDate(yesterday.getDate() - 1);
const yesterdayStr = yesterday.toISOString().split('T')[0];
const weightLogYesterday = await this.weightLogModel.findOne({
where: { UserId: req.user.id, date: yesterdayStr },
});
let weightChange = null;
if (weightLogToday && weightLogYesterday) {
weightChange = weightLogToday.weight_kg - weightLogYesterday.weight_kg;
}
const remaining = {
calories: req.user.target_daily_calories - nutrition.calories,
protein: goals.target_protein_g - nutrition.protein,
carbs: goals.target_carbs_g - nutrition.carbs,
fat: goals.target_fat_g - nutrition.fat,
water: goals.target_water_ml - water.total_ml,
};
const macroPercentages = this.utilsService.getMacroPercentages(nutrition.protein, nutrition.carbs, nutrition.fat);
return {
user: req.user,
nutrition,
water,
goals,
weightLogToday,
weightChange,
remaining,
macroPercentages,
};
}
catch (err) {
console.error(err);
req.flash('error_msg', 'Error loading dashboard');
return {};
}
}
};
exports.DashboardController = DashboardController;
__decorate([
(0, common_1.Get)(),
(0, common_1.Render)('dashboard'),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Res)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], DashboardController.prototype, "getDashboard", null);
exports.DashboardController = DashboardController = __decorate([
(0, common_1.Controller)('dashboard'),
(0, common_1.UseGuards)(authenticated_guard_1.AuthenticatedGuard),
__param(1, (0, sequelize_1.InjectModel)(user_goal_model_1.UserGoal)),
__param(2, (0, sequelize_1.InjectModel)(weight_log_model_1.WeightLog)),
__metadata("design:paramtypes", [utils_service_1.UtilsService, Object, Object])
], DashboardController);
//# sourceMappingURL=dashboard.controller.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"dashboard.controller.js","sourceRoot":"","sources":["../../src/dashboard/dashboard.controller.ts"],"names":[],"mappings":"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"}

2
dist/dashboard/dashboard.module.d.ts vendored Normal file
View File

@@ -0,0 +1,2 @@
export declare class DashboardModule {
}

29
dist/dashboard/dashboard.module.js vendored Normal file
View File

@@ -0,0 +1,29 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DashboardModule = void 0;
const common_1 = require("@nestjs/common");
const sequelize_1 = require("@nestjs/sequelize");
const dashboard_controller_1 = require("./dashboard.controller");
const progress_controller_1 = require("./progress.controller");
const user_goal_model_1 = require("../models/user-goal.model");
const weight_log_model_1 = require("../models/weight-log.model");
const utils_module_1 = require("../utils/utils.module");
let DashboardModule = class DashboardModule {
};
exports.DashboardModule = DashboardModule;
exports.DashboardModule = DashboardModule = __decorate([
(0, common_1.Module)({
imports: [
sequelize_1.SequelizeModule.forFeature([user_goal_model_1.UserGoal, weight_log_model_1.WeightLog]),
utils_module_1.UtilsModule,
],
controllers: [dashboard_controller_1.DashboardController, progress_controller_1.ProgressController],
})
], DashboardModule);
//# sourceMappingURL=dashboard.module.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"dashboard.module.js","sourceRoot":"","sources":["../../src/dashboard/dashboard.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,iDAAoD;AACpD,iEAA6D;AAC7D,+DAA2D;AAC3D,+DAAqD;AACrD,iEAAuD;AACvD,wDAAoD;AAS7C,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAP3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,2BAAe,CAAC,UAAU,CAAC,CAAC,0BAAQ,EAAE,4BAAS,CAAC,CAAC;YACjD,0BAAW;SACZ;QACD,WAAW,EAAE,CAAC,0CAAmB,EAAE,wCAAkB,CAAC;KACvD,CAAC;GACW,eAAe,CAAG"}

19
dist/dashboard/progress.controller.d.ts vendored Normal file
View File

@@ -0,0 +1,19 @@
import { UtilsService } from '../utils/utils.service';
export declare class ProgressController {
private utilsService;
constructor(utilsService: UtilsService);
getProgress(req: any, daysQuery: string): Promise<{
user: any;
weight_trend: {
date: Date;
weight_kg: number;
}[];
calorie_trend: any[];
avg_calories: number;
avg_protein: number;
avg_carbs: number;
avg_fat: number;
weight_change: any;
days: number;
}>;
}

83
dist/dashboard/progress.controller.js vendored Normal file
View File

@@ -0,0 +1,83 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProgressController = void 0;
const common_1 = require("@nestjs/common");
const authenticated_guard_1 = require("../auth/guards/authenticated.guard");
const utils_service_1 = require("../utils/utils.service");
let ProgressController = class ProgressController {
constructor(utilsService) {
this.utilsService = utilsService;
}
async getProgress(req, daysQuery) {
try {
const days = parseInt(daysQuery) || 30;
const weightTrend = await this.utilsService.getWeightTrend(req.user.id, days);
const calorieTrend = await this.utilsService.getCalorieTrend(req.user.id, days);
let avgCalories = 0, avgProtein = 0, avgCarbs = 0, avgFat = 0;
if (calorieTrend.length > 0) {
avgCalories = calorieTrend.reduce((sum, d) => sum + d.calories, 0) / calorieTrend.length;
avgProtein = calorieTrend.reduce((sum, d) => sum + d.protein, 0) / calorieTrend.length;
avgCarbs = calorieTrend.reduce((sum, d) => sum + d.carbs, 0) / calorieTrend.length;
avgFat = calorieTrend.reduce((sum, d) => sum + d.fat, 0) / calorieTrend.length;
}
let weightChange = null;
if (weightTrend.length >= 2) {
weightChange = weightTrend[weightTrend.length - 1].weight_kg - weightTrend[0].weight_kg;
}
return {
user: req.user,
weight_trend: weightTrend,
calorie_trend: calorieTrend,
avg_calories: Math.round(avgCalories),
avg_protein: Math.round(avgProtein),
avg_carbs: Math.round(avgCarbs),
avg_fat: Math.round(avgFat),
weight_change: weightChange,
days,
};
}
catch (err) {
console.error(err);
req.flash('error_msg', 'Error loading progress');
return {
user: req.user,
weight_trend: [],
calorie_trend: [],
avg_calories: 0,
avg_protein: 0,
avg_carbs: 0,
avg_fat: 0,
weight_change: null,
days: 30,
};
}
}
};
exports.ProgressController = ProgressController;
__decorate([
(0, common_1.Get)(),
(0, common_1.Render)('progress'),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Query)('days')),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, String]),
__metadata("design:returntype", Promise)
], ProgressController.prototype, "getProgress", null);
exports.ProgressController = ProgressController = __decorate([
(0, common_1.Controller)('progress'),
(0, common_1.UseGuards)(authenticated_guard_1.AuthenticatedGuard),
__metadata("design:paramtypes", [utils_service_1.UtilsService])
], ProgressController);
//# sourceMappingURL=progress.controller.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"progress.controller.js","sourceRoot":"","sources":["../../src/dashboard/progress.controller.ts"],"names":[],"mappings":"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"}