Skip to content

Commit

Permalink
Merge branch 'dev' of github.com:WildCodeSchool/2023-09-JS-BDX-P3-La_…
Browse files Browse the repository at this point in the history
…Rive_Droite into front_profile
  • Loading branch information
cassiopeelaurie committed Jan 15, 2024
2 parents fe92a30 + ebf69a5 commit a715b8c
Show file tree
Hide file tree
Showing 26 changed files with 339 additions and 196 deletions.
72 changes: 41 additions & 31 deletions backend/database/database.sql
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ CREATE TABLE
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)
Expand All @@ -23,9 +24,26 @@ DROP TABLE IF EXISTS competence;
CREATE TABLE
competence (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
name VARCHAR(100),
confirmed BOOL
);

-- CREATE
-- TABLE
-- competence (
-- id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-- -- name VARCHAR(100),
-- html TEXT,
-- css TEXT,
-- javascript TEXT,
-- angular TEXT,
-- react TEXT,
-- php TEXT,
-- symphony TEXT,
-- git TEXT,
-- github TEXT,
-- trello TEXT
-- );
DROP TABLE IF EXISTS cv;

CREATE TABLE
Expand Down Expand Up @@ -101,36 +119,28 @@ INSERT INTO
email
)
VALUES (
"Developpeur Web Front End",
"Invo'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.
Des opportunités de carrières multiples : plus de 30 familles de métiers, autant de passerelles à imaginer ensemble.
Plusieurs centaines de formations accessibles en toute autonomie depuis l'app mobile avec Sopra Steria Academy.
La possibilité de s'engager auprès de notre fondation ou de notre partenaire « Vendredi ».
L'opportunité de rejoindre le collectif Tech'Me UP (formations, conférences, veille, et bien plus encore…).
",
"[email protected]"
);
"Developpeur Web Front End",
"Invo'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.",
"[email protected]"
), (
"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.",
"[email protected]"
);

-- Créer la table "user_competence"
CREATE TABLE
Expand Down
4 changes: 2 additions & 2 deletions backend/src/controllers/userControllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ const postSkills = (req, res) => {
models.user
.skills(req.body)
.then((rows) => {
res.sendStatus(201).send(rows);
res.status(201).send(rows);
})
.catch((err) => {
console.error(err);
res.send({ message: err.message });
res.status(500).json({ message: err.message });
});
};

Expand Down
50 changes: 36 additions & 14 deletions backend/src/models/UserManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,44 @@ class UserManager extends AbstractManager {
});
}

// Ancienne méthode.
// skills(user) {
// return this.database.query(
// `INSERT INTO skill (html, css, javascript, angular, react, php, symphony, git, github, trello) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
// [
// user.html,
// user.css,
// user.javascript,
// user.angular,
// user.react,
// user.php,
// user.symphony,
// user.git,
// user.github,
// user.trello,
// ]
// );
// }

skills(user) {
return this.database.query(
`INSERT INTO skill (html, css, javascript, angular, react, php, symphony, git, github, trello) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[
user.html,
user.css,
user.javascript,
user.angular,
user.react,
user.php,
user.symphony,
user.git,
user.github,
user.trello,
]
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) {
Expand Down
8 changes: 7 additions & 1 deletion backend/src/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ const {
authAdminMiddleware,
} = require("./middlewares/security/auth.middlewares");

/* USER. */
router.get(
"/users",
authMiddleware,
authAdminMiddleware,
userControllers.getUsers
);
router.post("/users", userControllers.postUser);
router.get("/users/:id([0-9]+)/cvs", authMiddleware, cvControllers.getCv);
router.get(
"/users/:id([0-9]+)",
Expand All @@ -27,8 +27,11 @@ router.get(
userControllers.getUserById
);
router.get("/users/me", authMiddleware, userControllers.getProfile);
router.post("/users", userControllers.postUser);
router.post("/user/skills", userControllers.postSkills);
router.post("/login", userControllers.postLogin);

/* OFFERS. */
router.get("/offer", offerControllers.getOffers);
router.get("/offer/:id([0-9]+)", offerControllers.getOfferById);
router.post(
Expand All @@ -44,6 +47,7 @@ router.delete(
offerControllers.deleteOfferById
);

/* EXPERIENCES. */
router.get(
"/experiences",
authMiddleware,
Expand All @@ -70,6 +74,7 @@ router.delete(
experienceControllers.deleteExperienceById
);

/* COURSES. */
router.get("/course", authMiddleware, courseControllers.getCourse);
router.get(
"/course/:id([0-9]+)",
Expand All @@ -88,6 +93,7 @@ router.delete(
courseControllers.deleteCourseById
);

/* CV. */
router.post("/cvs", authMiddleware, authAdminMiddleware, cvControllers.postCv);

// router.post("/signin", userControllers.postUser);
Expand Down
4 changes: 4 additions & 0 deletions frontend/src/components/Boutons/ButtonMaxi.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,9 @@ ButtonMaxi.propTypes = {
textBtn: PropTypes.string.isRequired,
clickFunc: PropTypes.func.isRequired,
};
// ButtonMaxi.defaultProps = {
// textBtn: "Enregistrer",
// clickFunc: () => {},
// };

export default ButtonMaxi;
3 changes: 2 additions & 1 deletion frontend/src/components/Boutons/ButtonMini.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ function ButtonMini({ textBtn, onClick }) {
);
}
ButtonMini.propTypes = {
textBtn: PropTypes.string.isRequired,
textBtn: PropTypes.string,
onClick: PropTypes.func,
};
ButtonMini.defaultProps = {
textBtn: "Enregistrer",
onClick: () => {},
};
export default ButtonMini;
4 changes: 2 additions & 2 deletions frontend/src/components/CardModel/card-model.css
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
.card-container {
border: none;
padding: 20px 20px;
padding: 30px;
border-radius: 6px;
box-shadow: 5px 5px 15px 8px rgba(217, 217, 217, 0.53);
margin-top: 20px;
margin: 20px 10px;
}

.label-offre {
Expand Down
75 changes: 60 additions & 15 deletions frontend/src/components/Dashboards/RowDash.jsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import React, { useState, useEffect } from "react";
import { useGlobalContext } from "../../contexts/GlobalContext";
import "./RowDash.css";

const OfferDash = [
Expand Down Expand Up @@ -39,23 +41,66 @@ const OfferDash = [
];

function RowDash() {
const { goToOffer } = useGlobalContext();

const [offers, setOffers] = useState([]);

useEffect(() => {
const fetchOffers = async () => {
try {
const response = await fetch("http://localhost:3310/api/offer");
if (response.ok) {
const data = await response.json();
setOffers(data);
} else {
console.error("Aucune données n'a été récuperé.");
}
} catch (err) {
console.error(err);
}
};

fetchOffers();
}, []);

return (
<div className="rowDash-container">
{OfferDash.map((offer) => (
<div key={offer.idOffer} className="offerDash-item">
<p className="array-box">{offer.idOffer}</p>
<p className="array-box">{offer.Entreprise}</p>
<p className="array-box">{offer.NbrCandidats}</p>
<p className="array-box">{offer.Statut}</p>
<p className="bigArray-box">{offer.mailRef}</p>
<div className="icon-dash">
<i className="fa-solid fa-pen" />
<i className="fa-solid fa-eye" />
<i className="fa-solid fa-trash" />
<>
<div className="rowDash-container">
{offers.map((offer) => (
<div key={offer.idOffer} className="offerDash-item">
<p className="array-box">{offer.id}</p>
<p className="array-box">{offer.company}</p>
<p className="array-box">{offer.NbrCandidats}</p>
<p className="array-box">En ligne</p>
<p className="bigArray-box">{offer.email}</p>
<div className="icon-dash">
<i className="fa-solid fa-pen" />
<button type="button" onClick={() => goToOffer(offer.id)}>
.
<i className="fa-solid fa-eye" />.
</button>
<i className="fa-solid fa-trash" />
</div>
</div>
))}
</div>
<div className="rowDash-container">
{OfferDash.map((offer) => (
<div key={offer.idOffer} className="offerDash-item">
<p className="array-box">{offer.idOffer}</p>
<p className="array-box">{offer.Entreprise}</p>
<p className="array-box">{offer.NbrCandidats}</p>
<p className="array-box">{offer.Statut}</p>
<p className="bigArray-box">{offer.mailRef}</p>
<div className="icon-dash">
<i className="fa-solid fa-pen" />
<i className="fa-solid fa-eye" />
<i className="fa-solid fa-trash" />
</div>
</div>
</div>
))}
</div>
))}
</div>
</>
);
}

Expand Down
4 changes: 2 additions & 2 deletions frontend/src/components/Headers/HeaderLongResearch.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import InputSearch from "../Inputs/InputSearch";

function HeaderLongResearch({ textTitle, textTitle2 }) {
return (
<header className="header with-round-bottom">
<div className="header-content">
<header className=" header with-round-bottom ">
<div className=" container header-content">
<h1>{textTitle}</h1>
<h2>{textTitle2}</h2>
<InputSearch holderText="Recherche..." />
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Headers/HeaderLongTitle.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import PropTypes from "prop-types";
function HeaderLongTitle({ textTitle }) {
return (
<header className="header">
<div className="header-content">
<div className=" container header-content">
<h1>{textTitle}</h1>
</div>
</header>
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Headers/HeaderLongTitreSsTitre.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import PropTypes from "prop-types";
function HeaderLongTitreSsTitre({ title, subTitle }) {
return (
<header className="header with-round-bottom">
<div className="header-content title-and-sub-title">
<div className=" container header-content title-and-sub-title">
<h1>{title}</h1>
<h2>{subTitle}</h2>
</div>
Expand Down
13 changes: 11 additions & 2 deletions frontend/src/components/Headers/header.css
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
.header {
color: var(--first-title-color);
background-color: var(--main-color);
padding-bottom: 50px;
padding-bottom: 40px;
margin-top: -50px;
padding-top: 70px;
padding-top: 80px;
}

.header.with-round-bottom {
Expand Down Expand Up @@ -80,3 +80,12 @@
font-weight: 500;
margin-top: 5px;
}

@media screen and (min-width: 1000px) {
.header {
padding-bottom: 100px;
}
.with-round-bottom {
margin-bottom: 50px;
}
}
Loading

0 comments on commit a715b8c

Please sign in to comment.