@accounter/server
Version:
Accounter GraphQL server
49 lines (48 loc) • 3.08 kB
TypeScript
import DataLoader from 'dataloader';
import { AdminContextProvider } from '../../admin-context/providers/admin-context.provider.js';
import { TenantAwareDBClient } from '../../app-providers/tenant-db-client.js';
import { BusinessesProvider } from '../../financial-entities/providers/businesses.provider.js';
import { FinancialEntitiesProvider } from '../../financial-entities/providers/financial-entities.provider.js';
import { TaxCategoriesProvider } from '../../financial-entities/providers/tax-categories.provider.js';
import type { SecurityBusinessDescriptors, SecurityBusinessRow, SecurityIdentifierType } from '../types.js';
export type IdentifierKey = {
type: SecurityIdentifierType;
value: string;
};
export declare class SecurityBusinessesProvider {
private db;
private adminContextProvider;
private financialEntitiesProvider;
private businessesProvider;
private taxCategoriesProvider;
constructor(db: TenantAwareDBClient, adminContextProvider: AdminContextProvider, financialEntitiesProvider: FinancialEntitiesProvider, businessesProvider: BusinessesProvider, taxCategoriesProvider: TaxCategoriesProvider);
private batchSecurityBusinessesByIds;
getSecurityBusinessByIdLoader: DataLoader<string, import("../__generated__/security-businesses.types.js").IGetSecurityBusinessesByIdsResult | null, string>;
private allSecurityBusinessesPromise;
/**
* Every security business of the acting tenant. Cached per request because charge typing and
* account resolution ask for it on every transaction they touch.
*/
getAllSecurityBusinesses(): Promise<SecurityBusinessRow[]>;
getAllSecurityBusinessIds(): Promise<Set<string>>;
isSecurityBusiness(businessId: string): Promise<boolean>;
private batchSecurityBusinessesByIdentifiers;
getSecurityBusinessByIdentifierLoader: DataLoader<IdentifierKey, import("../__generated__/security-businesses.types.js").IGetAllSecurityBusinessesResult | null, string>;
private batchIdentifiersByBusinessIds;
getIdentifiersByBusinessIdLoader: DataLoader<string, import("../__generated__/security-businesses.types.js").IGetSecurityIdentifiersByBusinessIdsResult[], string>;
private getSecurityBusinessByIsin;
/**
* The business a security is represented by, creating it on first sight.
*
* Idempotent by ISIN: concurrent ingests race on the (owner_id, isin) unique index, and the
* loser rolls its whole transaction back — financial entity and business included — then
* re-reads the winner's row, so a race can't leave a half-built business behind.
*
* Sort code, IRS code, country and tax category are inherited from the tenant's general
* foreign-securities business, so a security behaves like it everywhere those fields drive
* reporting.
*/
ensureSecurityBusiness(descriptors: SecurityBusinessDescriptors): Promise<SecurityBusinessRow>;
linkIdentifier(businessId: string, identifierType: SecurityIdentifierType, identifierValue: string): Promise<void>;
clearCache(): void;
}