Browse Source

Improve error handling

Make errors more specific.
master
TheoryOfNekomata 2 years ago
parent
commit
04b26fd103
1 changed files with 20 additions and 6 deletions
  1. +20
    -6
      src/modules/git/Git.service.ts

+ 20
- 6
src/modules/git/Git.service.ts View File

@@ -7,8 +7,10 @@ export interface GitService {
deleteRepo(repoId: codeCore.git.Repo['id'], user?: codeCore.common.User): Promise<void> deleteRepo(repoId: codeCore.git.Repo['id'], user?: codeCore.common.User): Promise<void>
} }


export class UnableToCreateRepoError extends HttpError(constants.HTTP_STATUS_UNAUTHORIZED, 'Unable to Create Repo') {}
export class UnableToDeleteRepoError extends HttpError(constants.HTTP_STATUS_UNAUTHORIZED, 'Unable to Delete Repo') {}
export class UnauthorizedToCreateRepoError extends HttpError(constants.HTTP_STATUS_UNAUTHORIZED, 'Unauthorized to Create Repo') {}
export class UnauthorizedToDeleteRepoError extends HttpError(constants.HTTP_STATUS_UNAUTHORIZED, 'Unauthorized to Delete Repo') {}
export class UnableToCreateRepoError extends HttpError(constants.HTTP_STATUS_INTERNAL_SERVER_ERROR, 'Unable to Create Repo') {}
export class UnableToDeleteRepoError extends HttpError(constants.HTTP_STATUS_INTERNAL_SERVER_ERROR, 'Unable to Delete Repo') {}


export class GitServiceImpl implements GitService { export class GitServiceImpl implements GitService {
private readonly coreGitService: codeCore.git.GitService; private readonly coreGitService: codeCore.git.GitService;
@@ -19,15 +21,27 @@ export class GitServiceImpl implements GitService {


async createRepo(options: codeCore.git.CreateRepoData, user?: codeCore.common.User): Promise<codeCore.git.Repo> { async createRepo(options: codeCore.git.CreateRepoData, user?: codeCore.common.User): Promise<codeCore.git.Repo> {
if (user) { if (user) {
return this.coreGitService.create(options, user);
let newRepo: codeCore.git.Repo;
try {
newRepo = await this.coreGitService.create(options, user);
} catch (causeRaw) {
const cause = causeRaw as Error;
throw new UnableToCreateRepoError('Something went wrong while creating the repo.', { cause, });
}
return newRepo;
} }
throw new UnableToCreateRepoError('Unauthorized');
throw new UnauthorizedToCreateRepoError('Could not create repo with insufficient authorization.');
} }


async deleteRepo(repoId: codeCore.git.Repo['id'], user?: codeCore.common.User): Promise<void> { async deleteRepo(repoId: codeCore.git.Repo['id'], user?: codeCore.common.User): Promise<void> {
if (user) { if (user) {
await this.coreGitService.delete(repoId, user);
try {
await this.coreGitService.delete(repoId, user);
} catch (causeRaw) {
const cause = causeRaw as Error;
throw new UnableToDeleteRepoError('Something went wrong while deleting the repo.', { cause, });
}
} }
throw new UnableToDeleteRepoError('Unauthorized');
throw new UnauthorizedToDeleteRepoError('Could not delete repo with insufficient authorization.');
} }
} }

Loading…
Cancel
Save