push
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
FROM node:20-alpine AS build
|
FROM node:20-bookworm-slim AS build
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,26 @@ function appendSearchParam(
|
|||||||
searchParams.append(key, String(value));
|
searchParams.append(key, String(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseListBody(json: unknown): { rows: unknown[]; totalHint?: number } {
|
||||||
|
if (Array.isArray(json)) {
|
||||||
|
return { rows: json };
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
json !== null &&
|
||||||
|
typeof json === "object" &&
|
||||||
|
"data" in json &&
|
||||||
|
Array.isArray((json as { data: unknown }).data)
|
||||||
|
) {
|
||||||
|
const body = json as { data: unknown[]; total?: unknown };
|
||||||
|
const totalHint =
|
||||||
|
typeof body.total === "number" && Number.isFinite(body.total)
|
||||||
|
? body.total
|
||||||
|
: undefined;
|
||||||
|
return { rows: body.data, totalHint };
|
||||||
|
}
|
||||||
|
return { rows: [] };
|
||||||
|
}
|
||||||
|
|
||||||
function buildListUrl(resource: string, params: any): string {
|
function buildListUrl(resource: string, params: any): string {
|
||||||
const resourcePath = resource === "equipment" ? "equipments" : resource;
|
const resourcePath = resource === "equipment" ? "equipments" : resource;
|
||||||
const searchParams = new URLSearchParams();
|
const searchParams = new URLSearchParams();
|
||||||
@@ -83,16 +103,16 @@ export const dataProvider: DataProvider = {
|
|||||||
return { data: [json], total: 1 };
|
return { data: [json], total: 1 };
|
||||||
}
|
}
|
||||||
const { json, headers } = await fetchJson(buildListUrl(resource, params));
|
const { json, headers } = await fetchJson(buildListUrl(resource, params));
|
||||||
|
const { rows, totalHint } = parseListBody(json);
|
||||||
const contentRange = headers.get("Content-Range");
|
const contentRange = headers.get("Content-Range");
|
||||||
const total = contentRange
|
const total = contentRange
|
||||||
? Number(
|
? Number(
|
||||||
contentRange.split("/").pop() ??
|
contentRange.split("/").pop() ??
|
||||||
(Array.isArray(json) ? json.length : 0),
|
totalHint ??
|
||||||
|
rows.length,
|
||||||
)
|
)
|
||||||
: Array.isArray(json)
|
: (totalHint ?? rows.length);
|
||||||
? json.length
|
return { data: rows as any[], total };
|
||||||
: 0;
|
|
||||||
return { data: Array.isArray(json) ? json : [], total };
|
|
||||||
},
|
},
|
||||||
getOne: async (resource, params) => {
|
getOne: async (resource, params) => {
|
||||||
const resourcePath = resource === "equipment" ? "equipments" : resource;
|
const resourcePath = resource === "equipment" ? "equipments" : resource;
|
||||||
|
|||||||
@@ -7,28 +7,35 @@ export const equipmentStatusChoices = [
|
|||||||
export const laborOperationChoices = ["Manual", "MachineManual", "Machine"].map(
|
export const laborOperationChoices = ["Manual", "MachineManual", "Machine"].map(
|
||||||
(value) => ({ id: value, name: value }),
|
(value) => ({ id: value, name: value }),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/** id = Prisma/API wire value; name = human label (matches DB enum @map). */
|
||||||
export const periodicityChoices = [
|
export const periodicityChoices = [
|
||||||
"Ежедневное",
|
{ id: "EZHEDNEVNOE", name: "Ежедневное" },
|
||||||
"Еженедельное",
|
{ id: "EZHENEDELNOE", name: "Еженедельное" },
|
||||||
"Ежемесячное",
|
{ id: "EZHEMESYACHNOE", name: "Ежемесячное" },
|
||||||
"Полугодовое",
|
{ id: "POLUGODOVOE", name: "Полугодовое" },
|
||||||
"Годовое",
|
{ id: "GODOVOE", name: "Годовое" },
|
||||||
].map((value) => ({ id: value, name: value }));
|
];
|
||||||
export const roleChoices = ["Исполнитель", "Подписант", "Пользователь"].map(
|
|
||||||
(value) => ({ id: value, name: value }),
|
export const roleChoices = [
|
||||||
);
|
{ id: "ISPOLNITEL", name: "Исполнитель" },
|
||||||
|
{ id: "PODPISANT", name: "Подписант" },
|
||||||
|
{ id: "POLZOVATEL", name: "Пользователь" },
|
||||||
|
];
|
||||||
|
|
||||||
export const categoryPartChoices = [
|
export const categoryPartChoices = [
|
||||||
"Расходник",
|
{ id: "RASKHODNIK", name: "Расходник" },
|
||||||
"Запчасть",
|
{ id: "ZAPCHAST", name: "Запчасть" },
|
||||||
"Инструмент",
|
{ id: "INSTRUMENT", name: "Инструмент" },
|
||||||
"Спецодежда",
|
{ id: "SPETSODEZHDA", name: "Спецодежда" },
|
||||||
].map((value) => ({ id: value, name: value }));
|
];
|
||||||
|
|
||||||
export const equipmentTypeChoices = [
|
export const equipmentTypeChoices = [
|
||||||
"Производственное",
|
{ id: "PROIZVODSTVENNOE", name: "Производственное" },
|
||||||
"Энергетическое",
|
{ id: "ENERGETICHESKOE", name: "Энергетическое" },
|
||||||
"Насосное",
|
{ id: "NASOSNOE", name: "Насосное" },
|
||||||
"Компрессорное",
|
{ id: "KOMPRESSORNOE", name: "Компрессорное" },
|
||||||
].map((value) => ({ id: value, name: value }));
|
];
|
||||||
|
|
||||||
export const equipmentOptionText = (
|
export const equipmentOptionText = (
|
||||||
record?: Record<string, unknown> | null,
|
record?: Record<string, unknown> | null,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ fi
|
|||||||
export PRISMA_HIDE_UPDATE_MESSAGE=1
|
export PRISMA_HIDE_UPDATE_MESSAGE=1
|
||||||
|
|
||||||
run_migrate() {
|
run_migrate() {
|
||||||
"$PRISMA_BIN" migrate deploy --schema "$SCHEMA" --skip-generate
|
"$PRISMA_BIN" migrate deploy --schema "$SCHEMA"
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Applying database migrations (schema=$SCHEMA)..."
|
echo "Applying database migrations (schema=$SCHEMA)..."
|
||||||
@@ -38,4 +38,4 @@ while [ "$i" -lt 15 ]; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
echo "Starting NestJS..."
|
echo "Starting NestJS..."
|
||||||
exec node dist/main.js
|
exec node dist/src/main.js
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"start": "nest start",
|
"start": "nest start",
|
||||||
"start:dev": "nest start --watch",
|
"start:dev": "nest start --watch",
|
||||||
"start:debug": "nest start --debug --watch",
|
"start:debug": "nest start --debug --watch",
|
||||||
"start:prod": "node dist/main",
|
"start:prod": "node dist/src/main.js",
|
||||||
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"test:watch": "jest --watch",
|
"test:watch": "jest --watch",
|
||||||
|
|||||||
@@ -11,30 +11,31 @@ export enum laborOperation {
|
|||||||
Machine = 'Machine',
|
Machine = 'Machine',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Values must match Prisma `$Enums` (schema variant names), not DB @map labels. */
|
||||||
export enum EnumPeriodicityTO {
|
export enum EnumPeriodicityTO {
|
||||||
EZHEDNEVNOE = 'Ежедневное',
|
EZHEDNEVNOE = 'EZHEDNEVNOE',
|
||||||
EZHENEDELNOE = 'Еженедельное',
|
EZHENEDELNOE = 'EZHENEDELNOE',
|
||||||
EZHEMESYACHNOE = 'Ежемесячное',
|
EZHEMESYACHNOE = 'EZHEMESYACHNOE',
|
||||||
POLUGODOVOE = 'Полугодовое',
|
POLUGODOVOE = 'POLUGODOVOE',
|
||||||
GODOVOE = 'Годовое',
|
GODOVOE = 'GODOVOE',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum Role {
|
export enum Role {
|
||||||
ISPOLNITEL = 'Исполнитель',
|
ISPOLNITEL = 'ISPOLNITEL',
|
||||||
PODPISANT = 'Подписант',
|
PODPISANT = 'PODPISANT',
|
||||||
POLZOVATEL = 'Пользователь',
|
POLZOVATEL = 'POLZOVATEL',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum CategoryPart {
|
export enum CategoryPart {
|
||||||
RASKHODNIK = 'Расходник',
|
RASKHODNIK = 'RASKHODNIK',
|
||||||
ZAPCHAST = 'Запчасть',
|
ZAPCHAST = 'ZAPCHAST',
|
||||||
INSTRUMENT = 'Инструмент',
|
INSTRUMENT = 'INSTRUMENT',
|
||||||
SPETSODEZHDA = 'Спецодежда',
|
SPETSODEZHDA = 'SPETSODEZHDA',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum EquipmentType {
|
export enum EquipmentType {
|
||||||
PROIZVODSTVENNOE = 'Производственное',
|
PROIZVODSTVENNOE = 'PROIZVODSTVENNOE',
|
||||||
ENERGETICHESKOE = 'Энергетическое',
|
ENERGETICHESKOE = 'ENERGETICHESKOE',
|
||||||
NASOSNOE = 'Насосное',
|
NASOSNOE = 'NASOSNOE',
|
||||||
KOMPRESSORNOE = 'Компрессорное',
|
KOMPRESSORNOE = 'KOMPRESSORNOE',
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user