.ts
TypeScript
(application/typescript)
// 1st-party
import type { ServiceApiContract } from "@ethicdevs/react-monolith";
// 3rd-party
import type { FastifyRequest } from "fastify";
// generated via script[generate:prisma]
import {
  Prisma,
  Organization,
  OrganizationMembership,
  Repository,
  User,
  UserSSHKey,
} from "@prisma/client";

export interface UsersServiceAPI extends ServiceApiContract {
  addUserSSHKey(user: User, name: string, key: string): Promise<boolean>;
  getUserById(userId: string): Promise<User | null>;
  getUserByUsername(username: string): Promise<User | null>;
  getUserByEmailAddress(emailAddress: string): Promise<User | null>;
  getUserOrganizationMemberships(
    userId: string
  ): Promise<OrganizationMembership[]>;
  getUserOrganizations(
    userId: string,
    personalOnly?: boolean
  ): Promise<Organization[]>;
  getUserRepositories(
    user: User,
    where?: Prisma.RepositoryWhereInput
  ): Promise<(Repository & { parentOrg: Organization })[]>;
  getUserSSHKeys(user: User): Promise<UserSSHKey[]>;
}

export interface UsersServiceDeps {
  request: FastifyRequest;
}