Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions database/local_backend/controllers/authController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
const {
validateRegisterInput
} = require("../validators/authValidator");

const {
successResponse,
errorResponse
} = require("../utils/responseFormatter");

// Temporary in-memory users array
// Replace with Firebase/SQLite later if needed
const users = [];

const registerUser = async (req, res) => {
try {

const {
name,
email,
password
} = req.body;

// Validation
const validationErrors =
validateRegisterInput({
name,
email,
password
});

if (validationErrors.length > 0) {
return res.status(400).json(
errorResponse(
"Validation failed",
validationErrors
)
);
}

// Duplicate email check
const existingUser = users.find(
user =>
user.email.toLowerCase() ===
email.toLowerCase()
);

if (existingUser) {
return res.status(409).json(
errorResponse(
"Email already exists",
[
"A user with this email is already registered"
]
)
);
}

// Create user
const newUser = {
id: Date.now().toString(),
name: name.trim(),
email: email.toLowerCase().trim(),
password,
createdAt: new Date().toISOString()
};

users.push(newUser);

// Success response
return res.status(201).json(
successResponse(
"User registered successfully",
{
id: newUser.id,
name: newUser.name,
email: newUser.email,
createdAt: newUser.createdAt
}
)
);

} catch (error) {

console.error(
"Register endpoint error:",
error
);

return res.status(500).json(
errorResponse(
"Internal server error",
[
"Something went wrong while registering the user"
]
)
);
}
};

module.exports = {
registerUser
};
11 changes: 11 additions & 0 deletions database/local_backend/routes/authRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const express = require("express");

const {
registerUser
} = require("../controllers/authController");

const router = express.Router();

router.post("/register", registerUser);

module.exports = router;
5 changes: 4 additions & 1 deletion database/local_backend/scanPipeline.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ const config = require("./config");
const { addToQueue } = require("./syncQueue");
const { processQueue, resolveConflict } = require("./syncService");



const {
getProductByBarcode,
searchByName
} = require("../pipeline/barcode_mapper");


const PIPELINE_VERSION = config.pipeline.version;

const NUTRITION_LIMITS = {
Expand Down Expand Up @@ -468,4 +471,4 @@ if (require.main === module) {
.catch((error) => {
console.error("Reconnect sync failed:", error.message);
});
}

18 changes: 18 additions & 0 deletions database/local_backend/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const express = require("express");

const authRoutes = require("./routes/authRoutes");

const app = express();

// Middleware MUST come before routes
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// Routes
app.use("/api/auth", authRoutes);

const PORT = 3000;

app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
20 changes: 20 additions & 0 deletions database/local_backend/utils/responseFormatter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const successResponse = (message, data = {}) => {
return {
success: true,
message,
data
};
};

const errorResponse = (message, errors = []) => {
return {
success: false,
message,
errors
};
};

module.exports = {
successResponse,
errorResponse
};
36 changes: 36 additions & 0 deletions database/local_backend/validators/authValidator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const validateRegisterInput = ({ name, email, password }) => {
const errors = [];

// Name validation
if (!name || name.trim() === "") {
errors.push("Name is required");
}

// Email validation
if (!email || email.trim() === "") {
errors.push("Email is required");
}

// Email format validation
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

if (email && !emailRegex.test(email)) {
errors.push("Invalid email format");
}

// Password validation
if (!password || password.trim() === "") {
errors.push("Password is required");
}

// Password length validation
if (password && password.length < 6) {
errors.push("Password must be at least 6 characters long");
}

return errors;
};

module.exports = {
validateRegisterInput
};
Loading