diff --git a/src/app/dtos/LegalClientQuoteTableDto/UpdateManyLegalClientQuoteTableDto.ts b/src/app/dtos/LegalClientQuoteTableDto/UpdateManyLegalClientQuoteTableDto.ts new file mode 100644 index 0000000..ed77c0b --- /dev/null +++ b/src/app/dtos/LegalClientQuoteTableDto/UpdateManyLegalClientQuoteTableDto.ts @@ -0,0 +1,18 @@ +import { type ILegalClientQuoteTable } from 'domain/entities/QuoteTables/LegalClientQuoteTable/LegalClientQuoteTable'; + +export abstract class UpdateManyLegalClientQuoteTableDTO + implements Partial +{ + id: string; + recipientId?: string; + senderId?: string; + who_pays?: string; + postalCodOrigin?: string; + postalCodDestiny?: string; + typeMerchandise?: string; + amount?: number; + description?: string; + mass?: number; + volume?: number; + nf_value?: number; +} diff --git a/src/app/useCases/LegalClientQuoteTableUseCase/LegalClientQuoteTable.ts b/src/app/useCases/LegalClientQuoteTableUseCase/LegalClientQuoteTable.ts index 397cdf6..c5328aa 100644 --- a/src/app/useCases/LegalClientQuoteTableUseCase/LegalClientQuoteTable.ts +++ b/src/app/useCases/LegalClientQuoteTableUseCase/LegalClientQuoteTable.ts @@ -3,12 +3,16 @@ import { HttpStatus, Injectable } from '@nestjs/common'; import { GraphQLError } from 'graphql'; import { type GetLegalClientQuoteTableDTO } from 'domain/dto/repositories/getDataDtos/GetLegalClientQuoteTableDto'; -import { type FindAllLegalClientQuoteTableWhereRequestDTO } from 'domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto'; +import { + type CountLegalClientQuoteTableRequestDTO, + type FindAllLegalClientQuoteTableWhereRequestDTO, +} from 'domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto'; import { LegalClientQuoteTable } from 'domain/entities/QuoteTables/LegalClientQuoteTable/LegalClientQuoteTable'; import { LegalClientQuoteTableRepository } from 'domain/repositories/LegalClientQuoteTable.repository'; import { type CreateLegalClientQuoteTableDTO } from 'app/dtos/LegalClientQuoteTableDto/CreateLegalClientQuoteTableDto'; import { type UpdateLegalClientQuoteTableDTO } from 'app/dtos/LegalClientQuoteTableDto/UpdateLegalClientQuoteTableDto'; +import { type UpdateManyLegalClientQuoteTableDTO } from 'app/dtos/LegalClientQuoteTableDto/UpdateManyLegalClientQuoteTableDto'; import { generateRandomNumber } from 'app/utils/RandomNumber'; import { RecipientUseCases } from '../RecipientUseCase /RecipientUseCases'; @@ -21,6 +25,13 @@ export class LegalClientQuoteTableUseCases { private senderUseCase: SenderUseCases, private recipientUseCase: RecipientUseCases, ) {} + async countLegalClientQuoteTable( + request: CountLegalClientQuoteTableRequestDTO, + ) { + return this.legalClientQuoteTableRepository.countLegalClientQuoteTable( + request, + ); + } async getLegalClientQuoteTable(request: GetLegalClientQuoteTableDTO) { if (!request.id && !request.codQuote) { throw new GraphQLError('IS NECESSARY AN ID OR COD QUOTE', { @@ -120,4 +131,59 @@ export class LegalClientQuoteTableUseCases { order, ); } + async updateManyLegalClientQuoteTable( + data: UpdateManyLegalClientQuoteTableDTO[], + updateBy: string, + ) { + for (const legalclientquotetable of data) + await this.verifyLegalClientQuoteTableExist(legalclientquotetable.id); + const legalclientquotetables = data.map(legalclientquotetable => { + const updateLegalClientQuoteTable = new LegalClientQuoteTable({ + amount: legalclientquotetable.amount, + codQuote: null, + description: legalclientquotetable.description, + mass: legalclientquotetable.mass, + nf_value: legalclientquotetable.nf_value, + postalCodDestiny: legalclientquotetable.postalCodDestiny, + postalCodOrigin: legalclientquotetable.postalCodOrigin, + recipientId: legalclientquotetable.recipientId, + senderId: legalclientquotetable.senderId, + typeMerchandise: legalclientquotetable.typeMerchandise, + volume: legalclientquotetable.volume, + who_pays: legalclientquotetable.who_pays, + created_by: null, + updated_by: updateBy, + id: legalclientquotetable.id, + }); + + return updateLegalClientQuoteTable; + }); + + return this.legalClientQuoteTableRepository.updateManyLegalClientQuoteTable( + legalclientquotetables, + ); + } + async deleteLegalClientQuoteTable(id: string) { + await this.getLegalClientQuoteTable({ id }); + + return this.legalClientQuoteTableRepository.deleteLegalClientQuoteTable(id); + } + async deleteManyLegalClientQuoteTable(ids: string[]) { + for (const legalclientquotetableId of ids) + await this.verifyLegalClientQuoteTableExist(legalclientquotetableId); + + return this.legalClientQuoteTableRepository.deleteManyLegalClientQuoteTable( + ids, + ); + } + private async verifyLegalClientQuoteTableExist(id: string) { + const exist = + await this.legalClientQuoteTableRepository.findLegalClientQuoteTable({ + id, + }); + if (!exist) + throw new GraphQLError(`THIS LEGALCLIENTQUOTETABLE ID ${id} NOT FOUND`, { + extensions: { code: HttpStatus.NOT_FOUND }, + }); + } } diff --git a/src/domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto.ts b/src/domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto.ts index 892b6d2..c91a981 100644 --- a/src/domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto.ts +++ b/src/domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto.ts @@ -49,3 +49,7 @@ export class FindAllLegalClientQuoteTableWhereRequestDTO { sort?: SortByLegalClientQuoteTableTypeDTO; where?: WhereLegalClientQuoteTableTypeDTO; } + +export abstract class CountLegalClientQuoteTableRequestDTO { + where?: WhereLegalClientQuoteTableTypeDTO; +} diff --git a/src/domain/repositories/LegalClientQuoteTable.repository.ts b/src/domain/repositories/LegalClientQuoteTable.repository.ts index 60eafae..80c0dc9 100644 --- a/src/domain/repositories/LegalClientQuoteTable.repository.ts +++ b/src/domain/repositories/LegalClientQuoteTable.repository.ts @@ -1,8 +1,14 @@ import { type GetLegalClientQuoteTableDTO } from 'domain/dto/repositories/getDataDtos/GetLegalClientQuoteTableDto'; -import { type FindAllLegalClientQuoteTableWhereRequestDTO } from 'domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto'; +import { + type CountLegalClientQuoteTableRequestDTO, + type FindAllLegalClientQuoteTableWhereRequestDTO, +} from 'domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto'; import { type LegalClientQuoteTable } from 'domain/entities/QuoteTables/LegalClientQuoteTable/LegalClientQuoteTable'; export abstract class LegalClientQuoteTableRepository { + abstract countLegalClientQuoteTable( + request: CountLegalClientQuoteTableRequestDTO, + ): Promise; abstract findLegalClientQuoteTable( request: GetLegalClientQuoteTableDTO, ): Promise; @@ -16,4 +22,13 @@ export abstract class LegalClientQuoteTableRepository { abstract findAllLegalClientQuoteTable( paraments: FindAllLegalClientQuoteTableWhereRequestDTO, ): Promise; + abstract updateManyLegalClientQuoteTable( + data: LegalClientQuoteTable[], + ): Promise; + abstract deleteLegalClientQuoteTable( + id: string, + ): Promise; + abstract deleteManyLegalClientQuoteTable( + ids: string[], + ): Promise; } diff --git a/src/infra/database/prisma/services/LegalClientQuoteTable.service.ts b/src/infra/database/prisma/services/LegalClientQuoteTable.service.ts index 7c761c3..cc78173 100644 --- a/src/infra/database/prisma/services/LegalClientQuoteTable.service.ts +++ b/src/infra/database/prisma/services/LegalClientQuoteTable.service.ts @@ -1,7 +1,10 @@ import { Injectable } from '@nestjs/common'; import { type GetLegalClientQuoteTableDTO } from 'domain/dto/repositories/getDataDtos/GetLegalClientQuoteTableDto'; -import { type FindAllLegalClientQuoteTableWhereRequestDTO } from 'domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto'; +import { + type CountLegalClientQuoteTableRequestDTO, + type FindAllLegalClientQuoteTableWhereRequestDTO, +} from 'domain/dto/repositories/whereDtos/LegalClientQuoteTableRepositoryDto'; import { type LegalClientQuoteTable } from 'domain/entities/QuoteTables/LegalClientQuoteTable/LegalClientQuoteTable'; import { type LegalClientQuoteTableRepository } from 'domain/repositories/LegalClientQuoteTable.repository'; @@ -13,6 +16,13 @@ export class LegalClientQuoteTablePrismaService implements LegalClientQuoteTableRepository { constructor(private prisma: PrismaService) {} + countLegalClientQuoteTable( + request: CountLegalClientQuoteTableRequestDTO, + ): Promise { + return this.prisma.legalClientQuoteTable.count({ + where: request.where ?? undefined, + }); + } async findLegalClientQuoteTable( request: GetLegalClientQuoteTableDTO, ): Promise { @@ -71,4 +81,56 @@ export class LegalClientQuoteTablePrismaService LegalClientQuoteTablePrismaDTO.PrismaToEntity(legalclientquotetable), ); } + updateManyLegalClientQuoteTable( + data: LegalClientQuoteTable[], + ): Promise { + console.log(data); + const legalclientquotetableUpdate = this.prisma.$transaction(async tx => { + const promises = data.map(async legalclientquotetable => { + const legalclientquotetablePrisma = + await tx.legalClientQuoteTable.update({ + data: LegalClientQuoteTablePrismaDTO.EntityToPrismaUpdate( + legalclientquotetable, + ), + where: { id: legalclientquotetable.id }, + }); + + return LegalClientQuoteTablePrismaDTO.PrismaToEntity( + legalclientquotetablePrisma, + ); + }); + + return Promise.all(promises); + }); + + return legalclientquotetableUpdate; + } + + async deleteLegalClientQuoteTable( + id: string, + ): Promise { + return LegalClientQuoteTablePrismaDTO.PrismaToEntity( + await this.prisma.legalClientQuoteTable.delete({ where: { id } }), + ); + } + deleteManyLegalClientQuoteTable( + ids: string[], + ): Promise { + const legalclientquotetableDeleted = this.prisma.$transaction(async tx => { + const promises = ids.map(async icmdsId => { + const legalclientquotetablePrisma = + await tx.legalClientQuoteTable.delete({ + where: { id: icmdsId }, + }); + + return LegalClientQuoteTablePrismaDTO.PrismaToEntity( + legalclientquotetablePrisma, + ); + }); + + return Promise.all(promises); + }); + + return legalclientquotetableDeleted; + } } diff --git a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/Args/WhereLegalClientQuoteTableArgs.ts b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/Args/WhereLegalClientQuoteTableArgs.ts index 6c0c60e..31891fb 100644 --- a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/Args/WhereLegalClientQuoteTableArgs.ts +++ b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/Args/WhereLegalClientQuoteTableArgs.ts @@ -31,3 +31,10 @@ export class LegalClientQuoteTableWhereArgs { @IsOptional() sort?: LegalClientQuoteTableOrderByWithRelationInput; } +@ArgsType() +export class LegalClientQuoteTableCountArgs { + @Field(() => LegalClientQuoteTableWhereInput, { nullable: true }) + @Type(() => LegalClientQuoteTableWhereInput) + @IsOptional() + where?: LegalClientQuoteTableWhereInput; +} diff --git a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.input.ts b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.input.ts index 6008eec..07e273d 100644 --- a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.input.ts +++ b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.input.ts @@ -2,11 +2,12 @@ import { Field, HideField, InputType, + Int, OmitType, PartialType, } from '@nestjs/graphql'; -import { Allow, IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { Allow, IsNotEmpty, IsNumber, IsString, IsUUID } from 'class-validator'; import { type ILegalClientQuoteTable } from 'domain/entities/QuoteTables/LegalClientQuoteTable/LegalClientQuoteTable'; @@ -41,7 +42,7 @@ export class LegalClientQuoteTableInput @IsString() @IsNotEmpty() typeMerchandise: string; - @Field() + @Field(() => Int) @IsNumber() @IsNotEmpty() amount: number; @@ -75,3 +76,13 @@ export class LegalClientQuoteTableUpdate extends PartialType( ) { updated_by: string; } + +@InputType() +export class LegalClientQuoteTableUpdateManyInput extends PartialType( + LegalClientQuoteTableInput, +) { + @Field() + @IsUUID() + @IsNotEmpty() + id: string; +} diff --git a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.model.ts b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.model.ts index 89aae37..c8f6ef3 100644 --- a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.model.ts +++ b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.model.ts @@ -1,4 +1,4 @@ -import { Field, ObjectType } from '@nestjs/graphql'; +import { Field, Int, ObjectType } from '@nestjs/graphql'; import { type ILegalClientQuoteTable } from 'domain/entities/QuoteTables/LegalClientQuoteTable/LegalClientQuoteTable'; @@ -23,7 +23,7 @@ export class LegalClientQuoteTableModel implements ILegalClientQuoteTable { postalCodDestiny: string; @Field() typeMerchandise: string; - @Field() + @Field(() => Int) amount: number; @Field() description: string; diff --git a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.resolver.ts b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.resolver.ts index aedb5db..76177b6 100644 --- a/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.resolver.ts +++ b/src/infra/graphql/entities/LegalClientQuoteTableGraphql/LegalClientQuoteTable.resolver.ts @@ -15,7 +15,10 @@ import { RecipientUseCases } from 'app/useCases/RecipientUseCase /RecipientUseCa import { SenderUseCases } from 'app/useCases/SenderUseCase /SenderUseCases'; import { UserUseCases } from 'app/useCases/user/UserCases'; -import { LegalClientQuoteTableWhereArgs } from 'infra/graphql/entities/LegalClientQuoteTableGraphql/Args/WhereLegalClientQuoteTableArgs'; +import { + LegalClientQuoteTableCountArgs, + LegalClientQuoteTableWhereArgs, +} from 'infra/graphql/entities/LegalClientQuoteTableGraphql/Args/WhereLegalClientQuoteTableArgs'; import { AcessAllowed } from 'infra/graphql/utilities/decorators/AcessAllowed'; import { CurrentUser } from 'infra/graphql/utilities/decorators/CurrentUser'; import { RoleInterceptor } from 'infra/graphql/utilities/interceptors/RoleInterceptor'; @@ -28,6 +31,7 @@ import { GetLegalClientQuoteTableArgs } from './Args/GetLegalClientQuoteTableArg import { LegalClientQuoteTableInput, LegalClientQuoteTableUpdate, + LegalClientQuoteTableUpdateManyInput, } from './LegalClientQuoteTable.input'; import { LegalClientQuoteTableModel } from './LegalClientQuoteTable.model'; @@ -42,6 +46,14 @@ export class LegalClientQuoteTableResolver { private recipientUseCase: RecipientUseCases, private senderUseCase: SenderUseCases, ) {} + @Query(() => Number) + async countLegalClientQuoteTable( + @Args() request: LegalClientQuoteTableCountArgs, + ) { + return this.legalClientQuoteTableUseCase.countLegalClientQuoteTable( + request, + ); + } @Query(() => LegalClientQuoteTableModel, { nullable: true }) async getLegalClientQuoteTable( @Args() request: GetLegalClientQuoteTableArgs, @@ -85,6 +97,32 @@ export class LegalClientQuoteTableResolver { legalClientQuoteTableUpdate, ); } + + @Mutation(() => [LegalClientQuoteTableModel]) + async updateManyLegalClientQuoteTable( + @Args({ name: 'data', type: () => [LegalClientQuoteTableUpdateManyInput] }) + data: LegalClientQuoteTableUpdateManyInput[], + @CurrentUser() user: User, + ) { + return this.legalClientQuoteTableUseCase.updateManyLegalClientQuoteTable( + data, + user.id, + ); + } + @Mutation(() => LegalClientQuoteTableModel) + async deleteLegalClientQuoteTable(@Args('id') id: string) { + return this.legalClientQuoteTableUseCase.deleteLegalClientQuoteTable(id); + } + + @Mutation(() => [LegalClientQuoteTableModel]) + async deleteManyLegalClientQuoteTable( + @Args({ name: 'ids', type: () => [String] }) + ids: string[], + ) { + return this.legalClientQuoteTableUseCase.deleteManyLegalClientQuoteTable( + ids, + ); + } @ResolveField(() => UserModelRefereces) async createdUser(@Parent() user: LegalClientQuoteTableInput) { const { created_by: createdBy } = user; diff --git a/src/infra/graphql/generated/schema.gql b/src/infra/graphql/generated/schema.gql index ce156ca..1373266 100644 --- a/src/infra/graphql/generated/schema.gql +++ b/src/infra/graphql/generated/schema.gql @@ -907,7 +907,7 @@ input LegalClientOrderWhereInput { } input LegalClientQuoteTableInput { - amount: Float! + amount: Int! description: String! mass: Float! nf_value: Float! @@ -929,7 +929,7 @@ input LegalClientQuoteTableListRelationFilter { type LegalClientQuoteTableModel { Recipient: RecipientModel! Sender: SenderModel! - amount: Float! + amount: Int! codQuote: String! createdUser: UserModelRefereces! created_by: String! @@ -978,8 +978,23 @@ input LegalClientQuoteTableOrderByWithRelationInput { } input LegalClientQuoteTableUpdate { - amount: Float + amount: Int + description: String + mass: Float + nf_value: Float + postalCodDestiny: String + postalCodOrigin: String + recipientId: String + senderId: String + typeMerchandise: String + volume: Float + who_pays: String +} + +input LegalClientQuoteTableUpdateManyInput { + amount: Int description: String + id: String! mass: Float nf_value: Float postalCodDestiny: String @@ -1417,11 +1432,13 @@ type Mutation { deleteFreightExpense(delData: DeletFreightExpenseInput!): FreightExpenseModel! deleteIcms(id: String!): IcmsModel! deleteIncident(id: String!): IncidentModel! + deleteLegalClientQuoteTable(id: String!): LegalClientQuoteTableModel! deleteManyCarrierCompanies(deleteManyCarrierCompanies: [String!]!): [CarrierCompanyModel!]! deleteManyContractOutsourcedDriver(ids: [String!]!): [ContractOutsourcedDriverModel!]! deleteManyFreightExpenses(ids: [String!]!): [FreightExpenseModel!]! deleteManyIcms(ids: [String!]!): [IcmsModel!]! deleteManyIncident(ids: [String!]!): [IncidentModel!]! + deleteManyLegalClientQuoteTable(ids: [String!]!): [LegalClientQuoteTableModel!]! deleteManyUsers(deleteManyUsers: [String!]!): [UserModel!]! deleteUser(id: String!): UserModel! login(loginData: AuthInput!): AuthModel! @@ -1438,6 +1455,7 @@ type Mutation { updateManyFreightExpenses(Data: [FreightExpenseUpdateManyInput!]!): [FreightExpenseModel!]! updateManyIcms(data: [IcmsUpdateManyInput!]!): [IcmsModel!]! updateManyIncident(data: [IncidentUpdateManyInput!]!): [IncidentModel!]! + updateManyLegalClientQuoteTable(data: [LegalClientQuoteTableUpdateManyInput!]!): [LegalClientQuoteTableModel!]! updateManyUsers(updateManyUsers: [UserUpdateManyInput!]!): [UserModel!]! updateOrderProcessing(data: OrderProcessingUpdateInput!, id: String!): OrderProcessingModel! updateOutsourcedDriver(id: String!, outsourcedDriver: OutsourcedDriverUpdateInput!): OutsourcedDriverModel! @@ -2614,6 +2632,7 @@ type Query { countFreightExpenses(where: FreightExpensesWhereInput): Float! countIcms(where: IcmsWhereInput): Float! countIncident(where: IncidentWhereInput): Float! + countLegalClientQuoteTable(where: LegalClientQuoteTableWhereInput): Float! generateLegalClientCte(request: CtePdfLegalClientInput!): CtePDfModel! generatePhysicalCustomerCte(request: CtePdfPhysicalCustomerInput!): CtePDfModel! getAllCarrierCompany(limit: Int! = 25, offset: Int! = 0, sort: CarrierCompanyOrderByWithRelationInput, where: CarrierCompanyWhereInput): [CarrierCompanyModel!]