summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorDaniel Andreas Wang <danielaw@relvokcor.xyz>2026-03-14 15:37:31 +0100
committerDaniel Andreas Wang <danielaw@relvokcor.xyz>2026-03-14 15:37:31 +0100
commitf4f6f490ab0bb1a2a06d660ce1b276a4fad9d2c2 (patch)
tree9c9af5b4f49274fd1a62627b8879caf616d25a93 /backend
first commitHEADmain
Diffstat (limited to 'backend')
-rw-r--r--backend/src/app.js10
-rw-r--r--backend/src/config/constants.js1
-rw-r--r--backend/src/config/database.js17
-rw-r--r--backend/src/controllers/user.controller.js33
-rw-r--r--backend/src/index.js27
-rw-r--r--backend/src/models/user.model.js32
-rw-r--r--backend/src/routes/user.route.js7
7 files changed, 127 insertions, 0 deletions
diff --git a/backend/src/app.js b/backend/src/app.js
new file mode 100644
index 0000000..ef74178
--- /dev/null
+++ b/backend/src/app.js
@@ -0,0 +1,10 @@
+import express from 'express'
+
+const app = express()
+app.use(express.json())
+
+import userRouter from './routes/user.route.js'
+
+app.use('/api/v1/users', userRouter)
+
+export default app \ No newline at end of file
diff --git a/backend/src/config/constants.js b/backend/src/config/constants.js
new file mode 100644
index 0000000..d7f4ed1
--- /dev/null
+++ b/backend/src/config/constants.js
@@ -0,0 +1 @@
+export const DB_NAME = 'intro-to-backend'; \ No newline at end of file
diff --git a/backend/src/config/database.js b/backend/src/config/database.js
new file mode 100644
index 0000000..98ce0cc
--- /dev/null
+++ b/backend/src/config/database.js
@@ -0,0 +1,17 @@
+import mongoose from "mongoose";
+import { DB_NAME } from './constants.js'
+
+const connectDB = async () => {
+ try {
+ const connectionInstance = await mongoose.connect(
+ `${process.env.MONGODB_URI}/${DB_NAME}`,
+ );
+ console.log(`\nMongoDB connected successfully
+ ${connectionInstance.connection.host}`)
+ } catch (error) {
+ console.log("MongoDB connection failed", error)
+ process.exit(1)
+ }
+}
+
+export default connectDB
diff --git a/backend/src/controllers/user.controller.js b/backend/src/controllers/user.controller.js
new file mode 100644
index 0000000..b5d2048
--- /dev/null
+++ b/backend/src/controllers/user.controller.js
@@ -0,0 +1,33 @@
+import { User } from '../models/user.model.js'
+
+const registerUser = async (req, res) => {
+ try {
+ const { username, email, password } = req.body
+
+ if (!username || !email || !password) {
+ return res.status(400).json({ message: 'All fields are important!'})
+ }
+
+ const existing = await User.findOne({ email: email.toLowerCase() })
+ if (existing) {
+ return res.status(400).json({ message: 'User already exists.'})
+ }
+
+ const user = await User.create({
+ username,
+ email: email.toLowerCase(),
+ password,
+ })
+
+ res.status(201).json({
+ message: 'User registered.',
+ user: { id: user._id, email: user.email, username: user.username }
+ })
+ } catch (error) {
+ res.status(500).json({ message: 'Internal server error!', error: error.message })
+ }
+}
+
+export {
+ registerUser
+}
diff --git a/backend/src/index.js b/backend/src/index.js
new file mode 100644
index 0000000..3dfe7a4
--- /dev/null
+++ b/backend/src/index.js
@@ -0,0 +1,27 @@
+import dotenv from "dotenv";
+import connectDB from "./config/database.js";
+import app from "./app.js";
+
+dotenv.config({
+ path: "./.env",
+});
+
+const PORT = process.env.PORT || 8000;
+
+const startServer = async () => {
+ try {
+ await connectDB();
+ app.on('error', (error) => {
+ console.log('ERROR', error)
+ throw error
+ })
+
+ app.listen(PORT, () => {
+ console.log(`Server is running on port: ${PORT}`)
+ })
+ } catch (error) {
+ console.log('Connection failed', error)
+ }
+}
+
+startServer() \ No newline at end of file
diff --git a/backend/src/models/user.model.js b/backend/src/models/user.model.js
new file mode 100644
index 0000000..6cb9476
--- /dev/null
+++ b/backend/src/models/user.model.js
@@ -0,0 +1,32 @@
+import mongoose, { Schema } from 'mongoose'
+
+const userSchema = new Schema(
+ {
+ username: {
+ type: String,
+ required: true,
+ unique: true,
+ lowercase: true,
+ trim: true,
+ minLength: 1,
+ maxLength: 30
+ },
+
+ password: {
+ type: String,
+ required: true,
+ minLength: 8,
+ maxLength: 50
+ },
+
+ email: {
+ type: String,
+ required: true,
+ unique: true,
+ lowercase: true,
+ trim: true,
+ }
+ }
+)
+
+export const User = mongoose.model("User", userSchema) \ No newline at end of file
diff --git a/backend/src/routes/user.route.js b/backend/src/routes/user.route.js
new file mode 100644
index 0000000..0765632
--- /dev/null
+++ b/backend/src/routes/user.route.js
@@ -0,0 +1,7 @@
+import { Router } from 'express'
+import { registerUser } from '../controllers/user.controller.js'
+
+const router = Router()
+router.route('/register').post(registerUser)
+
+export default router