From f4f6f490ab0bb1a2a06d660ce1b276a4fad9d2c2 Mon Sep 17 00:00:00 2001 From: Daniel Andreas Wang Date: Sat, 14 Mar 2026 15:37:31 +0100 Subject: first commit --- backend/src/app.js | 10 +++++++++ backend/src/config/constants.js | 1 + backend/src/config/database.js | 17 +++++++++++++++ backend/src/controllers/user.controller.js | 33 ++++++++++++++++++++++++++++++ backend/src/index.js | 27 ++++++++++++++++++++++++ backend/src/models/user.model.js | 32 +++++++++++++++++++++++++++++ backend/src/routes/user.route.js | 7 +++++++ 7 files changed, 127 insertions(+) create mode 100644 backend/src/app.js create mode 100644 backend/src/config/constants.js create mode 100644 backend/src/config/database.js create mode 100644 backend/src/controllers/user.controller.js create mode 100644 backend/src/index.js create mode 100644 backend/src/models/user.model.js create mode 100644 backend/src/routes/user.route.js (limited to 'backend/src') 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 -- cgit