Skip to content

Commit

Permalink
refactor and add payment transaction module
Browse files Browse the repository at this point in the history
  • Loading branch information
bahram1249 committed Jun 6, 2024
1 parent 499da11 commit ef84bb2
Show file tree
Hide file tree
Showing 21 changed files with 736 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import {
Controller,
Get,
HttpCode,
HttpStatus,
Param,
Query,
UseGuards,
UseInterceptors,
} from '@nestjs/common';
import {
ApiBearerAuth,
ApiOperation,
ApiQuery,
ApiTags,
} from '@nestjs/swagger';
import { GetUser } from '@rahino/auth/decorator';
import { JwtGuard } from '@rahino/auth/guard';
import { User } from '@rahino/database/models/core/user.entity';
import { ListFilter } from '@rahino/query-filter';
import { JsonResponseTransformInterceptor } from '@rahino/response/interceptor';
import { PermissionGuard } from '@rahino/permission-checker/guard';
import { CheckPermission } from '@rahino/permission-checker/decorator';
import { PaymentGatewayService } from './payment-gateway.service';

@ApiTags('payment-gateway')
@UseGuards(JwtGuard, PermissionGuard)
@ApiBearerAuth()
@UseInterceptors(JsonResponseTransformInterceptor)
@Controller({
path: '/api/ecommerce/admin/paymentGateways',
version: ['1'],
})
export class PaymentGatewayController {
constructor(private readonly service: PaymentGatewayService) {}

// public url
@CheckPermission({
permissionSymbol: 'ecommerce.admin.paymentgateways.getall',
})
@ApiOperation({ description: 'show all payment gateway' })
@Get('/')
@ApiQuery({
name: 'filter',
type: ListFilter,
style: 'deepObject',
explode: true,
})
@HttpCode(HttpStatus.OK)
async findAll(@GetUser() user: User, @Query() filter: ListFilter) {
return await this.service.findAll(user, filter);
}

@CheckPermission({
permissionSymbol: 'ecommerce.admin.paymentgateways.getone',
})
@ApiOperation({ description: 'show payment gateway by given id' })
@Get('/:id')
@HttpCode(HttpStatus.OK)
async findById(@GetUser() user: User, @Param('id') entityId: number) {
return await this.service.findById(user, entityId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Module } from '@nestjs/common';
import { PaymentGatewayService } from './payment-gateway.service';
import { SequelizeModule } from '@nestjs/sequelize';
import { User } from '@rahino/database/models/core/user.entity';
import { Permission } from '@rahino/database/models/core/permission.entity';
import { PaymentGatewayController } from './payment-gateway.controller';
import { ECPaymentGateway } from '@rahino/database/models/ecommerce-eav/ec-payment-gateway.entity';

@Module({
imports: [SequelizeModule.forFeature([User, Permission, ECPaymentGateway])],
controllers: [PaymentGatewayController],
providers: [PaymentGatewayService],
})
export class PaymentGatewayModule {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/sequelize';
import { User } from '@rahino/database/models/core/user.entity';
import { ECPaymentGateway } from '@rahino/database/models/ecommerce-eav/ec-payment-gateway.entity';
import { ListFilter } from '@rahino/query-filter';
import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builder';
import { Op } from 'sequelize';
import { Sequelize } from 'sequelize';

@Injectable()
export class PaymentGatewayService {
constructor(
@InjectModel(ECPaymentGateway)
private readonly repository: typeof ECPaymentGateway,
) {}
async findAll(user: User, filter: ListFilter) {
let queryBuilder = new QueryOptionsBuilder().filter(
Sequelize.where(
Sequelize.fn('isnull', Sequelize.col('ECPaymentGateway.isDeleted'), 0),
{
[Op.eq]: 0,
},
),
);
return {
result: await this.repository.findAll(queryBuilder.build()),
total: await this.repository.count(queryBuilder.build()),
};
}
async findById(user: User, entityId: number) {
let queryBuilder = new QueryOptionsBuilder()
.filter({ id: entityId })
.filter(
Sequelize.where(
Sequelize.fn(
'isnull',
Sequelize.col('ECPaymentGateway.isDeleted'),
0,
),
{
[Op.eq]: 0,
},
),
);
return {
result: await this.repository.findAll(queryBuilder.build()),
};
}
}
4 changes: 4 additions & 0 deletions apps/e-commerce/src/e-commerce.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ import { VendorSaleModule } from './report/vendor-sale/vendor-sale.module';
import { AdminCourierReportModule } from './report/admin-courier/admin-courier.module';
import { AdminPostReportModule } from './report/admin-post/admin-post.module';
import { CourierReportModule } from './report/courier/courier-report.module';
import { PaymentTransactionReportModule } from './report/payment-transaction/payment-transaction.module';
import { PaymentGatewayModule } from './admin/payment-gateway/payment-gateway.module';

@Module({
imports: [
Expand Down Expand Up @@ -124,6 +126,8 @@ import { CourierReportModule } from './report/courier/courier-report.module';
AdminPostReportModule,
CourierReportModule,
PersianDateMonthModule,
PaymentTransactionReportModule,
PaymentGatewayModule,
],
providers: [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import { Permission } from '@rahino/database/models/core/permission.entity';
import { User } from '@rahino/database/models/core/user.entity';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { AdminCourierController } from './admin-courier.controller';
import { ShipmentQueryBuilderModule } from '../shipment-query-builder/shipment-query-builder.module';
import { OrderQueryBuilderModule } from '../order-query-builder/order-query-builder.module';
import { AdminCourierService } from './admin-courier.service';
import { PersianDate } from '@rahino/database/models/core/view/persiandate.entity';

@Module({
imports: [
SequelizeModule.forFeature([User, Permission, ECOrder, PersianDate]),
ShipmentQueryBuilderModule,
OrderQueryBuilderModule,
],
controllers: [AdminCourierController],
providers: [AdminCourierService],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builde
import { PersianDate } from '@rahino/database/models/core/view/persiandate.entity';
import { I18nContext, I18nService } from 'nestjs-i18n';
import { I18nTranslations } from 'apps/main/src/generated/i18n.generated';
import { ShipmentQueryBuilderService } from '../shipment-query-builder/shipment-query-builder.service';
import { OrderQueryBuilderService } from '../order-query-builder/order-query-builder.service';
import {
OrderShipmentwayEnum,
OrderStatusEnum,
Expand All @@ -21,7 +21,7 @@ export class AdminCourierService {
@InjectModel(PersianDate)
private readonly persianDateRepository: typeof PersianDate,
private readonly i18n: I18nService<I18nTranslations>,
private readonly shipmentQueryBuilder: ShipmentQueryBuilderService,
private readonly shipmentQueryBuilder: OrderQueryBuilderService,
) {}

async findAll(filter: GetAdminCourierDto) {
Expand Down
4 changes: 2 additions & 2 deletions apps/e-commerce/src/report/admin-post/admin-post.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import { Permission } from '@rahino/database/models/core/permission.entity';
import { User } from '@rahino/database/models/core/user.entity';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { AdminPostController } from './admin-post.controller';
import { ShipmentQueryBuilderModule } from '../shipment-query-builder/shipment-query-builder.module';
import { OrderQueryBuilderModule } from '../order-query-builder/order-query-builder.module';
import { AdminPostService } from './admin-post.service';
import { PersianDate } from '@rahino/database/models/core/view/persiandate.entity';

@Module({
imports: [
SequelizeModule.forFeature([User, Permission, ECOrder, PersianDate]),
ShipmentQueryBuilderModule,
OrderQueryBuilderModule,
],
controllers: [AdminPostController],
providers: [AdminPostService],
Expand Down
4 changes: 2 additions & 2 deletions apps/e-commerce/src/report/admin-post/admin-post.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builde
import { PersianDate } from '@rahino/database/models/core/view/persiandate.entity';
import { I18nContext, I18nService } from 'nestjs-i18n';
import { I18nTranslations } from 'apps/main/src/generated/i18n.generated';
import { ShipmentQueryBuilderService } from '../shipment-query-builder/shipment-query-builder.service';
import { OrderQueryBuilderService } from '../order-query-builder/order-query-builder.service';
import {
OrderShipmentwayEnum,
OrderStatusEnum,
Expand All @@ -21,7 +21,7 @@ export class AdminPostService {
@InjectModel(PersianDate)
private readonly persianDateRepository: typeof PersianDate,
private readonly i18n: I18nService<I18nTranslations>,
private readonly shipmentQueryBuilder: ShipmentQueryBuilderService,
private readonly shipmentQueryBuilder: OrderQueryBuilderService,
) {}

async findAll(filter: GetAdminPostDto) {
Expand Down
4 changes: 2 additions & 2 deletions apps/e-commerce/src/report/courier/courier-report.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import { Permission } from '@rahino/database/models/core/permission.entity';
import { User } from '@rahino/database/models/core/user.entity';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { CourierReportController } from './courier-report.controller';
import { ShipmentQueryBuilderModule } from '../shipment-query-builder/shipment-query-builder.module';
import { OrderQueryBuilderModule } from '../order-query-builder/order-query-builder.module';
import { CourierReportService } from './courier-report.service';
import { PersianDate } from '@rahino/database/models/core/view/persiandate.entity';

@Module({
imports: [
SequelizeModule.forFeature([User, Permission, ECOrder, PersianDate]),
ShipmentQueryBuilderModule,
OrderQueryBuilderModule,
],
controllers: [CourierReportController],
providers: [CourierReportService],
Expand Down
4 changes: 2 additions & 2 deletions apps/e-commerce/src/report/courier/courier-report.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builde
import { PersianDate } from '@rahino/database/models/core/view/persiandate.entity';
import { I18nContext, I18nService } from 'nestjs-i18n';
import { I18nTranslations } from 'apps/main/src/generated/i18n.generated';
import { ShipmentQueryBuilderService } from '../shipment-query-builder/shipment-query-builder.service';
import { OrderQueryBuilderService } from '../order-query-builder/order-query-builder.service';
import {
OrderShipmentwayEnum,
OrderStatusEnum,
Expand All @@ -22,7 +22,7 @@ export class CourierReportService {
@InjectModel(PersianDate)
private readonly persianDateRepository: typeof PersianDate,
private readonly i18n: I18nService<I18nTranslations>,
private readonly shipmentQueryBuilder: ShipmentQueryBuilderService,
private readonly shipmentQueryBuilder: OrderQueryBuilderService,
) {}

async findAll(user: User, filter: GetCourierReportDto) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Module } from '@nestjs/common';
import { OrderQueryBuilderService } from './order-query-builder.service';

@Module({
providers: [OrderQueryBuilderService],
exports: [OrderQueryBuilderService],
})
export class OrderQueryBuilderModule {}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Injectable, Scope } from '@nestjs/common';
import { User } from '@rahino/database/models/core/user.entity';
import { ECOrderStatus } from '@rahino/database/models/ecommerce-eav/ec-order-status.entity';
import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-entity';
import {
OrderShipmentwayEnum,
OrderStatusEnum,
Expand All @@ -9,7 +10,7 @@ import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builde
import { FindAttributeOptions, Op, Sequelize } from 'sequelize';

@Injectable({ scope: Scope.REQUEST })
export class ShipmentQueryBuilderService {
export class OrderQueryBuilderService {
private builder: QueryOptionsBuilder;
private groupByQuery = false;
constructor() {
Expand Down Expand Up @@ -80,6 +81,15 @@ export class ShipmentQueryBuilderService {
return this;
}

addPaymentGatewayId(paymentGatewayId: number) {
this.builder = this.builder.filter(
Sequelize.where(Sequelize.col('payment.paymentGatewayId'), {
[Op.eq]: paymentGatewayId,
}),
);
return this;
}

addOrderId(orderId: bigint) {
this.builder = this.builder.filter({ id: orderId });
return this;
Expand Down Expand Up @@ -107,6 +117,18 @@ export class ShipmentQueryBuilderService {
return this;
}

includePayment() {
this.builder = this.builder.thenInlcude({
attributes: this.groupByQuery
? []
: ['id', 'paymentGatewayId', 'paymentStatusId'],
model: ECPayment,
as: 'payment',
required: false,
});
return this;
}

attributes(attributes: FindAttributeOptions) {
this.builder = this.builder.attributes(attributes);
return this;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { IntersectionType } from '@nestjs/swagger';
import { ListFilter } from '@rahino/query-filter';
import { PaymentTransactionDto } from './payment-transaction.dto';

export class GetPaymentTransactionDto extends IntersectionType(
PaymentTransactionDto,
ListFilter,
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './get-payment-transaction.dto';
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { ApiProperty } from '@nestjs/swagger';
import { I18nTranslations } from 'apps/main/src/generated/i18n.generated';
import { Type } from 'class-transformer';
import { IsInt, IsNumber, IsOptional, IsString } from 'class-validator';
import { i18nValidationMessage } from 'nestjs-i18n';

export class PaymentTransactionDto {
@ApiProperty({
required: true,
type: IsString,
description: 'beginDate',
})
@IsString()
beginDate: string;

@ApiProperty({
required: true,
type: IsString,
description: 'endDate',
})
@IsString()
endDate: string;

@ApiProperty({
required: false,
type: IsNumber,
description: 'paymentGatewayId',
})
@IsOptional()
@IsInt({
message: i18nValidationMessage<I18nTranslations>('validation.NUMBER'),
})
@Type(() => Number)
paymentGatewayId?: number;

@ApiProperty({
required: false,
type: IsNumber,
description: 'orderId',
})
@IsOptional()
@IsInt({
message: i18nValidationMessage<I18nTranslations>('validation.NUMBER'),
})
@Type(() => Number)
orderId?: bigint;
}
Loading

0 comments on commit ef84bb2

Please sign in to comment.