summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.idea/dataSources.xml12
-rw-r--r--.idea/inspectionProfiles/Project_Default.xml6
-rw-r--r--flake.lock6
-rw-r--r--flake.nix2
-rw-r--r--package.json8
-rw-r--r--src/api/middlewares/loggingMiddleware.js2
-rw-r--r--src/api/routes/auth/index.js1
-rw-r--r--src/api/routes/auth/registerRoute.js14
-rw-r--r--src/api/routes/index.js2
-rw-r--r--src/api/routes/statusRoute.js5
-rw-r--r--src/api/start.js3
-rw-r--r--src/db/db.js16
-rw-r--r--src/db/index.js2
-rw-r--r--src/db/schemas/index.js0
-rw-r--r--src/db/schemas/userSchema.js14
15 files changed, 84 insertions, 9 deletions
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644

index 0000000..8df7846 --- /dev/null +++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="DataSourceManagerImpl" format="xml" multifile-model="true"> + <data-source source="LOCAL" name="myproject@localhost" uuid="6433d464-6ca0-4d7d-a023-05bd4df14dd6"> + <driver-ref>mongo.4</driver-ref> + <synchronize>true</synchronize> + <jdbc-driver>com.dbschema.MongoJdbcDriver</jdbc-driver> + <jdbc-url>mongodb://localhost:27017/myproject</jdbc-url> + <working-dir>$ProjectFileDir$</working-dir> + </data-source> + </component> +</project> \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644
index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" /> + </profile> +</component> \ No newline at end of file diff --git a/flake.lock b/flake.lock
index d072398..29b411c 100644 --- a/flake.lock +++ b/flake.lock
@@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1748190013, - "narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=", + "lastModified": 1748370509, + "narHash": "sha256-QlL8slIgc16W5UaI3w7xHQEP+Qmv/6vSNTpoZrrSlbk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "62b852f6c6742134ade1abdd2a21685fd617a291", + "rev": "4faa5f5321320e49a78ae7848582f684d64783e9", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix
index bdcf963..2e68009 100644 --- a/flake.nix +++ b/flake.nix
@@ -17,6 +17,7 @@ let pkgs = import nixpkgs { inherit system; + config.allowUnfree = true; }; hashesFile = builtins.fromJSON (builtins.readFile ./hashes.json); lib = pkgs.lib; @@ -78,6 +79,7 @@ devShell = pkgs.mkShell { buildInputs = with pkgs; [ + mongodb-compass nodejs nodePackages.prettier ]; diff --git a/package.json b/package.json
index a4a26d7..550cd25 100644 --- a/package.json +++ b/package.json
@@ -13,10 +13,10 @@ }, "author": "", "license": "ISC", - "_moduleAliases": { - "@api": "./src/api", - "@db": "./src/db", - "@utils": "./src/util" + "imports": { + "#api/*": "./src/api/*", + "#db/*": "./src/db/*", + "#util/*": "./src/util/*" }, "devDependencies": { "@eslint/eslintrc": "^3.3.1", 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 --- /dev/null +++ b/src/db/schemas/index.js
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!");