49 lines
1.4 KiB
TypeScript
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);
|
|
}
|
|
}
|