import { Body, Controller, Post, UseGuards } from '@nestjs/common' import { subDays } from 'date-fns' import { BasicAuthorizationGuard } from '../../../guards/basic_authorization.guard' import { SubscriptionInstallment } from '../../../models' import { Subscription } from '../../../models/subscription.model' import { BaseEventParams, CronEvent, OneoffScheduledEventParams } from '../../../params' import { parseISO } from '../../../utils/date' import { Contract } from '../domain/contract' @UseGuards(BasicAuthorizationGuard) @Controller('contract') export class ContractController { constructor(private readonly contract: Contract) {} @Post('check_activated_subscriptions') async checkActivatedSubscriptions(@Body() data: CronEvent): Promise { const date = parseISO(data.scheduled_time) await this.contract.checkActivatedSubscriptions(subDays(date, 3)) } @Post('emit_service_order_when_updated') async emitServiceOrderWhenUpdated(@Body() data: BaseEventParams): Promise { const subscriptionInstallment = SubscriptionInstallment.toInstance(data.event.data.new || data.event.data.row) await this.contract.emitServiceOrderForInstallment(subscriptionInstallment) } @Post('emit_service_order') async emitServiceOrder( @Body() { payload }: OneoffScheduledEventParams>, ): Promise { const subscriptionInstallment = SubscriptionInstallment.toInstance(payload) await this.contract.emitServiceOrderForInstallment(subscriptionInstallment) } @Post('cancel') async cancel(@Body() data: BaseEventParams): Promise { const subscription = Subscription.toInstance(data.event.data.new || data.event.data.row) await this.contract.cancel(subscription) } }