Uecko_ERP/modules/identity/src/api/application/company-memberships/services/company-access-checker.ts

49 lines
1.4 KiB
TypeScript

import type { UniqueID } from "@repo/rdx-ddd";
import type { Collection } from "@repo/rdx-utils";
import { Result } from "@repo/rdx-utils";
import type { ICompanyMembershipAccessRepository } from "../contracts";
export interface IIdentityCompanyAccessChecker {
canAccessCompany(params: {
accountId: UniqueID;
companyId: UniqueID;
transaction?: unknown;
}): Promise<Result<boolean, Error>>;
findAccessibleCompanyIds(params: {
accountId: UniqueID;
transaction?: unknown;
}): Promise<Result<Collection<UniqueID>, Error>>;
}
export class IdentityCompanyAccessChecker implements IIdentityCompanyAccessChecker {
public constructor(private readonly repository: ICompanyMembershipAccessRepository) {}
public async canAccessCompany(params: {
accountId: UniqueID;
companyId: UniqueID;
transaction?: unknown;
}): Promise<Result<boolean, Error>> {
const result = await this.repository.existsActiveByAccountAndCompany(params);
if (result.isFailure) {
return Result.fail(result.error);
}
return Result.ok(result.data);
}
public async findAccessibleCompanyIds(params: {
accountId: UniqueID;
transaction?: unknown;
}): Promise<Result<Collection<UniqueID>, Error>> {
const result = await this.repository.findActiveCompanyIdsByAccount(params);
if (result.isFailure) {
return Result.fail(result.error);
}
return Result.ok(result.data);
}
}