diff --git a/src/fib.ts b/src/fib.ts index 8dc8ddd..3d68b3e 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -1,12 +1,15 @@ -// util function that computes the fibonacci numbers -module.exports = function fibonacci(n) { - if (n < 0) { - return -1; - } else if (n == 0) { - return 0; - } else if (n == 1) { - return 1; - } +// src/fib.ts +export function fibonacci(n: number): number { + if (n < 0) return -1; + if (n === 0) return 0; + if (n === 1) return 1; - return fibonacci(n - 1) + fibonacci(n - 2); -}; + let a = 0; + let b = 1; + for (let i = 2; i <= n; i++) { + const next = a + b; + a = b; + b = next; + } + return b; +} \ No newline at end of file diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 2d41ca5..e29c157 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -1,16 +1,26 @@ -// Endpoint for querying the fibonacci numbers +// src/fibRoute.ts +import type { Request, Response } from "express"; +import { fibonacci } from "./fib"; -const fibonacci = require("./fib"); +export default function fibRoute(req: Request, res: Response): void { + const numParam: string | undefined = req.params?.num; -export default (req, res) => { - const { num } = req.params; - - const fibN = fibonacci(parseInt(num)); - let result = `fibonacci(${num}) is ${fibN}`; + if (typeof numParam !== "string") { + res.status(400).send("Missing route parameter 'num'"); + return; + } - if (fibN < 0) { - result = `fibonacci(${num}) is undefined`; + const n = Number.parseInt(numParam, 10); + if (Number.isNaN(n)) { + res.status(400).send(`Invalid number: "${numParam}"`); + return; } + const fibN = fibonacci(n); + const result = + fibN < 0 + ? `fibonacci(${n}) is undefined` + : `fibonacci(${n}) is ${fibN}`; + res.send(result); -}; +} \ No newline at end of file