.ts
TypeScript
(application/typescript)
// 1st-party
import {
  ServiceApiContract,
  ServiceDependencies,
} from "@ethicdevs/react-monolith";
// 3rd-party
import { FastifyRequest } from "fastify";
// generated via script[generate:prisma]
import { User } from "@prisma/client";
// app
import type { CryptoServiceAPI } from "../crypto/types";

export interface AuthServiceCreateUserDTO {
  emailAddress: string;
  username: string;
  password: string;
}

export interface AuthServiceAPI extends ServiceApiContract {
  createUser(dto: AuthServiceCreateUserDTO): Promise<User>; // implemented.
  isExistingUsername(username: string): Promise<boolean>; // implemented.
  isExistingEmailAddress(emailAddress: string): Promise<boolean>; // implemented.
  isExistingUserUid(userUid: string): boolean;
  findUserByUsername(username: string): void;
  findUserByUid(userUid: string): void;
  sendUserEmailAddressV8nEmail(args: unknown[]): void;
  validateUserEmailAddress(
    userUid: string,
    emailAddress: string
  ): Promise<void>;
}

export interface AuthServiceDeps extends ServiceDependencies {
  cryptoService: CryptoServiceAPI;
  request: FastifyRequest;
}