This commit is contained in:
QkoSad
2023-08-08 16:02:54 +03:00
commit 0a7a469d56
315 changed files with 426907 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
export const calculateBmi = (height: number, weight: number) => {
const bmi = weight / (height ^ 2);
if (bmi < 15) return "Very severely underweight";
else if (bmi < 16) return "Severely underweight";
else if (bmi < 18.5) return "Underweight";
else if (bmi < 25) return "Normal";
else if (bmi < 30) return "Overweight";
else if (bmi < 35) return "Moderately obese";
else if (bmi < 40) return "Severely obese";
else return "Very severely obese";
};
const parseArguments = (args: string[]): { value1: number; value2: number } => {
if (args.length > 4) throw new Error("Not enough arguments");
if (args.length < 4) throw new Error("Too many arguments");
if (!isNaN(Number(args[2])) && !isNaN(Number(args[3])))
return {
value1: Number(args[2]),
value2: Number(args[3]),
};
throw new Error("provied values are not numbers");
};
export const bmiCalculator = () => {
try {
const { value1, value2 } = parseArguments(process.argv);
const message = calculateBmi(value1, value2);
console.log(message);
} catch (err: unknown) {
let errorMessage = "Something went wrong";
if (err instanceof Error) errorMessage += " Error " + err.message;
console.log(errorMessage);
}
};
+39
View File
@@ -0,0 +1,39 @@
interface calculateExerciseResult {
periodLength: number;
trainingDays: number;
success: boolean;
rating: number;
ratingDescription: string;
target: number;
average: number;
}
export const calculateExercise = (
dailyExecise: number[],
target: number
): calculateExerciseResult => {
const average =
dailyExecise.reduce((prev, cur) => prev + cur) / (dailyExecise.length + 1);
const success = average >= target ? true : false;
let rating: number, ratingDescription: string;
if (average > target) {
rating = 3;
ratingDescription = "Good job";
} else if (average > target * 0.7) {
rating = 2;
ratingDescription = "Could be better";
} else {
rating = 1;
ratingDescription = "Very Bad";
}
return {
periodLength: dailyExecise.length + 1,
trainingDays: dailyExecise.filter((el) => el > 0).length,
average,
target,
success,
rating,
ratingDescription,
};
};
+37
View File
@@ -0,0 +1,37 @@
import express from "express";
import { calculateBmi } from "./bmiCalculator";
import { calculateExercise } from "./exerciseCalculator";
const app = express();
app.use(express.json());
app.get("/bmi", (req, res) => {
const { height, weight } = req.query;
if (isNaN(Number(height)) || isNaN(Number(weight))) {
console.log("damn");
res.status(400).json({ error: "wrong data" });
}
const message = calculateBmi(Number(height), Number(weight));
res.json({
weight,
height,
bmi: message,
});
});
app.post("/exercises", (req, res) => {
let { daily_exercises, target } = req.body;
daily_exercises = JSON.parse(daily_exercises);
target = JSON.parse(target);
if (!(daily_exercises instanceof Array)) res.json({ error: "bad request" });
else {
console.log(typeof daily_exercises)
console.log(typeof target)
const result = calculateExercise(daily_exercises, target);
res.json(result);
}
});
app.listen(3003, () => console.log(`Server running at port 3003`));
+2456
View File
File diff suppressed because it is too large Load Diff
+24
View File
@@ -0,0 +1,24 @@
{
"name": "y",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"calculateBmi": "ts-node bmiCalculator.ts",
"exerciseCalculator": "ts-node exerciseCalculator.ts",
"dev": "ts-node-dev index.ts"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@types/express": "^4.17.17",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
"typescript": "^5.1.3"
},
"dependencies": {
"body-parser": "^1.20.2",
"express": "^4.18.2"
}
}
+15
View File
@@ -0,0 +1,15 @@
{
"compilerOptions": {
"noImplicitAny": true,
"noImplicitReturns": true,
"strictNullChecks": true,
"strictPropertyInitialization": true,
"strictBindCallApply": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitThis": true,
"alwaysStrict": true,
"esModuleInterop": true,
"declaration": true
}
}