Skip to content

Commit

Permalink
feat: add command handler menstrual subscription event (#197)
Browse files Browse the repository at this point in the history
add command handler menstrual subscription event

Co-authored-by: Hildegard Lydia <[email protected]>
  • Loading branch information
rubenkristian and hilyds authored Oct 20, 2022
1 parent 51c042c commit 280ce35
Show file tree
Hide file tree
Showing 17 changed files with 265 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ export class MenstrualCalendarUpdatedHandler
id: menstrualCalendar.id,
refresh: 'wait_for',
body: {
address_id: menstrualCalendar.addressId,
average_cycle: menstrualCalendar.averageCycle,
cycle_log: menstrualCalendar.cycleLog,
created_at: menstrualCalendar.createdAt,
updated_at: menstrualCalendar.updatedAt,
blockMetaData: blockMetaData,
doc: {
address_id: menstrualCalendar.addressId,
average_cycle: menstrualCalendar.averageCycle,
cycle_log: menstrualCalendar.cycleLog,
created_at: menstrualCalendar.createdAt,
updated_at: menstrualCalendar.updatedAt,
blockMetaData: blockMetaData,
},
},
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { MenstrualSubscription } from '../../../../models/menstrual-subscription/menstrual-subscription';
import { BlockMetaData } from '../../../../models/block-meta-data';

export class MenstrualSubscriptionAddedCommandIndexer {
menstrualSubscription: MenstrualSubscription;
constructor(data: Array<any>, public readonly blockMetaData: BlockMetaData) {
this.menstrualSubscription = new MenstrualSubscription(data[0].toHuman());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Injectable } from '@nestjs/common';
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { MenstrualSubscriptionAddedCommandIndexer } from './menstrual-subscription-added.command';

@Injectable()
@CommandHandler(MenstrualSubscriptionAddedCommandIndexer)
export class MenstrualSubscriptionAddedHandler
implements ICommandHandler<MenstrualSubscriptionAddedCommandIndexer>
{
constructor(private readonly elasticsearchService: ElasticsearchService) {}

async execute(command: MenstrualSubscriptionAddedCommandIndexer) {
const { menstrualSubscription, blockMetaData } = command;

await this.elasticsearchService.create({
index: 'menstrual-subscription',
id: menstrualSubscription.id,
refresh: 'wait_for',
body: {
id: menstrualSubscription.id,
address_id: menstrualSubscription.addressId,
duration: menstrualSubscription.duration,
currency: menstrualSubscription.currency,
payment_status: menstrualSubscription.paymentStatus,
status: menstrualSubscription.status,
created_at: menstrualSubscription.createdAt.getTime(),
updated_at: menstrualSubscription.updatedAt.getTime(),
blockMetaData: blockMetaData,
},
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { MenstrualSubscription } from '../../../../models/menstrual-subscription/menstrual-subscription';
import { BlockMetaData } from '../../../../models/block-meta-data';

export class MenstrualSubscriptionPaidCommandIndexer {
menstrualSubscription: MenstrualSubscription;
constructor(data: Array<any>, public readonly blockMetaData: BlockMetaData) {
this.menstrualSubscription = new MenstrualSubscription(data[0].toHuman());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Injectable } from '@nestjs/common';
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { MenstrualSubscriptionPaidCommandIndexer } from './menstrual-subscription-paid.command';

@Injectable()
@CommandHandler(MenstrualSubscriptionPaidCommandIndexer)
export class MenstrualSubscriptionPaidHandler
implements ICommandHandler<MenstrualSubscriptionPaidCommandIndexer>
{
constructor(private readonly elasticsearchService: ElasticsearchService) {}

async execute(command: MenstrualSubscriptionPaidCommandIndexer) {
const { menstrualSubscription, blockMetaData } = command;

await this.elasticsearchService.update({
index: 'menstrual-subscription',
id: menstrualSubscription.id,
refresh: 'wait_for',
body: {
doc: {
payment_status: menstrualSubscription.paymentStatus,
status: menstrualSubscription.status,
updated_at: menstrualSubscription.updatedAt.getTime(),
blockMetaData: blockMetaData,
},
},
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { BlockMetaData } from '../../../../models/block-meta-data';
import { MenstrualSubscriptionPrice } from '../../../../models/menstrual-subscription/menstrual-subscription-price';

export class MenstrualSubscriptionPriceAddedCommandIndexer {
menstrualSubscriptionPrice: MenstrualSubscriptionPrice;
constructor(data: Array<any>, public readonly blockMetaData: BlockMetaData) {
this.menstrualSubscriptionPrice = new MenstrualSubscriptionPrice(
data[0].toHuman(),
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Injectable } from '@nestjs/common';
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { MenstrualSubscriptionPriceAddedCommandIndexer } from './menstrual-subscription-price-added.command';

@Injectable()
@CommandHandler(MenstrualSubscriptionPriceAddedCommandIndexer)
export class MenstrualSubscriptionPriceAddedHandler
implements ICommandHandler<MenstrualSubscriptionPriceAddedCommandIndexer>
{
constructor(private readonly elasticsearchService: ElasticsearchService) {}

async execute(command: MenstrualSubscriptionPriceAddedCommandIndexer) {
const { menstrualSubscriptionPrice, blockMetaData } = command;

const { duration, currency, assetId, amount } = menstrualSubscriptionPrice;
await this.elasticsearchService.create({
index: 'menstrual-subscription-price',
id: `${duration}-${currency}-${assetId}-${amount}`,
refresh: 'wait_for',
body: {
duration: duration,
currency: currency,
asset_id: assetId,
amount: amount,
blockMetaData: blockMetaData,
},
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { MenstrualSubscription } from '../../../../models/menstrual-subscription/menstrual-subscription';
import { BlockMetaData } from '../../../../models/block-meta-data';

export class MenstrualSubscriptionUpdatedCommandIndexer {
menstrualSubscription: MenstrualSubscription;
constructor(data: Array<any>, public readonly blockMetaData: BlockMetaData) {
this.menstrualSubscription = new MenstrualSubscription(data[0].toHuman());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Injectable } from '@nestjs/common';
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { MenstrualSubscriptionUpdatedCommandIndexer } from './menstrual-subscription-updated.command';

@Injectable()
@CommandHandler(MenstrualSubscriptionUpdatedCommandIndexer)
export class MenstrualSubscriptionUpdatedHandler
implements ICommandHandler<MenstrualSubscriptionUpdatedCommandIndexer>
{
constructor(private readonly elasticsearchService: ElasticsearchService) {}

async execute(command: MenstrualSubscriptionUpdatedCommandIndexer) {
const { menstrualSubscription, blockMetaData } = command;

await this.elasticsearchService.update({
index: 'menstrual-subscription',
id: menstrualSubscription.id,
refresh: 'wait_for',
body: {
doc: {
id: menstrualSubscription.id,
address_id: menstrualSubscription.addressId,
duration: menstrualSubscription.duration,
currency: menstrualSubscription.currency,
payment_status: menstrualSubscription.paymentStatus,
status: menstrualSubscription.status,
updated_at: menstrualSubscription.updatedAt.getTime(),
blockMetaData: blockMetaData,
},
},
});
}
}
16 changes: 16 additions & 0 deletions src/indexer/events/menstrual-subscription/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export * from './commands/menstrual-subscription-added/menstrual-subscription-added.command';
export * from './commands/menstrual-subscription-paid/menstrual-subscription-paid.command';
export * from './commands/menstrual-subscription-price-added/menstrual-subscription-price-added.command';
export * from './commands/menstrual-subscription-updated/menstrual-subscription-updated.command';

import { MenstrualSubscriptionAddedHandler } from './commands/menstrual-subscription-added/menstrual-subscription-added.handler';
import { MenstrualSubscriptionPaidHandler } from './commands/menstrual-subscription-paid/menstrual-subscription-paid.handler';
import { MenstrualSubscriptionPriceAddedHandler } from './commands/menstrual-subscription-price-added/menstrual-subscription-price-added.handler';
import { MenstrualSubscriptionUpdatedHandler } from './commands/menstrual-subscription-updated/menstrual-subscription-updated.handler';

export const MenstrualSubscriptionCommandHandlers = [
MenstrualSubscriptionAddedHandler,
MenstrualSubscriptionPaidHandler,
MenstrualSubscriptionPriceAddedHandler,
MenstrualSubscriptionUpdatedHandler,
];
2 changes: 2 additions & 0 deletions src/indexer/indexer.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { GeneticAnalystsCommandHandlers } from './events/genetic-analysts';
import { GeneticAnalysisCommandHandlers } from './events/genetic-analysis';
import { GeneticAnalysisOrderCommandHandlers } from './events/genetic-analysis-order';
import { MenstrualCalendarCommandHandlers } from './events/menstrual-calendar';
import { MenstrualSubscriptionCommandHandlers } from './events/menstrual-subscription';

// eslint-disable-next-line @typescript-eslint/no-var-requires
require('dotenv').config();
Expand All @@ -39,6 +40,7 @@ require('dotenv').config();
...GeneticAnalysisCommandHandlers,
...GeneticAnalysisOrderCommandHandlers,
...MenstrualCalendarCommandHandlers,
...MenstrualSubscriptionCommandHandlers,
],
})
export class IndexerModule {}
13 changes: 13 additions & 0 deletions src/indexer/indexer.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,12 @@ import {
MenstrualCycleLogRemovedCommandIndexer,
MenstrualCycleLogUpdatedCommandIndexer,
} from './events/menstrual-calendar';
import {
MenstrualSubscriptionAddedCommandIndexer,
MenstrualSubscriptionPaidCommandIndexer,
MenstrualSubscriptionPriceAddedCommandIndexer,
MenstrualSubscriptionUpdatedCommandIndexer,
} from './events/menstrual-subscription';

export const eventRoutes = {
certifications: {
Expand Down Expand Up @@ -170,4 +176,11 @@ export const eventRoutes = {
MenstrualCycleLogUpdated: MenstrualCycleLogUpdatedCommandIndexer,
MenstrualCycleLogRemoved: MenstrualCycleLogRemovedCommandIndexer,
},
menstrualSubscription: {
MenstrualSubscriptionAdded: MenstrualSubscriptionAddedCommandIndexer,
MenstrualSubscriptionUpdated: MenstrualSubscriptionUpdatedCommandIndexer,
MenstrualSubscriptionPaid: MenstrualSubscriptionPaidCommandIndexer,
MenstrualSubscriptionPriceAdded:
MenstrualSubscriptionPriceAddedCommandIndexer,
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export enum MenstrualSubscriptionDuration {
Monthly = 'Monthly',
Quarterly = 'Quarterly',
Yearly = 'Yearly',
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { CurrencyType } from '../currency-type';
import { MenstrualSubscriptionDuration } from './menstrual-subscription-duration';

export class MenstrualSubscriptionPrice {
constructor(anyJson: any) {
this.duration = anyJson.duration;
this.currency = anyJson.currency;
this.assetId = anyJson.assetId;
this.amount = anyJson.amount;
}

duration: MenstrualSubscriptionDuration;
currency: CurrencyType;
assetId: number;
amount: BigInt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export enum MenstrualSubscriptionStatus {
Inactive = 'Inactive',
Active = 'Active',
InQueue = 'InQueue',
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { CurrencyType } from '../currency-type';
import { MenstrualSubscriptionDuration } from './menstrual-subscription-duration';
import { MenstrualSubscriptionStatus } from './menstrual-subscription-status';
import { PaymentStatus } from './payment-status';

export class MenstrualSubscription {
constructor(anyJson: any) {
this.id = anyJson.id;
this.addressId = anyJson.addressId;
this.duration = anyJson.duration;
this.currency = anyJson.currency;
this.paymentStatus = anyJson.paymentStatus;
this.status = anyJson.status;

this.createdAt = new Date(
Number(String(anyJson.createdAt).split(',').join('')),
);
this.updatedAt = new Date(
Number(String(anyJson.updatedAt).split(',').join('')),
);
}

id: string;
addressId: string;
duration: MenstrualSubscriptionDuration;
currency: CurrencyType;
paymentStatus: PaymentStatus;
status: MenstrualSubscriptionStatus;
createdAt: Date;
updatedAt: Date;
}
4 changes: 4 additions & 0 deletions src/indexer/models/menstrual-subscription/payment-status.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum PaymentStatus {
Unpaid = 'Unpaid',
Paid = 'Paid',
}

0 comments on commit 280ce35

Please sign in to comment.