diff --git a/src/app-config/app-config.service.ts b/src/app-config/app-config.service.ts index 13f4d73..8344725 100644 --- a/src/app-config/app-config.service.ts +++ b/src/app-config/app-config.service.ts @@ -41,4 +41,8 @@ export class AppConfigService { getMailConfig() { return configMaster[this.defaultEnv].mailConfig; } + + getSwaggerConfig() { + return configMaster[this.defaultEnv].swaggerConfig; + } } diff --git a/src/app-config/config.json b/src/app-config/config.json index 07ad2c9..b3e412d 100644 --- a/src/app-config/config.json +++ b/src/app-config/config.json @@ -29,6 +29,13 @@ "defaults": { "from": "\"No Reply\" " } + }, + "swaggerConfig": { + "swagger": { + "title": "Remedify Payment API", + "description": "Remedify Payment API", + "version": "1.0.0" + } } } } \ No newline at end of file diff --git a/src/app-config/config.local.json b/src/app-config/config.local.json index 07ad2c9..05b2483 100644 --- a/src/app-config/config.local.json +++ b/src/app-config/config.local.json @@ -29,6 +29,14 @@ "defaults": { "from": "\"No Reply\" " } + }, + "swaggerConfig": { + "swagger": { + "title": "Remedify Payment API", + "description": "Remedify Payment API", + "version": "1.0.0", + "tag": "Remedify Payment API" + } } } } \ No newline at end of file diff --git a/src/app.service.ts b/src/app.service.ts index 87d9088..37cf196 100644 --- a/src/app.service.ts +++ b/src/app.service.ts @@ -41,6 +41,10 @@ export class AppService { const emailConfig = this.configService.getMailConfig(); this.commonService.mailConfig = emailConfig; Utility.mailConfig = emailConfig; + + const swaggerConfig = this.configService.getSwaggerConfig(); + this.commonService.swaggerConfig = swaggerConfig; + Utility.swaggerConfig = swaggerConfig; } getModels() { diff --git a/src/common/Utility.ts b/src/common/Utility.ts index 8102af5..846bad9 100644 --- a/src/common/Utility.ts +++ b/src/common/Utility.ts @@ -4,7 +4,8 @@ export class Utility { static sequelize: Sequelize; static appPort: number = 3000; static models: any; - static fileConfig: any = {"storagePath": "./uploads"}; + static fileConfig: any = { "storagePath": "./uploads" }; + static swaggerConfig: any; static mailConfig: any = { "transport": { "host": "smtppro.zoho.in", diff --git a/src/common/common.service.ts b/src/common/common.service.ts index 490b0a3..becfc6f 100644 --- a/src/common/common.service.ts +++ b/src/common/common.service.ts @@ -7,6 +7,7 @@ export class CommonService { models: any; fileConfig: any; mailConfig: any; + swaggerConfig: any; constructor() { } diff --git a/src/data/data.entity.ts b/src/data/data.entity.ts index eab3681..61eefe7 100644 --- a/src/data/data.entity.ts +++ b/src/data/data.entity.ts @@ -1,29 +1,36 @@ import { Table, Column, Model, Default, DataType } from 'sequelize-typescript'; +import { ApiProperty } from '@nestjs/swagger'; -@Table({tableName: 'crud_config_info', paranoid : true}) +@Table({tableName: 'crud_config_info', paranoid: true}) export default class DataModel extends Model { + @ApiProperty({ type: Number }) @Column({type: DataType.NUMBER}) endPtNm: number; + @ApiProperty({ type: String }) @Column({type: DataType.TEXT}) sqlQueryText: string; + @ApiProperty({ type: String }) @Column({type: DataType.TEXT}) opsTypeName: string; + @ApiProperty({ type: Date, default: new Date() }) @Default(new Date()) @Column({type: DataType.DATEONLY}) validFrom: Date; + @ApiProperty({ type: Date, default: new Date('2070-12-31') }) @Default(new Date("2070-12-31")) @Column({type: DataType.DATEONLY}) validTill: Date; + @ApiProperty({ type: String }) @Column({type: DataType.TEXT}) createBy: string; + @ApiProperty({ type: String }) @Column({type: DataType.TEXT}) modifiedBy: string; - -} \ No newline at end of file +} diff --git a/src/invoice/invoice.entity.ts b/src/invoice/invoice.entity.ts index b99ad27..876ad5a 100644 --- a/src/invoice/invoice.entity.ts +++ b/src/invoice/invoice.entity.ts @@ -1,60 +1,78 @@ import { Table, Column, Model, Default, DataType, ForeignKey } from 'sequelize-typescript'; -import Payment from 'src/payment/payment.entity'; +import { ApiProperty } from '@nestjs/swagger'; +import Payment from 'src/payment/payment.entity'; -@Table({ tableName: 'invoice' , paranoid : true}) +@Table({ tableName: 'invoice', paranoid: true }) export default class Invoice extends Model { + @ApiProperty({ type: Number }) @Column({ type: DataType.BIGINT, allowNull: false }) user_id: number; + @ApiProperty({ type: Number }) @ForeignKey(() => Payment) @Column({ type: DataType.BIGINT, allowNull: false, field: 'payment_id' }) payment_id: number; + @ApiProperty({ type: String }) @Column({ type: DataType.TEXT, field: 'invoice_number' }) invoice_number: string; + @ApiProperty({ type: Number }) @Column({ type: DataType.NUMBER, field: 'amount' }) amount: number; + @ApiProperty({ type: Number }) @Column({ type: DataType.NUMBER, field: 'remaining_balance' }) remaining_balance: number; + @ApiProperty({ type: Number }) @Column({ type: DataType.NUMBER, field: 'tax' }) tax: number; + @ApiProperty({ type: Date }) @Column({ type: DataType.DATEONLY, field: 'issue_date' }) issue_date: Date; + @ApiProperty({ type: Date }) @Column({ type: DataType.DATEONLY, field: 'due_date' }) due_date: Date; + @ApiProperty({ type: String }) @Column({ type: DataType.TEXT, field: 'status' }) status: string; + @ApiProperty({ type: Date, default: new Date() }) @Default(new Date()) @Column({ type: DataType.DATEONLY, field: 'validFrom' }) valid_from: Date; + @ApiProperty({ type: Date, default: new Date("2070-12-31") }) @Default(new Date("2070-12-31")) @Column({ type: DataType.DATEONLY, field: 'validTill' }) valid_till: Date; + @ApiProperty({ type: Date }) @Column({ type: DataType.DATEONLY, field: 'createdAt' }) created_at: Date; + @ApiProperty({ type: Date }) @Column({ type: DataType.DATEONLY, field: 'updatedAt' }) updated_at: Date; + @ApiProperty({ type: String }) @Column({ type: DataType.TEXT, field: 'createdBy' }) created_by: string; + @ApiProperty({ type: String }) @Column({ type: DataType.TEXT, field: 'modifiedBy' }) modified_by: string; + @ApiProperty({ type: Date }) @Column({ type: DataType.DATEONLY, field: 'deletedAt' }) deleted_at: Date; + @ApiProperty({ type: Number }) @Column({ type: DataType.NUMBER, field: 'version' }) version: number; diff --git a/src/main.ts b/src/main.ts index 70118d9..408efe4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,10 +9,19 @@ async function bootstrap() { Utility.appPort = configMaster.local.appConfig.port; Utility.mailConfig = configMaster.local.mailConfig; Utility.fileConfig = configMaster.local.fileConfig; + Utility.swaggerConfig = configMaster.local.swaggerConfig; + const app = await NestFactory.create(AppModule, { cors: true }); - const config = new DocumentBuilder().setTitle('Payment API').setVersion('1.0').addTag('payments').build(); + + const config = new DocumentBuilder() + .setTitle(Utility.swaggerConfig.swagger.title) + .setVersion(Utility.swaggerConfig.swagger.version) + .addTag(Utility.swaggerConfig.swagger.tag) + .setDescription(Utility.swaggerConfig.swagger.description) + .build(); const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('api', app, document); + app.use(bodyParser.json({ limit: '50mb' })); app.use(bodyParser.urlencoded({ limit: '50mb', extended: true })); await app.listen(Utility.appPort); diff --git a/src/offers-redemption/offers-redemption.entity.ts b/src/offers-redemption/offers-redemption.entity.ts index 6d1128e..639c59f 100644 --- a/src/offers-redemption/offers-redemption.entity.ts +++ b/src/offers-redemption/offers-redemption.entity.ts @@ -1,46 +1,60 @@ import { Table, Column, Model, Default, DataType } from 'sequelize-typescript'; +import { ApiProperty } from '@nestjs/swagger'; -@Table({ tableName: 'offers_redemption' , paranoid : true}) +@Table({ tableName: 'offers_redemption', paranoid: true }) export default class OfferRedemption extends Model { + @ApiProperty({ type: Number }) @Column(DataType.BIGINT) user_id: number; + @ApiProperty({ type: Number }) @Column(DataType.BIGINT) offer_id: number; + @ApiProperty({ type: Number }) @Column(DataType.BIGINT) payment_id: number; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) redemption_date: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) status: string; + @ApiProperty({ type: Date, default: new Date() }) @Default(new Date()) @Column(DataType.DATEONLY) validFrom: Date; + @ApiProperty({ type: Date, default: new Date("2070-12-31") }) @Default(new Date("2070-12-31")) @Column(DataType.DATEONLY) validTill: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) createdAt: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) updatedAt: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) createdBy: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) modifiedBy: string; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) deletedAt: Date; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) version: number; } diff --git a/src/offers/offers.entity.ts b/src/offers/offers.entity.ts index db8fb5c..eb03fb7 100644 --- a/src/offers/offers.entity.ts +++ b/src/offers/offers.entity.ts @@ -1,43 +1,56 @@ import { Table, Column, Model, Default, DataType, Unique } from 'sequelize-typescript'; +import { ApiProperty } from '@nestjs/swagger'; -@Table({ tableName: 'offers' , paranoid : true}) +@Table({ tableName: 'offers', paranoid: true }) export default class Offer extends Model { + @ApiProperty({ type: String }) @Column(DataType.TEXT) code: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) description: string; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) discount_value: number; + @ApiProperty({ type: String }) @Column(DataType.TEXT) status: string; + @ApiProperty({ type: Date, default: new Date() }) @Default(new Date()) @Column(DataType.DATEONLY) validFrom: Date; + @ApiProperty({ type: Date, default: new Date("2070-12-31") }) @Default(new Date("2070-12-31")) @Column(DataType.DATEONLY) validTill: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) createdAt: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) updatedAt: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) createdBy: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) modifiedBy: string; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) deletedAt: Date; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) version: number; } diff --git a/src/payment/payment.entity.ts b/src/payment/payment.entity.ts index 8fa1b4c..86639e6 100644 --- a/src/payment/payment.entity.ts +++ b/src/payment/payment.entity.ts @@ -1,58 +1,76 @@ import { Table, Column, Model, Default, DataType } from 'sequelize-typescript'; +import { ApiProperty } from '@nestjs/swagger'; -@Table({ tableName: 'payment' , paranoid : true}) +@Table({ tableName: 'payment', paranoid: true }) export default class Payment extends Model { + @ApiProperty({ type: Number }) @Column(DataType.BIGINT) user_id: number; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) amount: number; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) payment_date: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) method: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) payment_signature: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) from_account: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) to_account: string; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) remaining_amount: number; + @ApiProperty({ type: String }) @Column(DataType.TEXT) status: string; + @ApiProperty({ type: Date, default: new Date() }) @Default(new Date()) @Column(DataType.DATEONLY) validFrom: Date; + @ApiProperty({ type: Date, default: new Date("2070-12-31") }) @Default(new Date("2070-12-31")) @Column(DataType.DATEONLY) validTill: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) createdAt: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) updatedAt: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) createdBy: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) modifiedBy: string; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) deletedAt: Date; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) version: number; } diff --git a/src/plan-usage/plan-usage.entity.ts b/src/plan-usage/plan-usage.entity.ts index b786709..36bdb16 100644 --- a/src/plan-usage/plan-usage.entity.ts +++ b/src/plan-usage/plan-usage.entity.ts @@ -1,46 +1,60 @@ import { Table, Column, Model, Default, DataType } from 'sequelize-typescript'; +import { ApiProperty } from '@nestjs/swagger'; -@Table({ tableName: 'plan_usage' , paranoid : true}) +@Table({ tableName: 'plan_usage', paranoid: true }) export default class PlanUsage extends Model { + @ApiProperty({ type: Number }) @Column(DataType.BIGINT) user_id: number; + @ApiProperty({ type: Number }) @Column(DataType.BIGINT) plan_id: number; + @ApiProperty({ type: String }) @Column(DataType.TEXT) usage_type: string; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) usage_quantity: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) status: string; + @ApiProperty({ type: Date, default: new Date() }) @Default(new Date()) @Column(DataType.DATEONLY) validFrom: Date; + @ApiProperty({ type: Date, default: new Date("2070-12-31") }) @Default(new Date("2070-12-31")) @Column(DataType.DATEONLY) validTill: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) createdAt: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) updatedAt: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) createdBy: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) modifiedBy: string; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) deletedAt: Date; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) version: number; } diff --git a/src/plans/plans.entity.ts b/src/plans/plans.entity.ts index e757377..73fc38b 100644 --- a/src/plans/plans.entity.ts +++ b/src/plans/plans.entity.ts @@ -1,46 +1,60 @@ import { Table, Column, Model, Default, DataType } from 'sequelize-typescript'; +import { ApiProperty } from '@nestjs/swagger'; -@Table({ tableName: 'plans_ref' , paranoid : true}) +@Table({ tableName: 'plans_ref', paranoid: true }) export default class Plan extends Model { + @ApiProperty({ type: String }) @Column(DataType.TEXT) name: string; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) price: number; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) duration: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) description: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) status: string; + @ApiProperty({ type: Date, default: new Date() }) @Default(new Date()) @Column(DataType.DATEONLY) validFrom: Date; + @ApiProperty({ type: Date, default: new Date("2070-12-31") }) @Default(new Date("2070-12-31")) @Column(DataType.DATEONLY) validTill: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) createdAt: Date; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) updatedAt: Date; + @ApiProperty({ type: String }) @Column(DataType.TEXT) createdBy: string; + @ApiProperty({ type: String }) @Column(DataType.TEXT) modifiedBy: string; + @ApiProperty({ type: Date }) @Column(DataType.DATEONLY) deletedAt: Date; + @ApiProperty({ type: Number }) @Column(DataType.NUMBER) version: number; }