{"info":{"_postman_id":"f23959d8-7c4b-4fe0-86b9-5015e1189d99","name":"Books Library API Documentation","description":"<html><head></head><body><p>Built on NestJS Typescript, PostgreSQL, and Redis</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"49071923","collectionId":"f23959d8-7c4b-4fe0-86b9-5015e1189d99","publishedId":"2sBXcBnNKg","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-02-13T14:39:57.000Z"},"item":[{"name":"Public Books Routes","item":[{"name":"Get Paginated Books","event":[{"listen":"test","script":{"id":"7ee2a155-6cfc-456d-8ca7-84136cf23889","exec":["pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"4b49b3b7-4d7e-4d59-97cc-0b51493d0e8f","request":{"method":"GET","header":[],"url":"1/books/all?page=1&limit=5","description":"<p><strong>Getting all books paginated, in newest order.</strong></p>\n<p><strong>Optional</strong> req.query =</p>\n<ul>\n<li><p>page: int, min. 1 (default: 1)</p>\n</li>\n<li><p>limit: int, min.1 max 30 (default: 10)</p>\n</li>\n</ul>\n","urlObject":{"path":["books","all"],"host":["1"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}],"variable":[]}},"response":[{"id":"f0b27efe-bcbd-4902-bc2c-60593e7f13d3","name":"Get Paginated Books","originalRequest":{"method":"GET","header":[],"url":{"raw":"1/books/all?page=1&limit=5","host":["1"],"path":["books","all"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"315"},{"key":"ETag","value":"W/\"13b-lOzVY9YLTntIuWBZE1KW27THB0Y\""},{"key":"Date","value":"Thu, 12 Feb 2026 09:26:45 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"page\": 1,\n        \"limit\": 5,\n        \"total\": 1,\n        \"totalPages\": 1,\n        \"results\": [\n            {\n                \"id\": 1,\n                \"title\": \"Analisis Data Menggunakan Bahasa Pemrograman Python\",\n                \"author\": \"Bambang Supardi\",\n                \"genre\": \"non_fiction\",\n                \"description\": \"Ini buku bagus\",\n                \"quantity\": 5\n            }\n        ]\n    },\n    \"message\": \"Paginated books fetched successfully\"\n}"}],"_postman_id":"4b49b3b7-4d7e-4d59-97cc-0b51493d0e8f"},{"name":"Get Paginated Searched Books","id":"bf02128f-3672-476c-a856-7d1e50b95cf9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"1/books/search?title=python&page=1&limit=10","description":"<p><strong>Getting searched books paginated.</strong></p>\n<p><strong>Optional</strong> req.query =</p>\n<ul>\n<li><p>title: string</p>\n</li>\n<li><p>page: int, min. 1 (default: 1)</p>\n</li>\n<li><p>limit: int, min.1 max 30 (default: 10)</p>\n</li>\n</ul>\n","urlObject":{"path":["books","search"],"host":["1"],"query":[{"key":"title","value":"python"},{"key":"page","value":"1"},{"key":"limit","value":"10"}],"variable":[]}},"response":[{"id":"a2edce19-e109-4c75-b1b5-9f04417a896c","name":"Get Paginated Searched Books","originalRequest":{"method":"GET","header":[],"url":{"raw":"1/books/search?title=&page=1&limit=2","host":["1"],"path":["books","search"],"query":[{"key":"title","value":"","type":"text"},{"key":"page","value":"1","type":"text"},{"key":"limit","value":"2","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"324"},{"key":"ETag","value":"W/\"144-AVXur7BbfGi98wZdDxmFKdMVQeQ\""},{"key":"Date","value":"Thu, 12 Feb 2026 10:07:41 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"page\": 1,\n        \"limit\": 2,\n        \"total\": 1,\n        \"totalPages\": 1,\n        \"results\": [\n            {\n                \"id\": 1,\n                \"title\": \"Analisis Data Menggunakan Bahasa Pemrograman Python\",\n                \"author\": \"Bambang Supardi\",\n                \"genre\": \"non_fiction\",\n                \"description\": \"Ini buku bagus\",\n                \"quantity\": 5\n            }\n        ]\n    },\n    \"message\": \"Paginated searched books fetched successfully\"\n}"}],"_postman_id":"bf02128f-3672-476c-a856-7d1e50b95cf9"},{"name":"Get Book Detail","id":"efa94d46-831f-4118-aa64-a05a73026790","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"1/books/details/:id","description":"<p><strong>Getting details of book.</strong></p>\n<p><strong>Required</strong> req.params =</p>\n<ul>\n<li>id: int, min. 1 max.1000</li>\n</ul>\n","urlObject":{"path":["books","details",":id"],"host":["1"],"query":[],"variable":[{"type":"any","value":"1","key":"id"}]}},"response":[{"id":"2b978351-4aa3-421a-a45b-ec2e69d15306","name":"Get Book Detail","originalRequest":{"method":"GET","header":[],"url":{"raw":"1/books/details/:id","host":["1"],"path":["books","details",":id"],"variable":[{"key":"id","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"275"},{"key":"ETag","value":"W/\"113-k8rBIl+PIQvQ+mQvWP++sejwskE\""},{"key":"Date","value":"Thu, 12 Feb 2026 10:55:23 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"id\": 1,\n            \"title\": \"Analisis Data Menggunakan Bahasa Pemrograman Python\",\n            \"author\": \"Bambang Supardi\",\n            \"genre\": \"non_fiction\",\n            \"description\": \"Ini buku bagus\",\n            \"quantity\": 5\n        }\n    },\n    \"message\": \"Book details for id 1 fetched successfully\"\n}"}],"_postman_id":"efa94d46-831f-4118-aa64-a05a73026790"}],"id":"4696182c-2a85-4b36-99f1-d6b4d6350ba3","description":"<p><strong>Public routes</strong></p>\n","_postman_id":"4696182c-2a85-4b36-99f1-d6b4d6350ba3"},{"name":"User Routes","item":[{"name":"User Register","id":"bd6a9324-bbc7-4398-8c26-42b25e046448","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n \"fullname\": \"Mark Carlos\",\r\n \"email\": \"mark.carlos@example.com\",\r\n \"password\": \"12345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/user/register","description":"<p><strong>User Register</strong></p>\n<p>Require 3 req.body=</p>\n<ul>\n<li><p>fullname: max.255 char</p>\n</li>\n<li><p>email: string, valid email, max.255 char</p>\n</li>\n<li><p>password: min.8 char, string</p>\n</li>\n</ul>\n","urlObject":{"path":["user","register"],"host":["1"],"query":[],"variable":[]}},"response":[{"id":"ffd7a192-87a7-4755-87bf-9205bd5b65ad","name":"User Register","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n \"fullname\": \"Mark Carlos\",\r\n \"email\": \"mark.carlos@example.com\",\r\n \"password\": \"12345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/user/register"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"245"},{"key":"ETag","value":"W/\"f5-Ds548T91LYIYCIcdw8wKu2lx150\""},{"key":"Date","value":"Fri, 13 Feb 2026 01:31:46 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"id\": \"a7c4f0f0-7c3d-40cc-9450-89ec00929926\",\n            \"fullname\": \"Mark Carlos\",\n            \"email\": \"mark.carlos@example.com\",\n            \"register_date\": \"2026-02-13T01:31:46.162Z\"\n        }\n    },\n    \"message\": \"User registered successfully\"\n}"}],"_postman_id":"bd6a9324-bbc7-4398-8c26-42b25e046448"},{"name":"User Login","id":"dcf0dbab-e4d3-461d-9f5a-268ae0ddd7f6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n \"email\": \"mark.carlos@example.com\",\r\n \"password\": \"12345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/user/login","description":"<p><strong>User Login</strong></p>\n<p>required 2 req.body=</p>\n<ul>\n<li><p>email: string, valid email, max. 255 char</p>\n</li>\n<li><p>password: string, min.8 max. 255 char</p>\n</li>\n</ul>\n","urlObject":{"path":["user","login"],"host":["1"],"query":[],"variable":[]}},"response":[{"id":"6aeda6e2-bce8-4637-8cbe-a8f7a4542b00","name":"User Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n \"email\": \"mark.carlos@example.com\",\r\n \"password\": \"12345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/user/login"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"557"},{"key":"ETag","value":"W/\"22d-sEeZYddcUl3L0aFn7KM3nrz2ry8\""},{"key":"Date","value":"Fri, 13 Feb 2026 03:29:08 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"id\": \"a7c4f0f0-7c3d-40cc-9450-89ec00929926\",\n            \"fullname\": \"Mark Carlos\",\n            \"email\": \"mark.carlos@example.com\",\n            \"role\": \"user\"\n        },\n        \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE3YzRmMGYwLTdjM2QtNDBjYy05NDUwLTg5ZWMwMDkyOTkyNiIsInVzZXJuYW1lIjoiTWFyayBDYXJsb3MiLCJyb2xlIjoidXNlciIsImp0aSI6Ijk1ZTVhYzI0LWFhZDEtNGE2Yy1hMmZkLThiZGMzNjZhYTliNSIsImlhdCI6MTc3MDk1MzM0OCwiZXhwIjoxNzcwOTU2OTQ4LCJpc3MiOiJsaWJyYXJ5X2FwaSJ9.nluJYG0zAyXwBZEB__OXAqEBrZete1BJBikLeWodxSw\"\n    },\n    \"message\": \"User logged in successfully\"\n}"}],"_postman_id":"dcf0dbab-e4d3-461d-9f5a-268ae0ddd7f6"},{"name":"User Borrowed Book List","id":"2c541c8a-7902-4bc0-a2d0-b93b9dbd00d9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"1/user/borrowed-books-list?page=1&limit=5","description":"<p><strong>NEED TOKEN</strong></p>\n<p>Fetch every user borrowed list paginated of book, sorted by latest data.</p>\n<p>Optional query=</p>\n<ul>\n<li><p>page : int, min. 1 (default 1)</p>\n</li>\n<li><p>limit : int, min. 1 max.30 (default 10)</p>\n</li>\n</ul>\n","urlObject":{"path":["user","borrowed-books-list"],"host":["1"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}],"variable":[]}},"response":[{"id":"711e1c9e-1215-4a64-8558-beb080ac2892","name":"User Borrowed Book List","originalRequest":{"method":"GET","header":[],"url":{"raw":"1/user/borrowed-books-list?page=1&limit=5","host":["1"],"path":["user","borrowed-books-list"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"715"},{"key":"ETag","value":"W/\"2cb-gMoSSIByX7ddNdyVID+NftkFtnU\""},{"key":"Date","value":"Fri, 13 Feb 2026 08:12:07 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"page\": 1,\n        \"limit\": 5,\n        \"total\": 3,\n        \"totalPages\": 1,\n        \"results\": [\n            {\n                \"id\": 13,\n                \"borrowment_date\": \"2026-02-13T08:01:01.322Z\",\n                \"returned_status\": false,\n                \"books\": {\n                    \"id\": 1,\n                    \"title\": \"Analisis Data Menggunakan Bahasa Pemrograman Python\",\n                    \"description\": \"Ini buku bagus\"\n                }\n            },\n            {\n                \"id\": 3,\n                \"borrowment_date\": \"2026-02-13T06:57:40.516Z\",\n                \"returned_status\": true,\n                \"books\": {\n                    \"id\": 1,\n                    \"title\": \"Analisis Data Menggunakan Bahasa Pemrograman Python\",\n                    \"description\": \"Ini buku bagus\"\n                }\n            },\n            {\n                \"id\": 2,\n                \"borrowment_date\": \"2026-02-13T06:56:32.266Z\",\n                \"returned_status\": true,\n                \"books\": {\n                    \"id\": 1,\n                    \"title\": \"Analisis Data Menggunakan Bahasa Pemrograman Python\",\n                    \"description\": \"Ini buku bagus\"\n                }\n            }\n        ]\n    },\n    \"message\": \"Borrowed books retrieved successfully\"\n}"}],"_postman_id":"2c541c8a-7902-4bc0-a2d0-b93b9dbd00d9"},{"name":"User Borrowing Book","id":"5b925512-557c-4744-b027-66d079ce5a55","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"url":"1/user/borrow-book/:id","description":"<p><strong>NEED TOKEN</strong></p>\n<p>Borrowing certain book for user.</p>\n<p>required params:</p>\n<ul>\n<li>id = int, min. 1 max. 1000</li>\n</ul>\n","urlObject":{"path":["user","borrow-book",":id"],"host":["1"],"query":[],"variable":[{"type":"any","value":"1","key":"id"}]}},"response":[{"id":"b8387a5e-fd19-4522-bdf0-a12acddefb2a","name":"User Borrowing Book","originalRequest":{"method":"POST","header":[],"url":{"raw":"1/user/borrow-book/:id","host":["1"],"path":["user","borrow-book",":id"],"variable":[{"key":"id","value":"1"}]}},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"218"},{"key":"ETag","value":"W/\"da-/Or5aen1tcXddHr1VGreSKQxvC4\""},{"key":"Date","value":"Fri, 13 Feb 2026 06:57:40 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"books\": {\n                \"title\": \"Analisis Data Menggunakan Bahasa Pemrograman Python\",\n                \"author\": \"Bambang Supardi\",\n                \"genre\": \"non_fiction\"\n            }\n        }\n    },\n    \"message\": \"Book borrowed successfully\"\n}"}],"_postman_id":"5b925512-557c-4744-b027-66d079ce5a55"},{"name":"User Returning Book","id":"95432391-4247-44fb-8641-bd0544c27d24","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"url":"1/user/return-book/:id","description":"<p><strong>NEED TOKEN</strong></p>\n<p>Returning borrowed certain book by the user.</p>\n<p>required params:</p>\n<ul>\n<li>id = int, min. 1 max. 1000</li>\n</ul>\n","urlObject":{"path":["user","return-book",":id"],"host":["1"],"query":[],"variable":[{"type":"any","value":"1","key":"id"}]}},"response":[{"id":"ef3c48df-03ed-48cc-94d3-8bde5761511c","name":"User Returning Book","originalRequest":{"method":"PATCH","header":[],"url":{"raw":"1/user/return-book/:id","host":["1"],"path":["user","return-book",":id"],"variable":[{"key":"id","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"234"},{"key":"ETag","value":"W/\"ea-HvMBjtmGHxPFGJdKKHdVEjA/Hbs\""},{"key":"Date","value":"Fri, 13 Feb 2026 08:16:01 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"id\": 13,\n            \"book_id\": 1,\n            \"user_id\": \"a7c4f0f0-7c3d-40cc-9450-89ec00929926\",\n            \"borrowment_date\": \"2026-02-13T08:01:01.322Z\",\n            \"returned_status\": true\n        }\n    },\n    \"message\": \"Book returned successfully\"\n}"}],"_postman_id":"95432391-4247-44fb-8641-bd0544c27d24"},{"name":"Delete User Account","id":"21d01ff2-40cb-4940-b62b-f6b8cc9b2330","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\r\n    \"password\":\"12345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/user/delete-account","description":"<p><strong>NEED USER TOKEN</strong></p>\n<p>Deleting user account</p>\n<p>Required req.body:</p>\n<ul>\n<li>password: correct user password</li>\n</ul>\n","urlObject":{"path":["user","delete-account"],"host":["1"],"query":[],"variable":[]}},"response":[{"id":"16cdb210-01a7-4b9e-bbbe-9f93958dc1eb","name":"Delete User Account","originalRequest":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\r\n    \"password\":\"12345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/user/delete-account"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"163"},{"key":"ETag","value":"W/\"a3-JcsqII35kpBc0Wq2B4k0Xmr+yVI\""},{"key":"Date","value":"Fri, 13 Feb 2026 08:16:59 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"fullname\": \"Mark Carlos\",\n            \"email\": \"mark.carlos@example.com\"\n        }\n    },\n    \"message\": \"User account deleted successfully\"\n}"}],"_postman_id":"21d01ff2-40cb-4940-b62b-f6b8cc9b2330"},{"name":"User Logout","id":"5dd166d2-9c94-4421-9ded-454da79d5964","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":""},"url":"1/user/logout","description":"<p><strong>NEED USER TOKEN</strong></p>\n<p>Logging out from user account</p>\n","urlObject":{"path":["user","logout"],"host":["1"],"query":[],"variable":[]}},"response":[{"id":"b512054e-5d53-4acd-b9b5-03fcccc5ef22","name":"User Logout","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":""},"url":"1/user/logout"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"90"},{"key":"ETag","value":"W/\"5a-CVKAWI3lkXRqWjp+REsNGMYaP78\""},{"key":"Date","value":"Fri, 13 Feb 2026 13:30:09 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": null,\n    \"message\": \"User logged out successfully\"\n}"}],"_postman_id":"5dd166d2-9c94-4421-9ded-454da79d5964"}],"id":"595dcfc8-fcbd-4b3f-8f2a-a0805a24d478","description":"<p><strong>User Routes</strong></p>\n","_postman_id":"595dcfc8-fcbd-4b3f-8f2a-a0805a24d478"},{"name":"Admin Routes","item":[{"name":"Admin Login","id":"347f3b5e-c8a3-487e-a19a-0c2320947291","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\":\"admin@gmail.com\",\r\n    \"password\":\"admin1234\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/admin/login","description":"<p>Admin Login</p>\n<p>Required req.body:</p>\n<ul>\n<li><p>email: valid email, max.255</p>\n</li>\n<li><p>password: string, min. 8 max.255</p>\n</li>\n</ul>\n","urlObject":{"path":["admin","login"],"host":["1"],"query":[],"variable":[]}},"response":[{"id":"f30ae1f2-28ac-4cf8-b378-640e9ff9b81a","name":"Admin Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\":\"admin@gmail.com\",\r\n    \"password\":\"admin1234\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/admin/login"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"538"},{"key":"ETag","value":"W/\"21a-EUiKGTBY7ikJs5mBVTj7w+AsmGY\""},{"key":"Date","value":"Fri, 13 Feb 2026 10:37:24 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"id\": \"1caa4793-39f5-465c-af3c-7252beec7030\",\n            \"fullname\": \"admin\",\n            \"email\": \"admin@gmail.com\",\n            \"role\": \"admin\"\n        },\n        \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjFjYWE0NzkzLTM5ZjUtNDY1Yy1hZjNjLTcyNTJiZWVjNzAzMCIsInVzZXJuYW1lIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4iLCJqdGkiOiIzMDYyMDU5MC0wMmFkLTQwMDEtODk3Yy02OTIwNWU2MjAxYzciLCJpYXQiOjE3NzA5NzkwNDQsImV4cCI6MTc3MDk4MjY0NCwiaXNzIjoibGlicmFyeV9hcGkifQ.v2ys2q2gWw9thbLLm_sUy6gUAREsQ5skLRuDm5VvTq4\"\n    },\n    \"message\": \"User logged in successfully\"\n}"}],"_postman_id":"347f3b5e-c8a3-487e-a19a-0c2320947291"},{"name":"Get Paginated Borrowed Book List","id":"4f81ad0b-6b35-40cb-9d8f-a80c800e7457","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"1/admin/borrowed-books-list?page=1&limit=5","description":"<p><strong>NEED ADMIN TOKEN</strong></p>\n<p><strong>Optional</strong> req.query =</p>\n<ul>\n<li><p>page: int, min. 1 (default: 1)</p>\n</li>\n<li><p>limit: int, min.1 max 30 (default: 10)</p>\n</li>\n</ul>\n","urlObject":{"path":["admin","borrowed-books-list"],"host":["1"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}],"variable":[]}},"response":[{"id":"60926574-e116-4352-9eee-cbc2fe8ff41e","name":"Get Paginated Borrowed Book List","originalRequest":{"method":"GET","header":[],"url":{"raw":"1/admin/borrowed-books-list?page=1&limit=5","host":["1"],"path":["admin","borrowed-books-list"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"156"},{"key":"ETag","value":"W/\"9c-bJm5ygOD+pBDKHoIAJUhuppPI5U\""},{"key":"Date","value":"Fri, 13 Feb 2026 10:41:18 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"page\": 1,\n        \"limit\": 5,\n        \"total\": 0,\n        \"totalPages\": 0,\n        \"results\": []\n    },\n    \"message\": \"Borrowed books list fetched successfully\"\n}"}],"_postman_id":"4f81ad0b-6b35-40cb-9d8f-a80c800e7457"},{"name":"Adding Book","id":"50efe922-043f-4de0-992f-3f560cd50fbb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\":\"Cara Membuat CV untuk Anak TK\",\r\n    \"author\": \"Ikhwan\",\r\n    \"genre\":\"fiction\",\r\n    \"description\":\"Buku ini sangat bermanfaat bagi anak TK\",\r\n    \"quantity\":\"12\",\r\n    \"borrowable\":\"false\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/admin/add-book","description":"<p><strong>NEED ADMIN TOKEN</strong></p>\n<p>Adding book.</p>\n<p>Required req.body=</p>\n<ul>\n<li><p>title: string max.500</p>\n</li>\n<li><p>author: string max.255</p>\n</li>\n<li><p>genre: enum [\"fiction\", \"non-fiction\"],</p>\n</li>\n<li><p>description: text</p>\n</li>\n<li><p>quantity: int min.1</p>\n</li>\n<li><p>borrowable: boolean[\"true\", \"false\"]</p>\n</li>\n</ul>\n","urlObject":{"path":["admin","add-book"],"host":["1"],"query":[],"variable":[]}},"response":[{"id":"f90c115d-21f1-4b4c-bba7-540ee40de945","name":"Adding Book","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\":\"Cara Membuat CV untuk Anak TK\",\r\n    \"author\": \"Ikhwan\",\r\n    \"genre\":\"fiction\",\r\n    \"description\":\"Buku ini sangat bermanfaat bagi anak TK\",\r\n    \"quantity\":\"12\",\r\n    \"borrowable\":\"false\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/admin/add-book"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"266"},{"key":"ETag","value":"W/\"10a-ST/OZ+12/iFNDtKlvJwAK7s+Hbc\""},{"key":"Date","value":"Fri, 13 Feb 2026 12:18:23 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 201,\n    \"data\": {\n        \"results\": {\n            \"id\": 5,\n            \"title\": \"Cara Membuat CV untuk Anak TK\",\n            \"author\": \"Ikhwan\",\n            \"genre\": \"fiction\",\n            \"description\": \"Buku ini sangat bermanfaat bagi anak TK\",\n            \"quantity\": 12,\n            \"borrowable\": false\n        }\n    },\n    \"message\": \"Book added successfully\"\n}"}],"_postman_id":"50efe922-043f-4de0-992f-3f560cd50fbb"},{"name":"Updating Book Data","id":"972d9dfb-580e-472b-b00d-2524e0c22ee2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"quantity\":\"16\",\r\n    \"borrowable\":\"true\"\r\n}","options":{"raw":{"language":"json"}}},"url":"1/admin/update-book/:id","description":"<p><strong>NEED ADMIN TOKEN</strong></p>\n<p>Updating book data.</p>\n<p>Required req.param:</p>\n<ul>\n<li>id: int, min.1 max.1000</li>\n</ul>\n<p>Optional (atleast one needed) req.body=</p>\n<ul>\n<li><p>title: string max.500</p>\n</li>\n<li><p>author: string max.255</p>\n</li>\n<li><p>genre: enum [\"fiction\", \"non-fiction\"],</p>\n</li>\n<li><p>description: text</p>\n</li>\n<li><p>quantity: int min.1</p>\n</li>\n<li><p>borrowable: boolean[\"true\", \"false\"]</p>\n</li>\n</ul>\n","urlObject":{"path":["admin","update-book",":id"],"host":["1"],"query":[],"variable":[{"type":"any","value":"5","key":"id"}]}},"response":[{"id":"ff26f25d-8fd9-46f2-91cf-1554dd3fc375","name":"Updating Book Data","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"quantity\":\"16\",\r\n    \"borrowable\":\"true\"\r\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"1/admin/update-book/:id","host":["1"],"path":["admin","update-book",":id"],"variable":[{"key":"id","value":"5"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"267"},{"key":"ETag","value":"W/\"10b-vQUJVEHjJEUNqMNZdwMUr4nERC8\""},{"key":"Date","value":"Fri, 13 Feb 2026 12:25:46 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"id\": 5,\n            \"title\": \"Cara Membuat CV untuk Anak TK\",\n            \"author\": \"Ikhwan\",\n            \"genre\": \"fiction\",\n            \"description\": \"Buku ini sangat bermanfaat bagi anak TK\",\n            \"quantity\": 16,\n            \"borrowable\": true\n        }\n    },\n    \"message\": \"Book updated successfully\"\n}"}],"_postman_id":"972d9dfb-580e-472b-b00d-2524e0c22ee2"},{"name":"Deleting Book","id":"fe54069d-a8bc-4e54-99f6-e8a523d68548","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"body":{"mode":"raw","raw":""},"url":"1/admin/delete-book/:id","description":"<p><strong>NEED ADMIN TOKEN</strong></p>\n<p>Deleting book. Cannot delete if respective book are not returned completely</p>\n<p>Required req.param:</p>\n<ul>\n<li>id: int, min.1 max.1000</li>\n</ul>\n","urlObject":{"path":["admin","delete-book",":id"],"host":["1"],"query":[],"variable":[{"type":"any","value":"5","key":"id"}]}},"response":[{"id":"eeddf14d-9fec-415a-9fa4-8f0b4317a723","name":"Deleting Book","originalRequest":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":""},"url":{"raw":"1/admin/delete-book/:id","host":["1"],"path":["admin","delete-book",":id"],"variable":[{"key":"id","value":"5"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"267"},{"key":"ETag","value":"W/\"10b-1DBzTnTIQkyR3akHgk828ME9b8M\""},{"key":"Date","value":"Fri, 13 Feb 2026 12:26:18 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": {\n        \"results\": {\n            \"id\": 5,\n            \"title\": \"Cara Membuat CV untuk Anak TK\",\n            \"author\": \"Ikhwan\",\n            \"genre\": \"fiction\",\n            \"description\": \"Buku ini sangat bermanfaat bagi anak TK\",\n            \"quantity\": 16,\n            \"borrowable\": true\n        }\n    },\n    \"message\": \"Book deleted successfully\"\n}"}],"_postman_id":"fe54069d-a8bc-4e54-99f6-e8a523d68548"},{"name":"Admin Logout","id":"5a277196-5ea7-4bbd-950d-ba288c447d7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\":\"admin@gmail.com\",\r\n    \"password\":\"admin1234\"\r\n}"},"url":"1/admin/logout","description":"<p><strong>NEED ADMIN TOKEN</strong></p>\n<p>Logging out from admin account</p>\n","urlObject":{"path":["admin","logout"],"host":["1"],"query":[],"variable":[]}},"response":[{"id":"c7892b71-6353-4bc4-ae21-2304d861f4ba","name":"Admin Logout","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\":\"admin@gmail.com\",\r\n    \"password\":\"admin1234\"\r\n}"},"url":"1/admin/logout"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"91"},{"key":"ETag","value":"W/\"5b-MGBMVDDeQ4233potdb4jUcC+QSg\""},{"key":"Date","value":"Fri, 13 Feb 2026 14:35:29 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"Success\",\n    \"statusCode\": 200,\n    \"data\": null,\n    \"message\": \"Admin logged out successfully\"\n}"}],"_postman_id":"5a277196-5ea7-4bbd-950d-ba288c447d7a"}],"id":"ce982c9b-ef1c-4604-909b-1a8bbc935a17","description":"<p><strong>Admin Routes</strong></p>\n","_postman_id":"ce982c9b-ef1c-4604-909b-1a8bbc935a17"}],"event":[{"listen":"prerequest","script":{"id":"6bc6cd06-e7ff-4956-a493-771c01003389","type":"text/javascript","requests":{},"exec":[""]}},{"listen":"test","script":{"id":"bc6ff930-3b58-4604-9c0a-5df3058f4451","type":"text/javascript","requests":{},"exec":[""]}}],"variable":[{"key":"local","value":"1"}]}