Skip to content

Commit

Permalink
fix(server): ⬆️ prepare mongoose update fix deprecated use of count()
Browse files Browse the repository at this point in the history
  • Loading branch information
sylvainlg committed Nov 23, 2023
1 parent 3cc7070 commit f59e4e9
Showing 1 changed file with 71 additions and 59 deletions.
130 changes: 71 additions & 59 deletions server/src/modules/dispositif/dispositif.repository.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
import { Id, Picture, ContentType, SimpleDispositif, DispositifStatus, Languages, GetStructureDispositifResponse, Suggestion as SuggestionAPIType } from "@refugies-info/api-types";
import {
Id,
Picture,
ContentType,
SimpleDispositif,
DispositifStatus,
Languages,
GetStructureDispositifResponse,
Suggestion as SuggestionAPIType,
} from "@refugies-info/api-types";
import { omit, pick, uniq, union } from "lodash";
import { map } from "lodash/fp";
import { FilterQuery, ProjectionType, UpdateQuery } from "mongoose";
import { Merci, Suggestion } from "../../typegoose/Dispositif";
import { Dispositif, DispositifDraftModel, DispositifId, DispositifModel, Need, ObjectId, Theme, UserId } from "../../typegoose";
import {
Dispositif,
DispositifDraftModel,
DispositifId,
DispositifModel,
Need,
ObjectId,
Theme,
UserId,
} from "../../typegoose";
import { getUsersById } from "../users/users.repository";

export const getDispositifsFromDB = async () =>
Expand Down Expand Up @@ -101,7 +119,7 @@ export const getSimpleDispositifs = async (
metadatas: dispositif.metadatas,
...omit(dispositif, ["translations"]),
availableLanguages: Object.keys(dispositif.translations),
hasDraftVersion: dispositif.hasDraftVersion
hasDraftVersion: dispositif.hasDraftVersion,
};
return resDisp;
}),
Expand All @@ -124,61 +142,61 @@ export const getStructureDispositifs = async (
nbVuesMobile: 1,
hasDraftVersion: 1,
merci: 1,
suggestions: 1
suggestions: 1,
},
"suggestions.userId",
limit,
sort,
)
.then(async (dispositifs) => {
const usernames = await Promise.all(
dispositifs.map(dispositif => dispositif.suggestions.length > 0 ?
getUsersById(
uniq(dispositif.suggestions.map(s => s.userId).filter(id => !!id)),
{ username: 1 }
) :
[]
));
return { dispositifs, usernames: union(...usernames) }
dispositifs.map((dispositif) =>
dispositif.suggestions.length > 0
? getUsersById(uniq(dispositif.suggestions.map((s) => s.userId).filter((id) => !!id)), { username: 1 })
: [],
),
);
return { dispositifs, usernames: union(...usernames) };
})
.then(({ dispositifs, usernames }) => dispositifs.map((dispositif) => {
const translation = dispositif.translations[locale] || dispositif.translations.fr;
const suggestions: SuggestionAPIType[] = dispositif.suggestions.map(s => {
return {
...pick(s, ["created_at", "read", "suggestion", "suggestionId", "section"]),
username: usernames.find(u => u._id.toString() === s.userId?.toString())?.username || ""
}
});
const resDisp: GetStructureDispositifResponse = {
_id: dispositif._id,
...pick(translation.content, ["titreInformatif", "titreMarque", "abstract"]),
metadatas: dispositif.metadatas,
...omit(dispositif, ["translations", "merci"]),
availableLanguages: Object.keys(dispositif.translations),
hasDraftVersion: dispositif.hasDraftVersion,
nbMercis: dispositif.merci.length,
suggestions
};
return resDisp;
}),
.then(({ dispositifs, usernames }) =>
dispositifs.map((dispositif) => {
const translation = dispositif.translations[locale] || dispositif.translations.fr;
const suggestions: SuggestionAPIType[] = dispositif.suggestions.map((s) => {
return {
...pick(s, ["created_at", "read", "suggestion", "suggestionId", "section"]),
username: usernames.find((u) => u._id.toString() === s.userId?.toString())?.username || "",
};
});
const resDisp: GetStructureDispositifResponse = {
_id: dispositif._id,
...pick(translation.content, ["titreInformatif", "titreMarque", "abstract"]),
metadatas: dispositif.metadatas,
...omit(dispositif, ["translations", "merci"]),
availableLanguages: Object.keys(dispositif.translations),
hasDraftVersion: dispositif.hasDraftVersion,
nbMercis: dispositif.merci.length,
suggestions,
};
return resDisp;
}),
);
};

export const updateDispositifInDB = async (
dispositifId: DispositifId,
modifiedDispositif: Partial<Dispositif> | { $pull: { [x: string]: { suggestionId: string } } } | { $push: any },
updateDraft: boolean = false
updateDraft: boolean = false,
): Promise<Dispositif> => {
return updateDraft ?
DispositifDraftModel.findOneAndUpdate({ _id: dispositifId }, modifiedDispositif, {
upsert: true,
new: true,
}).populate("theme secondaryThemes")
return updateDraft
? DispositifDraftModel.findOneAndUpdate({ _id: dispositifId }, modifiedDispositif, {
upsert: true,
new: true,
}).populate("theme secondaryThemes")
: DispositifModel.findOneAndUpdate({ _id: dispositifId }, modifiedDispositif, {
upsert: true,
new: true,
}).populate("theme secondaryThemes");
}
upsert: true,
new: true,
}).populate("theme secondaryThemes");
};

export const deleteDraftDispositif = async (id: DispositifId) => DispositifDraftModel.deleteOne({ _id: id });

Expand All @@ -193,10 +211,7 @@ export const addMerciDispositifInDB = async (dispositifId: DispositifId, merci:
);

export const addNewParticipant = async (dispositifId: DispositifId, userId: Id) =>
DispositifModel.findOneAndUpdate(
{ _id: dispositifId },
{ $addToSet: { participants: userId } }
);
DispositifModel.findOneAndUpdate({ _id: dispositifId }, { $addToSet: { participants: userId } });

export const removeMerciDispositifInDB = async (dispositifId: DispositifId, userId: UserId): Promise<Dispositif> => {
if (userId) {
Expand Down Expand Up @@ -282,10 +297,10 @@ export const modifyReadSuggestionInDispositif = async (dispositifId: DispositifI
{ $set: { ["suggestions.$.read"]: true } },
);

export const getDispositifName = async (
id: Id,
) => DispositifModel.findById(id, { "translations.fr.content.titreInformatif": 1 })
.then(res => res?.translations.fr.content.titreInformatif)
export const getDispositifName = async (id: Id) =>
DispositifModel.findById(id, { "translations.fr.content.titreInformatif": 1 }).then(
(res) => res?.translations.fr.content.titreInformatif,
);

export const getDispositifById = async (
id: DispositifId,
Expand Down Expand Up @@ -375,11 +390,11 @@ export const getNbVues = async () => {
};

export const getNbFiches = async () => {
const nbDispositifs = await DispositifModel.count({
const nbDispositifs = await DispositifModel.countDocuments({
status: DispositifStatus.ACTIVE,
typeContenu: ContentType.DISPOSITIF,
});
const nbDemarches = await DispositifModel.count({
const nbDemarches = await DispositifModel.countDocuments({
status: DispositifStatus.ACTIVE,
typeContenu: ContentType.DEMARCHE,
});
Expand All @@ -391,22 +406,19 @@ export const getNbFiches = async () => {
};

export const getNbUpdatedRecently = async (date: Date) => {
return DispositifModel.count({
return DispositifModel.countDocuments({
status: DispositifStatus.ACTIVE,
lastModificationDate: { $gte: date, $exists: true },
});
};

export const getCountDispositifs = async (query: FilterQuery<Dispositif>) => DispositifModel.count(query);
export const getCountDispositifs = async (query: FilterQuery<Dispositif>) => DispositifModel.countDocuments(query);

export const deleteNeedFromDispositifs = async (needId: string) => {
return DispositifModel.updateMany({ needs: needId }, { $pull: { needs: needId } });
};

export const cloneDispositifInDrafts = async (
id: DispositifId,
newData: Partial<Dispositif>
) => {
export const cloneDispositifInDrafts = async (id: DispositifId, newData: Partial<Dispositif>) => {
const dispositif = await DispositifModel.findById(id).lean();
return DispositifDraftModel.create({ ...dispositif, ...newData });
}
};

0 comments on commit f59e4e9

Please sign in to comment.