From 54bcbaddc06d63f8f4263a0a0c2853f23fe67e95 Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 29 May 2025 06:17:12 +0200 Subject: Allow unfree in nix flake, add mongodb-compass to devShell closure, basic mongo attempt, add test register route --- src/api/middlewares/loggingMiddleware.js | 2 +- src/api/routes/auth/index.js | 1 + src/api/routes/auth/registerRoute.js | 14 ++++++++++++++ src/api/routes/index.js | 2 ++ src/api/routes/statusRoute.js | 5 ++++- src/api/start.js | 3 +++ src/db/db.js | 16 ++++++++++++++++ src/db/index.js | 2 ++ src/db/schemas/index.js | 0 src/db/schemas/userSchema.js | 14 ++++++++++++++ 10 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/api/routes/auth/index.js create mode 100644 src/api/routes/auth/registerRoute.js create mode 100644 src/db/db.js create mode 100644 src/db/schemas/index.js create mode 100644 src/db/schemas/userSchema.js (limited to 'src') diff --git a/src/api/middlewares/loggingMiddleware.js b/src/api/middlewares/loggingMiddleware.js index 7df9b39..7f3b2ec 100644 --- a/src/api/middlewares/loggingMiddleware.js +++ b/src/api/middlewares/loggingMiddleware.js @@ -1,7 +1,7 @@ import morgan from "morgan"; const requestLogFormat = - ':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" ":response-time ms"'; + '[API] :remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" ":response-time ms"'; export function useLogging(logRequests) { return morgan(requestLogFormat, { diff --git a/src/api/routes/auth/index.js b/src/api/routes/auth/index.js new file mode 100644 index 0000000..8306697 --- /dev/null +++ b/src/api/routes/auth/index.js @@ -0,0 +1 @@ +export * from "./registerRoute.js"; diff --git a/src/api/routes/auth/registerRoute.js b/src/api/routes/auth/registerRoute.js new file mode 100644 index 0000000..b71c466 --- /dev/null +++ b/src/api/routes/auth/registerRoute.js @@ -0,0 +1,14 @@ +import { User } from "#db/schemas/userSchema.js"; + +export const registerRoute = { + route: "/auth/register", + async onGet(req, res) { + const result = await User.create({ + username: req.query.username, + password: req.query.password, + email: req.query.email, + }); + + res.send(result); + }, +}; diff --git a/src/api/routes/index.js b/src/api/routes/index.js index c35303f..147246e 100644 --- a/src/api/routes/index.js +++ b/src/api/routes/index.js @@ -1,2 +1,4 @@ export * from "./statusRoute.js"; export * from "./indexRoute.js"; + +export * from "./auth/index.js"; diff --git a/src/api/routes/statusRoute.js b/src/api/routes/statusRoute.js index a829f19..f1cdb99 100644 --- a/src/api/routes/statusRoute.js +++ b/src/api/routes/statusRoute.js @@ -1,9 +1,12 @@ +import { User } from "#db/schemas/userSchema.js"; + export const statusRoute = { route: "/status", - onGet(req, res) { + async onGet(req, res) { const status = { status: "ok", timestamp: new Date().toISOString(), + users: await User.countDocuments(), }; res.status(200).json(status); diff --git a/src/api/start.js b/src/api/start.js index 3540253..ff94dec 100644 --- a/src/api/start.js +++ b/src/api/start.js @@ -1,11 +1,14 @@ import express from "express"; import { registerRoutes } from "./routes.js"; import { useCors, useLogging } from "./middlewares/index.js"; +import { initDb } from "#db/index.js"; const app = express(); const PORT = process.env.PORT ?? 3000; const logRequests = process.env["LOG_REQUESTS"] ?? "-"; +await initDb(); + // Configure Express app.use(express.json()); app.use(useCors); diff --git a/src/db/db.js b/src/db/db.js new file mode 100644 index 0000000..bf7ccfa --- /dev/null +++ b/src/db/db.js @@ -0,0 +1,16 @@ +import { connect } from "mongoose"; + +export async function initDb() { + const connStr = "mongodb://root:Foxy1987@localhost/myproject"; + try { + const res = await connect(connStr); + if (res.connection.readyState === 1) { + console.log("[MONGODB] Connected successfully!"); + } else { + console.error("[MONGODB] Failed to connect to ", connStr); + } + } catch (e) { + console.error("[MONGODB] Error connecting to database!"); + throw e; + } +} diff --git a/src/db/index.js b/src/db/index.js index e69de29..f55b773 100644 --- a/src/db/index.js +++ b/src/db/index.js @@ -0,0 +1,2 @@ +export * from "./db.js"; +export * from "./schemas/index.js"; diff --git a/src/db/schemas/index.js b/src/db/schemas/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/db/schemas/userSchema.js b/src/db/schemas/userSchema.js new file mode 100644 index 0000000..eaddb08 --- /dev/null +++ b/src/db/schemas/userSchema.js @@ -0,0 +1,14 @@ +import { model, Schema } from "mongoose"; + +export const userSchema = new Schema({ + username: { + type: String, + required: true, + unique: true, + trim: true, + }, +}); + +export const User = model("user", userSchema); + +console.log("[MONGODB] User schema initialized successfully!"); -- cgit 1.5.1