Skip to content

Commit

Permalink
feat: bouger api modele de courrier (#5690)
Browse files Browse the repository at this point in the history
* refactor: move api modele

* chore: snap

* chore: update snap

* fix: missing filename

* chore: add e2e test for modele widget page

* chore: revoiew

* chore: snap

* fix: build error

* fix: review

---------

Co-authored-by: Victor <victor.zeinstra@gmail.com>
  • Loading branch information
Viczei and Victor committed Mar 26, 2024
1 parent 90448c2 commit c6bcffe
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,11 @@ describe("Widgets", () => {
cy.get("button").contains("Commencer").click();
cy.contains("Le licenciement est-il dû à une faute grave (ou lourde)");
});

it("Page widget modeles", () => {
cy.visit("/widgets/modeles-de-courriers/9a6cf1b40c");
cy.contains("Lettre de démission");

cy.contains("Télécharger le modèle");
});
});
13 changes: 13 additions & 0 deletions packages/code-du-travail-frontend/pages/api/modeles/[id].ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { NextApiRequest, NextApiResponse } from "next";
import { ModelesController, runMiddleware } from "../../../src/api";

export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
await runMiddleware(req, res);
const controller = new ModelesController(req, res);
if (req.method === "GET") {
controller.getById();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextApiRequest, NextApiResponse } from "next";
import { ModelesController, runMiddleware } from "../../src/api";
import { ModelesController, runMiddleware } from "../../../src/api";

export default async function handler(
req: NextApiRequest,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ function Widgets(props: LetterModelProps): JSX.Element {
);
}

const fetchCourrier = ({ id }) =>
fetch(`${SITE_URL}/api/items/modeles_de_courriers/${id}`);
const fetchCourrier = ({ id }) => fetch(`${SITE_URL}/api/modeles/${id}`);

export const getServerSideProps = async ({ query }) => {
const response = await fetchCourrier(query);
Expand All @@ -47,10 +46,7 @@ export const getServerSideProps = async ({ query }) => {
}

const data = await response.json();
if (!data.length) {
return handleError({ status: 404 });
}
return { props: { relatedItems: [], ...data[0]._source } };
return { props: { relatedItems: [], ...data[0] } };
};

export default Widgets;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,17 @@ exports[`Modeles getByIdsModeles 1`] = `
],
"cdtnId": "a712ecb976",
"description": "La rupture conventionnelle individuelle est une modalité de rupture spécifique du CDI. Elle nécessite le consentement de l’employeur et du salarié, et son homologation par l’administration. La rupture ouvre droit à une indemnité de rupture conventionnelle. Ce modèle permet d’initier la procédure de rupture par l’invitation à un premier entretien.",
"filename": "demande_rdv_rupture_conventionnelle.docx",
"filesize": 14535,
"html": "<style>
.courrier-expediteur {display: flex; align-items: flex-start; flex-direction:column;}
.courrier-destinataire {display: flex; align-items: flex-end; flex-direction:column;}
.courrier-signature {display: flex; flex-direction:column; align-items: flex-end;}
.title-center {display: flex; align-items: center; flex-direction:column; font-size: 1.8rem; font-weight:bold}
.center {display: flex; align-items: center; flex-direction:column; }
.checklist { list-style-image: url(data:image/svg+xml;,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221rem%22%20height%3D%221rem%22%20viewBox%3D%220%200%2011%2011%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M2%202h10v10H2z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20stroke%3D%22currentColor%22%20stroke-width%3D%22.5%22%20d%3D%22M1%201h9v9H1z%22%2F%3E%3C%2Fsvg%3E);}
.editable {color: #4d73b8}
</style><div class="courrier-expediteur"><p><span class='editable'>« Prénom Nom du salarié »</span></p><p><span class='editable'>« Adresse »</span></p><p><span class='editable'>« Code postal + Ville »</span></p><p><span class='editable'>« Tél : 00.00.00.00.00 »</span></p><p><span class='editable'>« E-mail : …………@... »</span></p></div><div class="courrier-destinataire"><p><span class='editable'>« Société »</span></p><p><span class='editable'>« Prénom Nom du représentant »</span></p><p><span class='editable'>« Fonction (DRH, etc.) »</span></p><p><span class='editable'>« Adresse »</span></p><p><span class='editable'>« Code postal + Ville »</span></p><p>A<a id="__DdeLink__1875_1685986494"></a> <span class='editable'>« lieu »</span>, le <span class='editable'>« date »</span></p></div><div class="courrier-expediteur"><p>Objet : Demande de rendez-vous en vue d’une éventuelle rupture conventionnelle</p></div><p><span class='editable'>« Madame / Monsieur »</span>,</p><p>Je sollicite un entretien afin de vous proposer que nous convenions ensemble, si vous en êtes d’accord, de la rupture de mon contrat de travail dans le cadre légal de la rupture conventionnelle. </p><p>A cette occasion, je vous présenterai les raisons de ma démarche et nous pourrons déterminer d’un commun accord les modalités de la rupture de mon contrat de travail.</p><p>Seriez-vous disponible pour un rendez-vous ce mois-ci, à la date qui vous convient ? </p><p>Vous pouvez me joindre aux coordonnées présentées ci-dessus.</p><p>Veuillez agréer, <span class='editable'>« Madame / Monsieur »</span>, l’expression de ma considération distinguée.</p><div class="courrier-destinataire"><p><span class='editable'>« Prénom Nom du salarié »</span></p><p><span class='editable'>« Signature »</span></p></div>",
"slug": "demande-de-rendez-vous-en-vue-dune-rupture-conventionnelle",
"source": "modeles_de_courriers",
"title": "Demande de rendez-vous en vue d’une rupture conventionnelle",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { NextApiRequest, NextApiResponse } from "next";
import { DEFAULT_ERROR_500_MESSAGE, NotFoundError } from "../../utils";
import { getAllModeles } from "./service";
import { getAllModeles, getByIdsModeles } from "./service";

export class ModelesController {
private req: NextApiRequest;
Expand All @@ -25,4 +25,24 @@ export class ModelesController {
}
}
}

public async getById() {
try {
const { id } = this.req.query;
if (!id) {
this.res.status(400).json({ message: "missing parameter id" });
return;
}
const response = await getByIdsModeles([id as string]);
this.res.status(200).json(response);
} catch (error) {
if (error instanceof NotFoundError) {
this.res.status(404).json({ message: error.message });
} else {
this.res.status(500).json({
message: DEFAULT_ERROR_500_MESSAGE,
});
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ export function getModelesByIds(ids: string[]) {
"breadcrumbs",
"source",
"cdtnId",
"filesize",
"filename",
"html",
],
query: {
bool: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,14 @@ export const getByIdsModeles = async (
body,
index: elasticDocumentsIndex,
});
return response.body.hits.total.value > 0
? response.body.hits.hits.map(({ _source }) => _source)
: [];
if (response.body.hits.total.value === 0) {
throw new NotFoundError({
message: `There is no modeles that match ${ids.join(", ")}`,
name: "MODELE_NOT_FOUND",
cause: null,
});
}
return response.body.hits.hits.map(({ _source }) => _source);
};

export const getBySlugModeles = async (slug: string) => {
Expand Down

0 comments on commit c6bcffe

Please sign in to comment.