Backend FIT

Question Type: backend

Requirement

  • Framework Laravel / NodeJS
  • Database PostgreSQL
  • API Token menggunakan Bearer / OAuth2
  • Password encryption harus menggunakan bcrypt atau argon2.

Soal

  • Membuat aplikasi RESTFUL API dengan fitur: Login, Insert Data, Approve Data dan Get Data.

Keterangan

  • Buatlah aplikasi RESTFUL API yang dapat melakukan Insert dan Get Data dalam format json.
  • Disaat user melakukan insert ataupun get data, API harus melakukan validasi token terlebih dahulu.
  • Token didapatkan setelah user melakukan Login.
  • Data user hanya boleh di-approve oleh supervisor nya sendiri.
  • Data yang akan di-insert adalah data absensi.
  • Setiap hari user melakukan 2 kali absensi (masuk dan pulang, menjadi 2 baris di database).

Desain Table Database

Table Users

idnamaemailnppnpp_supervisorpassword
1Bayu Pramanabayu@email.com1234511111password
2Supervisorspv@email.com11111-password

Table Epressence

idid_userstypeis_approvewaktu
11INTRUE15/11/23 08.00
21OUTFALSE15/11/23 17.00

API Body

  • Insert Data
{
  "type": "IN",
  "waktu": "2023-11-15 08:00:00"
}

// IN = absen masuk
// OUT = absen pulang
  • Get Data
{
  "message": "Success get data",
  "data": [
    {
      "id_user": 1,
      "nama_user": "Bayu Pramana",
      "tanggal": "2023-11-15",
      "waktu_masuk": "08:00:00",
      "waktu_pulang": "17:00:00",
      "status_masuk": "APPROVE",
      "status_pulang": "REJECT"
    },
    {
      "id_user": 1,
      "nama_user": "Bayu Pramana",
      "waktu_masuk": "08:00:00",
      "waktu_pulang": "17:00:00",
      "status_masuk": "APPROVE",
      "status_pulang": "APPROVE"
    }
  ]
}

// Data absensi dibuat menjadi 1 baris dari 2 baris data di database
// nama_user diambila dari table users
// tanggal diambil dari field waktu dengan type = IN
// waktu_masuk diambil dari field waktu dengan type = IN
// waktu_pulang diambil dari field waktu dengan type = OUT
// status_masuk diambil dari field is_approve, true = APPROVE || false = REJECT
// status_pulang diambil dari field is_approve