Compare commits
2 Commits
e18858fd60
...
be0f01bc1a
Author | SHA1 | Date |
---|---|---|
|
be0f01bc1a | 4 months ago |
|
cb3eaeb425 | 4 months ago |
5 changed files with 97 additions and 0 deletions
@ -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,17 @@ |
|||||||
|
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); |
||||||
|
} |
||||||
|
@Get(":userId") |
||||||
|
async getInvoices(@Param("userId") userId: number): Promise<any> { |
||||||
|
return this.invoiceService.getInvoicesByUser(userId); |
||||||
|
} |
||||||
|
} |
@ -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,52 @@ |
|||||||
|
import { HttpException, HttpStatus, Injectable } from "@nestjs/common"; |
||||||
|
import { InjectModel } from "@nestjs/sequelize"; |
||||||
|
import { Invoice } from "./entities/invoice.entity"; |
||||||
|
import { where } from "sequelize"; |
||||||
|
|
||||||
|
@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); |
||||||
|
} |
||||||
|
} |
||||||
|
async getInvoicesByUser(userId: number): Promise<Invoice[]> { |
||||||
|
try { |
||||||
|
if (!userId) { |
||||||
|
throw new HttpException('User ID is required.', HttpStatus.BAD_REQUEST); |
||||||
|
} |
||||||
|
|
||||||
|
const invoices = await this.invoiceModel.findAll({ |
||||||
|
where: { userId }, |
||||||
|
}); |
||||||
|
|
||||||
|
if (!invoices || invoices.length === 0) { |
||||||
|
throw new HttpException('No invoices found for this user.', HttpStatus.NOT_FOUND); |
||||||
|
} |
||||||
|
|
||||||
|
return invoices; |
||||||
|
} catch (error) { |
||||||
|
if (error instanceof HttpException) { |
||||||
|
throw error; |
||||||
|
} |
||||||
|
throw new HttpException( |
||||||
|
'An error occurred while retrieving invoices.', |
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR, |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue