Skip to content

Commit

Permalink
add some sms to flow
Browse files Browse the repository at this point in the history
  • Loading branch information
bahram1249 committed May 27, 2024
1 parent ab01d16 commit 54cc136
Show file tree
Hide file tree
Showing 9 changed files with 277 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import { Permission } from '@rahino/database/models/core/permission.entity';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { UtilOrderModule } from '../utilOrder/util-order.module';
import { ECCourier } from '@rahino/database/models/ecommerce-eav/ec-courier.entity';
import { ECommerceSmsModule } from '@rahino/ecommerce/util/sms/ecommerce-sms.module';

@Module({
imports: [
SequelizeModule.forFeature([User, Permission, ECOrder, ECCourier]),
UtilOrderModule,
ECommerceSmsModule,
],
controllers: [CourierOrderController],
providers: [CourierOrderService],
Expand Down
19 changes: 19 additions & 0 deletions apps/e-commerce/src/admin/courierOrder/courier-order.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { OrderUtilService } from '../utilOrder/service/order-util.service';
import { I18nContext, I18nService } from 'nestjs-i18n';
import { I18nTranslations } from 'apps/main/src/generated/i18n.generated';
import { ECCourier } from '@rahino/database/models/ecommerce-eav/ec-courier.entity';
import { ECommmerceSmsService } from '@rahino/ecommerce/util/sms/ecommerce-sms.service';

@Injectable()
export class CourierOrderService {
Expand All @@ -30,6 +31,7 @@ export class CourierOrderService {
private readonly courierRepository: typeof ECCourier,
private orderQueryBuilder: OrderQueryBuilder,
private orderUtilService: OrderUtilService,
private readonly smsService: ECommmerceSmsService,
private readonly i18n: I18nService<I18nTranslations>,
) {}

Expand Down Expand Up @@ -104,6 +106,12 @@ export class CourierOrderService {
},
),
)
.include([
{
model: User,
as: 'user',
},
])
.build(),
);
if (!item) {
Expand All @@ -124,6 +132,12 @@ export class CourierOrderService {
},
),
)
.include([
{
model: User,
as: 'user',
},
])
.build(),
);
if (!courier) {
Expand All @@ -139,6 +153,11 @@ export class CourierOrderService {
item.courierUserId = dto.userId;

item = await item.save();
await this.smsService.sendByCourier(
`${user.firstname};${user.lastname};${courier.user.phoneNumber};${orderId}`,
item.user.phoneNumber,
);

return {
result: item,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@ import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-enti
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { PaymentServiceManualProviderFactory } from './factory/payment-service-manual-provider.factory';
import { RevertInventoryModule } from '@rahino/ecommerce/inventory/revert-inventory.module';
import { ECommerceSmsModule } from '@rahino/ecommerce/util/sms/ecommerce-sms.module';
import { User } from '@rahino/database/models/core/user.entity';

@Module({
imports: [
RevertInventoryModule,
SequelizeModule.forFeature([ECPaymentGateway, ECPayment, ECOrder]),
SequelizeModule.forFeature([ECPaymentGateway, ECPayment, ECOrder, User]),
ECommerceSmsModule,
],
providers: [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { User } from '@rahino/database/models/core/user.entity';
import { PayInterface } from '../interface';
import {
OrderStatusEnum,
Expand All @@ -23,6 +22,9 @@ import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { Response } from 'express';
import { ConfigService } from '@nestjs/config';
import { RevertInventoryQtyService } from '@rahino/ecommerce/inventory/services';
import { ECommmerceSmsService } from '@rahino/ecommerce/util/sms/ecommerce-sms.service';
import { User } from '@rahino/database/models/core/user.entity';
import * as moment from 'moment-jalaali';

export class SnapPayService implements PayInterface {
private baseUrl = '';
Expand All @@ -33,8 +35,11 @@ export class SnapPayService implements PayInterface {
private readonly paymentRepository: typeof ECPayment,
@InjectModel(ECOrder)
private readonly orderRepository: typeof ECOrder,
@InjectModel(User)
private readonly userRepository: typeof User,
private readonly config: ConfigService,
private readonly revertInventoryQtyService: RevertInventoryQtyService,
private readonly smsService: ECommmerceSmsService,
) {
this.baseUrl = 'https://api.snapppay.ir';
}
Expand Down Expand Up @@ -356,6 +361,24 @@ export class SnapPayService implements PayInterface {
},
},
);

// here to send sms
const userPaid = await this.userRepository.findOne(
new QueryOptionsBuilder().filter({ id: payment.userId }).build(),
);
await this.smsService.successfulPayment(
`${userPaid.firstname};${userPaid.lastname};${
payment.orderId
};${moment()
.tz('Asia/Tehran', false)
.locale('fa')
.format('jYYYY-jMM-jDD HH:mm:ss')}`,
userPaid.phoneNumber,
);

// send sms to vendors
// waiting for accept from melipayamak
// await this.smsService.successfulOrderToVendor(payment.id);
}
}
}
Expand Down
5 changes: 4 additions & 1 deletion apps/e-commerce/src/user/payment/provider/snappay.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@ import { ECPaymentGateway } from '@rahino/database/models/ecommerce-eav/ec-payme
import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-entity';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { RevertInventoryModule } from '@rahino/ecommerce/inventory/revert-inventory.module';
import { ECommerceSmsModule } from '@rahino/ecommerce/util/sms/ecommerce-sms.module';
import { User } from '@rahino/database/models/core/user.entity';

@Module({
imports: [
SequelizeModule.forFeature([ECPaymentGateway, ECPayment, ECOrder]),
SequelizeModule.forFeature([ECPaymentGateway, ECPayment, ECOrder, User]),
RevertInventoryModule,
ECommerceSmsModule,
],
providers: [SnapPayService],
exports: [SnapPayService],
Expand Down
9 changes: 8 additions & 1 deletion apps/e-commerce/src/util/sms/ecommerce-sms.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import { Module } from '@nestjs/common';
import { ECommmerceSmsService } from './ecommerce-sms.service';
import { SmsModule } from '@rahino/sms/sms.module';
import { SequelizeModule } from '@nestjs/sequelize';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-entity';
import { ECVendor } from '@rahino/database/models/ecommerce-eav/ec-vendor.entity';

@Module({
imports: [SmsModule],
imports: [
SmsModule,
SequelizeModule.forFeature([ECPayment, ECOrder, ECVendor]),
],
providers: [ECommmerceSmsService],
exports: [ECommmerceSmsService],
})
Expand Down
145 changes: 143 additions & 2 deletions apps/e-commerce/src/util/sms/ecommerce-sms.service.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,36 @@
import { Inject, Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { InjectModel } from '@nestjs/sequelize';
import { User } from '@rahino/database/models/core/user.entity';
import { ECOrderDetail } from '@rahino/database/models/ecommerce-eav/ec-order-detail.entity';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-entity';
import { ECVendorUser } from '@rahino/database/models/ecommerce-eav/ec-vendor-user.entity';
import { ECVendor } from '@rahino/database/models/ecommerce-eav/ec-vendor.entity';
import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builder';
import { SMS_SERVICE } from '@rahino/sms/contants';
import { SmsService } from '@rahino/sms/sms.service';
import { Op, Sequelize } from 'sequelize';
import * as moment from 'moment-jalaali';

@Injectable()
export class ECommmerceSmsService {
constructor(
@Inject(SMS_SERVICE)
private readonly smsService: SmsService,
private readonly config: ConfigService,
@InjectModel(ECPayment)
private readonly paymentRepository: typeof ECPayment,
@InjectModel(ECOrder)
private readonly orderRepository: typeof ECOrder,
@InjectModel(ECVendor)
private readonly vendorRepository: typeof ECVendor,
) {}

async loginSms(text: string, to: string) {
/*
کد تایید شما : {0} جهیزان
*/
const loginBody = this.config.get('ECOMMERCE_LOGIN_SMS_CODE');
await this.smsService.sendMessage({
text: text,
Expand All @@ -21,16 +40,138 @@ export class ECommmerceSmsService {
}

async processOrder(text: string, to: string) {
/*
سفارش شما به شماره {0} درحال آماده سازی میباشد و بزودی ارسال میشود
*/
const activeSms = await this.config.get(
'ECOMMERCE_PROCESSED_SMS_CODE_STATUS',
);
if (activeSms == true) {
const processCode = this.config.get('ECOMMERCE_PROCESSED_SMS_CODE');
const body = this.config.get('ECOMMERCE_PROCESSED_SMS_CODE');
await this.smsService.sendMessage({
text: text,
to: to,
bodyId: processCode,
bodyId: body,
});
}
}

async sendByCourier(text: string, to: string) {
/*
{0} {1} عزیز، سفارش شما توسط {2} با کدپیگیری {3} با موفقیت ارسال شد
*/
const activeSms = await this.config.get(
'ECOMMERCE_COURIER_SEND_SMS_CODE_STATUS',
);
if (activeSms == true) {
const body = this.config.get('ECOMMERCE_COURIER_SEND_SMS_CODE');
await this.smsService.sendMessage({
text: text,
to: to,
bodyId: body,
});
}
}

async successfulPayment(text: string, to: string) {
/*
{0} {1} عزیز سفارش شما با شماره {2} در تاریخ {3} ثبت و پرداخت شد. جهیزان
*/
const activeSms = await this.config.get(
'ECOMMERCE_SUSSESSFUL_PAYMENT_SMS_CODE_STATUS',
);
if (activeSms == true) {
const body = this.config.get('ECOMMERCE_SUSSESSFUL_PAYMENT_SMS_CODE');
await this.smsService.sendMessage({
text: text,
to: to,
bodyId: body,
});
}
}

async successfulOrderToVendor(paymentId: bigint) {
const activeSms = await this.config.get(
'ECOMMERCE_SUSSESSFUL_ORDER_SMS_STATUS',
);
if (activeSms == true) {
const payment = await this.paymentRepository.findOne(
new QueryOptionsBuilder().filter({ id: paymentId }).build(),
);
const order = await this.orderRepository.findOne(
new QueryOptionsBuilder()
.filter({ id: payment.orderId })
.include([
{
model: ECOrderDetail,
as: 'details',
},
])
.build(),
);
const vendorIds = Array.from(
new Set<number>(order.details.map((item) => item.vendorId)),
);

const vendors = await this.vendorRepository.findAll(
new QueryOptionsBuilder()
.filter({
id: {
[Op.in]: vendorIds,
},
})
.include([
{
model: ECVendorUser,
as: 'vendorUser',
include: [
{
attributes: [
'id',
'firstname',
'lastname',
'username',
'phoneNumber',
],
model: User,
as: 'user',
},
],
where: {
[Op.and]: [
{
isDefault: true,
},
Sequelize.where(
Sequelize.fn(
'isnull',
Sequelize.col('vendorUser.isDeleted'),
0,
),
{
[Op.eq]: 0,
},
),
],
},
},
])
.build(),
);

const body = this.config.get('ECOMMERCE_SUSSESSFUL_ORDER_SMS_CODE');

for (let index = 0; index < vendors.length; index++) {
const vendor = vendors[index];
await this.smsService.sendMessage({
text: `${vendor.name};${moment()
.tz('Asia/Tehran', false)
.locale('fa')
.format('jYYYY-jMM-jDD HH:mm:ss')}`,
to: vendor.vendorUser.user.phoneNumber,
bodyId: body,
});
}
}
}
}
Loading

0 comments on commit 54cc136

Please sign in to comment.