Aller au contenu principal

Exercice 7

L'objectif de cet atelier est de créer un builder de requêtes SQL. Les exercices précédents nous ont permis de sélectionner, filtrer, mais nous ne sommes pas encore capables de sélectionner des données à supprimer, pourtant, ça serait canon !

Remédions à cela en créant notre deleteFrom. Rendez-vous dans le fichier 7-supprimer-des-lignes.ts et db.ts pour l'implémentation.

À vous de jouer ! 🎉

Indice 1

Choix de l'opération

On peut s'attendre à ce que deleteFrom opère dans un contexte similaire à selectFrom. D'ailleurs la seule différence est que cette fonction viendra enrichir le contexte qui lui est fourni avec un autre type d'opération.

Indice 2

Jusqu' cela nous mène

On avait typé la fonction where pour qu'elle opère à partir d'un contexte de sélection. Il faut à présent prendre en compte qu'elle peut également opérer dans un contexte de suppression

Solution

Avant de déplier pour afficher la solution, n'hésitez pas à nous solliciter !
type DeletableContext<DB> = EmptyContext<DB> & {
_operation: "delete";
_table: keyof DB;
};

export const deleteFrom = <
Ctx extends AnyEmptyContext,
TB extends keyof Ctx["$db"]
>(
ctx: Ctx,
tableName: TB
) => ({
...ctx,
_operation: "delete" as const,
_table: tableName,
});

Il faudra aussi modifier la signature de where pour qu'elle accepte également un DeletableContext.

type AnyQueryableContext = SelectableContext<any> | DeletableContext<any>;

export const where = <
Ctx extends AnyQueryableContext,
Field extends keyof Ctx["$db"][Ctx["_table"]]
>(...) => {...}