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:
parent
22b3981aa7
commit
401d376a63
6 changed files with 171 additions and 1 deletions
|
|
@ -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.");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue