import { map } from 'modern-async'; import { Log } from 'lib/Log'; import { DB } from 'lib/DB'; import { ServerError, Status } from 'nice-grpc'; import type { Buyer } from '@nextgenleads/dnc'; const log = Log.child({ module: 'grpc', service: 'Buyer', method: 'remove', }); export async function remove(request: Buyer.RemoveRequest): Promise { if (!Array.isArray(request.dncs) || !request.dncs.every((dnc) => dnc.phone_number && dnc.company_id)) { throw new ServerError(Status.INVALID_ARGUMENT, 'Missing required argument'); } let removed_count = 0; try { const result = await map(request.dncs, async (dnc) => { return DB.DNC.scope({ method: ['buyer', dnc.company_id] }).destroy({ where: { phone_number: dnc.phone_number, }, }); }); removed_count = result.reduce((acc, removed) => acc + removed, 0); } catch (err) { log.error('Failed to remove dnc', err); } return { removed_count }; }