.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.
  isUserLoginAllowed(
    emailAddress: string,
    password: string
  ): Promise<[boolean, User | null]>; // implemented
}

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