Create invoice module and model, and implement functionality to create an invoice

master
nicekid1 2 months ago
parent e18858fd60
commit cb3eaeb425
  1. 2
      src/app.module.ts
  2. 14
      src/invoice/entities/invoice.entity.ts
  3. 13
      src/invoice/invoice.controller.ts
  4. 12
      src/invoice/invoice.module.ts
  5. 26
      src/invoice/invoice.service.ts

@ -8,6 +8,7 @@ import { UsersModule } from './users/users.module';
import { ProductsModule } from './products/products.module';
import { CartModule } from './cart/cart.module';
import { WalletModule } from './wallet/wallet.module';
import { InvoiceModule } from './invoice/invoice.module';
@Module({
imports: [
@ -19,6 +20,7 @@ import { WalletModule } from './wallet/wallet.module';
ProductsModule,
CartModule,
WalletModule,
InvoiceModule,
],
controllers: [AppController],
providers: [AppService],

@ -0,0 +1,14 @@
import { Table, Model, Column, BelongsTo, ForeignKey } from "sequelize-typescript";
import { User } from "../../users/entities/user.entity";
import { Product } from "../../products/entities/product.entity";
@Table
export class Invoice extends Model<Invoice> {
@ForeignKey(() => User)
@Column
userId: number;
@BelongsTo(() => User)
user: User;
@Column
totalAmount: number;
}

@ -0,0 +1,13 @@
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { InvoiceService } from './invoice.service';
import { Invoice } from './entities/invoice.entity';
@Controller('invoice')
export class InvoiceController {
constructor(private readonly invoiceService: InvoiceService) {}
@Post('create')
async createInvoice(@Body() body:{userId:number, totalAmount:number}):Promise<Invoice>{
const { userId, totalAmount} = body
return this.invoiceService.createInvoice(userId, totalAmount)
}
}

@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { InvoiceService } from './invoice.service';
import { InvoiceController } from './invoice.controller';
import { SequelizeModule } from '@nestjs/sequelize';
import { Invoice } from './entities/invoice.entity';
@Module({
imports : [SequelizeModule.forFeature([Invoice])],
controllers: [InvoiceController],
providers: [InvoiceService],
})
export class InvoiceModule {}

@ -0,0 +1,26 @@
import { HttpException, HttpStatus, Injectable } from "@nestjs/common";
import { InjectModel } from "@nestjs/sequelize";
import { Invoice } from "./entities/invoice.entity";
@Injectable()
export class InvoiceService {
constructor(@InjectModel(Invoice) private readonly invoiceModel: typeof Invoice) {}
async createInvoice(userId: number, totalAmount: number): Promise<Invoice> {
try {
if (!userId) {
throw new HttpException("User id not found!", HttpStatus.BAD_REQUEST);
}
const newInvoice = await this.invoiceModel.create({ userId, totalAmount });
return newInvoice;
} catch (error) {
if (error instanceof HttpException) {
throw error;
}
throw new HttpException("An error occurred while creating the invoice.", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
Loading…
Cancel
Save