RobinNusantara / merkleinnovation-test

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

merkleinnovation-test

Buatlah sebuah fungsi yang dapat mencetak tampilan berikut:

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25

Answer:

function printNumbers(rows, cols) {
  for (let i = 1; i <= rows; i++) {
    let row = "";
    for (let j = 1; j <= cols; j++) {
      row += (i * j) + " ";
    }
    console.log(row);
  }
}

printNumbers(5, 5);
Screenshot 2023-10-20 at 02 53 30

Guest Form
API ini digunakan agar tamu dapat menambahkan data dirinya ke daftar tamu. Data diri yang diisikan adalah nama, alamat, nomor telepon, dan catatan (free text)

Answer:

Untuk API guest form saya tidak menambahkan authentication dikarenakan saat tamu ingin menambahkan data dirinya ke daftar tamu saya menurut saya tidak perlu melakukan login terlebih dahulu.

Method: POST
Uri: /v1/guest-forms
Body:

{
    "name": "John Doe",
    "phoneNumber": "085536519206",
    "address": "Jl Dewi Sartika Gg 3 Blok P No 14",
    "notes": ""
}
Screenshot 2023-10-19 at 23 59 00 Screenshot 2023-10-19 at 23 58 32

Note Gallery
API ini digunakan untuk menampilkan semua catatan yang sudah tersimpan di database. Data yang ditampilkan hanya nama dan catatan. Sehingga, Anda harus menghilangkan alamat dan nomor telepon pada response API ini.

Answer:

Untuk API note gallery saya tidak menambahkan authentication dikarenakan saya beramsumsi untuk data note gallery adalah data bisa diakses secara public, oleh karena itu data yang ditampilkan hanya nama tamu dan notes yang telah dituliskan oleh tamu pada API guest form. Saya juga menambahkan pagination dikarenakan daftar tamu di masa yang akan mendatang pasti akan semakin bertambah banyak, oleh karena itu saya menambahkan pagination agar mengurangi beban server dan database saat ada user yang melakukan fetch data pada API note gallery.

Method: GET
Uri: /v1/note-galleries
Query: ?page={{page}}&limit={{limit}}
Response:

{
  [
    {
      "id": 1,
      "name": "Robin Nusantara",
      "notes": "Hello World"
    },
    {
      "id": 2,
      "name": "Robin Nusantara",
      "notes": "Hello from Malang"
    },
    {
      "id": 3,
      "name": "Robin Nusantara",
      "notes": null
    }
  ]
}
Screenshot 2023-10-20 at 00 14 56

Autentikasi
API ini digunakan untuk melakukan login dan logout ke admin page. Informasi yang diinputkan adalah username dan password. Gunakan mekanisme tokenisasi, session, atau mekanisme lain untuk mendukung fitur ini.

Answer:

Untuk melakukan login ke dalam admin page yang diperlukan adalah username & password yang telah terdaftar didalam database, API signin ini akan mengembalikan response berupa user id, user name, user email, dan token. Token ini akan digunakan untuk melakukan validasi saat user ingin melakukan fetch data pada API yang tidak bisa di akses secara public (protected routes).

Method: POST
Uri: /v1/auth/signin
Body:

{
    "username": "robin",
    "password": "robin123"
}
Screenshot 2023-10-20 at 00 32 39

Method: DELETE
Uri: /v1/auth/signout
Headers: token:{{token}}

API ini akan digunakan untuk melakukan logout dari dashboard, saat berhasil melakukan logout API tidak akan mengembalikan response dikarenakan user token yang telah tersimpan didalam database sudah terhapus oleh karena itu menurut saya saat logout yang di return adalah no content.

Screenshot 2023-10-20 at 00 44 26

Admin

API ini digunakan oleh admin page agar dapat mengelola semua data yang tersimpan di database. Tidak ada data yang dihilangkan pada response API ini.

Answer:

Pada API ini saya melakukan create, read, delete user dan juga melihat melihat semua data yang ada di guest form.

Method: POST
Uri: /v1/admin/users
Headers: token:{{token}}
Body:

{
    "email": "johndoe@gmail.com",
    "username": "John",
    "password": "XG34zYaQ6GDEl3I"
}

API ini akan melakukan insert data user kedalam database, untuk melakukan insert data pada API ini diperlukan login telebih dahulu. Saya juga menerapkan validasi email dan validasi username saat melakukan insert data user untuk menhindari duplikasi data pada user. Kemudian untuk password pada umumnya sepengelaman saya bisa dilakukan auto generate pada frontend lalu backend akan melakukan enkripsi password sebelum disimpan kedalam database.

Screenshot 2023-10-20 at 01 55 23 Screenshot 2023-10-20 at 02 12 33 Screenshot 2023-10-20 at 02 11 34

Method: GET
Uri: /v1/admin/users
Query: ?page={{page}}&limit={{limit}}
Headers: token:{{token}}

API ini akan melakukan fetch data untuk semua user(admin) yang telah terdaftar didalam database, untuk melakukan fetch data pada API ini diperlukan login terlebih dahulu. Saya juga menghilangkan password user didalam response API ini untuk alasan keamanan data user walaupun sebenarnya password user yang telah tersimpan sudah saya encrypt menggunakan bcrypt.

Screenshot 2023-10-20 at 01 58 01

Method: DELETE
Uri: /v1/admin/users
Headers: token:{{token}}

API ini akan melakukan remove data pada user berdasarkan user id,jika data berhasl di remove akan mengembalikan no response.

Screenshot 2023-10-20 at 02 18 32

Method: GET
Uri: /v1/admin/guest-forms
Query: ?page={{page}}&limit={{limit}}
Headers: token:{{token}}

API ini akan menampilkan semua guest form yang telah di submit oleh tamu, karena login sebagai admin maka saya menampilkan semua data pada guest form dan tidak ada sama sekali attributes yang dihilangkan.

Screenshot 2023-10-20 at 02 33 41

About


Languages

Language:JavaScript 100.0%