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!");
|