Order
Order
Componente: Entity
export class newOrder {
constructor(
public readonly userCostumer: number,
public readonly userSeller: number,
public readonly fkCurrency: number,
public readonly fkOrderStatus: number,
public readonly fkShippingAddress: number,
public readonly totalAmount: number,
public readonly fkCoupon?: number,
public readonly createdDt?: Date,
) {}
}
findAll(): Promise<Order[]>;
findById(id: number): Promise<Order | null>;
@Injectable()
export class OrderService {
constructor(
@Inject('OrderRepository')
private readonly orderRepository: OrderRepository,
) {}
return this.orderRepository.create(order);
}
)
return this.orderRepository.update(order);
}
@Injectable()
export class CreateOrderUseCase {
constructor(private readonly orderService: OrderService) {}
@Injectable()
export class DeleteOrderUseCase {
constructor(private readonly orderService: OrderService) {}
@Injectable()
export class UpdateOrderUseCase {
constructor(private readonly orderService: OrderService) {}
@Injectable()
export class FindOrderByIdUseCase {
constructor(private readonly orderService: OrderService) {}
@Injectable()
export class FindOrdersBySellerUseCase {
constructor(private readonly orderService: OrderService) {}
Componente: Controller
@Controller('order')
export class OrderController {
constructor(
private readonly createOrderUseCase: CreateOrderUseCase,
private readonly updateOrderUseCase: UpdateOrderUseCase,
private readonly deleteOrderUseCase: DeleteOrderUseCase,
private readonly findAllOrdersUseCase:
FindAllOrdersUseCase,
private readonly findOrderByIdUseCase:
FindOrderByIdUseCase,
private readonly findOrderByCustomerUseCase:
FindOrdersByCustomerUseCase,
private readonly findOrdersBySellerUseCase:
FindOrdersBySellerUseCase,
) {}
@Post('new')
async create(@Body() data: OrderCreateDto) {
return this.createOrderUseCase.execute(data);
}
@Patch('update:id')
async update(@Param('id') id: number, @Body() data:
OrderUpdateDto) {
data.id = id;
return this.updateOrderUseCase.execute(data);
}
@Delete(':id')
async remove(@Param('id') id: number) {
return this.deleteOrderUseCase.execute(id);
}
@Get('orders')
async findAll() {
return this.findAllOrdersUseCase.execute();
}
@Get('order/:id')
async findById(@Param('id') id: number) {
return this.findOrderByIdUseCase.execute(+id)
}
@Get('customer/:customer')
async findByCustomer(@Param('customer') customer: number) {
return this.findOrderByIdUseCase.execute(+customer)
}
@Get('seller/:seller')
async findBySeller(@Param('seller') seller: number) {
return this.findOrderByIdUseCase.execute(+seller)
}
}
Componente: Dto (create)
import { IsNotEmpty, IsInt, IsDate, IsNumber, IsOptional, Matches }
from "class-validator";
@IsOptional()
@IsInt( { message: "O campo deve ser um número." })
fkCoupon?: number;
Componente: Module
@Module({
imports: [PrismaModule],
exports: [OrderService],
controllers: [OrderController],
providers: [
OrderService,
PrismaOrderRepository,
CreateOrderUseCase,
UpdateOrderUseCase,
DeleteOrderUseCase,
FindAllOrdersUseCase,
FindOrderByIdUseCase,
FindOrdersByCustomerUseCase,
FindOrdersBySellerUseCase,
{
provide: 'OrderRepository',
useClass: PrismaOrderRepository
}
]
})
export class OrderModule {}
Componente: PrismaRepository
@Injectable()
export class PrismaOrderRepository implements OrderRepository {
constructor(private readonly prisma: PrismaService) { }