.ts
TypeScript
(application/typescript)
// 1st-party
import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
// generated via script[generate:prisma]
import { User } from "@prisma/client";
// app
import type { AuthServiceCreateUserDTO, AuthServiceDeps } from "./types";

const makeCreateUser: ServiceMethodFactory<
  AuthServiceDeps,
  [AuthServiceCreateUserDTO],
  Promise<User>
> = ({ cryptoService, request }) => {
  return async ({ emailAddress, username, password }) => {
    const user = await request.prisma.user.create({
      data: {
        email: emailAddress,
        username: username,
        hashedPassword: cryptoService.computeHash(password),
      },
    });

    return user;
  };
};

export default makeCreateUser;