fix: timeout in some case
All checks were successful
Spell Check / Spell Check with Typos (push) Successful in 4s

This commit is contained in:
Methapon2001 2025-09-16 11:52:13 +07:00
parent 0772e4710a
commit 158a6ff163

View file

@ -62,85 +62,90 @@ export async function initThailandAreaDatabase() {
return result; return result;
} }
await prisma.$transaction(async (tx) => { await prisma.$transaction(
const meta = { async (tx) => {
createdBy: null, const meta = {
createdAt: new Date(), createdBy: null,
updatedBy: null, createdAt: new Date(),
updatedAt: new Date(), updatedBy: null,
}; updatedAt: new Date(),
};
await Promise.all( await Promise.all(
splitChunk(province, 1000, async (r) => { splitChunk(province, 1000, async (r) => {
return await tx.$kysely return await tx.$kysely
.insertInto("Province") .insertInto("Province")
.columns(["id", "name", "nameEN", "createdBy", "createdAt", "updatedBy", "updatedAt"]) .columns(["id", "name", "nameEN", "createdBy", "createdAt", "updatedBy", "updatedAt"])
.values(r.map((v) => ({ ...v, ...meta }))) .values(r.map((v) => ({ ...v, ...meta })))
.onConflict((oc) => .onConflict((oc) =>
oc.column("id").doUpdateSet({ oc.column("id").doUpdateSet({
name: (eb) => eb.ref("excluded.name"), name: (eb) => eb.ref("excluded.name"),
nameEN: (eb) => eb.ref("excluded.nameEN"), nameEN: (eb) => eb.ref("excluded.nameEN"),
updatedAt: (eb) => eb.ref("excluded.updatedAt"), updatedAt: (eb) => eb.ref("excluded.updatedAt"),
}), }),
) )
.execute(); .execute();
}), }),
); );
await Promise.all( await Promise.all(
splitChunk(district, 2000, async (r) => { splitChunk(district, 2000, async (r) => {
return await tx.$kysely return await tx.$kysely
.insertInto("District") .insertInto("District")
.columns([ .columns([
"id", "id",
"name", "name",
"nameEN", "nameEN",
"provinceId", "provinceId",
"createdBy", "createdBy",
"createdAt", "createdAt",
"updatedBy", "updatedBy",
"updatedAt", "updatedAt",
]) ])
.values(r.map((v) => ({ ...v, ...meta }))) .values(r.map((v) => ({ ...v, ...meta })))
.onConflict((oc) => .onConflict((oc) =>
oc.column("id").doUpdateSet({ oc.column("id").doUpdateSet({
name: (eb) => eb.ref("excluded.name"), name: (eb) => eb.ref("excluded.name"),
nameEN: (eb) => eb.ref("excluded.nameEN"), nameEN: (eb) => eb.ref("excluded.nameEN"),
provinceId: (eb) => eb.ref("excluded.provinceId"), provinceId: (eb) => eb.ref("excluded.provinceId"),
updatedAt: (eb) => eb.ref("excluded.updatedAt"), updatedAt: (eb) => eb.ref("excluded.updatedAt"),
}), }),
) )
.execute(); .execute();
}), }),
); );
await Promise.all( await Promise.all(
splitChunk(subDistrict, 1000, async (r) => { splitChunk(subDistrict, 1000, async (r) => {
return await tx.$kysely return await tx.$kysely
.insertInto("SubDistrict") .insertInto("SubDistrict")
.columns([ .columns([
"id", "id",
"name", "name",
"nameEN", "nameEN",
"districtId", "districtId",
"createdBy", "createdBy",
"createdAt", "createdAt",
"updatedBy", "updatedBy",
"updatedAt", "updatedAt",
]) ])
.values(r.map((v) => ({ ...v, ...meta }))) .values(r.map((v) => ({ ...v, ...meta })))
.onConflict((oc) => .onConflict((oc) =>
oc.column("id").doUpdateSet({ oc.column("id").doUpdateSet({
name: (eb) => eb.ref("excluded.name"), name: (eb) => eb.ref("excluded.name"),
nameEN: (eb) => eb.ref("excluded.nameEN"), nameEN: (eb) => eb.ref("excluded.nameEN"),
districtId: (eb) => eb.ref("excluded.districtId"), districtId: (eb) => eb.ref("excluded.districtId"),
updatedAt: (eb) => eb.ref("excluded.updatedAt"), updatedAt: (eb) => eb.ref("excluded.updatedAt"),
}), }),
) )
.execute(); .execute();
}), }),
); );
}); },
{
timeout: 15_000,
},
);
console.log("[INFO]: Sync thailand province, district and subdistrict, OK."); console.log("[INFO]: Sync thailand province, district and subdistrict, OK.");
} }
@ -170,67 +175,72 @@ export async function initEmploymentOffice() {
const list = await prisma.province.findMany(); const list = await prisma.province.findMany();
await prisma.$transaction(async (tx) => { await prisma.$transaction(
await Promise.all( async (tx) => {
list await Promise.all(
.map(async (province) => { list
if (special[province.id]) { .map(async (province) => {
await tx.employmentOffice.deleteMany({ if (special[province.id]) {
where: { provinceId: province.id, district: { none: {} } }, await tx.employmentOffice.deleteMany({
}); where: { provinceId: province.id, district: { none: {} } },
return await Promise.all( });
Object.entries(special[province.id]).map(async ([key, val]) => { return await Promise.all(
const id = province.id + "-" + key.padStart(2, "0"); Object.entries(special[province.id]).map(async ([key, val]) => {
return tx.employmentOffice.upsert({ const id = province.id + "-" + key.padStart(2, "0");
where: { id }, return tx.employmentOffice.upsert({
create: { where: { id },
id, create: {
name: nameSpecial(province.name, +key), id,
nameEN: nameSpecialEN(province.nameEN, +key), name: nameSpecial(province.name, +key),
provinceId: province.id, nameEN: nameSpecialEN(province.nameEN, +key),
district: { provinceId: province.id,
createMany: { district: {
data: val.map((districtId) => ({ districtId })), createMany: {
skipDuplicates: true, data: val.map((districtId) => ({ districtId })),
skipDuplicates: true,
},
}, },
}, },
}, update: {
update: { id,
id, name: nameSpecial(province.name, +key),
name: nameSpecial(province.name, +key), nameEN: nameSpecialEN(province.nameEN, +key),
nameEN: nameSpecialEN(province.nameEN, +key), provinceId: province.id,
provinceId: province.id, district: {
district: { deleteMany: { districtId: { notIn: val } },
deleteMany: { districtId: { notIn: val } }, createMany: {
createMany: { data: val.map((districtId) => ({ districtId })),
data: val.map((districtId) => ({ districtId })), skipDuplicates: true,
skipDuplicates: true, },
}, },
}, },
}, });
}); }),
}), );
); }
}
return tx.employmentOffice.upsert({ return tx.employmentOffice.upsert({
where: { id: province.id }, where: { id: province.id },
create: { create: {
id: province.id, id: province.id,
name: name(province.name), name: name(province.name),
nameEN: nameEN(province.nameEN), nameEN: nameEN(province.nameEN),
provinceId: province.id, provinceId: province.id,
}, },
update: { update: {
name: name(province.name), name: name(province.name),
nameEN: nameEN(province.nameEN), nameEN: nameEN(province.nameEN),
provinceId: province.id, provinceId: province.id,
}, },
}); });
}) })
.flat(), .flat(),
); );
}); },
{
timeout: 15_000,
},
);
console.log("[INFO]: Sync employment office, OK."); console.log("[INFO]: Sync employment office, OK.");
} }