{"id":27779239,"url":"https://github.com/muuri19/notes-app-back-end","last_synced_at":"2025-04-30T09:30:18.626Z","repository":{"id":290297130,"uuid":"973853875","full_name":"muuri19/notes-app-back-end","owner":"muuri19","description":"Backend sederhana untuk aplikasi notes, dibuat untuk menyelesaikan tugas kursus Dicoding. Menerapkan RESTful API menggunakan Node.js.","archived":false,"fork":false,"pushed_at":"2025-04-28T04:20:34.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-28T04:29:55.481Z","etag":null,"topics":["backend","dicoding","nodejs","notes-app","rest-api"],"latest_commit_sha":null,"homepage":"https://github.com/muuri19/notes-app-back-end","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muuri19.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-27T21:46:07.000Z","updated_at":"2025-04-28T04:25:17.000Z","dependencies_parsed_at":"2025-04-28T04:40:14.496Z","dependency_job_id":null,"html_url":"https://github.com/muuri19/notes-app-back-end","commit_stats":null,"previous_names":["muuri19/notes-app-back-end"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muuri19%2Fnotes-app-back-end","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muuri19%2Fnotes-app-back-end/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muuri19%2Fnotes-app-back-end/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muuri19%2Fnotes-app-back-end/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muuri19","download_url":"https://codeload.github.com/muuri19/notes-app-back-end/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251676614,"owners_count":21626045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","dicoding","nodejs","notes-app","rest-api"],"created_at":"2025-04-30T09:30:14.891Z","updated_at":"2025-04-30T09:30:18.598Z","avatar_url":"https://github.com/muuri19.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Kriteria 1: Web Server Dapat Menyimpan Catatan\nriteria pertama adalah web server dapat menyimpan catatan yang ditambahkan melalui aplikasi web. Tenang, untuk memenuhi kriteria ini, Anda tak perlu menggunakan database. Cukup simpan pada memory server dalam bentuk array JavaScript.\n\nBerikut struktur dari objek catatan yang perlu disimpan oleh server:\n```\n{\n id: string,\n title: string,\n createdAt: string,\n updatedAt: string,\n tags: array of string,\n body: string,\n},\n```\n\nBerikut contoh data nyatanya:\n```\n{\n id: 'notes-V1StGXR8_Z5jdHi6B-myT',\n title: 'Sejarah JavaScript',\n createdAt: '2020-12-23T23:00:09.686Z',\n updatedAt: '2020-12-23T23:00:09.686Z',\n tags: ['NodeJS', 'JavaScript'],\n body: 'JavaScript pertama kali dikembangkan oleh Brendan Eich dari Netscape di bawah nama Mocha, yang nantinya namanya diganti menjadi LiveScript, dan akhirnya menjadi JavaScript. Navigator sebelumnya telah mendukung Java untuk lebih bisa dimanfaatkan para pemrogram yang non-Java.',\n},\n```\n\nAgar web server dapat menyimpan catatan melalui aplikasi client, web server harus menyediakan route dengan path `‘/notes’` dan method `POST`. \n\nDalam menyimpan atau menambahkan notes, client akan mengirimkan permintaan ke path dan method tersebut dengan membawa data JSON berikut pada request body:\n\n```\n{\n \"title\": \"Judul Catatan\",\n \"tags\": [\"Tag 1\", \"Tag 2\"],\n \"body\": \"Konten catatan\"\n}\n```\n\nUntuk properti `id`, `createdAt`, dan `updatedAt` harus diolah di sisi server, jadi client tidak akan mengirimkan itu. Server harus memastikan properti `id` selalu unik.\n\nJika permintaan client berhasil dilakukan, respons dari server harus memiliki status code 201 (created) dan mengembalikan data dalam bentuk JSON dengan format berikut:\n\n```\n{\n  \"status\": \"success\",\n  \"message\": \"Catatan berhasil ditambahkan\",\n  \"data\": {\n    \"noteId\": \"V09YExygSUYogwWJ\"\n  }\n}\n```\n\nNilai dari properti `noteId` diambil dari properti `id` yang dibuat secara unik. \n\nBila permintaan gagal dilakukan, berikan status code 500 dan kembalikan dengan data JSON dengan format berikut:\n\n```\n{\n  \"status\": \"error\",\n  \"message\": \"Catatan gagal untuk ditambahkan\"\n}\n```\n\n## Kriteria 2: Web Server Dapat Menampilkan Catatan\nKriteria selanjutnya adalah web server dapat menampilkan catatan. Kriteria ini mengharuskan web server untuk mengirimkan seluruh atau secara spesifik data notes yang disimpan.\n\nKetika client melakukan permintaan pada path `‘/notes’` dengan method `‘GET’`, server harus mengembalikan status code **200** (ok) serta seluruh data notes dalam bentuk array menggunakan JSON. Contohnya seperti ini:\n\n```\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"notes\": [\n      {\n        \"id\":\"notes-V1StGXR8_Z5jdHi6B-myT\",\n        \"title\":\"Catatan 1\",\n        \"createdAt\":\"2020-12-23T23:00:09.686Z\",\n        \"updatedAt\":\"2020-12-23T23:00:09.686Z\",\n        \"tags\":[\n          \"Tag 1\",\n          \"Tag 2\"\n        ],\n        \"body\":\"Isi dari catatan 1\"\n      },\n      {\n        \"id\":\"notes-V1StGXR8_98apmLk3mm1\",\n        \"title\":\"Catatan 2\",\n        \"createdAt\":\"2020-12-23T23:00:09.686Z\",\n        \"updatedAt\":\"2020-12-23T23:00:09.686Z\",\n        \"tags\":[\n          \"Tag 1\",\n          \"Tag 2\"\n        ],\n        \"body\":\"Isi dari catatan 2\"\n      }\n    ]\n  }\n}\n```\n\nJika belum ada catatan satu pun pada array, server bisa mengembalikan data notes dengan nilai array kosong seperti ini:\n\n```{\n  \"status\": \"success\",\n  \"data\": {\n    \"notes\": []\n  }\n}\n```\n\nSelain itu, client juga bisa melakukan permintaan untuk mendapatkan catatan secara spesifik menggunakan id melalui path `‘/notes/{id}’` dengan method ‘GET’. Server harus mengembalikan status code 200 (ok) serta nilai satu objek catatan dalam bentuk JSON seperti berikut:\n\n```{\n  \"status\": \"success\",\n  \"data\": {\n    \"note\": {\n      \"id\":\"notes-V1StGXR8_Z5jdHi6B-myT\",\n      \"title\":\"Catatan 1\",\n      \"createdAt\":\"2020-12-23T23:00:09.686Z\",\n      \"updatedAt\":\"2020-12-23T23:00:09.686Z\",\n      \"tags\":[\n        \"Tag 1\",\n        \"Tag 2\"\n      ],\n      \"body\":\"Isi dari catatan 1\"\n    }\n  }\n}\n```\n\nBila client melampirkan `id` catatan yang tidak ditemukan, server harus merespons dengan status code **404** dan data dalam bentuk JSON seperti ini:\n\n```{\n  \"status\": \"fail\",\n  \"message\": \"Catatan tidak ditemukan\"\n}\n```\n\n## Kriteria 3: Web Server Dapat Mengubah Catatan\nKriteria ketiga adalah web server harus dapat mengubah catatan. Perubahan yang dimaksud bisa berupa judul, isi, ataupun tag catatan. Ketika client meminta perubahan catatan, ia akan membuat permintaan ke path `‘/notes/{id}’`, menggunakan method `‘PUT’`, serta membawa data JSON pada body request yang merupakan data catatan terbaru.\n\n```{\n  \"title\":\"Judul Catatan Revisi\",\n  \"tags\":[\n    \"Tag 1\",\n    \"Tag 2\"\n  ],\n  \"body\":\"Konten catatan\"\n}\n```\n\nJika perubahan data berhasil dilakukan, server harus menanggapi dengan status code **200 (ok)** dan membawa data JSON objek berikut pada body respons.\n\n```{\n  \"status\": \"success\",\n  \"message\": \"Catatan berhasil diperbaharui\"\n}\n```\nPerubahan data catatan harus disimpan ke catatan yang sesuai dengan `id` yang digunakan pada path parameter. Bila id catatan tidak ditemukan, server harus merespons dengan status code **404** (not found) dan data JSON seperti ini:\n\n```{\n  \"status\": \"fail\",\n  \"message\": \"Gagal memperbarui catatan. Id catatan tidak ditemukan\"\n}\n```\n\n## Kriteria 4: Web Server Dapat Menghapus Catatan\nKriteria terakhir adalah web server harus bisa menghapus catatan. Untuk menghapus catatan, client akan membuat permintaan pada path `‘/notes/{id}`’ dengan method `‘DELETE’`. Ketika permintaan tersebut berhasil, server harus mengembalikan status code **200** (ok) serta data JSON berikut:\n\n```{\n  \"status\": \"success\",\n  \"message\": \"Catatan berhasil dihapus\"\n}\n```\n\nCatatan yang dihapus harus sesuai dengan id catatan yang digunakan client pada path parameter. Bila id catatan tidak ditemukan, server harus mengembalikan respons dengan status code **404** dan membawa data JSON berikut:\n\n```{\n  \"status\": \"fail\",\n  \"message\": \"Catatan gagal dihapus. Id catatan tidak ditemukan\"\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuuri19%2Fnotes-app-back-end","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuuri19%2Fnotes-app-back-end","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuuri19%2Fnotes-app-back-end/lists"}