diff --git a/src/app/dtos/OrderProcessingDto/UpdateUpdateManyOrderProcessingDto.ts b/src/app/dtos/OrderProcessingDto/UpdateUpdateManyOrderProcessingDto.ts new file mode 100644 index 0000000..e97f85e --- /dev/null +++ b/src/app/dtos/OrderProcessingDto/UpdateUpdateManyOrderProcessingDto.ts @@ -0,0 +1,21 @@ +import { type IOrderProcessing } from 'domain/entities/OrdersEntities/OrderProcessing/OrderProcessing'; + +export abstract class UpdateManyOrderProcessingDTO + implements Partial +{ + 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[]; +} diff --git a/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts b/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts index 978b6a7..fce79b8 100644 --- a/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts +++ b/src/app/useCases/OrderProcessingUseCases/OrderProcessingUseCases.ts @@ -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'; @@ -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( @@ -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 }, + }); + } } diff --git a/src/domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto.ts b/src/domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto.ts index b02f4be..592874c 100644 --- a/src/domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto.ts +++ b/src/domain/dto/repositories/whereDtos/OrderProcessingRepositoryDto.ts @@ -43,3 +43,6 @@ export class FindAllOrderProcessingWhereRequestDTO { sort?: SortByOrderProcessingTypeDTO; where?: WhereOrderProcessingTypeDTO; } +export abstract class CountOrderProcessingRequestDTO { + where?: WhereOrderProcessingTypeDTO; +} diff --git a/src/domain/repositories/OrderProcessingRepository.ts b/src/domain/repositories/OrderProcessingRepository.ts index 455fe27..73d73b9 100644 --- a/src/domain/repositories/OrderProcessingRepository.ts +++ b/src/domain/repositories/OrderProcessingRepository.ts @@ -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; abstract findOrderProcessing( request: GetOrderProcessingDTO, ): Promise; @@ -15,6 +21,15 @@ export abstract class OrderProcessingRepository { id: string, data: OrderProcessing, ): Promise; + abstract updateOrderProcessing( + id: string, + orderprocessing: OrderProcessing, + ): Promise; + abstract updateManyOrderProcessing( + data: OrderProcessing[], + ): Promise; + abstract deleteOrderProcessing(id: string): Promise; + abstract deleteManyOrderProcessing(ids: string[]): Promise; abstract findAllOrderProcessing( parameters: FindAllOrderProcessingWhereRequestDTO, ): Promise; diff --git a/src/infra/database/prisma/services/OrderProcessingLegalClient.service.ts b/src/infra/database/prisma/services/OrderProcessing.service.ts similarity index 70% rename from src/infra/database/prisma/services/OrderProcessingLegalClient.service.ts rename to src/infra/database/prisma/services/OrderProcessing.service.ts index 5b8e701..3c79e38 100644 --- a/src/infra/database/prisma/services/OrderProcessingLegalClient.service.ts +++ b/src/infra/database/prisma/services/OrderProcessing.service.ts @@ -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'; @@ -15,7 +18,13 @@ import { PhysicalCustomerOrderPrismaDTO } from './prismaDTO/PhysicalCustomerOrde @Injectable() export class OrderProcessingPrismaService implements OrderProcessingRepository { constructor(private prisma: PrismaService) {} - + countOrderProcessing( + request: CountOrderProcessingRequestDTO, + ): Promise { + return this.prisma.orderProcessing.count({ + where: request.where ?? undefined, + }); + } async findOrderProcessing( request: GetOrderProcessingDTO, ): Promise { @@ -106,4 +115,44 @@ export class OrderProcessingPrismaService implements OrderProcessingRepository { LegalClientOrderPrismaDTO.PrismaToEntity(order), ); } + updateManyOrderProcessing( + data: OrderProcessing[], + ): Promise { + 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 { + return OrderProcessingPrismaDTO.PrismaToEntity( + await this.prisma.orderProcessing.delete({ where: { id } }), + ); + } + deleteManyOrderProcessing(ids: string[]): Promise { + 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; + } } diff --git a/src/infra/graphql/entities/OrderProcessingGraphql/Args/WhereOrderProcessingArgs.ts b/src/infra/graphql/entities/OrderProcessingGraphql/Args/WhereOrderProcessingArgs.ts index 7597007..6d548b4 100644 --- a/src/infra/graphql/entities/OrderProcessingGraphql/Args/WhereOrderProcessingArgs.ts +++ b/src/infra/graphql/entities/OrderProcessingGraphql/Args/WhereOrderProcessingArgs.ts @@ -31,3 +31,10 @@ export class OrderProcessingWhereArgs { @IsOptional() sort?: OrderProcessingOrderByWithRelationInput; } +@ArgsType() +export class OrderProcessingCountArgs { + @Field(() => OrderProcessingWhereInput, { nullable: true }) + @Type(() => OrderProcessingWhereInput) + @IsOptional() + where?: OrderProcessingWhereInput; +} diff --git a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.input.ts b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.input.ts index a71275c..9122643 100644 --- a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.input.ts +++ b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.input.ts @@ -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; +} diff --git a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.module.ts b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.module.ts index 0119ed4..4e967d0 100644 --- a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.module.ts +++ b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.module.ts @@ -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'; diff --git a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts index f2e42b4..4b830b7 100644 --- a/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts +++ b/src/infra/graphql/entities/OrderProcessingGraphql/OrderProcessing.resolver.ts @@ -1,6 +1,7 @@ import { UseGuards, UseInterceptors } from '@nestjs/common'; import { Args, + Int, Mutation, Parent, Query, @@ -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'; @@ -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); @@ -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({ diff --git a/src/infra/graphql/generated/schema.gql b/src/infra/graphql/generated/schema.gql index fa1c71e..fedafff 100644 --- a/src/infra/graphql/generated/schema.gql +++ b/src/infra/graphql/generated/schema.gql @@ -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! @@ -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! @@ -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 @@ -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!]