Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
carolineBda committed Sep 26, 2024
1 parent ee856c6 commit 2b0dcf8
Show file tree
Hide file tree
Showing 15 changed files with 254 additions and 177 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ docker-compose up -d hasura minio elasticsearch createbuckets
#### 5. Run ingester in development mode

```sh
DISABLE_LIMIT_EXPORT=true DISABLE_AGREEMENTS=true DISABLE_SITEMAP=true HASURA_GRAPHQL_ENDPOINT="http://localhost:8080/v1/graphql" HASURA_GRAPHQL_ADMIN_SECRET="admin1" ELASTICSEARCH_URL_PREPROD="http://localhost:9200" ELASTICSEARCH_URL_PROD="http://localhost:9200" SITEMAP_DESTINATION_FOLDER="sitemap" SITEMAP_NAME="sitemap.xml" SITEMAP_ENDPOINT="http://localhost:3001/api/sitemap" AGREEMENTS_DESTINATION_FOLDER="agreements" AGREEMENTS_DESTINATION_NAME="index.json" BUCKET_DEFAULT_FOLDER="default" BUCKET_DRAFT_FOLDER="draft" BUCKET_PUBLISHED_FOLDER= BUCKET_PREVIEW_FOLDER="preview" BUCKET_ACCESS_KEY="MINIO_ACCESS_KEY" BUCKET_ENDPOINT=http://localhost:9000 BUCKET_NAME="cdtn" BUCKET_SECRET_KEY="MINIO_SECRET_KEY" BUCKET_REGION="us-east-1" CDTN_ADMIN_ENDPOINT="http://localhost:8080/v1/graphql" ELASTICSEARCH_INDEX_PREPROD="cdtn-v2" ELASTICSEARCH_INDEX_PROD="cdtn-v2" FETCH_PAGE_SIZE=1000 FETCH_JOB_CONCURRENCY=5 yarn workspace export-elasticsearch dev
DISABLE_LIMIT_EXPORT=true DISABLE_AGREEMENTS=true DISABLE_SITEMAP=true DISABLE_COPY=true HASURA_GRAPHQL_ENDPOINT="http://localhost:8080/v1/graphql" HASURA_GRAPHQL_ADMIN_SECRET="admin1" ELASTICSEARCH_URL_PREPROD="http://localhost:9200" ELASTICSEARCH_URL_PROD="http://localhost:9200" SITEMAP_DESTINATION_FOLDER="sitemap" SITEMAP_NAME="sitemap.xml" SITEMAP_ENDPOINT="http://localhost:3001/api/sitemap" AGREEMENTS_DESTINATION_FOLDER="agreements" AGREEMENTS_DESTINATION_NAME="index.json" BUCKET_DEFAULT_FOLDER="default" BUCKET_DRAFT_FOLDER="draft" BUCKET_PUBLISHED_FOLDER= BUCKET_PREVIEW_FOLDER="preview" BUCKET_ACCESS_KEY="MINIO_ACCESS_KEY" BUCKET_ENDPOINT=http://localhost:9000 BUCKET_NAME="cdtn" BUCKET_SECRET_KEY="MINIO_SECRET_KEY" BUCKET_REGION="us-east-1" CDTN_ADMIN_ENDPOINT="http://localhost:8080/v1/graphql" ELASTICSEARCH_INDEX_PREPROD="cdtn-v2" ELASTICSEARCH_INDEX_PROD="cdtn-v2" FETCH_PAGE_SIZE=1000 FETCH_JOB_CONCURRENCY=5 yarn workspace export-elasticsearch dev
```

- `DISABLE_LIMIT_EXPORT` is used to disable the limit to run two export in less than one hour
Expand Down
1 change: 1 addition & 0 deletions shared/types/src/hasura/contributions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type ContributionStatus = {

export type ContributionsAnswers = {
id: string;
cdtnId: string | null;
content: string | null;
description: string | null;
content_type: ContributionContentType;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import {
ContributionDocumentJson,
DocumentElasticWithSource,
ExportEsStatus,
} from "@socialgouv/cdtn-types";
import { context } from "../context";
import { gqlClient } from "@shared/utils";
Expand All @@ -17,10 +16,6 @@ query fetchContributionsInDocuments($updated_at: timestamptz!) {
cdtnId: cdtn_id
contribution {
id
statuses(where:{status: {_eq: "TO_PUBLISH"}}, order_by: {created_at: desc}, limit: 1) {
status
createdAt: created_at
}
}
}
}
Expand All @@ -30,24 +25,6 @@ interface HasuraReturn {
documents: [DocumentElasticWithSource<ContributionDocumentJson>] | undefined;
}

export function filterContributionDocumentsToPublish(
latestExportEs: Partial<ExportEsStatus> | undefined,
contributionDocs:
| DocumentElasticWithSource<ContributionDocumentJson>[]
| undefined
): DocumentElasticWithSource<ContributionDocumentJson>[] | undefined {
return contributionDocs?.filter((doc) => {
const exportDate = latestExportEs?.created_at
? new Date(latestExportEs.created_at).getTime()
: 0;
const statusDate = doc.contribution?.statuses?.length
? new Date(doc.contribution.statuses[0].createdAt).getTime()
: 0;

return statusDate > exportDate;
});
}

export async function fetchContributionDocumentToPublish(
isProd: boolean
): Promise<DocumentElasticWithSource<ContributionDocumentJson>[] | undefined> {
Expand Down Expand Up @@ -75,8 +52,5 @@ export async function fetchContributionDocumentToPublish(
throw res.error;
}

return filterContributionDocumentsToPublish(
lastCompletedExportEsStatus,
res.data?.documents
);
return res.data?.documents;
}
41 changes: 19 additions & 22 deletions targets/export-elasticsearch/src/services/export.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,21 @@ export class ExportService {
environment,
Status.running
);
const envName =
environment === Environment.preproduction
? "Préproduction"
: "Production";
try {
if (!process.env.DISABLE_INGESTER) {
const startMessage = `**${envName}:** mise à jour lancée par *${exportEs.user?.name}* 🚀`;
await sendMattermostMessage(
startMessage,
process.env.MATTERMOST_CHANNEL_EXPORT
);
logger.info(startMessage);
if (environment === Environment.preproduction) {
await sendMattermostMessage(
`**Préproduction:** mise à jour lancée par *${exportEs.user?.name}* 😎`,
process.env.MATTERMOST_CHANNEL_EXPORT
);
await runWorkerIngesterPreproduction();
} else {
await sendMattermostMessage(
`**Production:** mise à jour lancée par *${exportEs.user?.name}* 🚀`,
process.env.MATTERMOST_CHANNEL_EXPORT
);
await runWorkerIngesterProduction();
}
}
Expand All @@ -66,27 +68,22 @@ export class ExportService {
await this.copyContainerService.runCopy(environment);
}
const exportEsDone = await this.exportRepository.getOne(id);
if (environment === Environment.preproduction) {
await sendMattermostMessage(
`**Préproduction:** mise à jour terminée (${exportEsDone.documentsCount?.total} documents) 😁`,
process.env.MATTERMOST_CHANNEL_EXPORT
);
} else {
await sendMattermostMessage(
`**Production:** mise à jour terminée (${exportEsDone.documentsCount?.total} documents) 🎉`,
process.env.MATTERMOST_CHANNEL_EXPORT
);
}

const message = `**${envName}:** mise à jour terminée (${exportEsDone.documentsCount?.total} documents) 🎉`;
logger.info(message);
await sendMattermostMessage(
message,
process.env.MATTERMOST_CHANNEL_EXPORT
);

return await this.exportRepository.updateOne(
id,
Status.completed,
new Date()
);
} catch (e: any) {
await sendMattermostMessage(
environment === Environment.preproduction
? " La mise à jour de la préproduction a échouée. 😢"
: "La mise à jour de la production a échouée. 😭",
`⚠️ **${envName}:** La mise à jour a échouée. ⚠️`,
process.env.MATTERMOST_CHANNEL_EXPORT
);
return await this.exportRepository.updateOne(
Expand Down
1 change: 1 addition & 0 deletions targets/frontend/__mocks__/@codegouvfr/react-dsfr/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ module.exports = {
},
},
},
spacing: jest.fn()
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ describe("mapContributionToDocument", () => {
updatedAt: "2024-07-11T13:18:08.000Z",
display_date: "2024-07-11T13:18:08.000Z",
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb5",
cdtnId: "1234",
content:
"<p>Quand une femme tombe enceinte et décide de partir en congé maternité, cette dernière a droit à des indemnités journalières de sécurité sociale venant indemniser la période durant laquelle elle ne peut plus travailler. Certaines conventions collectives prévoient également un maintien de salaire versé par l’employeur. Si le maintien est à 100%, dans ce cas, les deux mécanismes ne sont pas cumulables. Si le maintien est inférieur à 100%, le pourcentage de rémunération restant est indemnisé par les indemnités de Sécurité sociale.&nbsp;</p><h3>Maintien de salaire</h3><p>Les salariées ayant au moins une année de présence continue dans l'entreprise à la date de l'accouchement ont droit à un maintien de salaire, après déduction des indemnités de Sécurité sociale, qui leur assure leur salaire habituel, et ce pendant une durée de 36 jours (en principe 18 jours avant l’accouchement, 18 jours après).</p><p>Pour les salariées cadres âgées de moins de 25 ans et les autres salariées âgées de moins de 22 ans à la date de l'accouchement, la période de 36 jours est augmentée de 2 jours par enfant à charge. L'indemnité&nbsp;complémentaire ne pourra pas être versée plus de 46 jours. Est considéré comme enfant à charge tout enfant à charge de la salariée au sens de la législation des prestations familiales et âgé de moins de 15 ans à la date de l'accouchement.</p><p>A noter&nbsp;: Les périodes de&nbsp;suspension du contrat de travail&nbsp;(maladie, etc.) sont prises en compte pour l'ancienneté.</p><p>Si la salariée ne respecte pas la condition d’ancienneté, elle n’a pas droit au maintien de salaire versé par l’employeur mais aura potentiellement droit aux indemnités journalières de Sécurité sociale si elle respecte ses conditions d’octroi.&nbsp;</p><h3>Indemnités de Sécurité sociale</h3><p><strong>Conditions d’ouverture des droits aux indemnités journalières de Sécurité sociale</strong></p><p>Pour être indemnisée, la salariée doit remplir les conditions suivantes :</p><ul><li><p>Etre affiliée à la Sécurité sociale depuis au moins 10 mois à la date présumée de l'accouchement&nbsp;;</p></li><li><p>cesser son activité professionnelle pendant au moins 8&nbsp;semaines&nbsp;;</p></li></ul><ul><li><p>avoir :&nbsp;</p><ul><li><p>soit travaillé au moins 150 heures au cours des 3 mois civils ou des 90 jours précédant l'arrêt,&nbsp;</p></li><li><p>soit travaillé au moins&nbsp;<strong>600 heures</strong>&nbsp;au cours des 12 mois précédant l’arrêt de travail,&nbsp;</p></li><li><p>soit cotisé, au cours des 6 mois civils précédant l'arrêt, sur la base d'une rémunération au moins égale à 1 015 fois le montant du Smic horaire fixé au début de cette période,&nbsp;</p></li><li><p>soit cotisé au cours des&nbsp;<strong>12 mois</strong>&nbsp;civils précédant l’arrêt, sur la base d'une rémunération au moins égale à&nbsp;2030 fois le montant du Smic horaire fixé en début de période.</p></li></ul></li></ul><p>Exemple&nbsp;:&nbsp;le congé a débuté le 1er juillet 2023 pour une date présumée d'accouchement au 1er septembre 2023.</p><p>Le droit aux&nbsp;indemnités&nbsp;journalières est ouvert si :</p><ul><li><p>La salariée était déjà affiliée à la Sécurité sociale avant novembre 2022&nbsp;;</p></li><li><p>et a travaillé soit au moins 150 heures entre le 1er avril 2023 et le 30 juin 2023, soit au moins 600 heures entre le 1er juillet 2022 et le 30 juin 2023, soit a cotisé entre le 1er janvier 2023 et le 30 juin 2023 sur la base d'une rémunération au moins égale à 11&nbsp;439,05&nbsp;€, soit a cotisé entre le 1er juillet 2022 et le 30 juin 2023 sur la base d’une rémunération au moins égale à 22&nbsp;878,1 €.</p></li></ul><p><strong>Montant</strong></p><p>La CPAM verse des&nbsp;indemnités&nbsp;journalières, dont le montant est fixé selon les étapes de calcul suivantes :</p><ul><li><p>Calcul du salaire journalier de base : somme des 3 derniers salaires bruts perçus avant la date d'interruption du travail, divisé par 91,25.</p></li><li><p>Montant maximal du salaire journalier de base : le salaire pris en compte ne peut pas dépasser le plafond mensuel de la sécurité sociale en&nbsp;vigueur&nbsp;lors du dernier jour du mois qui précède l'arrêt (soit 3&nbsp;666&nbsp;€ par mois en 2023, ou 3&nbsp;428&nbsp;€ en 2022).</p></li><li><p>Taux forfaitaire appliqué par la CPAM : la CPAM retire à ce salaire journalier de base un taux forfaitaire de 21&nbsp;%.</p></li><li><p>Montant minimal et montant maximal des&nbsp;indemnités&nbsp;journalières : le montant ne peut pas être inférieur à 10,24&nbsp;€ ni supérieur à 95,22&nbsp;€ par jour.</p></li></ul><p><strong>Versement</strong></p><p>Les&nbsp;indemnités&nbsp;journalières sont versées tous les 14 jours.</p>",
description:
Expand Down Expand Up @@ -366,6 +367,7 @@ describe("mapContributionToDocument", () => {
updatedAt: "2024-07-11T13:18:08.000Z",
display_date: "2024-07-11T13:18:08.000Z",
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb5",
cdtnId: "1234",
content: null,
description: null,
content_type: "GENERIC_NO_CDT",
Expand Down Expand Up @@ -424,6 +426,7 @@ describe("mapContributionToDocument", () => {
const inputContribution: ContributionsAnswers = {
updatedAt: "",
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb5",
cdtnId: "1234",
content: null,
description: null,
content_type: type,
Expand Down Expand Up @@ -467,6 +470,7 @@ describe("mapContributionToDocument", () => {
it("devrait être à false pour une réponse personnalisée", async () => {
const inputContribution: ContributionsAnswers = {
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb5",
cdtnId: "1234",
updatedAt: "2024-07-11T13:18:08.000Z",
display_date: "2024-07-11T13:18:08.000Z",
content: "<p>Texte de la réponse</p>",
Expand Down Expand Up @@ -517,9 +521,9 @@ describe("mapContributionToDocument", () => {
});

it("devrait être à true pour une réponse générique", async () => {

const inputContribution: ContributionsAnswers = {
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb5",
cdtnId: "1234",
updatedAt: "2024-07-11T13:18:08.000Z",
display_date: "2024-07-11T13:18:08.000Z",
content: "<p>Texte de la réponse</p>",
Expand Down Expand Up @@ -553,9 +557,9 @@ describe("mapContributionToDocument", () => {
});

it("devrait garder la même valeur du document pour une réponse générique", async () => {

const inputContribution: ContributionsAnswers = {
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb5",
cdtnId: "1234",
updatedAt: "2024-07-11T13:18:08.000Z",
display_date: "2024-07-11T13:18:08.000Z",
content: "<p>Texte de la réponse</p>",
Expand Down Expand Up @@ -606,9 +610,9 @@ describe("mapContributionToDocument", () => {
});

it("2 contribs de la même question doivent générer des cdtn_id différent si elle n'existe pas", async () => {

const inputContribution: ContributionsAnswers = {
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb5",
cdtnId: "1234",
updatedAt: "2024-07-11T13:18:08.000Z",
display_date: "2024-07-11T13:18:08.000Z",
content: "<p>Texte de la réponse</p>",
Expand Down Expand Up @@ -642,6 +646,7 @@ describe("mapContributionToDocument", () => {

const inputContribution2: ContributionsAnswers = {
id: "effee3b9-84fb-4667-944b-4b1e1fd14eb6",
cdtnId: "1234",
updatedAt: "2024-07-11T13:18:08.000Z",
display_date: "2024-07-11T13:18:08.000Z",
content: "<p>Texte de la réponse</p>",
Expand Down
9 changes: 9 additions & 0 deletions targets/frontend/src/modules/contribution/api/mutation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { gql } from "urql";

export const updatePublicationMutation = gql`
mutation contribution_answer($id: uuid!, $cdtnId: String!) {
update_contribution_answers_by_pk(pk_columns: {id: $id}, _set: {cdtnId: $cdtnId}) {
id
}
}
`;
1 change: 1 addition & 0 deletions targets/frontend/src/modules/contribution/api/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const getContributionAnswerById = gql`
content_type
updatedAt: updated_at
display_date
cdtnId
agreement {
id
name
Expand Down
16 changes: 15 additions & 1 deletion targets/frontend/src/modules/contribution/api/repository.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { ApiClient } from "src/lib/api";
import {
getAllContributionsByQuestionId,
getContributionAnswerById,
getGenericAnswerByQuestionId,
getAllContributionsByQuestionId,
} from "./query";
import { ContributionsAnswers } from "@socialgouv/cdtn-types";
import { updatePublicationMutation } from "./mutation";

interface FetchContribPkData {
contribution_answers_by_pk: ContributionsAnswers;
Expand Down Expand Up @@ -81,4 +82,17 @@ export class ContributionRepository {
contrib.statuses && contrib.statuses[0].status === "TO_PUBLISH"
);
}

async updateCdtnId(id: string, cdtnId: string): Promise<void> {
const { error } = await this.client.mutation<FetchContribPkData>(
updatePublicationMutation,
{
id,
cdtnId,
}
);
if (error) {
throw error;
}
}
}
Loading

0 comments on commit 2b0dcf8

Please sign in to comment.