diff --git a/prisma/seed.ts b/prisma/seed.ts index b55d1ae..fe5a0db 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,7 +1,11 @@ -import { seederAdmin, seederAdminRole, seederDesa, seederGroup, seederPosition, seederTheme, seederUser, seederUserRole } from '@/module/seeder'; +import { seederAdmin, seederAdminRole, seederDesa, seederDiscussion, seederDiscussionMember, seederGroup, seederPosition, seederProject, seederProjectMember, seederProjectTask, seederTheme, seederUser, seederUserRole } from '@/module/seeder'; import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient() +// DATA YG DI SEEDER MERUPAKAN DATA REAL(DARMASABA) & DATA DUMMY (MANDALA) +// DATA JSON GABUNGAN (REAL & DUMMY) ADALAH adminRole, admin, theme, desa, group, position, user, userRole, user +// Selain table yg disebutkan merupakan data dummy + async function main() { // ADMIN ROLE for (let data of seederAdminRole) { @@ -176,6 +180,123 @@ async function main() { }) } + + // DISCUSSION + for (let data of seederDiscussion) { + await prisma.discussion.upsert({ + where: { + id: data.id + }, + update: { + idVillage: data.idVillage, + idGroup: data.idGroup, + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy + }, + create: { + id: data.id, + idVillage: data.idVillage, + idGroup: data.idGroup, + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy + }, + }) + } + + + // DISSCUSSION MEMBER + for (let data of seederDiscussionMember) { + await prisma.discussionMember.upsert({ + where: { + id: data.id + }, + update: { + idDiscussion: data.idDiscussion, + idUser: data.idUser + }, + create: { + id: data.id, + idDiscussion: data.idDiscussion, + idUser: data.idUser + }, + }) + } + + // PROJECT + for (let data of seederProject) { + await prisma.project.upsert({ + where: { + id: data.id + }, + update: { + idVillage: data.idVillage, + idGroup: data.idGroup, + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy + }, + create: { + id: data.id, + idVillage: data.idVillage, + idGroup: data.idGroup, + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy + }, + }) + } + + // PROJECT MEMBER + for (let data of seederProjectMember) { + await prisma.projectMember.upsert({ + where: { + id: data.id + }, + update: { + idProject: data.idProject, + idUser: data.idUser, + isLeader: data.isLeader + }, + create: { + id: data.id, + idProject: data.idProject, + idUser: data.idUser, + isLeader: data.isLeader + }, + }) + } + + // PROJECT TASK + for (let data of seederProjectTask) { + await prisma.projectTask.upsert({ + where: { + id: data.id + }, + update: { + idProject: data.idProject, + title: data.title, + desc: data.desc, + status: data.status, + dateStart: new Date(data.dateStart), + dateEnd: new Date(data.dateEnd) + }, + create: { + id: data.id, + idProject: data.idProject, + title: data.title, + desc: data.desc, + status: data.status, + dateStart: new Date(data.dateStart), + dateEnd: new Date(data.dateEnd) + }, + }) + } } main().then(async () => { diff --git a/src/module/seeder/complete_village_seeder.ts b/src/module/seeder/complete_village_seeder.ts new file mode 100644 index 0000000..9335e5f --- /dev/null +++ b/src/module/seeder/complete_village_seeder.ts @@ -0,0 +1,922 @@ +import { prisma } from "@/module/_global"; +import { + seederAdmin, + seederAdminRole, + seederDesa, + seederGroup, + seederPosition, + seederTheme, + seederUser, + seederUserRole +} from '@/module/seeder'; + +async function seedCompleteVillageData() { + console.log("Starting complete village data seeding process..."); + + // Define comprehensive dummy data variables outside transaction scope + // GROUP - Comprehensive dummy data + const seederGroupComprehensive = [ + { + "id": "group_rt01", + "idVillage": "desaDummy", + "name": "Dinas" + }, + { + "id": "group_rt02", + "idVillage": "desaDummy", + "name": "Adat" + }, + { + "id": "group_karang_taruna", + "idVillage": "desaDummy", + "name": "Karang Taruna" + }, + { + "id": "group_bumdes", + "idVillage": "desaDummy", + "name": "PKK" + } + ]; + + // POSITION - Comprehensive dummy data + const seederPositionComprehensive = [ + { + "id": "pos_ketua_rt01", + "idGroup": "group_rt01", + "name": "Perbekel" + }, + { + "id": "pos_sekretaris_rt01", + "idGroup": "group_rt01", + "name": "Sekretaris" + }, + { + "id": "pos_bendahara_rt01", + "idGroup": "group_rt01", + "name": "Bendahara" + }, + { + "id": "pos_staff_rt01", + "idGroup": "group_rt01", + "name": "Staff" + }, + { + "id": "pos_staff_rt02", + "idGroup": "group_rt02", + "name": "Staff" + }, + { + "id": "pos_ketua_karang_taruna", + "idGroup": "group_karang_taruna", + "name": "Ketua Karang Taruna" + }, + { + "id": "pos_ketua_bumdes", + "idGroup": "group_bumdes", + "name": "Ketua PKK" + } + ]; + + // USER - Comprehensive dummy data + const seederUserComprehensive = [ + { + "id": "user_kades", + "idUserRole": "supadmin", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "idPosition": "pos_ketua_rt01", + "nik": "3201010101010001", + "name": "Kepala Desa", + "phone": "081234567890", + "email": "kades@desamandiri.test", + "gender": "M" + }, + { + "id": "user_sekdes", + "idUserRole": "admin", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "idPosition": "pos_sekretaris_rt01", + "nik": "3201010101010002", + "name": "Sekretaris Desa", + "phone": "081234567891", + "email": "sekdes@desamandiri.test", + "gender": "M" + }, + { + "id": "user_ketua_bumdes", + "idUserRole": "admin", + "idVillage": "desaDummy", + "idGroup": "group_bumdes", + "idPosition": "pos_ketua_bumdes", + "nik": "3201010101010003", + "name": "Ketua BUMDES", + "phone": "081234567892", + "email": "ketuabumdes@desamandiri.test", + "gender": "M" + }, + { + "id": "user_ketua_karang_taruna", + "idUserRole": "user", + "idVillage": "desaDummy", + "idGroup": "group_karang_taruna", + "idPosition": "pos_ketua_karang_taruna", + "nik": "3201010101010004", + "name": "Ketua Karang Taruna", + "phone": "081234567893", + "email": "ketuakt@desamandiri.test", + "gender": "M" + }, + { + "id": "user_warga1", + "idUserRole": "user", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "idPosition": "pos_staff_rt01", + "nik": "3201010101010005", + "name": "Warga Satu", + "phone": "081234567894", + "email": "wargasatu@desamandiri.test", + "gender": "F" + }, + { + "id": "user_warga2", + "idUserRole": "user", + "idVillage": "desaDummy", + "idGroup": "group_rt02", + "idPosition": "pos_staff_rt02", + "nik": "3201010101010006", + "name": "Warga Dua", + "phone": "081234567895", + "email": "wargadua@desamandiri.test", + "gender": "M" + } + ]; + + // ANNOUNCEMENTS - Comprehensive dummy data + const seederAnnouncementComprehensive = [ + { + "id": "ann_pembangunan_jalan", + "idVillage": "desaDummy", + "title": "Pembangunan Jalan Desa Tahap 2", + "desc": "Pada bulan ini akan dilakukan pembangunan jalan desa tahap 2 yang mencakup wilayah RT 01 dan RT 02. Mohon kerjasama warga untuk menyesuaikan aktivitas selama masa pembangunan.", + "createdBy": "user_kades" + }, + { + "id": "ann_posyandu", + "idVillage": "desaDummy", + "title": "Posyandu Bulanan", + "desc": "Posyandu bulan akan diselenggarakan pada tanggal 21 setiap bulannya di Balai Desa. Warga diharapkan aktif membawa balita untuk pemeriksaan kesehatan.", + "createdBy": "user_sekdes" + }, + { + "id": "ann_rapat_warga", + "idVillage": "desaDummy", + "title": "Rapat Warga Bulanan", + "desc": "Rapat warga bulanan akan diselenggarakan pada hari Sabtu, 25 Februari 2026 pukul 09.00 WIB di Balai Desa. Hadirilah tepat waktu.", + "createdBy": "user_kades" + } + ]; + + // ANNOUNCEMENT MEMBERS - Comprehensive dummy data + const seederAnnouncementMemberComprehensive = [ + { + "id": "ann_mem_pembangunan_jalan_rt01", + "idAnnouncement": "ann_pembangunan_jalan", + "idGroup": "group_rt01", + "idDivision": null + }, + { + "id": "ann_mem_pembangunan_jalan_rt02", + "idAnnouncement": "ann_pembangunan_jalan", + "idGroup": "group_rt02", + "idDivision": null + }, + { + "id": "ann_mem_posyandu_all", + "idAnnouncement": "ann_posyandu", + "idGroup": null, + "idDivision": null + }, + { + "id": "ann_mem_rapat_warga_all", + "idAnnouncement": "ann_rapat_warga", + "idGroup": null, + "idDivision": null + } + ]; + + // DIVISIONS - Comprehensive dummy data + const seederDivisionComprehensive = [ + { + "id": "div_bumdes", + "idVillage": "desaDummy", + "idGroup": "group_bumdes", + "name": "BUMDES Desa Mandiri", + "desc": "Badan Usaha Milik Desa yang bertujuan untuk meningkatkan kesejahteraan masyarakat desa melalui berbagai usaha produktif.", + "createdBy": "user_ketua_bumdes" + }, + { + "id": "div_karang_taruna", + "idVillage": "desaDummy", + "idGroup": "group_karang_taruna", + "name": "Karang Taruna Desa Mandiri", + "desc": "Organisasi pemuda desa yang berfokus pada pengembangan potensi pemuda dan kegiatan sosial kemasyarakatan.", + "createdBy": "user_ketua_karang_taruna" + }, + { + "id": "div_linmas", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "name": "Linmas Desa Mandiri", + "desc": "Perlindungan Masyarakat yang bertugas menjaga ketertiban dan keamanan di wilayah desa.", + "createdBy": "user_kades" + } + ]; + + // DIVISION MEMBERS - Comprehensive dummy data + const seederDivisionMemberComprehensive = [ + { + "id": "div_mem_bumdes_ketua", + "idDivision": "div_bumdes", + "idUser": "user_ketua_bumdes", + "isAdmin": true, + "isLeader": true + }, + { + "id": "div_mem_bumdes_anggota1", + "idDivision": "div_bumdes", + "idUser": "user_warga1", + "isAdmin": false, + "isLeader": false + }, + { + "id": "div_mem_karang_taruna_ketua", + "idDivision": "div_karang_taruna", + "idUser": "user_ketua_karang_taruna", + "isAdmin": true, + "isLeader": true + }, + { + "id": "div_mem_karang_taruna_anggota1", + "idDivision": "div_karang_taruna", + "idUser": "user_warga2", + "isAdmin": false, + "isLeader": false + }, + { + "id": "div_mem_linmas_kades", + "idDivision": "div_linmas", + "idUser": "user_kades", + "isAdmin": true, + "isLeader": true + } + ]; + + // PROJECTS - Comprehensive dummy data + const seederProjectComprehensive = [ + { + "id": "proj_pembangunan_jalan", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "title": "Pembangunan Jalan Desa Tahap 2", + "desc": "Pembangunan jalan desa tahap 2 yang mencakup wilayah RT 01 dan RT 02", + "status": 1, + "createdBy": "user_kades" + }, + { + "id": "proj_penghijauan", + "idVillage": "desaDummy", + "idGroup": "group_karang_taruna", + "title": "Program Penghijauan Desa", + "desc": "Penanaman pohon di sepanjang jalan desa dan area publik", + "status": 0, + "createdBy": "user_ketua_karang_taruna" + }, + { + "id": "proj_pembukuan_bumdes", + "idVillage": "desaDummy", + "idGroup": "group_bumdes", + "title": "Sistem Pembukuan Digital BUMDES", + "desc": "Pembuatan sistem pembukuan digital untuk BUMDES Desa Mandiri", + "status": 0, + "createdBy": "user_ketua_bumdes" + } + ]; + + // PROJECT MEMBERS - Comprehensive dummy data + const seederProjectMemberComprehensive = [ + { + "id": "proj_mem_pembangunan_jalan_kades", + "idProject": "proj_pembangunan_jalan", + "idUser": "user_kades", + "isLeader": true + }, + { + "id": "proj_mem_pembangunan_jalan_sekdes", + "idProject": "proj_pembangunan_jalan", + "idUser": "user_sekdes", + "isLeader": false + }, + { + "id": "proj_mem_penghijauan_ketua_kt", + "idProject": "proj_penghijauan", + "idUser": "user_ketua_karang_taruna", + "isLeader": true + }, + { + "id": "proj_mem_penghijauan_warga1", + "idProject": "proj_penghijauan", + "idUser": "user_warga1", + "isLeader": false + }, + { + "id": "proj_mem_pembukuan_bumdes_ketua", + "idProject": "proj_pembukuan_bumdes", + "idUser": "user_ketua_bumdes", + "isLeader": true + } + ]; + + // PROJECT TASKS - Comprehensive dummy data + const seederProjectTaskComprehensive = [ + { + "id": "task_survey_lokasi", + "idProject": "proj_pembangunan_jalan", + "title": "Survey Lokasi", + "desc": "Melakukan survey lokasi untuk menentukan titik pembangunan jalan", + "status": 1, + "dateStart": "2026-01-15T00:00:00.000Z", + "dateEnd": "2026-01-20T00:00:00.000Z" + }, + { + "id": "task_pengadaan_material", + "idProject": "proj_pembangunan_jalan", + "title": "Pengadaan Material", + "desc": "Mengadakan material pembangunan seperti pasir, batu, dan semen", + "status": 0, + "dateStart": "2026-02-01T00:00:00.000Z", + "dateEnd": "2026-02-10T00:00:00.000Z" + }, + { + "id": "task_pelaksanaan_pembangunan", + "idProject": "proj_pembangunan_jalan", + "title": "Pelaksanaan Pembangunan", + "desc": "Melaksanakan pembangunan jalan sesuai dengan desain yang telah ditentukan", + "status": 0, + "dateStart": "2026-02-15T00:00:00.000Z", + "dateEnd": "2026-03-15T00:00:00.000Z" + }, + { + "id": "task_penanaman_pohon", + "idProject": "proj_penghijauan", + "title": "Penanaman Pohon", + "desc": "Menanam pohon di sepanjang jalan desa dan area publik", + "status": 0, + "dateStart": "2026-03-01T00:00:00.000Z", + "dateEnd": "2026-03-15T00:00:00.000Z" + } + ]; + + // DISCUSSIONS - Comprehensive dummy data + const seederDiscussionComprehensive = [ + { + "id": "disc_kegiatan_desa", + "idVillage": "desaDummy", + "idGroup": null, + "title": "Pembahasan Kegiatan Desa Mendatang", + "desc": "Diskusi untuk merencanakan kegiatan desa yang akan datang dan menyerap aspirasi warga", + "status": 1, + "createdBy": "user_kades" + }, + { + "id": "disc_pengelolaan_sampah", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "title": "Pengelolaan Sampah di RT 01", + "desc": "Diskusi internal RT 01 mengenai pengelolaan sampah rumah tangga dan lingkungan", + "status": 1, + "createdBy": "user_kades" + }, + { + "id": "disc_program_karang_taruna", + "idVillage": "desaDummy", + "idGroup": "group_karang_taruna", + "title": "Program Kerja Karang Taruna", + "desc": "Merancang program kerja Karang Taruna untuk tahun ini", + "status": 1, + "createdBy": "user_ketua_karang_taruna" + } + ]; + + // DISCUSSION MEMBERS - Comprehensive dummy data + const seederDiscussionMemberComprehensive = [ + { + "id": "disc_mem_kegiatan_desa_kades", + "idDiscussion": "disc_kegiatan_desa", + "idUser": "user_kades" + }, + { + "id": "disc_mem_kegiatan_desa_sekdes", + "idDiscussion": "disc_kegiatan_desa", + "idUser": "user_sekdes" + }, + { + "id": "disc_mem_kegiatan_desa_warga1", + "idDiscussion": "disc_kegiatan_desa", + "idUser": "user_warga1" + }, + { + "id": "disc_mem_pengelolaan_sampah_kades", + "idDiscussion": "disc_pengelolaan_sampah", + "idUser": "user_kades" + }, + { + "id": "disc_mem_pengelolaan_sampah_warga1", + "idDiscussion": "disc_pengelolaan_sampah", + "idUser": "user_warga1" + }, + { + "id": "disc_mem_program_kt_ketua", + "idDiscussion": "disc_program_karang_taruna", + "idUser": "user_ketua_karang_taruna" + }, + { + "id": "disc_mem_program_kt_warga2", + "idDiscussion": "disc_program_karang_taruna", + "idUser": "user_warga2" + } + ]; + + try { + // Start transaction to ensure data consistency + await prisma.$transaction(async (tx) => { + + // ADMIN ROLE + for (let data of seederAdminRole) { + await tx.adminRole.upsert({ + where: { + id: data.id + }, + update: { + name: data.name + }, + create: { + id: data.id, + name: data.name, + }, + }) + } + + // ADMIN + for (let data of seederAdmin) { + await tx.admin.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + idAdminRole: data.idAdminRole, + phone: data.phone, + email: data.email, + gender: data.gender + }, + create: { + id: data.id, + idAdminRole: data.idAdminRole, + phone: data.phone, + email: data.email, + gender: data.gender, + name: data.name + }, + }) + } + + // THEME + for (let data of seederTheme) { + await tx.colorTheme.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + utama: data.utama, + bgUtama: data.bgUtama, + bgIcon: data.bgIcon, + bgFiturHome: data.bgFiturHome, + bgFiturDivision: data.bgFiturDivisi, + bgTotalKegiatan: data.bgTotalKegiatan + }, + create: { + id: data.id, + name: data.name, + utama: data.utama, + bgUtama: data.bgUtama, + bgIcon: data.bgIcon, + bgFiturHome: data.bgFiturHome, + bgFiturDivision: data.bgFiturDivisi, + bgTotalKegiatan: data.bgTotalKegiatan + } + }) + } + + // DESA - Original data + for (let data of seederDesa) { + await tx.village.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + desc: data.desc, + idTheme: "theme1" + }, + create: { + id: data.id, + name: data.name, + desc: data.desc, + idTheme: "theme1" + } + }) + } + + // GROUP - Original data + for (let data of seederGroup) { + await tx.group.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + idVillage: data.idVillage + }, + create: { + id: data.id, + name: data.name, + idVillage: data.idVillage + } + }) + } + + for (let data of seederGroupComprehensive) { + await tx.group.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + idVillage: data.idVillage + }, + create: { + id: data.id, + name: data.name, + idVillage: data.idVillage + } + }) + } + + // POSITION - Original data + for (let data of seederPosition) { + await tx.position.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + idGroup: data.idGroup + }, + create: { + id: data.id, + name: data.name, + idGroup: data.idGroup + } + }) + } + + for (let data of seederPositionComprehensive) { + await tx.position.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + idGroup: data.idGroup + }, + create: { + id: data.id, + name: data.name, + idGroup: data.idGroup + } + }) + } + + // USER ROLE + for (let data of seederUserRole) { + await tx.userRole.upsert({ + where: { + id: data.id + }, + update: { + name: data.name + }, + create: { + id: data.id, + name: data.name, + desc: data.desc + }, + }) + } + + // USER - Original data + for (let data of seederUser) { + await tx.user.upsert({ + where: { + id: data.id + }, + update: { + idVillage: data.idVillage, + idGroup: data.idGroup, + idPosition: data.idPosition, + idUserRole: data.idUserRole, + nik: data.nik, + name: data.name, + phone: data.phone, + email: data.email, + gender: data.gender + }, + create: { + id: data.id, + idVillage: data.idVillage, + idGroup: data.idGroup, + idPosition: data.idPosition, + idUserRole: data.idUserRole, + nik: data.nik, + name: data.name, + phone: data.phone, + email: data.email, + gender: data.gender + }, + }) + } + + for (let data of seederUserComprehensive) { + await tx.user.upsert({ + where: { + id: data.id + }, + update: { + idVillage: data.idVillage, + idGroup: data.idGroup, + idPosition: data.idPosition, + idUserRole: data.idUserRole, + nik: data.nik, + name: data.name, + phone: data.phone, + email: data.email, + gender: data.gender + }, + create: { + id: data.id, + idVillage: data.idVillage, + idGroup: data.idGroup, + idPosition: data.idPosition, + idUserRole: data.idUserRole, + nik: data.nik, + name: data.name, + phone: data.phone, + email: data.email, + gender: data.gender + }, + }) + } + + for (let data of seederAnnouncementComprehensive) { + await tx.announcement.upsert({ + where: { + id: data.id + }, + update: { + title: data.title, + desc: data.desc, + createdBy: data.createdBy + }, + create: { + id: data.id, + idVillage: data.idVillage, + title: data.title, + desc: data.desc, + createdBy: data.createdBy, + isActive: true + } + }) + } + + for (let data of seederAnnouncementMemberComprehensive) { + await tx.announcementMember.upsert({ + where: { + id: data.id + }, + update: { + idAnnouncement: data.idAnnouncement, + idGroup: data.idGroup!, + idDivision: data.idDivision! + }, + create: { + id: data.id, + idAnnouncement: data.idAnnouncement, + idGroup: data.idGroup!, + idDivision: data.idDivision!, + isActive: true + } + }) + } + + for (let data of seederDivisionComprehensive) { + await tx.division.upsert({ + where: { + id: data.id + }, + update: { + name: data.name, + desc: data.desc, + createdBy: data.createdBy + }, + create: { + id: data.id, + idVillage: data.idVillage, + idGroup: data.idGroup, + name: data.name, + desc: data.desc, + createdBy: data.createdBy, + isActive: true + } + }) + } + + for (let data of seederDivisionMemberComprehensive) { + await tx.divisionMember.upsert({ + where: { + id: data.id + }, + update: { + idUser: data.idUser, + isAdmin: data.isAdmin, + isLeader: data.isLeader + }, + create: { + id: data.id, + idDivision: data.idDivision, + idUser: data.idUser, + isAdmin: data.isAdmin, + isLeader: data.isLeader, + isActive: true + } + }) + } + + for (let data of seederProjectComprehensive) { + await tx.project.upsert({ + where: { + id: data.id + }, + update: { + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy + }, + create: { + id: data.id, + idVillage: data.idVillage, + idGroup: data.idGroup, + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy, + isActive: true + } + }) + } + + for (let data of seederProjectMemberComprehensive) { + await tx.projectMember.upsert({ + where: { + id: data.id + }, + update: { + idUser: data.idUser, + isLeader: data.isLeader + }, + create: { + id: data.id, + idProject: data.idProject, + idUser: data.idUser, + isLeader: data.isLeader, + isActive: true + } + }) + } + + for (let data of seederProjectTaskComprehensive) { + await tx.projectTask.upsert({ + where: { + id: data.id + }, + update: { + title: data.title, + desc: data.desc, + status: data.status, + dateStart: new Date(data.dateStart), + dateEnd: new Date(data.dateEnd) + }, + create: { + id: data.id, + idProject: data.idProject, + title: data.title, + desc: data.desc, + status: data.status, + dateStart: new Date(data.dateStart), + dateEnd: new Date(data.dateEnd), + isActive: true + } + }) + } + + for (let data of seederDiscussionComprehensive) { + await tx.discussion.upsert({ + where: { + id: data.id + }, + update: { + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy + }, + create: { + id: data.id, + idVillage: data.idVillage, + idGroup: data.idGroup!, + title: data.title, + desc: data.desc, + status: data.status, + createdBy: data.createdBy, + isActive: true + } + }) + } + + for (let data of seederDiscussionMemberComprehensive) { + await tx.discussionMember.upsert({ + where: { + id: data.id + }, + update: { + idUser: data.idUser + }, + create: { + id: data.id, + idDiscussion: data.idDiscussion, + idUser: data.idUser, + isActive: true + } + }) + } + }); + + console.log("\nāœ… Complete village data seeding completed successfully!"); + console.log(`šŸ“Š Total admin roles processed: ${seederAdminRole.length}`); + console.log(`šŸ“Š Total admins processed: ${seederAdmin.length}`); + console.log(`šŸ“Š Total themes processed: ${seederTheme.length}`); + console.log(`šŸ“Š Total villages processed: ${seederDesa.length}`); + console.log(`šŸ“Š Total groups processed: ${[...seederGroup, ...seederGroupComprehensive].length}`); + console.log(`šŸ“Š Total positions processed: ${[...seederPosition, ...seederPositionComprehensive].length}`); + console.log(`šŸ“Š Total user roles processed: ${seederUserRole.length}`); + console.log(`šŸ“Š Total users processed: ${[...seederUser, ...seederUserComprehensive].length}`); + console.log(`šŸ“Š Total announcements processed: ${seederAnnouncementComprehensive.length}`); + console.log(`šŸ“Š Total announcement members processed: ${seederAnnouncementMemberComprehensive.length}`); + console.log(`šŸ“Š Total divisions processed: ${seederDivisionComprehensive.length}`); + console.log(`šŸ“Š Total division members processed: ${seederDivisionMemberComprehensive.length}`); + console.log(`šŸ“Š Total projects processed: ${seederProjectComprehensive.length}`); + console.log(`šŸ“Š Total project members processed: ${seederProjectMemberComprehensive.length}`); + console.log(`šŸ“Š Total project tasks processed: ${seederProjectTaskComprehensive.length}`); + console.log(`šŸ“Š Total discussions processed: ${seederDiscussionComprehensive.length}`); + console.log(`šŸ“Š Total discussion members processed: ${seederDiscussionMemberComprehensive.length}`); + } catch (error) { + console.error("\nāŒ Error during seeding:", error); + throw new Error("Seeding process failed"); + } finally { + await prisma.$disconnect(); + } +} + +// Execute seeding if called directly from command line +if (require.main === module) { + seedCompleteVillageData() + .catch((e) => { + console.error(e); + process.exit(1); + }); +} + +export default seedCompleteVillageData; \ No newline at end of file diff --git a/src/module/seeder/data/desa.json b/src/module/seeder/data/desa.json index 421ae11..707874e 100644 --- a/src/module/seeder/data/desa.json +++ b/src/module/seeder/data/desa.json @@ -3,5 +3,10 @@ "id": "desa1", "name": "Darmasaba", "desc": "-" + }, + { + "id": "desaDummy", + "name": "Mandala", + "desc": "Desa Dummy untuk testing" } ] \ No newline at end of file diff --git a/src/module/seeder/data/discussion.json b/src/module/seeder/data/discussion.json new file mode 100644 index 0000000..d1eeeca --- /dev/null +++ b/src/module/seeder/data/discussion.json @@ -0,0 +1,20 @@ +[ + { + "id": "disc_kegiatan_desa", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "title": "Pembahasan Kegiatan Desa Mendatang", + "desc": "Diskusi untuk merencanakan kegiatan desa yang akan datang dan menyerap aspirasi warga", + "status": 1, + "createdBy": "user_kades" + }, + { + "id": "disc_pengelolaan_sampah", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "title": "Pengelolaan Sampah di RT 01", + "desc": "Diskusi internal RT 01 mengenai pengelolaan sampah rumah tangga dan lingkungan", + "status": 1, + "createdBy": "user_kades" + } +] \ No newline at end of file diff --git a/src/module/seeder/data/discussion_member.json b/src/module/seeder/data/discussion_member.json new file mode 100644 index 0000000..b75c966 --- /dev/null +++ b/src/module/seeder/data/discussion_member.json @@ -0,0 +1,27 @@ +[ + { + "id": "disc_mem_kegiatan_desa_kades", + "idDiscussion": "disc_kegiatan_desa", + "idUser": "user_sekdes" + }, + { + "id": "disc_mem_kegiatan_desa_sekdes", + "idDiscussion": "disc_kegiatan_desa", + "idUser": "user_warga1" + }, + { + "id": "disc_mem_kegiatan_desa_warga1", + "idDiscussion": "disc_kegiatan_desa", + "idUser": "user_warga2" + }, + { + "id": "disc_mem_pengelolaan_sampah_kades", + "idDiscussion": "disc_pengelolaan_sampah", + "idUser": "user_warga1" + }, + { + "id": "disc_mem_pengelolaan_sampah_warga1", + "idDiscussion": "disc_pengelolaan_sampah", + "idUser": "user_warga2" + } +] \ No newline at end of file diff --git a/src/module/seeder/data/group.json b/src/module/seeder/data/group.json index a333b68..90f3d78 100644 --- a/src/module/seeder/data/group.json +++ b/src/module/seeder/data/group.json @@ -3,5 +3,25 @@ "id": "group1", "idVillage": "desa1", "name": "Dinas" + }, + { + "id": "group_rt01", + "idVillage": "desaDummy", + "name": "Dinas" + }, + { + "id": "group_rt02", + "idVillage": "desaDummy", + "name": "Adat" + }, + { + "id": "group_karang_taruna", + "idVillage": "desaDummy", + "name": "Karang Taruna" + }, + { + "id": "group_bumdes", + "idVillage": "desaDummy", + "name": "PKK" } ] \ No newline at end of file diff --git a/src/module/seeder/data/position.json b/src/module/seeder/data/position.json index f820921..55c76b8 100644 --- a/src/module/seeder/data/position.json +++ b/src/module/seeder/data/position.json @@ -3,5 +3,25 @@ "id": "position1", "idGroup": "group1", "name": "Perbekel" + }, + { + "id": "pos_ketua_rt01", + "idGroup": "group_rt01", + "name": "Perbekel" + }, + { + "id": "pos_sekretaris_rt01", + "idGroup": "group_rt01", + "name": "Sekretaris" + }, + { + "id": "pos_bendahara_rt01", + "idGroup": "group_rt01", + "name": "Bendahara" + }, + { + "id": "pos_staff_rt01", + "idGroup": "group_rt01", + "name": "Staff" } ] \ No newline at end of file diff --git a/src/module/seeder/data/project.json b/src/module/seeder/data/project.json new file mode 100644 index 0000000..802fe58 --- /dev/null +++ b/src/module/seeder/data/project.json @@ -0,0 +1,11 @@ +[ + { + "id": "proj_pembangunan_jalan", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "title": "Pembangunan Jalan Desa Tahap 2", + "desc": "Pembangunan jalan desa tahap 2 yang mencakup wilayah RT 01 dan RT 02", + "status": 1, + "createdBy": "user_kades" + } +] \ No newline at end of file diff --git a/src/module/seeder/data/project_member.json b/src/module/seeder/data/project_member.json new file mode 100644 index 0000000..b4ef908 --- /dev/null +++ b/src/module/seeder/data/project_member.json @@ -0,0 +1,14 @@ +[ + { + "id": "proj_mem_pembangunan_jalan_kades", + "idProject": "proj_pembangunan_jalan", + "idUser": "user_warga1", + "isLeader": true + }, + { + "id": "proj_mem_pembangunan_jalan_sekdes", + "idProject": "proj_pembangunan_jalan", + "idUser": "user_warga2", + "isLeader": false + } +] \ No newline at end of file diff --git a/src/module/seeder/data/project_task.json b/src/module/seeder/data/project_task.json new file mode 100644 index 0000000..bd6c408 --- /dev/null +++ b/src/module/seeder/data/project_task.json @@ -0,0 +1,29 @@ +[ + { + "id": "task_survey_lokasi", + "idProject": "proj_pembangunan_jalan", + "title": "Survey Lokasi", + "desc": "Melakukan survey lokasi untuk menentukan titik pembangunan jalan", + "status": 1, + "dateStart": "2026-01-15T00:00:00.000Z", + "dateEnd": "2026-01-20T00:00:00.000Z" + }, + { + "id": "task_pengadaan_material", + "idProject": "proj_pembangunan_jalan", + "title": "Pengadaan Material", + "desc": "Mengadakan material pembangunan seperti pasir, batu, dan semen", + "status": 0, + "dateStart": "2026-02-01T00:00:00.000Z", + "dateEnd": "2026-02-10T00:00:00.000Z" + }, + { + "id": "task_pelaksanaan_pembangunan", + "idProject": "proj_pembangunan_jalan", + "title": "Pelaksanaan Pembangunan", + "desc": "Melaksanakan pembangunan jalan sesuai dengan desain yang telah ditentukan", + "status": 0, + "dateStart": "2026-02-15T00:00:00.000Z", + "dateEnd": "2026-03-15T00:00:00.000Z" + } +] \ No newline at end of file diff --git a/src/module/seeder/data/user.json b/src/module/seeder/data/user.json index 15c2589..2a5e29f 100644 --- a/src/module/seeder/data/user.json +++ b/src/module/seeder/data/user.json @@ -10,5 +10,53 @@ "phone": "628980185458", "email": "amalia_dev@bip.com", "gender": "F" + }, + { + "id": "user_kades", + "idUserRole": "supadmin", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "idPosition": "pos_ketua_rt01", + "nik": "3201010101010001", + "name": "Kepala Desa", + "phone": "081234567890", + "email": "kades@desamandiri.test", + "gender": "M" + }, + { + "id": "user_sekdes", + "idUserRole": "admin", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "idPosition": "pos_sekretaris_rt01", + "nik": "3201010101010002", + "name": "Sekretaris Desa", + "phone": "081234567891", + "email": "sekdes@desamandiri.test", + "gender": "M" + }, + { + "id": "user_warga1", + "idUserRole": "user", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "idPosition": "pos_staff_rt01", + "nik": "3201010101010005", + "name": "Warga Satu", + "phone": "081234567894", + "email": "wargasatu@desamandiri.test", + "gender": "F" + }, + { + "id": "user_warga2", + "idUserRole": "user", + "idVillage": "desaDummy", + "idGroup": "group_rt01", + "idPosition": "pos_staff_rt01", + "nik": "3201010101010006", + "name": "Warga Dua", + "phone": "081234567895", + "email": "wargadua@desamandiri.test", + "gender": "M" } ] \ No newline at end of file diff --git a/src/module/seeder/index.ts b/src/module/seeder/index.ts index 401ebb1..0aad346 100644 --- a/src/module/seeder/index.ts +++ b/src/module/seeder/index.ts @@ -1,10 +1,16 @@ -import seederAdminRole from "./data/admin_role.json"; import seederAdmin from "./data/admin.json"; -import seederUserRole from "./data/user_role.json"; -import seederUser from "./data/user.json"; +import seederAdminRole from "./data/admin_role.json"; import seederDesa from "./data/desa.json"; +import seederDiscussion from "./data/discussion.json"; +import seederDiscussionMember from "./data/discussion_member.json"; import seederGroup from "./data/group.json"; import seederPosition from "./data/position.json"; +import seederProject from "./data/project.json"; +import seederProjectMember from "./data/project_member.json"; +import seederProjectTask from "./data/project_task.json"; import seederTheme from "./data/theme.json"; +import seederUser from "./data/user.json"; +import seederUserRole from "./data/user_role.json"; + +export { seederAdmin, seederAdminRole, seederDesa, seederDiscussion, seederDiscussionMember, seederGroup, seederPosition, seederProject, seederProjectMember, seederProjectTask, seederTheme, seederUser, seederUserRole }; -export { seederAdminRole, seederAdmin, seederDesa, seederGroup, seederPosition, seederUserRole, seederUser, seederTheme } \ No newline at end of file