-
Pilihan A (poin 100 : many to many), kerjakan model dan fitur yang berkaitan dengan project dan engineer saja.
-
Pilihan B (poin 75 : one to many), kerjakan model dan fitur yang berkaitan dengan project dan supervisor saja.
Kamu diminta untuk membuat aplikasi untuk melakukan project management di sebuah perusahaan Hardware Engineering. Berikut adalah requirement yang harus kamu penuhi:
-
Terdapat banyak project, setiap project memiliki
nama
,status
(gunakan dropdown dengan pilihan: planning/on progress/done. harus re-populate ketika edit). -
Supervisor adalah orang yang bertanggung jawab terhadap beberapa project sekaligus. Setiap supervisor memiliki
nama
danemail
-
Engineer adalah orang yang mengerjakan project. Satu engineer dapat mengerjakan lebih dari satu project, dan satu project akan dikerjakan oleh beberapa engineer. Setiap engineer memiliki
nama
danemail
.
Berdasarkan tugas yang kamu pilih, buatlah table yang dibutuhkan (bila memilih many to many, buatlah conjunction table) dan buatlah Class
model untuk setiap table beserta method yang dibutuhkan. Kamu bisa gunakan template class Model dibawah.
Untuk meng-handle akses database yang asynchronous, kamu boleh menggunakan callback atau promise (tambahan 20). Simpan semua file model di dalam folder tersendiri.
class Model {
constructor(raw) {
this.attribute1 = raw.attribute1
this.attribute2 = raw.attribute2
}
static findAll() {
let results = models.map(m => new Model(m))
return results
}
static findById() {}
static findWhere() {}
static create() {}
static update() {}
static destroy() {}
}
Buatlah aplikasi CRUD untuk project, supervisor, dan engineer. Bagi routing berdasarkan model dan pisahkan ke dalam file tersendiri. Ikuti pola dibawah untuk membuat routing.
/project
GET /list * menampilkan semua project
GET /add * form untuk input project baru
POST /add * untuk handle input project baru
GET /update/:id * form untuk update project
POST /update/:id * untuk handle update project
GET /delete/:id * untuk handle delete project
Untuk mendapatkan data yang berasosiasi, dilarang menggunakan query JOIN.
Bila CRUD setiap model sudah selesai dibuat. Tambahkan fitur sebagai berikut:
-
Di halaman yang menampilkan semua project, tambahkan fitur [ASSIGN ENGINEER] yang bertujuan untuk menambahkan engineer pada project tersebut dan menampilkan semua engineer yang sudah ditambahkan. (15)
-
Di halaman yang menampilkan semua engineer, tambahkan fitur [PROJECTS ASSIGNED] untuk menampilkan semua project yang sudah ditentukan untuk engineer tersebut. (10)
- Di halaman yang menampilkan semua supervisor, tambahkan fitur [ASSIGN PROJECT] yang bertujuan untuk memberikan project pada supervisor tersebut dan menampilkan semua project yang sudah diberikan.