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?
|
maxCount Int?
|
||||||
required Boolean @default(true)
|
required Boolean @default(true)
|
||||||
allowNewModels Boolean @default(true)
|
allowNewModels Boolean @default(true)
|
||||||
|
orderIndex Int @default(0)
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @updatedAt
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
@@ -317,6 +318,7 @@ model TypeMachinePieceRequirement {
|
|||||||
maxCount Int?
|
maxCount Int?
|
||||||
required Boolean @default(false)
|
required Boolean @default(false)
|
||||||
allowNewModels Boolean @default(true)
|
allowNewModels Boolean @default(true)
|
||||||
|
orderIndex Int @default(0)
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @updatedAt
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ describe('TypeMachineMapper', () => {
|
|||||||
maxCount: 4,
|
maxCount: 4,
|
||||||
required: true,
|
required: true,
|
||||||
allowNewModels: false,
|
allowNewModels: false,
|
||||||
|
orderIndex: 0,
|
||||||
});
|
});
|
||||||
expect(input.pieceRequirements?.create?.[0]).toMatchObject({
|
expect(input.pieceRequirements?.create?.[0]).toMatchObject({
|
||||||
label: 'Piece',
|
label: 'Piece',
|
||||||
@@ -46,6 +47,7 @@ describe('TypeMachineMapper', () => {
|
|||||||
maxCount: 2,
|
maxCount: 2,
|
||||||
required: false,
|
required: false,
|
||||||
allowNewModels: true,
|
allowNewModels: true,
|
||||||
|
orderIndex: 0,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -75,11 +77,13 @@ describe('TypeMachineMapper', () => {
|
|||||||
typeComposantId: 'comp-id',
|
typeComposantId: 'comp-id',
|
||||||
minCount: 2,
|
minCount: 2,
|
||||||
maxCount: 4,
|
maxCount: 4,
|
||||||
|
orderIndex: 0,
|
||||||
});
|
});
|
||||||
expect(piece[0]).toMatchObject({
|
expect(piece[0]).toMatchObject({
|
||||||
typePieceId: 'piece-id',
|
typePieceId: 'piece-id',
|
||||||
minCount: 0,
|
minCount: 0,
|
||||||
maxCount: 2,
|
maxCount: 2,
|
||||||
|
orderIndex: 0,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -13,15 +13,18 @@ type RequirementDto = {
|
|||||||
allowNewModels?: boolean | null;
|
allowNewModels?: boolean | null;
|
||||||
typeComposantId?: string;
|
typeComposantId?: string;
|
||||||
typePieceId?: string;
|
typePieceId?: string;
|
||||||
|
orderIndex?: number | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TYPE_MACHINE_DEFAULT_INCLUDE: Prisma.TypeMachineInclude = {
|
export const TYPE_MACHINE_DEFAULT_INCLUDE: Prisma.TypeMachineInclude = {
|
||||||
customFields: { select: CUSTOM_FIELD_SELECT },
|
customFields: { select: CUSTOM_FIELD_SELECT },
|
||||||
componentRequirements: {
|
componentRequirements: {
|
||||||
include: { typeComposant: true },
|
include: { typeComposant: true },
|
||||||
|
orderBy: { orderIndex: 'asc' },
|
||||||
},
|
},
|
||||||
pieceRequirements: {
|
pieceRequirements: {
|
||||||
include: { typePiece: true },
|
include: { typePiece: true },
|
||||||
|
orderBy: { orderIndex: 'asc' },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -110,12 +113,13 @@ export class TypeMachineMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
create: requirements.map((requirement) => ({
|
create: requirements.map((requirement, index) => ({
|
||||||
label: requirement.label ?? null,
|
label: requirement.label ?? null,
|
||||||
minCount: requirement.minCount ?? 1,
|
minCount: requirement.minCount ?? 1,
|
||||||
maxCount: requirement.maxCount ?? null,
|
maxCount: requirement.maxCount ?? null,
|
||||||
required: requirement.required ?? true,
|
required: requirement.required ?? true,
|
||||||
allowNewModels: requirement.allowNewModels ?? true,
|
allowNewModels: requirement.allowNewModels ?? true,
|
||||||
|
orderIndex: requirement.orderIndex ?? index,
|
||||||
typeComposant: requirement.typeComposantId
|
typeComposant: requirement.typeComposantId
|
||||||
? {
|
? {
|
||||||
connect: { id: requirement.typeComposantId },
|
connect: { id: requirement.typeComposantId },
|
||||||
@@ -134,12 +138,13 @@ export class TypeMachineMapper {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return requirements.map((requirement) => ({
|
return requirements.map((requirement, index) => ({
|
||||||
label: requirement.label ?? null,
|
label: requirement.label ?? null,
|
||||||
minCount: requirement.minCount ?? 1,
|
minCount: requirement.minCount ?? 1,
|
||||||
maxCount: requirement.maxCount ?? null,
|
maxCount: requirement.maxCount ?? null,
|
||||||
required: requirement.required ?? true,
|
required: requirement.required ?? true,
|
||||||
allowNewModels: requirement.allowNewModels ?? true,
|
allowNewModels: requirement.allowNewModels ?? true,
|
||||||
|
orderIndex: requirement.orderIndex ?? index,
|
||||||
typeComposantId: requirement.typeComposantId!,
|
typeComposantId: requirement.typeComposantId!,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@@ -154,12 +159,13 @@ export class TypeMachineMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
create: requirements.map((requirement) => ({
|
create: requirements.map((requirement, index) => ({
|
||||||
label: requirement.label ?? null,
|
label: requirement.label ?? null,
|
||||||
minCount: requirement.minCount ?? 0,
|
minCount: requirement.minCount ?? 0,
|
||||||
maxCount: requirement.maxCount ?? null,
|
maxCount: requirement.maxCount ?? null,
|
||||||
required: requirement.required ?? false,
|
required: requirement.required ?? false,
|
||||||
allowNewModels: requirement.allowNewModels ?? true,
|
allowNewModels: requirement.allowNewModels ?? true,
|
||||||
|
orderIndex: requirement.orderIndex ?? index,
|
||||||
typePiece: requirement.typePieceId
|
typePiece: requirement.typePieceId
|
||||||
? {
|
? {
|
||||||
connect: { id: requirement.typePieceId },
|
connect: { id: requirement.typePieceId },
|
||||||
@@ -178,12 +184,13 @@ export class TypeMachineMapper {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return requirements.map((requirement) => ({
|
return requirements.map((requirement, index) => ({
|
||||||
label: requirement.label ?? null,
|
label: requirement.label ?? null,
|
||||||
minCount: requirement.minCount ?? 0,
|
minCount: requirement.minCount ?? 0,
|
||||||
maxCount: requirement.maxCount ?? null,
|
maxCount: requirement.maxCount ?? null,
|
||||||
required: requirement.required ?? false,
|
required: requirement.required ?? false,
|
||||||
allowNewModels: requirement.allowNewModels ?? true,
|
allowNewModels: requirement.allowNewModels ?? true,
|
||||||
|
orderIndex: requirement.orderIndex ?? index,
|
||||||
typePieceId: requirement.typePieceId!,
|
typePieceId: requirement.typePieceId!,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,10 @@ export class TypeMachineComponentRequirementDto {
|
|||||||
@IsOptional()
|
@IsOptional()
|
||||||
@IsBoolean()
|
@IsBoolean()
|
||||||
allowNewModels?: boolean;
|
allowNewModels?: boolean;
|
||||||
|
|
||||||
|
@IsOptional()
|
||||||
|
@IsInt()
|
||||||
|
orderIndex?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TypeMachinePieceRequirementDto {
|
export class TypeMachinePieceRequirementDto {
|
||||||
@@ -104,6 +108,10 @@ export class TypeMachinePieceRequirementDto {
|
|||||||
@IsOptional()
|
@IsOptional()
|
||||||
@IsBoolean()
|
@IsBoolean()
|
||||||
allowNewModels?: boolean;
|
allowNewModels?: boolean;
|
||||||
|
|
||||||
|
@IsOptional()
|
||||||
|
@IsInt()
|
||||||
|
orderIndex?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class CreateTypeMachineDto {
|
export class CreateTypeMachineDto {
|
||||||
|
|||||||
Reference in New Issue
Block a user