feat: employment office (#5)

* feat: add table employment office

* feat: add tag

* feat: add employment office

* chore: migrations

* feat: order employment office

* feat: delete old employment office when special got added
This commit is contained in:
Methapon Metanipat 2024-11-14 15:10:58 +07:00 committed by GitHub
parent 22b3981aa7
commit 401d376a63
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 171 additions and 1 deletions

View file

@ -141,4 +141,94 @@ export async function initThailandAreaDatabase() {
}),
);
});
console.log("[INFO]: Sync thailand province, district and subdistrict, OK.");
}
export async function initEmploymentOffice() {
const name = (provinceName: string) => `สำนักงานจัดหางานจังหวัด${provinceName}`;
const nameEN = (provinceNameEN: string) => `${provinceNameEN} Employment Office`;
const nameSpecial = (provinceName: string, areaNo: number) =>
`สำนักงานจัดหางาน${provinceName} พื้นที่ ${areaNo}`;
const nameSpecialEN = (provinceNameEN: string, areaNo: number) =>
`${provinceNameEN} Employment Office Area ${areaNo}`;
const special: Record<string, { [key: string]: string[] }> = {
"10": {
"1": ["1004", "1007", "1012", "1028", "1031"],
"2": ["1021", "1024", "1035", "1049", "1050"],
"3": ["1009", "1032", "1033", "1034", "1039", "1047"],
"4": ["1006", "1038", "1043", "1027", "1045"],
"5": ["1003", "1010", "1011", "1042", "1044", "1046"],
"6": ["1015", "1016", "1018", "1020", "1025"],
"7": ["1019", "1022", "1023", "1040", "1048"],
"8": ["1001", "1002", "1008", "1013"],
"9": ["1005", "1029", "1030", "1041"],
"10": ["1014", "1017", "1026", "1036", "1037"],
},
};
const list = await prisma.province.findMany();
await prisma.$transaction(async (tx) => {
await Promise.all(
list
.map(async (province) => {
if (special[province.id]) {
await tx.employmentOffice.deleteMany({
where: { provinceId: province.id, district: { none: {} } },
});
return Object.entries(special[province.id]).map(([key, val]) => {
const id = province.id + "-" + key.padStart(2, "0");
return tx.employmentOffice.upsert({
where: { id },
create: {
id,
name: nameSpecial(province.name, +key),
nameEN: nameSpecialEN(province.nameEN, +key),
provinceId: province.id,
district: {
createMany: {
data: val.map((districtId) => ({ districtId })),
skipDuplicates: true,
},
},
},
update: {
id,
name: nameSpecial(province.name, +key),
nameEN: nameSpecialEN(province.nameEN, +key),
provinceId: province.id,
district: {
deleteMany: { districtId: { notIn: val } },
createMany: {
data: val.map((districtId) => ({ districtId })),
skipDuplicates: true,
},
},
},
});
});
}
return tx.employmentOffice.upsert({
where: { id: province.id },
create: {
id: province.id,
name: name(province.name),
nameEN: nameEN(province.nameEN),
provinceId: province.id,
},
update: {
name: name(province.name),
nameEN: nameEN(province.nameEN),
provinceId: province.id,
},
});
})
.flat(),
);
});
console.log("[INFO]: Sync employment office, OK.");
}