feat(auth): add tRPC router with signIn + signUp + signOut
This commit is contained in:
43
packages/auth/src/integrations/api/router.test.ts
Normal file
43
packages/auth/src/integrations/api/router.test.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { beforeEach, describe, expect, it } from "vitest";
|
||||
import { authContainer } from "@/di/container";
|
||||
import { AUTH_SYMBOLS } from "@/di/symbols";
|
||||
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository";
|
||||
import { MockAuthenticationService } from "@/infrastructure/services/mock-authentication.service";
|
||||
import type { IUsersRepository } from "@/application/repositories/users-repository.interface";
|
||||
import type { IAuthenticationService } from "@/application/services/authentication-service.interface";
|
||||
import { authRouter } from "./router";
|
||||
|
||||
describe("authRouter", () => {
|
||||
beforeEach(() => {
|
||||
if (authContainer.isBound(AUTH_SYMBOLS.IUsersRepository)) {
|
||||
authContainer.unbind(AUTH_SYMBOLS.IUsersRepository);
|
||||
}
|
||||
if (authContainer.isBound(AUTH_SYMBOLS.IAuthenticationService)) {
|
||||
authContainer.unbind(AUTH_SYMBOLS.IAuthenticationService);
|
||||
}
|
||||
const usersRepo = new MockUsersRepository();
|
||||
const authService = new MockAuthenticationService(usersRepo);
|
||||
authContainer
|
||||
.bind<IUsersRepository>(AUTH_SYMBOLS.IUsersRepository)
|
||||
.toConstantValue(usersRepo);
|
||||
authContainer
|
||||
.bind<IAuthenticationService>(AUTH_SYMBOLS.IAuthenticationService)
|
||||
.toConstantValue(authService);
|
||||
});
|
||||
|
||||
it("exposes signIn, signUp, signOut procedures", () => {
|
||||
const names = Object.keys(authRouter._def.procedures);
|
||||
expect(names).toContain("signIn");
|
||||
expect(names).toContain("signUp");
|
||||
expect(names).toContain("signOut");
|
||||
});
|
||||
|
||||
it("signIn returns a cookie", async () => {
|
||||
const caller = authRouter.createCaller({});
|
||||
const result = await caller.signIn({
|
||||
username: "alice",
|
||||
password: "password_alice",
|
||||
});
|
||||
expect(result.name).toBe("session");
|
||||
});
|
||||
});
|
||||
32
packages/auth/src/integrations/api/router.ts
Normal file
32
packages/auth/src/integrations/api/router.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { z } from "zod";
|
||||
import { router, publicProcedure } from "@repo/core-shared/trpc/init";
|
||||
import { signInController } from "../../interface-adapters/controllers/sign-in.controller";
|
||||
import { signUpController } from "../../interface-adapters/controllers/sign-up.controller";
|
||||
import { signOutController } from "../../interface-adapters/controllers/sign-out.controller";
|
||||
|
||||
export const authRouter = router({
|
||||
signIn: publicProcedure
|
||||
.input(
|
||||
z.object({
|
||||
username: z.string().min(3).max(31),
|
||||
password: z.string().min(6).max(255),
|
||||
}),
|
||||
)
|
||||
.mutation(({ input }) => signInController(input)),
|
||||
|
||||
signUp: publicProcedure
|
||||
.input(
|
||||
z.object({
|
||||
username: z.string().min(3).max(31),
|
||||
password: z.string().min(6).max(255),
|
||||
confirmPassword: z.string().min(6).max(255),
|
||||
}),
|
||||
)
|
||||
.mutation(({ input }) => signUpController(input)),
|
||||
|
||||
signOut: publicProcedure
|
||||
.input(z.object({ sessionId: z.string() }))
|
||||
.mutation(({ input }) => signOutController(input.sessionId)),
|
||||
});
|
||||
|
||||
export type AuthRouter = typeof authRouter;
|
||||
Reference in New Issue
Block a user