import { PathLike } from "node:fs";
import type { ServiceApiContract } from "@ethicdevs/react-monolith";
import type { FastifyRequest } from "fastify";
import type { Organization, Repository, User } from "@prisma/client";
import type {
RepositoryFile,
RepositoryFileContent,
RepositoryFileDiff,
RepositoryHead,
RepositoryLog,
RepositoryObject,
} from "../../types";
export interface CreateRepositoryDTO {
parentOrgSlug: string;
repoSlug: string;
repoData: Omit<
Repository,
"id" | "slug" | "createdAt" | "updatedAt" | "organizationId"
>;
repoInitFlags: {
orgRepositoriesDir: PathLike;
withBaseReadmeFile: boolean;
withLicense: boolean;
withLicenseKind: string;
};
}
export interface RepositoryServiceAPI extends ServiceApiContract {
canUserAccessRepository(user: User, repo: Repository): Promise<boolean>;
createRepository(dto: CreateRepositoryDTO): Promise<Repository>;
getRepository(orgSlug: string, repoSlug: string): Promise<Repository | null>;
getRepositoryBranches(repository: Repository): Promise<string[]>;
getRepositoryCommitLog(
repository: Repository,
path?: string,
ref?: string,
onlyLast?: boolean
): Promise<RepositoryLog[]>;
getRepositoryExploreCollection(): Promise<
(Repository & { parentOrg: Organization })[]
>;
getRepositoryFileContent(
repository: Repository,
path: string,
ref?: string
): Promise<null | RepositoryFileContent>;
getRepositoryFileContentBase64(
repository: Repository,
path: string,
ref?: string
): Promise<null | RepositoryFileContent>;
getRepositoryFiles(
repository: Repository,
path?: string,
ref?: string
): Promise<RepositoryFile[]>;
getRepositoryHead(
repository: Repository,
ref?: string
): Promise<RepositoryHead>;
getRepositoryHTTPCloneUrl(repository: Repository): Promise<string>;
getRepositorySSHCloneUrl(repository: Repository): Promise<string>;
getRepositoryObject(
repository: Repository,
objectId: String
): Promise<RepositoryObject | null>;
getRepositoryRefDiff(
repository: Repository,
refA: string,
refB?: string
): Promise<RepositoryFileDiff[]>;
getRepositoryTags(repository: Repository): Promise<string[]>;
isFileInRepositoryPath(
repository: Repository,
path: string,
filesToMatch: string[],
ref?: string
): Promise<string[]>;
}
export interface RepositoryServiceDeps {
request: FastifyRequest;
}