Skip to content
This repository was archived by the owner on Jul 14, 2024. It is now read-only.

Commit

Permalink
feat: add delete, delete many and update many in order processing
Browse files Browse the repository at this point in the history
  • Loading branch information
GabrielDeSouzza committed May 1, 2024
1 parent 90a24b6 commit d977f6b
Show file tree
Hide file tree
Showing 10 changed files with 232 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { type IOrderProcessing } from 'domain/entities/OrdersEntities/OrderProcessing/OrderProcessing';

export abstract class UpdateManyOrderProcessingDTO
implements Partial<IOrderProcessing>
{
id: string;
total_distance?: number;
total_spend_liters?: number;
total_spending_money?: number;
start_at?: Date;
end_at?: Date;
status?: string;
order_processing_number?: string;
disconnect_legal_order?: string;
disconnect_physical_customer_order?: string;
vehicle_id?: string;
updated_at?: Date;
updated_by: string;
physical_customer_order_ids?: string[];
legal_customer_order_ids?: string[];
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ import { HttpStatus, Injectable } from '@nestjs/common';
import { GraphQLError } from 'graphql';

import { type GetOrderProcessingDTO } from 'domain/dto/repositories/getDataDtos/GetOrderProcessingDto';
import { type FindAllOrderProcessingWhereRequestDTO } from 'domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto';
import {
type CountOrderProcessingRequestDTO,
type FindAllOrderProcessingWhereRequestDTO,
} from 'domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto';
import { OrderProcessing } from 'domain/entities/OrdersEntities/OrderProcessing/OrderProcessing';
import { OrderProcessingRepository } from 'domain/repositories/OrderProcessingRepository';

import { type CreateOrderProcessingDTO } from 'app/dtos/OrderProcessingDto/CreateOrderProcessingDto';
import { type UpdateOrderProcessingDTO } from 'app/dtos/OrderProcessingDto/UpdateOrderProcessingDto';
import { type UpdateManyOrderProcessingDTO } from 'app/dtos/OrderProcessingDto/UpdateUpdateManyOrderProcessingDto';
import { generateRandomNumber } from 'app/utils/RandomNumber';

import { LegalClientOrderUseCases } from '../LegalClientOrderUseCases/LegalClientOrderUseCases';
Expand All @@ -23,7 +27,9 @@ export class OrderProcessingUseCases {
private legalClientOrderUseCase: LegalClientOrderUseCases,
private physicalCusotmerOrderUseCase: PhysicalCustomerOrderUseCases,
) {}

async countOrderProcessing(request: CountOrderProcessingRequestDTO) {
return this.orderProcessingResitory.countOrderProcessing(request);
}
async getOrderProcessing(request: GetOrderProcessingDTO) {
if (!request.id && !request.order_processing_number && !request.vehicleData)
throw new GraphQLError(
Expand Down Expand Up @@ -160,4 +166,58 @@ export class OrderProcessingUseCases {
async getAllPhysicalCustomerOrders(request: GetOrderProcessingDTO) {
return this.orderProcessingResitory.findAllPhysicalCustomerOrder(request);
}
async updateManyOrderProcessing(
data: UpdateManyOrderProcessingDTO[],
updateBy: string,
) {
for (const orderprocessing of data)
await this.verifyOrderProcessingExist(orderprocessing.id);
const orderprocessings = data.map(orderprocessing => {
const orderprocessingUpdated = new OrderProcessing({
id: orderprocessing.id,
physical_customer_order_ids:
orderprocessing.physical_customer_order_ids,
legal_customer_order_ids: orderprocessing.legal_customer_order_ids,
start_at: orderprocessing.start_at,
total_distance: orderprocessing.total_distance,
total_spend_liters: orderprocessing.total_spend_liters,
total_spending_money: orderprocessing.total_spending_money,
disconnect_legal_order: orderprocessing.disconnect_legal_order,
disconnect_physical_customer_order:
orderprocessing.disconnect_physical_customer_order,
updated_by: updateBy,
vehicle_id: orderprocessing.vehicle_id,
status: orderprocessing.status,
end_at: orderprocessing.end_at,
created_by: null,
order_processing_number: null,
});

return orderprocessingUpdated;
});

return this.orderProcessingResitory.updateManyOrderProcessing(
orderprocessings,
);
}
async deleteOrderProcessing(id: string) {
await this.getOrderProcessing({ id });

return this.orderProcessingResitory.deleteOrderProcessing(id);
}
async deleteManyOrderProcessing(ids: string[]) {
for (const orderprocessingId of ids)
await this.verifyOrderProcessingExist(orderprocessingId);

return this.orderProcessingResitory.deleteManyOrderProcessing(ids);
}
private async verifyOrderProcessingExist(id: string) {
const exist = await this.orderProcessingResitory.findOrderProcessing({
id,
});
if (!exist)
throw new GraphQLError(`THIS ORDERPROCESSING ID ${id} NOT FOUND`, {
extensions: { code: HttpStatus.NOT_FOUND },
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,6 @@ export class FindAllOrderProcessingWhereRequestDTO {
sort?: SortByOrderProcessingTypeDTO;
where?: WhereOrderProcessingTypeDTO;
}
export abstract class CountOrderProcessingRequestDTO {
where?: WhereOrderProcessingTypeDTO;
}
17 changes: 16 additions & 1 deletion src/domain/repositories/OrderProcessingRepository.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import { type GetOrderProcessingDTO } from 'domain/dto/repositories/getDataDtos/GetOrderProcessingDto';
import { type FindAllOrderProcessingWhereRequestDTO } from 'domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto';
import {
type CountOrderProcessingRequestDTO,
type FindAllOrderProcessingWhereRequestDTO,
} from 'domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto';
import { type LegalClientOrder } from 'domain/entities/LegalClientEntities/LegalClientOrder/LegaClientOrder';
import { type OrderProcessing } from 'domain/entities/OrdersEntities/OrderProcessing/OrderProcessing';
import { type PhysicalCustomerOrder } from 'domain/entities/PhysicalClientEntities/physicalCustomerOrder/PhysicalCustomerOrder';

export abstract class OrderProcessingRepository {
abstract countOrderProcessing(
request: CountOrderProcessingRequestDTO,
): Promise<number>;
abstract findOrderProcessing(
request: GetOrderProcessingDTO,
): Promise<OrderProcessing>;
Expand All @@ -15,6 +21,15 @@ export abstract class OrderProcessingRepository {
id: string,
data: OrderProcessing,
): Promise<OrderProcessing>;
abstract updateOrderProcessing(
id: string,
orderprocessing: OrderProcessing,
): Promise<OrderProcessing>;
abstract updateManyOrderProcessing(
data: OrderProcessing[],
): Promise<OrderProcessing[]>;
abstract deleteOrderProcessing(id: string): Promise<OrderProcessing>;
abstract deleteManyOrderProcessing(ids: string[]): Promise<OrderProcessing[]>;
abstract findAllOrderProcessing(
parameters: FindAllOrderProcessingWhereRequestDTO,
): Promise<OrderProcessing[]>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { Injectable } from '@nestjs/common';

import { type GetOrderProcessingDTO } from 'domain/dto/repositories/getDataDtos/GetOrderProcessingDto';
import { type FindAllOrderProcessingWhereRequestDTO } from 'domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto';
import {
type CountOrderProcessingRequestDTO,
type FindAllOrderProcessingWhereRequestDTO,
} from 'domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto';
import { type LegalClientOrder } from 'domain/entities/LegalClientEntities/LegalClientOrder/LegaClientOrder';
import { type OrderProcessing } from 'domain/entities/OrdersEntities/OrderProcessing/OrderProcessing';
import { type PhysicalCustomerOrder } from 'domain/entities/PhysicalClientEntities/physicalCustomerOrder/PhysicalCustomerOrder';
Expand All @@ -15,7 +18,13 @@ import { PhysicalCustomerOrderPrismaDTO } from './prismaDTO/PhysicalCustomerOrde
@Injectable()
export class OrderProcessingPrismaService implements OrderProcessingRepository {
constructor(private prisma: PrismaService) {}

countOrderProcessing(
request: CountOrderProcessingRequestDTO,
): Promise<number> {
return this.prisma.orderProcessing.count({
where: request.where ?? undefined,
});
}
async findOrderProcessing(
request: GetOrderProcessingDTO,
): Promise<OrderProcessing> {
Expand Down Expand Up @@ -106,4 +115,44 @@ export class OrderProcessingPrismaService implements OrderProcessingRepository {
LegalClientOrderPrismaDTO.PrismaToEntity(order),
);
}
updateManyOrderProcessing(
data: OrderProcessing[],
): Promise<OrderProcessing[]> {
console.log(data);
const orderprocessingUpdate = this.prisma.$transaction(async tx => {
const promises = data.map(async orderprocessing => {
const orderprocessingPrisma = await tx.orderProcessing.update({
data: OrderProcessingPrismaDTO.EntityToPrismaUpdate(orderprocessing),
where: { id: orderprocessing.id },
});

return OrderProcessingPrismaDTO.PrismaToEntity(orderprocessingPrisma);
});

return Promise.all(promises);
});

return orderprocessingUpdate;
}

async deleteOrderProcessing(id: string): Promise<OrderProcessing> {
return OrderProcessingPrismaDTO.PrismaToEntity(
await this.prisma.orderProcessing.delete({ where: { id } }),
);
}
deleteManyOrderProcessing(ids: string[]): Promise<OrderProcessing[]> {
const orderprocessingDeleted = this.prisma.$transaction(async tx => {
const promises = ids.map(async icmdsId => {
const orderprocessingPrisma = await tx.orderProcessing.delete({
where: { id: icmdsId },
});

return OrderProcessingPrismaDTO.PrismaToEntity(orderprocessingPrisma);
});

return Promise.all(promises);
});

return orderprocessingDeleted;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,10 @@ export class OrderProcessingWhereArgs {
@IsOptional()
sort?: OrderProcessingOrderByWithRelationInput;
}
@ArgsType()
export class OrderProcessingCountArgs {
@Field(() => OrderProcessingWhereInput, { nullable: true })
@Type(() => OrderProcessingWhereInput)
@IsOptional()
where?: OrderProcessingWhereInput;
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,25 @@ export class OrderProcessingUpdateInput extends PartialType(
@IsUUID()
disconnect_physical_customer_order?: string;
}

@InputType()
export class OrderProcessingUpdateManyInput extends PartialType(
OrderProcessingInput,
) {
@Field()
@IsUUID()
@IsNotEmpty()
id: string;

@HideField()
@Allow()
updated_by: string;
@Field({ nullable: true })
@IsOptional()
@IsUUID()
disconnect_legal_client_order: string;
@Field({ nullable: true })
@IsOptional()
@IsUUID()
disconnect_physical_customer_order?: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { OrderProcessingRepository } from 'domain/repositories/OrderProcessingRe

import { OrderProcessingUseCases } from 'app/useCases/OrderProcessingUseCases/OrderProcessingUseCases';

import { OrderProcessingPrismaService } from 'infra/database/prisma/services/OrderProcessingLegalClient.service';
import { OrderProcessingPrismaService } from 'infra/database/prisma/services/OrderProcessing.service';

import { GraphqlCenterModule } from '../GraphqlCenter.module';
import { LegalClientOrderModule } from '../LegalClientOrderGraphql/LegalClientOrder.module';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { UseGuards, UseInterceptors } from '@nestjs/common';
import {
Args,
Int,
Mutation,
Parent,
Query,
Expand All @@ -24,10 +25,14 @@ import { PhysicalCustomerOrderModel } from '../PhysicalCustomerOrderGraphql/Phys
import { UserModelRefereces } from '../UserGraphql/user.model';
import { VehicleCarModel } from '../VehicleGraphql/vehicle.model';
import { GetOrderProcessingArgs } from './Args/GetOrderProcessingArgs';
import { OrderProcessingWhereArgs } from './Args/WhereOrderProcessingArgs';
import {
OrderProcessingCountArgs,
OrderProcessingWhereArgs,
} from './Args/WhereOrderProcessingArgs';
import {
OrderProcessingUpdateInput,
OrderProcessingInput,
OrderProcessingUpdateManyInput,
} from './OrderProcessing.input';
import { OrderProcessingModel } from './OrderProcessing.model';

Expand All @@ -41,6 +46,10 @@ export class OrderProcessingResolver {
private userCase: UserUseCases,
private vehicleUseCase: VehicleUseCases,
) {}
@Query(() => Int)
async countOrderProcessing(@Args() request: OrderProcessingCountArgs) {
return this.orderProcessingUseCase.countOrderProcessing(request);
}
@Query(() => OrderProcessingModel)
async getOrderProcessing(@Args() request: GetOrderProcessingArgs) {
return await this.orderProcessingUseCase.getOrderProcessing(request);
Expand Down Expand Up @@ -70,6 +79,26 @@ export class OrderProcessingResolver {

return this.orderProcessingUseCase.updateOrderProcessing(id, data);
}
@Mutation(() => [OrderProcessingModel])
async updateManyOrderProcessing(
@Args({ name: 'data', type: () => [OrderProcessingUpdateManyInput] })
data: OrderProcessingUpdateManyInput[],
@CurrentUser() user: User,
) {
return this.orderProcessingUseCase.updateManyOrderProcessing(data, user.id);
}
@Mutation(() => OrderProcessingModel)
async deleteOrderProcessing(@Args('id') id: string) {
return this.orderProcessingUseCase.deleteOrderProcessing(id);
}

@Mutation(() => [OrderProcessingModel])
async deleteManyOrderProcessing(
@Args({ name: 'ids', type: () => [String] })
ids: string[],
) {
return this.orderProcessingUseCase.deleteManyOrderProcessing(ids);
}
@ResolveField(() => VehicleCarModel)
async Vehicle(@Parent() orderProcessing: OrderProcessingInput) {
return this.vehicleUseCase.getVehicle({
Expand Down
19 changes: 19 additions & 0 deletions src/infra/graphql/generated/schema.gql
Original file line number Diff line number Diff line change
Expand Up @@ -1476,7 +1476,9 @@ type Mutation {
deleteManyLegalContract(ids: [String!]!): [LegalContractModel!]!
deleteManyMaintenance(ids: [String!]!): [MaintenanceModel!]!
deleteManyMaintenanceCompany(ids: [String!]!): [MaintenanceCompanyModel!]!
deleteManyOrderProcessing(ids: [String!]!): [OrderProcessingModel!]!
deleteManyUsers(deleteManyUsers: [String!]!): [UserModel!]!
deleteOrderProcessing(id: String!): OrderProcessingModel!
deleteUser(id: String!): UserModel!
login(loginData: AuthInput!): AuthModel!
updateCarriercompany(data: CarrierCompanyUpdateInput!, id: String!): CarrierCompanyModel!
Expand All @@ -1497,6 +1499,7 @@ type Mutation {
updateManyLegalContract(data: [LegalContractUpdateManyInput!]!): [LegalContractModel!]!
updateManyMaintenance(data: [MaintenanceUpdateManyInput!]!): [MaintenanceModel!]!
updateManyMaintenanceCompany(data: [MaintenanceCompanyUpdateManyInput!]!): [MaintenanceCompanyModel!]!
updateManyOrderProcessing(data: [OrderProcessingUpdateManyInput!]!): [OrderProcessingModel!]!
updateManyUsers(updateManyUsers: [UserUpdateManyInput!]!): [UserModel!]!
updateOrderProcessing(data: OrderProcessingUpdateInput!, id: String!): OrderProcessingModel!
updateOutsourcedDriver(id: String!, outsourcedDriver: OutsourcedDriverUpdateInput!): OutsourcedDriverModel!
Expand Down Expand Up @@ -1801,6 +1804,21 @@ input OrderProcessingUpdateInput {
vehicle_id: String
}

input OrderProcessingUpdateManyInput {
disconnect_legal_client_order: String
disconnect_physical_customer_order: String
end_at: Timestamp
id: String!
legal_customer_order_ids: [String!]
physical_customer_order_ids: [String!]
start_at: Timestamp
status: StatusOrder
total_distance: Float
total_spend_liters: Float
total_spending_money: Float
vehicle_id: String
}

input OrderProcessingWhereInput {
AND: [OrderProcessingWhereInput!]
Incident: IncidentListRelationFilter
Expand Down Expand Up @@ -2678,6 +2696,7 @@ type Query {
countLegalContract(where: LegalContractWhereInput): Int!
countMaintenance(where: MaintenanceWhereInput): Int!
countMaintenanceCompany(where: MaintenanceCompanyWhereInput): Int!
countOrderProcessing(where: OrderProcessingWhereInput): Int!
generateLegalClientCte(request: CtePdfLegalClientInput!): CtePDfModel!
generatePhysicalCustomerCte(request: CtePdfPhysicalCustomerInput!): CtePDfModel!
getAllCarrierCompany(limit: Int! = 25, offset: Int! = 0, sort: CarrierCompanyOrderByWithRelationInput, where: CarrierCompanyWhereInput): [CarrierCompanyModel!]
Expand Down

0 comments on commit d977f6b

Please sign in to comment.