Convert backend to regular directory
This commit is contained in:
134
backend/src/controllers/auth.controller.js
Normal file
134
backend/src/controllers/auth.controller.js
Normal file
@@ -0,0 +1,134 @@
|
||||
const bcrypt = require("bcrypt");
|
||||
const jwt = require("jsonwebtoken");
|
||||
const prisma = require("../config/prisma");
|
||||
|
||||
const register = async (req, res) => {
|
||||
try {
|
||||
const {
|
||||
firstname,
|
||||
lastname,
|
||||
email,
|
||||
password,
|
||||
birthdate,
|
||||
gender,
|
||||
marketingOptIn,
|
||||
} = req.body;
|
||||
|
||||
if (!firstname || !lastname || !email || !password) {
|
||||
return res.status(400).json({
|
||||
message: "Tous les champs obligatoires doivent être renseignés.",
|
||||
});
|
||||
}
|
||||
|
||||
const existingUser = await prisma.user.findUnique({
|
||||
where: { email },
|
||||
});
|
||||
|
||||
if (existingUser) {
|
||||
return res.status(409).json({
|
||||
message: "Un compte existe déjà avec cet email.",
|
||||
});
|
||||
}
|
||||
|
||||
const hashedPassword = await bcrypt.hash(password, 10);
|
||||
|
||||
const user = await prisma.user.create({
|
||||
data: {
|
||||
firstname,
|
||||
lastname,
|
||||
email,
|
||||
password: hashedPassword,
|
||||
birthdate: birthdate ? new Date(birthdate) : null,
|
||||
gender,
|
||||
marketingOptIn: marketingOptIn || false,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
firstname: true,
|
||||
lastname: true,
|
||||
email: true,
|
||||
role: true,
|
||||
marketingOptIn: true,
|
||||
createdAt: true,
|
||||
},
|
||||
});
|
||||
|
||||
return res.status(201).json({
|
||||
message: "Inscription réussie.",
|
||||
user,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Erreur register:", error);
|
||||
return res.status(500).json({
|
||||
message: "Erreur serveur lors de l'inscription.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const login = async (req, res) => {
|
||||
try {
|
||||
const { email, password } = req.body;
|
||||
|
||||
if (!email || !password) {
|
||||
return res.status(400).json({
|
||||
message: "Email et mot de passe requis.",
|
||||
});
|
||||
}
|
||||
|
||||
const user = await prisma.user.findUnique({
|
||||
where: { email },
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return res.status(401).json({
|
||||
message: "Identifiants invalides.",
|
||||
});
|
||||
}
|
||||
|
||||
const isPasswordValid = await bcrypt.compare(password, user.password);
|
||||
|
||||
if (!isPasswordValid) {
|
||||
return res.status(401).json({
|
||||
message: "Identifiants invalides.",
|
||||
});
|
||||
}
|
||||
|
||||
const token = jwt.sign(
|
||||
{
|
||||
id: user.id,
|
||||
role: user.role,
|
||||
},
|
||||
process.env.JWT_SECRET,
|
||||
{ expiresIn: "24h" }
|
||||
);
|
||||
|
||||
return res.json({
|
||||
message: "Connexion réussie.",
|
||||
token,
|
||||
user: {
|
||||
id: user.id,
|
||||
firstname: user.firstname,
|
||||
lastname: user.lastname,
|
||||
email: user.email,
|
||||
role: user.role,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Erreur login:", error);
|
||||
return res.status(500).json({
|
||||
message: "Erreur serveur lors de la connexion.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const me = async (req, res) => {
|
||||
return res.json({
|
||||
user: req.user,
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
register,
|
||||
login,
|
||||
me,
|
||||
};
|
||||
Reference in New Issue
Block a user