diff --git a/backend/database/database.sql b/backend/database/database.sql index 44bdc0c..d4e7102 100644 --- a/backend/database/database.sql +++ b/backend/database/database.sql @@ -5,19 +5,9 @@ USE externatic_db; DROP TABLE IF EXISTS user; -- Créer la table "user" -CREATE TABLE - user ( - id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, - firstname VARCHAR(100) NOT NULL, - lastname VARCHAR(100) NOT NULL, - phone VARCHAR(100) NOT NULL, - email VARCHAR(100) NOT NULL, - address VARCHAR(155) NOT NULL, - competence VARCHAR(100), - password VARCHAR(100) NOT NULL, - is_admin BOOL NOT NULL, - UNIQUE (email) - ); +CREATE TABLE user ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(100) NOT NULL, lastname VARCHAR(100) NOT NULL, phone VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL, address VARCHAR(155) NOT NULL, password VARCHAR(100) NOT NULL, is_admin BOOL NOT NULL, UNIQUE (email) +); -- INSERT INTO user ( -- firstname, @@ -26,16 +16,27 @@ CREATE TABLE -- email, -- address, -- password --- ) -DROP TABLE - IF EXISTS competence; - -CREATE TABLE - competence ( - id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, - name VARCHAR(100), - confirmed BOOL - ); +-- -- ) +-- DROP TABLE IF EXISTS competence; + +-- DELETE TABLE competence; + +-- CREATE TABLE competence ( +-- id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) +-- ); + +-- INSERT INTO +-- competence (name) +-- values ("html"), +-- ("css"), +-- ("javascript"), +-- ("angular"), +-- ("react"), +-- ("php"), +-- ("symphony"), +-- ("git"), +-- ("github"), +-- ("trello"); -- CREATE -- TABLE @@ -55,160 +56,71 @@ CREATE TABLE -- ); DROP TABLE IF EXISTS cv; -CREATE TABLE - cv ( - id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, - user_id INT, - FOREIGN KEY (user_id) REFERENCES user(id) - ); +CREATE TABLE cv ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user (id) +); DROP TABLE IF EXISTS experience; -CREATE TABLE - experience ( - id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, - title VARCHAR(100) NOT NULL, - company VARCHAR(100) NOT NULL, - city VARCHAR(100) NOT NULL, - type VARCHAR(100) NOT NULL, - is_working BOOL, - date_begin DATE NOT NULL, - date_end DATE, - description TEXT, - cv_id INT NOT NULL, - FOREIGN KEY (cv_id) REFERENCES cv(id) - ); +CREATE TABLE experience ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100) NOT NULL, company VARCHAR(100) NOT NULL, city VARCHAR(100) NOT NULL, type VARCHAR(100) NOT NULL, is_working BOOL, date_begin DATE NOT NULL, date_end DATE, description TEXT, cv_id INT NOT NULL, FOREIGN KEY (cv_id) REFERENCES cv (id) +); DROP TABLE IF EXISTS course; -CREATE TABLE - course ( - id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - level VARCHAR(100) NOT NULL, - domaine VARCHAR(100) NOT NULL, - name VARCHAR(100) NOT NULL, - date_begin DATE NOT NULL, - date_end DATE NOT NULL, - description TEXT, - cv_id INT, - FOREIGN KEY (cv_id) REFERENCES cv(id) - ); +CREATE TABLE course ( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, level VARCHAR(100) NOT NULL, domaine VARCHAR(100) NOT NULL, name VARCHAR(100) NOT NULL, date_begin DATE NOT NULL, date_end DATE NOT NULL, description TEXT, cv_id INT, FOREIGN KEY (cv_id) REFERENCES cv (id) +); DROP TABLE IF EXISTS offer; -CREATE TABLE - offer ( - id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - title VARCHAR(100) NOT NULL, - company VARCHAR(100) NOT NULL, - type VARCHAR(100) NOT NULL, - city VARCHAR(100) NOT NULL, - mission TEXT NOT NULL, - search_profile VARCHAR(100) NOT NULL, - work_place VARCHAR(100) NOT NULL, - salary VARCHAR(100) NOT NULL, - info TEXT NOT NULL, - email VARCHAR(100) NOT NULL - ); +CREATE TABLE offer ( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL, company VARCHAR(100) NOT NULL, type VARCHAR(100) NOT NULL, city VARCHAR(100) NOT NULL, mission TEXT NOT NULL, search_profile VARCHAR(100) NOT NULL, work_place VARCHAR(100) NOT NULL, salary VARCHAR(100) NOT NULL, info TEXT NOT NULL, email VARCHAR(100) NOT NULL +); -- Insérer des données dans la table "user" -- Insertion manquante pour la table "offer" INSERT INTO offer ( - title, - company, - type, - city, - mission, - search_profile, - work_place, - salary, - info, - email + title, company, type, city, mission, search_profile, work_place, salary, info, email ) VALUES ( - "Developpeur Web Front End", - "Inov'Tech", - "CDD", - "Bordeaux", - "Tous les 2 ou 3 mois, de nouveaux projets en mode Agile sur les dernières stacks technologiques, toujours effectuées depuis notre plateau Factory pour progresser et développer vos compétences. 15% du temps consacré à des journées de partage technique, exploration, hack time rythmées par nos tribus Web, Mobile, Cloud... Journée de la Factory tous les mois : se retrouver physiquement en sortant des missions pour profiter et explorer ensemble ! Conférences privées organisées par Apple France, Microsoft Des participations à des conférences locales, nationales, internationales (WWDC, AWS Summit) Notre équipe de Chiefs Happiness Officiers bienveillants et surmotivés (animations, défis d'équipe) : Jeux de sociétés tous les midis, dans les locaux, events d'équipe mensuels, vrai bon café gratuit et illimité, baby-foot, mario-kart sur switch Construire un avenir positif en mettant le digital au service de l'humain La possibilité de développer votre expertise Web ou bien de monter en compétences aussi sur Android, sur iOS ou sur la xR (Unity / Unreal Engine) avec les experts de l'équipe Évoluer dans une entreprise qui encourage l'audace, la curiosité et l'envie d'entreprendre", - "Junior", - "Présent", - "35k €/an", - "Ce que nous vous proposons : Un accord télétravail pour télétravailler jusqu'à 2 jours par semaine selon vos missions. Un package avantages intéressant : une mutuelle, un CSE, des titres restaurants, un accord d'intéressement, des primes vacances et cooptation. Un accompagnement individualisé avec un mentor.", - "marie@externatic.fr" - ), ( - "Développeur Front-End", - "Diffusez", - "CDD", - "Lille", - "S'approprier le besoin métier Développement front-end Connaissance du W3C Intégrer fidèlement sur base d'une maquette Les missions seront réalisées sous la supervision du Responsable de Projet puis en autonomie selon les opportunités et l'évolution des compétences.", - "Junior", - "Présent", - "25k €/an", - "Ce que nous vous proposons : En étude d'informatique Autonome et organisé(e), tu es doté(e) d'un bon esprit d'analyse et d'innovation Esprit de synthèse, Réactivité, autonomie, rigueur et organisation Curieux, Esprit d'équipe, Respect des délais imposés.", - "marie@externatic.fr" - ), ( - "Développeur Web Junior", - "SASU MADE IN SURVEYS", - "CDD", - "Lille", - "Nous recherchons une personne motivée et dynamique avec : + "Developpeur Web Front End", "Inov'Tech", "CDD", "Bordeaux", "Tous les 2 ou 3 mois, de nouveaux projets en mode Agile sur les dernières stacks technologiques, toujours effectuées depuis notre plateau Factory pour progresser et développer vos compétences. 15% du temps consacré à des journées de partage technique, exploration, hack time rythmées par nos tribus Web, Mobile, Cloud... Journée de la Factory tous les mois : se retrouver physiquement en sortant des missions pour profiter et explorer ensemble ! Conférences privées organisées par Apple France, Microsoft Des participations à des conférences locales, nationales, internationales (WWDC, AWS Summit) Notre équipe de Chiefs Happiness Officiers bienveillants et surmotivés (animations, défis d'équipe) : Jeux de sociétés tous les midis, dans les locaux, events d'équipe mensuels, vrai bon café gratuit et illimité, baby-foot, mario-kart sur switch Construire un avenir positif en mettant le digital au service de l'humain La possibilité de développer votre expertise Web ou bien de monter en compétences aussi sur Android, sur iOS ou sur la xR (Unity / Unreal Engine) avec les experts de l'équipe Évoluer dans une entreprise qui encourage l'audace, la curiosité et l'envie d'entreprendre", "Junior", "Présent", "35k €/an", "Ce que nous vous proposons : Un accord télétravail pour télétravailler jusqu'à 2 jours par semaine selon vos missions. Un package avantages intéressant : une mutuelle, un CSE, des titres restaurants, un accord d'intéressement, des primes vacances et cooptation. Un accompagnement individualisé avec un mentor.", "marie@externatic.fr" + ), + ( + "Développeur Front-End", "Diffusez", "CDD", "Lille", "S'approprier le besoin métier Développement front-end Connaissance du W3C Intégrer fidèlement sur base d'une maquette Les missions seront réalisées sous la supervision du Responsable de Projet puis en autonomie selon les opportunités et l'évolution des compétences.", "Junior", "Présent", "25k €/an", "Ce que nous vous proposons : En étude d'informatique Autonome et organisé(e), tu es doté(e) d'un bon esprit d'analyse et d'innovation Esprit de synthèse, Réactivité, autonomie, rigueur et organisation Curieux, Esprit d'équipe, Respect des délais imposés.", "marie@externatic.fr" + ), + ( + "Développeur Web Junior", "SASU MADE IN SURVEYS", "CDD", "Lille", "Nous recherchons une personne motivée et dynamique avec : Un an d'expérience, De solides compétences en PHP, La maitrise de MySQL, l'intégration HTML - CSS, La maitrise de JQuery, Un bon niveau d'anglais technique -.........Tu te retrouves dans le profil de poste ? Alors envoie nous ta candidature :-).", - "Junior", - "Présent", - "25k €/an", - "Mis Group, c'est une équipe à taille humaine, jeune et dynamique, située en plein centre de Lille. Nous apportons notre expertise à des cabinets d'études marketing à travers des solutions d'études : études quantitatives en ligne, recrutements de consommateurs, locations de salles pour des réunions de consommateurs, réalisation de visites mystères, réalisation de tests de produits…", - "marie@externatic.fr" - ), ( - "STAGE DEVELOPPEUR WEB Web", - "Massy Production", - "CDD", - "Bordeaux", - "- Connaissance des langages de programmation web tels que HTML5, CSS, JavaScript +.........Tu te retrouves dans le profil de poste ? Alors envoie nous ta candidature :-).", "Junior", "Présent", "25k €/an", "Mis Group, c'est une équipe à taille humaine, jeune et dynamique, située en plein centre de Lille. Nous apportons notre expertise à des cabinets d'études marketing à travers des solutions d'études : études quantitatives en ligne, recrutements de consommateurs, locations de salles pour des réunions de consommateurs, réalisation de visites mystères, réalisation de tests de produits…", "marie@externatic.fr" + ), + ( + "STAGE DEVELOPPEUR WEB Web", "Massy Production", "CDD", "Bordeaux", "- Connaissance des langages de programmation web tels que HTML5, CSS, JavaScript - Connaissance des principaux Framework et bibliothèque web - - Forte motivation à apprendre et à se développer professionnellement.", - "Junior", - "Présent", - "25k €/an", - "Nous recherchons un Stagiaire Développeur Web (H/F) pour rejoindre notre équipe dynamique. En tant que stagiaire, chez l'association Nouvelle Voix, vous aurez l'opportunité de mettre en pratique votre créativité et être force de proposition en terme de design ux/ui.", - "marie@externatic.fr" - ), ( - "Développeur informatique", - "Armée de Terre", - "CDI", - "Bordeaux", - "Vos qualités : très méthodique, goût prononcé pour la technologie, réactif + - Forte motivation à apprendre et à se développer professionnellement.", "Junior", "Présent", "25k €/an", "Nous recherchons un Stagiaire Développeur Web (H/F) pour rejoindre notre équipe dynamique. En tant que stagiaire, chez l'association Nouvelle Voix, vous aurez l'opportunité de mettre en pratique votre créativité et être force de proposition en terme de design ux/ui.", "marie@externatic.fr" + ), + ( + "Développeur informatique", "Armée de Terre", "CDI", "Bordeaux", "Vos qualités : très méthodique, goût prononcé pour la technologie, réactif À partir du bac Homme ou femme, de 18 à 29 ans - Nationalité française, en règle avec les obligations du service national JDC et jouissant de ses droits civiques.", - "Junior", - "Présent", - "25k €/an", - "Votre spécialité consiste à développer des logiciels au profit du ministère des Armées au sein d'un centre de développement. Sous la conduite d'un chef de projet, vous assurez la maintenance d'applications existantes et vous concevez de nouveaux logiciels liés aux besoins des armées. Vous soutenez les forces déployées depuis le territoire national et vous pouvez éventuellement être projetés sur des postes en dehors de votre compétence principale de développeur. Au bout de 4 à 6 ans, vous pouvez évoluer vers les métiers de la cybersécurité.", - "marie@externatic.fr" + Nationalité française, en règle avec les obligations du service national JDC et jouissant de ses droits civiques.", "Junior", "Présent", "25k €/an", "Votre spécialité consiste à développer des logiciels au profit du ministère des Armées au sein d'un centre de développement. Sous la conduite d'un chef de projet, vous assurez la maintenance d'applications existantes et vous concevez de nouveaux logiciels liés aux besoins des armées. Vous soutenez les forces déployées depuis le territoire national et vous pouvez éventuellement être projetés sur des postes en dehors de votre compétence principale de développeur. Au bout de 4 à 6 ans, vous pouvez évoluer vers les métiers de la cybersécurité.", "marie@externatic.fr" ); +DROP TABLE IF EXISTS user_competence; -- Créer la table "user_competence" -CREATE TABLE - user_competence ( - user_id INT, - competence_id INT, - PRIMARY KEY (user_id, competence_id), - FOREIGN KEY (user_id) REFERENCES user(id), - FOREIGN KEY (competence_id) REFERENCES competence(id) - ); -CREATE TABLE - upload ( - id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, - url varchar(255) NOT NULL, - unique(url), - created_at timestamp default CURRENT_TIMESTAMP - ); \ No newline at end of file +CREATE TABLE user_competence ( + user_id INT, html BOOLEAN, css BOOLEAN, javascript BOOLEAN, angular BOOLEAN, react BOOLEAN, php BOOLEAN, symphony BOOLEAN, git BOOLEAN, github BOOLEAN, trello BOOLEAN +); + +DROP TABLE IF EXISTS upload; + +CREATE TABLE upload ( + id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, url varchar(255) NOT NULL, unique (url), created_at timestamp default CURRENT_TIMESTAMP +); \ No newline at end of file diff --git a/backend/public/uploads/75996a6a8c4ad3ccbb51742a108c2acf.jpg b/backend/public/uploads/75996a6a8c4ad3ccbb51742a108c2acf.jpg deleted file mode 100644 index c8c159c..0000000 Binary files a/backend/public/uploads/75996a6a8c4ad3ccbb51742a108c2acf.jpg and /dev/null differ diff --git a/backend/src/controllers/skillControllers.js b/backend/src/controllers/skillControllers.js new file mode 100644 index 0000000..34caa3d --- /dev/null +++ b/backend/src/controllers/skillControllers.js @@ -0,0 +1,30 @@ +const models = require("../models/index"); + +const getSkills = (req, res) => { + models.skill + .findAll(req.body) + .then((rows) => { + res.status(201).send(rows); + }) + .catch((err) => { + console.error(err); + res.status(500).json({ message: err.message }); + }); +}; + +const postSkills = (req, res) => { + models.skill + .skills(req.body) + .then((rows) => { + res.status(201).send(rows); + }) + .catch((err) => { + console.error(err); + res.status(500).json({ message: err.message }); + }); +}; + +module.exports = { + postSkills, + getSkills, +}; diff --git a/backend/src/controllers/userControllers.js b/backend/src/controllers/userControllers.js index b591d86..8741d87 100644 --- a/backend/src/controllers/userControllers.js +++ b/backend/src/controllers/userControllers.js @@ -43,6 +43,8 @@ const postUser = (req, res) => { competence: req.body.competence, email: req.body.email, is_admin: req.body.is_admin, + userCompetenceId: rows.userCompetenceId, + competenceId: rows.competenceId, }); }) .catch((err) => { @@ -52,18 +54,6 @@ const postUser = (req, res) => { // res.status(418).send(req.body) }; -const postSkills = (req, res) => { - models.user - .skills(req.body) - .then((rows) => { - res.status(201).send(rows); - }) - .catch((err) => { - console.error(err); - res.status(500).json({ message: err.message }); - }); -}; - const postLogin = (req, res) => { models.user.login(req.body).then((user) => { if (user) { @@ -104,7 +94,6 @@ const getProfile = (req, res) => { module.exports = { getUsers, postUser, - postSkills, postLogin, updateUser, getProfile, diff --git a/backend/src/models/UserManager.js b/backend/src/models/UserManager.js index bacef39..b085c01 100644 --- a/backend/src/models/UserManager.js +++ b/backend/src/models/UserManager.js @@ -9,7 +9,7 @@ class UserManager extends AbstractManager { create(user) { return UserManager.hashPassword(user.password).then(async (hash) => { const [rows] = await this.database.query( - `INSERT INTO ${this.table} (firstname, lastname, phone, address, email, password, is_admin) VALUES (?, ?, ?, ?, ?, ?, ?)`, + `INSERT INTO user (firstname, lastname, phone, address, email, password, is_admin) VALUES (?, ?, ?, ?, ?, ?, ?)`, [ user.firstname, user.lastname, @@ -20,7 +20,26 @@ class UserManager extends AbstractManager { 0, ] ); - return rows; + const userId = rows.insertId; + + const [userCompetence] = await this.database.query( + "INSERT INTO user_competence (user_id, html, css, javascript, angular, react, php, symphony, git, github, trello) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + [ + userId, + user.html, + user.css, + user.javascript, + user.angular, + user.react, + user.php, + user.symphony, + user.git, + user.github, + user.trello, + ] + ); + + return { userCompetence, rows }; }); } @@ -43,27 +62,6 @@ class UserManager extends AbstractManager { // ); // } - skills(user) { - const columns = Object.keys(user).filter((key) => user[key] === true); - - if (columns.length === 0) { - // Aucune compétence à insérer - return Promise.resolve(); // ou une autre logique adaptée - } - - const values = columns.map((key) => ({ name: key, confirmed: user[key] })); - - const placeholders = Array(values.length).fill("(?, ?)").join(", "); - const flattenedValues = values.reduce( - (acc, val) => acc.concat([val.name, val.confirmed]), - [] - ); - - const query = `INSERT INTO competence (name, confirmed) VALUES ${placeholders}`; - - return this.database.query(query, flattenedValues); - } - async login(user) { const { email, password } = user; const [rows] = await this.database.query( @@ -87,6 +85,13 @@ class UserManager extends AbstractManager { ]); } + addAvatar(userId, avatarId) { + return this.database.query( + `UPDATE ${this.table} SET avatar = ? WHERE id = ?`, + [avatarId, userId] + ); + } + static hashPassword(password, workFactor = 5) { return bcrypt.hash(password, workFactor); } diff --git a/backend/src/router.js b/backend/src/router.js index ad260ac..a27a7d6 100644 --- a/backend/src/router.js +++ b/backend/src/router.js @@ -11,6 +11,7 @@ const offerControllers = require("./controllers/offerControllers"); const experienceControllers = require("./controllers/experienceControllers"); const courseControllers = require("./controllers/courseControllers"); const cvControllers = require("./controllers/cvControllers"); +const skillControllers = require("./controllers/skillControllers"); const { authMiddleware, authAdminMiddleware, @@ -32,7 +33,8 @@ router.get( ); router.get("/users/me", authMiddleware, userControllers.getProfile); router.post("/users", userControllers.postUser); -router.post("/user/skills", userControllers.postSkills); +router.get("/user/skills", skillControllers.getSkills); +router.post("/user/skills", skillControllers.postSkills); router.post("/login", userControllers.postLogin); /* OFFERS. */ diff --git a/frontend/src/contexts/GlobalContext.jsx b/frontend/src/contexts/GlobalContext.jsx index c588a1c..511ae5b 100644 --- a/frontend/src/contexts/GlobalContext.jsx +++ b/frontend/src/contexts/GlobalContext.jsx @@ -32,10 +32,13 @@ function GlobalContextProvider({ children, apiService }) { }; const handleCheckboxChange = (callback, fieldName) => { - callback((prevData) => ({ - ...prevData, - [fieldName]: !prevData[fieldName], - })); + callback((prevData) => { + const newValue = !prevData[fieldName]; + return { + ...prevData, + [fieldName]: newValue, + }; + }); }; const handleLogout = () => { @@ -43,6 +46,7 @@ function GlobalContextProvider({ children, apiService }) { apiService.setToken(null); setUser(null); + // eslint-disable-next-line no-alert alert(`Déconnexion réussie`); return navigate("/"); }; diff --git a/frontend/src/contexts/UserContext.jsx b/frontend/src/contexts/UserContext.jsx index 948489d..c5fec98 100644 --- a/frontend/src/contexts/UserContext.jsx +++ b/frontend/src/contexts/UserContext.jsx @@ -37,7 +37,6 @@ function UserContextProvider({ children }) { // saveItemInLS("Profile", newData); // return newData; // }); - // }; const [addCv, setAddCv] = useState({ id: uuid(), diff --git a/frontend/src/pages/Connexion/SignIn.jsx b/frontend/src/pages/Connexion/SignIn.jsx index 63c5bbc..4919576 100644 --- a/frontend/src/pages/Connexion/SignIn.jsx +++ b/frontend/src/pages/Connexion/SignIn.jsx @@ -88,34 +88,56 @@ function SignIn() { setSuccesMsg(false); }, 2000); - axios.post("http://localhost:3310/api/users", signIn); - // axios.post("http://localhost:3310/api/users", signIn); - // axios.post("http://localhost:3010/api/user/skills/", skills); + axios.post("http://localhost:3310/api/users", signIn).then((response) => { + const userId = response.data.rows.insertId; + axios + .post(`http://localhost:3310/api/user_competence/${userId}`, { + ...signIn, + html: skills.html || false, + css: skills.css || false, + javascript: skills.javascript || false, + angular: skills.angular || false, + react: skills.react || false, + php: skills.php || false, + symphony: skills.symphony || false, + git: skills.git || false, + github: skills.github || false, + trello: skills.trello || false, + }) + .then(() => { + setSignIn({ + email: "", + password: "", + password2: "", + lastname: "", + firstname: "", + phone: "", + address: "", + }); - // console.log(signIn); - // console.log(skills); - - setSignIn({ - email: "", - password: "", - password2: "", - lastname: "", - firstname: "", - phone: "", - address: "", + if (signIn.addCvNow === true) { + setTimeout(() => { + navigate("/edit-profile/cv"); + }, 2000); + } else { + setTimeout(() => { + navigate("/login"); + }, 2000); + } + }) + .catch((error) => { + console.error("Error during Axios request:", error); + if (error.response) { + console.error("Response data:", error.response.data); + console.error("Response status:", error.response.status); + console.error("Response headers:", error.response.headers); + } else if (error.request) { + console.error("No response received:", error.request); + } else { + console.error("Error message:", error.message); + } + }); }); - - // setUserConnected(true); - - if (signIn.addCvNow === true) { - setTimeout(() => { - navigate("/edit-profile/cv"); - }, 2000); - } else { - setTimeout(() => { - navigate("/login"); - }, 2000); - } } }; @@ -300,4 +322,5 @@ function SignIn() { ); } + export default SignIn; diff --git a/frontend/src/pages/ProfileUser/UserProfileModel.jsx b/frontend/src/pages/ProfileUser/UserProfileModel.jsx index 37c4cc3..8d09d2f 100644 --- a/frontend/src/pages/ProfileUser/UserProfileModel.jsx +++ b/frontend/src/pages/ProfileUser/UserProfileModel.jsx @@ -1,20 +1,22 @@ -import { Outlet, useLoaderData } from "react-router-dom"; +import { useLoaderData } from "react-router-dom"; import { useEffect, useState } from "react"; import Input from "../../components/Inputs/Input"; import HeaderLongUser from "../../components/Headers/HeaderLongUser"; import Title from "../../components/Titles/Title"; +import CompetenceSwitch from "../../components/Competence Switch/CompetenceSwitch"; +import ButtonMaxi from "../../components/Boutons/ButtonMaxi"; import { useGlobalContext } from "../../contexts/GlobalContext"; -import AddDetailsCV from "../../components/Add Something/AddSomething"; +import { useUserContext } from "../../contexts/UserContext"; import ErrorMsg from "../../components/Alertes Messages/ErrorMsg"; import SuccesMsg from "../../components/Alertes Messages/SuccesMsg"; -import ButtonMaxi from "../../components/Boutons/ButtonMaxi"; -import { useUserContext } from "../../contexts/UserContext"; +import AddDetailsCV from "../../components/Add Something/AddSomething"; function UserProfileModel() { const { handleAddCv } = useUserContext(); - const { errorMsg, succesMsg, msgContent, apiService } = useGlobalContext(); - - const [getProfile, setGetProfile] = useState({}); + const { errorMsg, succesMsg, msgContent, apiService, handleChange } = + useGlobalContext(); + const [getProfile, setGetProfile] = useState([]); + const [getSkills, setGetSkills] = useState([]); const { experiences, courses } = useLoaderData(); useEffect(() => { @@ -23,16 +25,41 @@ function UserProfileModel() { const response = await apiService.get( "http://localhost:3310/api/users/me" ); - setGetProfile(response.data); } catch (err) { console.error(err); } }; + + const getSkillsProfile = async () => { + try { + const response = await apiService.get( + "http://localhost:3310/api/user/skill" + ); + setGetSkills(response.data); + } catch (err) { + console.error(err); + } + }; + getSkillsProfile(); getUserProfile(); }, []); - return window.location.pathname === "/edit-profile" || - window.location.pathname === "/edit-profile" ? ( + + const handleCheckboxChanged = async (fieldName) => { + const updatedSkills = { ...getSkills, [fieldName]: !getSkills[fieldName] }; + setGetSkills(updatedSkills); + + try { + await apiService.post( + "http://localhost:3310/api/user/updateSkills", + updatedSkills + ); + } catch (error) { + console.error("Error updating skills:", error); + } + }; + + return ( <> handleChange(getProfile, "lastname", event)} /> handleChange(getProfile, "firstname", event)} /> handleChange(getProfile, "email", event)} /> handleChange(getProfile, "phone", event)} /> handleChange(getProfile, "address", event)} /> +
+

Cochez vos compétences *

+ + handleCheckboxChanged(getSkills, "html", event) + } + /> + + handleCheckboxChanged(getSkills, "css", event) + } + /> + + handleCheckboxChanged(getSkills, "javascript", event) + } + /> + + handleCheckboxChanged(getSkills, "angular", event) + } + /> + + handleCheckboxChanged(getSkills, "react", event) + } + /> + + handleCheckboxChanged(getSkills, "php", event) + } + /> + + handleCheckboxChanged(getSkills, "symphony", event) + } + /> + + handleCheckboxChanged(getSkills, "git", event) + } + /> + + handleCheckboxChanged(getSkills, "github", event) + } + /> + + handleCheckboxChanged(getSkills, "trello", event) + } + /> +
- ) : ( -
- -
); }