Skip to content

Faire une routine de vérification

Dans un projet, il va très souvent arriver de vouloir faire une succession de vérifications à plusieurs endroits.

L'exemple le plus parlant serait une authentification. Vous allez en premier récupérer un token, puis le déchiffrer et enfin vérifier que l'utilisateur existe.

C'est pour ce genre de choses que @duplojs/http introduit le ✨process✨.

ts
import { ResponseContract, 
useProcessBuilder
} from "@duplojs/http";
import {
DPE
,
E
,
O
,
pipe
} from "@duplojs/utils";
import {
checkToken
} from "./checkToken";
import {
userExist
} from "./checker";
export const
authenticationProcess
=
useProcessBuilder
()
.
extract
({
headers
: {
authorization
:
DPE
.
string
(),
}, }) .
cut
(
ResponseContract.
unauthorized
("token.invalid"),
({
authorization
}, {
response
,
output
}) =>
pipe
(
authorization
,
checkToken
,
E
.
whenIsRight
(
({
userId
}) =>
output
({
authenticatedUserId
:
userId
}),
),
E
.
whenIsLeft
(() =>
response
("token.invalid")),
), ) .
check
(
userExist
,
{
input
:
O
.
getProperty
("authenticatedUserId"),
result
: "user.find",
otherwise
: ResponseContract.
notFound
("token.user.notfound"),
indexing
: "user",
}, ) .
exports
(["user"]);

La méthode exports met fin à la création d'un process et vous propose de mettre à disposition ses valeurs pour les routes ou processes qui l'implémenteront.

INFO

Le code ci-dessus utilise les fonctions de @duplojs/utils. Si certaines parties vous paraissent obscures, n'hésitez pas à checker la documentation.

Implémentation d'un process dans une route

ts
import { ResponseContract, 
useRouteBuilder
} from "@duplojs/http";
import {
authenticationProcess
} from "./process";
import {
userSchema
} from "./schema";
useRouteBuilder
("GET", "/some-action")
.
exec
(
authenticationProcess
, {
imports
: ["user"] })
.
handler
(
ResponseContract.
ok
("some-information.send",
userSchema
),
({
user
}, {
response
}) =>
response
("some-information.send",
user
),
);

Pour implémenter un process dans une route, il vous suffit d'appeler la méthode exec du builder. Vous pouvez configurer l'implémentation en sélectionnant, par exemple, les variables que vous souhaitez importer du process dans votre route.

Aller plus vite

Vous pouvez créer votre propre builder avec des process pré-implémentés en tant que préflight.

ts
import { 
usePreflightBuilder
} from "@duplojs/http";
import {
authenticationProcess
} from "./process";
export const
useAuthenticatedRouteBuilder
=
usePreflightBuilder
()
.
exec
(
authenticationProcess
, {
imports
: ["user"] })
.
useRouteBuilder
;

Il ne reste plus qu'à créer vos routes avec...

ts
import { ResponseContract } from "@duplojs/http";
import { 
useAuthenticatedRouteBuilder
} from "./authenticatedRouteBuilder";
import {
userSchema
} from "./schema";
useAuthenticatedRouteBuilder
("GET", "/some-action")
.
handler
(
ResponseContract.
ok
("some-information.send",
userSchema
),
({
user
}, {
response
}) =>
response
("some-information.send",
user
),
);

Diffusé sous licence MIT.