feat: persist type requirement order
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
ALTER TABLE "type_machine_component_requirements"
|
||||
ADD COLUMN "orderIndex" INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
ALTER TABLE "type_machine_piece_requirements"
|
||||
ADD COLUMN "orderIndex" INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
WITH ordered_component_requirements AS (
|
||||
SELECT
|
||||
id,
|
||||
ROW_NUMBER() OVER (PARTITION BY "typeMachineId" ORDER BY "createdAt") - 1 AS idx
|
||||
FROM "type_machine_component_requirements"
|
||||
)
|
||||
UPDATE "type_machine_component_requirements" t
|
||||
SET "orderIndex" = ordered_component_requirements.idx
|
||||
FROM ordered_component_requirements
|
||||
WHERE ordered_component_requirements.id = t.id;
|
||||
|
||||
WITH ordered_piece_requirements AS (
|
||||
SELECT
|
||||
id,
|
||||
ROW_NUMBER() OVER (PARTITION BY "typeMachineId" ORDER BY "createdAt") - 1 AS idx
|
||||
FROM "type_machine_piece_requirements"
|
||||
)
|
||||
UPDATE "type_machine_piece_requirements" t
|
||||
SET "orderIndex" = ordered_piece_requirements.idx
|
||||
FROM ordered_piece_requirements
|
||||
WHERE ordered_piece_requirements.id = t.id;
|
||||
@@ -296,6 +296,7 @@ model TypeMachineComponentRequirement {
|
||||
maxCount Int?
|
||||
required Boolean @default(true)
|
||||
allowNewModels Boolean @default(true)
|
||||
orderIndex Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@ -317,6 +318,7 @@ model TypeMachinePieceRequirement {
|
||||
maxCount Int?
|
||||
required Boolean @default(false)
|
||||
allowNewModels Boolean @default(true)
|
||||
orderIndex Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ describe('TypeMachineMapper', () => {
|
||||
maxCount: 4,
|
||||
required: true,
|
||||
allowNewModels: false,
|
||||
orderIndex: 0,
|
||||
});
|
||||
expect(input.pieceRequirements?.create?.[0]).toMatchObject({
|
||||
label: 'Piece',
|
||||
@@ -46,6 +47,7 @@ describe('TypeMachineMapper', () => {
|
||||
maxCount: 2,
|
||||
required: false,
|
||||
allowNewModels: true,
|
||||
orderIndex: 0,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -75,11 +77,13 @@ describe('TypeMachineMapper', () => {
|
||||
typeComposantId: 'comp-id',
|
||||
minCount: 2,
|
||||
maxCount: 4,
|
||||
orderIndex: 0,
|
||||
});
|
||||
expect(piece[0]).toMatchObject({
|
||||
typePieceId: 'piece-id',
|
||||
minCount: 0,
|
||||
maxCount: 2,
|
||||
orderIndex: 0,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -13,15 +13,18 @@ type RequirementDto = {
|
||||
allowNewModels?: boolean | null;
|
||||
typeComposantId?: string;
|
||||
typePieceId?: string;
|
||||
orderIndex?: number | null;
|
||||
};
|
||||
|
||||
export const TYPE_MACHINE_DEFAULT_INCLUDE: Prisma.TypeMachineInclude = {
|
||||
customFields: { select: CUSTOM_FIELD_SELECT },
|
||||
componentRequirements: {
|
||||
include: { typeComposant: true },
|
||||
orderBy: { orderIndex: 'asc' },
|
||||
},
|
||||
pieceRequirements: {
|
||||
include: { typePiece: true },
|
||||
orderBy: { orderIndex: 'asc' },
|
||||
},
|
||||
};
|
||||
|
||||
@@ -110,12 +113,13 @@ export class TypeMachineMapper {
|
||||
}
|
||||
|
||||
return {
|
||||
create: requirements.map((requirement) => ({
|
||||
create: requirements.map((requirement, index) => ({
|
||||
label: requirement.label ?? null,
|
||||
minCount: requirement.minCount ?? 1,
|
||||
maxCount: requirement.maxCount ?? null,
|
||||
required: requirement.required ?? true,
|
||||
allowNewModels: requirement.allowNewModels ?? true,
|
||||
orderIndex: requirement.orderIndex ?? index,
|
||||
typeComposant: requirement.typeComposantId
|
||||
? {
|
||||
connect: { id: requirement.typeComposantId },
|
||||
@@ -134,12 +138,13 @@ export class TypeMachineMapper {
|
||||
return [];
|
||||
}
|
||||
|
||||
return requirements.map((requirement) => ({
|
||||
return requirements.map((requirement, index) => ({
|
||||
label: requirement.label ?? null,
|
||||
minCount: requirement.minCount ?? 1,
|
||||
maxCount: requirement.maxCount ?? null,
|
||||
required: requirement.required ?? true,
|
||||
allowNewModels: requirement.allowNewModels ?? true,
|
||||
orderIndex: requirement.orderIndex ?? index,
|
||||
typeComposantId: requirement.typeComposantId!,
|
||||
}));
|
||||
}
|
||||
@@ -154,12 +159,13 @@ export class TypeMachineMapper {
|
||||
}
|
||||
|
||||
return {
|
||||
create: requirements.map((requirement) => ({
|
||||
create: requirements.map((requirement, index) => ({
|
||||
label: requirement.label ?? null,
|
||||
minCount: requirement.minCount ?? 0,
|
||||
maxCount: requirement.maxCount ?? null,
|
||||
required: requirement.required ?? false,
|
||||
allowNewModels: requirement.allowNewModels ?? true,
|
||||
orderIndex: requirement.orderIndex ?? index,
|
||||
typePiece: requirement.typePieceId
|
||||
? {
|
||||
connect: { id: requirement.typePieceId },
|
||||
@@ -178,12 +184,13 @@ export class TypeMachineMapper {
|
||||
return [];
|
||||
}
|
||||
|
||||
return requirements.map((requirement) => ({
|
||||
return requirements.map((requirement, index) => ({
|
||||
label: requirement.label ?? null,
|
||||
minCount: requirement.minCount ?? 0,
|
||||
maxCount: requirement.maxCount ?? null,
|
||||
required: requirement.required ?? false,
|
||||
allowNewModels: requirement.allowNewModels ?? true,
|
||||
orderIndex: requirement.orderIndex ?? index,
|
||||
typePieceId: requirement.typePieceId!,
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -79,6 +79,10 @@ export class TypeMachineComponentRequirementDto {
|
||||
@IsOptional()
|
||||
@IsBoolean()
|
||||
allowNewModels?: boolean;
|
||||
|
||||
@IsOptional()
|
||||
@IsInt()
|
||||
orderIndex?: number;
|
||||
}
|
||||
|
||||
export class TypeMachinePieceRequirementDto {
|
||||
@@ -104,6 +108,10 @@ export class TypeMachinePieceRequirementDto {
|
||||
@IsOptional()
|
||||
@IsBoolean()
|
||||
allowNewModels?: boolean;
|
||||
|
||||
@IsOptional()
|
||||
@IsInt()
|
||||
orderIndex?: number;
|
||||
}
|
||||
|
||||
export class CreateTypeMachineDto {
|
||||
|
||||
Reference in New Issue
Block a user