{"info":{"_postman_id":"f34decce-3831-43ca-82e5-74b6780e94b3","name":"E-Commmerce API","description":"<html><head></head><body><h1 id=\"documentation-for-the-e-commerce-api-project\">Documentation for the E-Commerce API Project</h1>\n<p>The GitHub repository for the project can be found <a href=\"https://github.com/adolfojmnz/e-commerce-api\">here</a>. It provides information on how to get the proejct \"Up and Running\".</p>\n<p>The instructions found in this documentation will allow you to successfully work with all the endpoints that this API provides.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Documentation for the E-Commerce API Project","slug":"documentation-for-the-e-commerce-api-project"}],"owner":"26698816","collectionId":"f34decce-3831-43ca-82e5-74b6780e94b3","publishedId":"2s946fdsnQ","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2023-07-16T01:46:58.000Z"},"item":[{"name":"JWT Token","item":[{"name":"Get Tokens","id":"e3186ea3-0457-4a9c-9082-1b39793d7d91","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"jane_doe","type":"text"},{"key":"password","value":"jane#passwd","type":"text"}]},"url":"http://localhost:8000/api/token/","description":"<h2 id=\"generates-access-and-refresh-tokens\">Generates <code>access</code> and <code>refresh</code> tokens</h2>\n<h4 id=\"payload\">Payload:</h4>\n<p>The request's payload requires the <code>username</code> and <code>password</code> of a registered account</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","token",""],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"315a7a23-3acc-4d5a-bec6-a8b6f70349c1","name":"Get Tokens","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"john_doe","type":"text"},{"key":"password","value":"john#passwd","type":"text"}]},"url":"http://localhost:8000/api/token/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 01:49:12 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"486"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY4OTU1ODU1MiwiaWF0IjoxNjg5NDcyMTUyLCJqdGkiOiJjYTkwYmM4YzJkOTk0YTM3YmYzMDI5NTNiN2VkZTQyNSIsInVzZXJfaWQiOjY2fQ.D8rE0m33zroPwyzbVyaMe0TIJP7q6hhZ2TZYERxrSFs\",\n    \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjg5NDczOTUyLCJpYXQiOjE2ODk0NzIxNTIsImp0aSI6IjE5MzAxMjQwNTA3ZTQ0YWVhZWZiOTdhODYyNWJjNjhlIiwidXNlcl9pZCI6NjZ9.tY6sA1J05sWxv8d7yp5sPkO2BZUQM21ye_8EiVozjdU\"\n}"}],"_postman_id":"e3186ea3-0457-4a9c-9082-1b39793d7d91"},{"name":"Refresh Access Token","id":"400dbe20-aa82-42e3-a0fb-6e0f8c339692","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"refresh","value":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY4OTUxNDM4NywiaWF0IjoxNjg5NDI3OTg3LCJqdGkiOiJiZDIyZjIzMjMxZjc0MWRjYjI2ODIyOTZhZjAzOThiZiIsInVzZXJfaWQiOjY2fQ.8SwwbsXiFw3005lk_5iD4Tyx5zlBT3JQdOUP-RyX4MM","description":"<p>Valid refresh token</p>\n","type":"text"}]},"url":"http://localhost:8000/api/token/refresh/","description":"<h2 id=\"generates-a-new-access-token\">Generates a new <code>access</code> token</h2>\n<h4 id=\"payload\">Payload:</h4>\n<p>The request's payload requires an active <code>refresh</code> token</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","token","refresh",""],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"0c59aaee-9779-4d8a-a2f0-e26c6e7d7591","name":"Refresh Access Token","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"refresh","value":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY4OTUxNDM4NywiaWF0IjoxNjg5NDI3OTg3LCJqdGkiOiJiZDIyZjIzMjMxZjc0MWRjYjI2ODIyOTZhZjAzOThiZiIsInVzZXJfaWQiOjY2fQ.8SwwbsXiFw3005lk_5iD4Tyx5zlBT3JQdOUP-RyX4MM","description":"Valid refresh token","type":"text"}]},"url":"http://localhost:8000/api/token/refresh/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 01:58:36 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"242"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjg5NDc0NTE2LCJpYXQiOjE2ODk0Mjc5ODcsImp0aSI6ImU3NGQ1MmY3MWU2NjQ1OGZhY2E2NWJjZWEyNjE4NGM2IiwidXNlcl9pZCI6NjZ9.QAcLiOU_bVzTVqzIejzb_MhEGKlIjizpa6Gaef9nQq4\"\n}"},{"id":"e80a2270-edfa-4dd3-a91b-54d03772894c","name":"Refresh Access Token","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"refresh","value":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY4OTUxNDM4NywiaWF0IjoxNjg5NDI3OTg3LCJqdGkiOiJiZDIyZjIzMjMxZjc0MWRjYjI2ODIyOTZhZjAzOThiZiIsInVzZXJfaWQiOjY2fQ.8SwwbsXiFw3005lk_5iD4Tyx5zlBT3JQdOUP-RyX4MM","description":"Valid refresh token","type":"text"}]},"url":"http://localhost:8000/api/token/refresh/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 01:59:31 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"242"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjg5NDc0NTcxLCJpYXQiOjE2ODk0Mjc5ODcsImp0aSI6ImQ3ZjcxOTU3OThjNjQxNDM4YzVhMWRiNDc2ZjZkMGUwIiwidXNlcl9pZCI6NjZ9.vEJgJ7agsjZfijdckYBhwOSQfHzzDTwMj6_XdCP-sQc\"\n}"}],"_postman_id":"400dbe20-aa82-42e3-a0fb-6e0f8c339692"},{"name":"Blacklist Refresh Token","id":"5e0d7573-4f9d-4c58-8d00-d95693186d9d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"refresh","value":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY4OTU1ODU1MiwiaWF0IjoxNjg5NDcyMTUyLCJqdGkiOiJjYTkwYmM4YzJkOTk0YTM3YmYzMDI5NTNiN2VkZTQyNSIsInVzZXJfaWQiOjY2fQ.D8rE0m33zroPwyzbVyaMe0TIJP7q6hhZ2TZYERxrSFs","description":"<p>Refresh token to be blacklisted</p>\n","type":"text"}]},"url":"http://localhost:8000/api/token/blacklist/","description":"<h2 id=\"blacklists-a-refresh-token\">Blacklists a <code>refresh</code> token</h2>\n<p>The operation blacklists the passed <code>refresh</code> token which prevents the generation of new <code>access</code> tokens. Additionally, the operation also blacklists the current active <code>access</code> token associated to the <code>refresh</code> token.</p>\n<h4 id=\"payload\">Payload:</h4>\n<p>The request's payload requires the refresh token to be blacklisted.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","token","blacklist",""],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"790d81d9-3240-4bd4-9064-d8b2ab708ded","name":"Blacklist Refresh Token","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"refresh","value":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY4OTU1ODU1MiwiaWF0IjoxNjg5NDcyMTUyLCJqdGkiOiJjYTkwYmM4YzJkOTk0YTM3YmYzMDI5NTNiN2VkZTQyNSIsInVzZXJfaWQiOjY2fQ.D8rE0m33zroPwyzbVyaMe0TIJP7q6hhZ2TZYERxrSFs","description":"Refresh token to be blacklisted","type":"text"}]},"url":"http://localhost:8000/api/token/blacklist/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 01:55:43 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"2"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{}"}],"_postman_id":"5e0d7573-4f9d-4c58-8d00-d95693186d9d"}],"id":"3411eb1c-cc6c-49ac-92d9-a1ab0e113dd5","description":"<h2 id=\"this-api-requires-jason-web-token-authentication-for-most-of-its-endpoints\">This API requires Jason Web Token authentication for most of its endpoints.</h2>\n<p>After you have created an account, use the <code>Get Tokens</code> endpoint to generate your access and refresh tokens.</p>\n<h3 id=\"access-token\">Access token</h3>\n<p>Description: It's used to perform authenticated requests.</p>\n<p>Duration: 5 minutes.</p>\n<h3 id=\"refresh-token\">Refresh token</h3>\n<p>Description: It's used to generate new access tokens.</p>\n<p>Duration: 24 hours.</p>\n","_postman_id":"3411eb1c-cc6c-49ac-92d9-a1ab0e113dd5"},{"name":"Accounts","item":[{"name":"Customers List","id":"591e942b-f8c1-4f80-95b4-dd3bf5c07bfc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"http://localhost:8000/api/customers","description":"<h2 id=\"lists-active-customers\">Lists active customers</h2>\n<p>The operation retrieves the list of all active customers</p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>None. Non-register users can perform this operation</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","customers"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"9a8fbc60-c984-44a3-880e-3082652a148a","name":"Customer List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/customers"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 02:16:58 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"651"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"email\": \"john_dow@e-commerce-api.com\",\n        \"username\": \"john_doe\",\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"about\": \"John Doe's optional bio\",\n        \"avatar_url\": \"http://localhost:8000/media/images/john_doe.png\",\n        \"birthdate\": \"1998-12-01\",\n        \"is_active\": true,\n        \"is_staff\": false,\n        \"last_login\": null,\n        \"date_joined\": \"2023-07-16T02:15:19.656708Z\"\n    },\n    {\n        \"id\": 2,\n        \"email\": \"jane_dow@e-commerce-api.com\",\n        \"username\": \"jane_doe\",\n        \"first_name\": \"Jane\",\n        \"last_name\": \"Doe\",\n        \"about\": \"Jane Doe's optional bio\",\n        \"avatar_url\": \"http://localhost:8000/media/images/jane_doe.png\",\n        \"birthdate\": \"1998-12-02\",\n        \"is_active\": true,\n        \"is_staff\": false,\n        \"last_login\": null,\n        \"date_joined\": \"2023-07-16T02:16:53.394560Z\"\n    }\n]"}],"_postman_id":"591e942b-f8c1-4f80-95b4-dd3bf5c07bfc"},{"name":"Customer Create","id":"99499924-1f75-46dc-b6d7-5ee192e3c935","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"john_doe","type":"text"},{"key":"email","value":"john_doe@e-commerce-api.com","type":"text"},{"key":"first_name","value":"John","type":"text"},{"key":"last_name","value":"Doe","type":"text"},{"key":"birthdate","value":"1998-12-01","type":"text"},{"key":"about","value":"John Doe's optional bio","type":"text"},{"key":"password","value":"john#passwd","type":"text"},{"key":"avatar_url","value":"http://localhost:8000/media/images/john_doe.png","type":"text"}]},"url":"http://localhost:8000/api/customers","description":"<h2 id=\"creates-a-customer-with-the-provided-data\">Creates a customer with the provided data</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>None</li>\n</ul>\n<h4 id=\"optional-data\">Optional data:</h4>\n<ul>\n<li><strong>first_name</strong>: max length 150 chars</li>\n<li><strong>last_name</strong>: max length 150 chars</li>\n<li><strong>about</strong>: max length 512 chars</li>\n<li><strong>avatar_url</strong>: max length 512 chars</li>\n</ul>\n<h4 id=\"non-optional-data\">Non-optional data:</h4>\n<ul>\n<li><strong>username</strong>: unique, max length 150 chars. Letters, digits and @/./+/-/_ only</li>\n<li><strong>password</strong>: max length 128 chars, min length 8 chars</li>\n<li><strong>email</strong>: unique, max length 254 chars</li>\n<li><strong>birthdate</strong>: format DD-MM-YYYY</li>\n</ul>\n<h4 id=\"shopping-cart\">Shopping Cart</h4>\n<p>On the customer's account creation, a shopping cart (cart) is automatically assigned to the customer.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","customers"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"92fbed87-9851-4ce1-ade7-e50aa90f35a5","name":"Customer Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"john_doe","type":"text"},{"key":"email","value":"john_dow@e-commerce-api.com","type":"text"},{"key":"first_name","value":"John","type":"text"},{"key":"last_name","value":"Doe","type":"text"},{"key":"birthdate","value":"1998-12-01","type":"text"},{"key":"about","value":"John Doe's optional bio","type":"text"},{"key":"password","value":"john#passwd","type":"text"},{"key":"avatar_url","value":"http://localhost:8000/media/images/john_doe.png","type":"text"}]},"url":"http://localhost:8000/api/customers"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 02:15:19 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"324"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"email\": \"john_dow@e-commerce-api.com\",\n    \"username\": \"john_doe\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"about\": \"John Doe's optional bio\",\n    \"avatar_url\": \"http://localhost:8000/media/images/john_doe.png\",\n    \"birthdate\": \"1998-12-01\",\n    \"is_active\": true,\n    \"is_staff\": false,\n    \"last_login\": null,\n    \"date_joined\": \"2023-07-16T02:15:19.656708Z\"\n}"}],"_postman_id":"99499924-1f75-46dc-b6d7-5ee192e3c935"},{"name":"Customer Details","id":"9c24d059-a94f-48a1-9828-81e7203cff6e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"body":{"mode":"formdata","formdata":[]},"url":"http://localhost:8000/api/customers/1","description":"<h4 id=\"fetches-the-account-details-for-the-customer-with-the-matching-id\">Fetches the account details for the customer with the matching ID.</h4>\n<p>If a matching customer is found, this operation will fetch its data.</p>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/customers/{customerID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>None</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","customers","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"efa54af3-c892-4b95-b507-4c5a997a91c6","name":"Customer Details","originalRequest":{"method":"GET","header":[],"body":{"mode":"file","file":{}},"url":"http://localhost:8000/api/customers/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 02:18:40 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"324"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"email\": \"john_dow@e-commerce-api.com\",\n    \"username\": \"john_doe\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"about\": \"John Doe's optional bio\",\n    \"avatar_url\": \"http://localhost:8000/media/images/john_doe.png\",\n    \"birthdate\": \"1998-12-01\",\n    \"is_active\": true,\n    \"is_staff\": false,\n    \"last_login\": null,\n    \"date_joined\": \"2023-07-16T02:15:19.656708Z\"\n}"}],"_postman_id":"9c24d059-a94f-48a1-9828-81e7203cff6e"},{"name":"Customer Update","id":"30770143-bb7f-4847-bc9f-21c5244a7f22","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"jdoe","description":"<p>New value to be set (updated)</p>\n","type":"text"}]},"url":"http://localhost:8000/api/customers/1","description":"<h2 id=\"updates-the-details-of-the-customers-account-with-the-matching-id\">Updates the details of the customer's account with the matching ID</h2>\n<p>This operation updates the data of the customer's account with the data provided in the payload (if it is valid)</p>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/customers/{customerID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n<li>Customer (If the customer sending the request is the customer whose data will be updated)</li>\n</ul>\n<h4 id=\"account-attributes-that-can-be-updated\">Account attributes that can be updated:</h4>\n<ul>\n<li>Username</li>\n<li>First name</li>\n<li>Last name</li>\n<li>Email</li>\n<li>Birthdate</li>\n<li>Password</li>\n<li>About</li>\n<li>Avatar URL</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","customers","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"09a52134-58d8-468e-a892-5ce7e700c4f8","name":"Customer Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"jdoe","description":"New value to be set (updated)","type":"text"}]},"url":"http://localhost:8000/api/customers/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 02:23:45 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"345"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"email\": \"john_dow@e-commerce-api.com\",\n    \"username\": \"jdoe\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"about\": \"John Doe's optional bio\",\n    \"avatar_url\": \"http://localhost:8000/media/images/john_doe.png\",\n    \"birthdate\": \"1998-12-01\",\n    \"is_active\": true,\n    \"is_staff\": false,\n    \"last_login\": \"2023-07-16T02:23:23.622217Z\",\n    \"date_joined\": \"2023-07-16T02:15:19.656708Z\"\n}"}],"_postman_id":"30770143-bb7f-4847-bc9f-21c5244a7f22"},{"name":"Customer Delete","id":"ccfb83cc-4de5-4695-89de-0aa31b1bf5b0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:8000/api/customers/1","description":"<h2 id=\"sets-as-inactive-the-customer-account-with-the-matching-id\">Sets as inactive the customer account with the matching ID.</h2>\n<p>Deleting an account could break multiple relationships, therefore, this operation sets the account as inactive.</p>\n<p>Customers with inactive accounts will not be able to get <code>refresh</code> and <code>access</code> tokens and therefore, will not be able to interact with the API.</p>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/customers/{customerID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n<li>Customer (If the customer sending the request is the customer whose account will be inactivated)</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","customers","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"8a753614-5563-493c-a127-5b4ee44ad0e9","name":"Customer Delete","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/customers/3"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 02:28:52 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"48"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"The user has been set as inactive.\"\n}"}],"_postman_id":"ccfb83cc-4de5-4695-89de-0aa31b1bf5b0"},{"name":"Admin List","id":"5f3db4e0-8df2-4d54-93de-b6396ef23c87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:8000/api/admins","description":"<h2 id=\"lists-active-admins\">Lists active admins</h2>\n<p>The operation retrieves the list of all active admins</p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","admins"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"9ffd758e-49b8-41a8-b1ea-e934667da4b8","name":"Admin List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/admins"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 21:48:29 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"669"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 6,\n        \"email\": \"richard_roe@e-commerce-api.com\",\n        \"username\": \"richard_roe\",\n        \"first_name\": \"Richard\",\n        \"last_name\": \"Roe\",\n        \"about\": \"Richard Roe's optional bio\",\n        \"avatar_url\": \"http://localhost:8000/media/images/richard_roe.png\",\n        \"birthdate\": \"1998-12-01\",\n        \"is_active\": true,\n        \"is_staff\": true,\n        \"last_login\": null,\n        \"date_joined\": \"2023-07-16T21:43:39.177712Z\"\n    },\n    {\n        \"id\": 7,\n        \"email\": \"janie_roe@e-commerce-api.com\",\n        \"username\": \"janie_roe\",\n        \"first_name\": \"Janie\",\n        \"last_name\": \"Roe\",\n        \"about\": \"Janie Roe's optional bio\",\n        \"avatar_url\": \"http://localhost:8000/media/images/janie_roe.png\",\n        \"birthdate\": \"1998-12-01\",\n        \"is_active\": true,\n        \"is_staff\": true,\n        \"last_login\": null,\n        \"date_joined\": \"2023-07-16T21:45:03.804548Z\"\n    }\n]"}],"_postman_id":"5f3db4e0-8df2-4d54-93de-b6396ef23c87"},{"name":"Admin Create","id":"b8f85cfd-d85e-41a3-92b1-9377b45f2cb5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"richard_roe","type":"text"},{"key":"email","value":"richard_roe@e-commerce-api.com","type":"text"},{"key":"first_name","value":"Richard","type":"text"},{"key":"last_name","value":"Roe","type":"text"},{"key":"birthdate","value":"1998-12-01","type":"text"},{"key":"about","value":"Richard Roe's optional bio","type":"text"},{"key":"password","value":"richard#passwd","type":"text"},{"key":"avatar_url","value":"http://localhost:8000/media/images/richard_roe.png","type":"text"}]},"url":"http://localhost:8000/api/admins","description":"<h2 id=\"creates-an-admin-account\">Creates An Admin Account</h2>\n<p>Admin accounts have<code>is_staff=True</code> attribute</p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n<h4 id=\"optional-data\">Optional data:</h4>\n<ul>\n<li><strong>first_name</strong>: max length 150 chars</li>\n<li><strong>last_name</strong>: max length 150 chars</li>\n<li><strong>about</strong>: max length 512 chars</li>\n<li><strong>avatar_url</strong>: max length 512 chars</li>\n</ul>\n<h4 id=\"non-optional-data\">Non-optional data:</h4>\n<ul>\n<li><strong>username</strong>: unique, max length 150 chars. Letters, digits and @/./+/-/_ only</li>\n<li><strong>password</strong>: max length 128 chars, min length 8 chars</li>\n<li><strong>email</strong>: unique, max length 254 chars</li>\n<li><strong>birthdate</strong>: format DD-MM-YYYY</li>\n</ul>\n<h4 id=\"shopping-cart\">Shopping Cart</h4>\n<p>No shopping cart is assigned to admin accounts</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","admins"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"4490f67c-b0ae-4903-bdc2-9cf5d4ed7a7d","name":"Admin Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"richard_roe","type":"text"},{"key":"email","value":"richard_roe@e-commerce-api.com","type":"text"},{"key":"first_name","value":"Richard","type":"text"},{"key":"last_name","value":"Roe","type":"text"},{"key":"birthdate","value":"1998-12-01","type":"text"},{"key":"about","value":"Richard Roe's optional bio","type":"text"},{"key":"password","value":"richard#passwd","type":"text"},{"key":"avatar_url","value":"http://localhost:8000/media/images/richard_roe.png","type":"text"}]},"url":"http://localhost:8000/api/admins"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 21:43:39 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"338"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 6,\n    \"email\": \"richard_roe@e-commerce-api.com\",\n    \"username\": \"richard_roe\",\n    \"first_name\": \"Richard\",\n    \"last_name\": \"Roe\",\n    \"about\": \"Richard Roe's optional bio\",\n    \"avatar_url\": \"http://localhost:8000/media/images/richard_roe.png\",\n    \"birthdate\": \"1998-12-01\",\n    \"is_active\": true,\n    \"is_staff\": true,\n    \"last_login\": null,\n    \"date_joined\": \"2023-07-16T21:43:39.177712Z\"\n}"}],"_postman_id":"b8f85cfd-d85e-41a3-92b1-9377b45f2cb5"},{"name":"Admin Details","id":"417ea74e-c11f-48fd-9084-b584f1871ec2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:8000/api/admins/6","description":"<h2 id=\"fetches-the-account-details-for-the-admin-with-the-matching-id\">Fetches the account details for the admin with the matching ID.</h2>\n<p>If the matching admin is found, this operation will fetch its data.</p>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/admins/{adminID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","admins","6"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"a211523d-0d60-403c-bf0d-866514515635","name":"Admin Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/admins/6"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 21:50:42 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"338"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 6,\n    \"email\": \"richard_roe@e-commerce-api.com\",\n    \"username\": \"richard_roe\",\n    \"first_name\": \"Richard\",\n    \"last_name\": \"Roe\",\n    \"about\": \"Richard Roe's optional bio\",\n    \"avatar_url\": \"http://localhost:8000/media/images/richard_roe.png\",\n    \"birthdate\": \"1998-12-01\",\n    \"is_active\": true,\n    \"is_staff\": true,\n    \"last_login\": null,\n    \"date_joined\": \"2023-07-16T21:43:39.177712Z\"\n}"}],"_postman_id":"417ea74e-c11f-48fd-9084-b584f1871ec2"},{"name":"Admin Update","id":"e1448eb3-f493-4fb7-a8b9-dc604eeb1e0b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"richardRoe","description":"<p>New value to be set</p>\n","type":"text"},{"key":"","value":"","type":"text","disabled":true}]},"url":"http://localhost:8000/api/admins/6","description":"<h2 id=\"updates-the-details-of-the-admins-account-with-the-matching-id\">Updates the details of the admin's account with the matching ID.</h2>\n<p>This operation updates the data of the admin's account with the data provided in the payload (if it is valid)</p>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/admins/{adminID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Superuser</li>\n<li>Admin (If the admin sending the request is the admin whose data will be updated)</li>\n</ul>\n<h4 id=\"attributes-that-can-be-updated\">Attributes that can be updated:</h4>\n<ul>\n<li>Username</li>\n<li>First name</li>\n<li>Last name</li>\n<li>Email</li>\n<li>Birthdate</li>\n<li>Password</li>\n<li>About</li>\n<li>Avatar URL</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","admins","6"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"8c3d0325-5692-4dc9-bfd4-2f4b953b9311","name":"Admin Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"richardRoe","description":"New value to be set","type":"text"}]},"url":"http://localhost:8000/api/admins/6"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sun, 16 Jul 2023 21:58:54 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"337"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 6,\n    \"email\": \"richard_roe@e-commerce-api.com\",\n    \"username\": \"richardRoe\",\n    \"first_name\": \"Richard\",\n    \"last_name\": \"Roe\",\n    \"about\": \"Richard Roe's optional bio\",\n    \"avatar_url\": \"http://localhost:8000/media/images/richard_roe.png\",\n    \"birthdate\": \"1998-12-01\",\n    \"is_active\": true,\n    \"is_staff\": true,\n    \"last_login\": null,\n    \"date_joined\": \"2023-07-16T21:43:39.177712Z\"\n}"}],"_postman_id":"e1448eb3-f493-4fb7-a8b9-dc604eeb1e0b"},{"name":"Admin Delete","id":"52de39bf-e316-4fce-9c3c-579c0f2c52bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:8000/api/admins/6","description":"<h2 id=\"sets-as-inactive-the-admins-account-with-the-matching-id\">Sets as inactive the admin's account with the matching ID.</h2>\n<p>Deleting an account could break multiple relationships, therefore, this operation sets the account as inactive.</p>\n<p>Admins with inactive accounts will not be able to get <code>refresh</code> and <code>access</code> tokens and therefore, will not be able to interact with the API.</p>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/admins/{adminID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Superuser</li>\n<li>Admin (If the admin sending the request is the admin whose account will be inactivated)</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","admins","6"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"785d0d3f-789a-4af3-8e18-b560d62baabe","name":"Admin Delete","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/admins/6"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 17 Jul 2023 13:53:03 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"48"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"The user has been set as inactive.\"\n}"}],"_postman_id":"52de39bf-e316-4fce-9c3c-579c0f2c52bf"}],"id":"e60f69cb-c49a-4374-b736-499bb6d1d84b","description":"<h2 id=\"this-section-shows-how-to-work-with-the-endpoints-for-account-management\">This section shows how to work with the endpoints for account management.</h2>\n<h3 id=\"account-types\">Account Types</h3>\n<p>There are a total of three roles (accounts type)</p>\n<ul>\n<li>Customer</li>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n<h3 id=\"hierarchy\">Hierarchy</h3>\n<p>The hierarchy in terms of the level of authorization is defined as follows</p>\n<ul>\n<li>Superuser: Is above admins</li>\n<li>Admin: Is above customers</li>\n<li>Customer: Is above non-authenticated user</li>\n</ul>\n<h3 id=\"clarifications\">Clarifications</h3>\n<ul>\n<li>Superusers' accounts cannot be managed through the endpoints, but only through the Django Admin Interface.</li>\n<li>Superusers can log in using the JWT endpoints and perform any operation an admin could perform.</li>\n<li>For security and integrity reasons, admins and superusers also have limitations, such as not being able to make unsafe requests over the customers' shopping carts and orders (POST, PATCH, DELETE)</li>\n</ul>\n<h3 id=\"authorization-and-constraints\">Authorization and Constraints</h3>\n<p>Each account type has a set of permissions and constraints defined across all the endpoints of the project. More information and clarification on the subject will be found in the sections further down below.</p>\n","_postman_id":"e60f69cb-c49a-4374-b736-499bb6d1d84b"},{"name":"Images","item":[{"name":"Add Image","id":"dbe2fe92-adff-4aff-9f85-c6702e3c10cf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"image","type":"file","src":"/home/adolfoj/Pictures/e-commerce/watches/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q.jpg"}]},"url":"http://localhost:8000/api/images","description":"<h2 id=\"creates-an-image-instance-by-uploading-the-image-file-in-the-payload-to-the-server\">Creates an image (instance) by uploading the image (file) in the payload to the server</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"bbdbc591-62db-4062-9e48-3083d8d0bbfb","id":"bbdbc591-62db-4062-9e48-3083d8d0bbfb","name":"Images","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","images"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"81c00fa4-4877-458e-af78-cdbae3373108","name":"Add Image","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"image","type":"file","src":"/home/adolfoj/Pictures/e-commerce/watches/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q.jpg"}]},"url":"http://localhost:8000/api/images"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 22 Jul 2023 19:10:59 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"215"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"image\": \"http://localhost:8000/media/images/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q_hYqqpvu.jpg\",\n    \"image_url\": \"/media/images/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q_hYqqpvu.jpg\"\n}"}],"_postman_id":"dbe2fe92-adff-4aff-9f85-c6702e3c10cf"}],"id":"bbdbc591-62db-4062-9e48-3083d8d0bbfb","description":"<h2 id=\"the-images-endpoints\">The images endpoints</h2>\n<p>Images endpoints are used to load images files to the server and then use its returning image URL in other's request payload, e.g,</p>\n<ul>\n<li>Account registration (avatar_url)</li>\n<li>Product creation (image_url)</li>\n</ul>\n<p>The idea behind this implementation is to simplify sending requests that may require an image and also, allow frontend implementation that can, for example, load an image (user avatar) while the user fills in the registration form, resulting in more efficient requests.</p>\n<h4 id=\"important-note\">Important Note</h4>\n<p>For the image URL attributes (such as the ones mentioned above) any URL can be used, as long as it matches the attribute's format criteria (text max length 512 chars).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"1bc60662-0b5f-48da-bc28-bed7fbdd9d80","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"a52f747a-cdfd-437d-890d-a888a087953e","type":"text/javascript","exec":[""]}}],"_postman_id":"bbdbc591-62db-4062-9e48-3083d8d0bbfb"},{"name":"Categories","item":[{"name":"Category List","id":"f8cade51-fd94-4dc7-95d9-a8baba0af050","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"body":{"mode":"formdata","formdata":[]},"url":"http://localhost:8000/api/categories","description":"<h2 id=\"lists-all-categories\">Lists all categories</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>None: Non-authenticated users can retrieve the list of categories</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","categories"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"6d6bb57b-650a-4f09-8077-f88b4f6b0dbc","name":"Category List","originalRequest":{"method":"GET","header":[],"body":{"mode":"formdata","formdata":[]},"url":"http://localhost:8000/api/categories"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 17 Jul 2023 14:03:41 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"1754"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 2,\n        \"name\": \"Men's Timepieces\",\n        \"description\": \"Men's timepieces, also known as men's watches, are a type of accessory that is designed to tell time and serve as a fashion statement for men. There are many different styles and types of men's timepieces available, ranging from casual and sporty watches to more formal and dressy models.\",\n        \"products_count\": 0\n    },\n    {\n        \"id\": 3,\n        \"name\": \"Comuter's accessories\",\n        \"description\": \"omputer accessories enhance the functionality and convenience of a computer. From monitors and keyboards to external hard drives and webcams, accessories provide greater flexibility, storage, and connectivity. Popular accessories include speakers, printers, and surge protectors. Whether for productivity, entertainment, or protection, a wide range of accessories is available to suit your needs.\",\n        \"products_count\": 0\n    },\n    {\n        \"id\": 1,\n        \"name\": \"Laptops (Gaming)\",\n        \"description\": \"A gaming laptop is a high-performance computing device designed specifically for playing video games. These laptops are optimized for fast and smooth gameplay, with powerful processors, high-end graphics cards, and large amounts of RAM. They typically have large, high-resolution displays with fast refresh rates, and often feature advanced cooling systems to prevent overheating during intensive gaming sessions.\",\n        \"products_count\": 1\n    },\n    {\n        \"id\": 4,\n        \"name\": \"Running Shoes\",\n        \"description\": \"Running shoes are athletic footwear designed for running. They provide comfort, support, and protection with cushioning systems, breathable materials, and durable soles. Some are designed for specific types of running, such as trail or long-distance. With a wide range of styles and designs, runners of all levels can find the right pair to help them perform their best.\",\n        \"products_count\": 0\n    }\n]"}],"_postman_id":"f8cade51-fd94-4dc7-95d9-a8baba0af050"},{"name":"Category Create","id":"8696a2b4-8813-437b-b0dc-9692ea7645a7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"Running Shoes","type":"text"},{"key":"description","value":"Running shoes are athletic footwear designed for running. They provide comfort, support, and protection with cushioning systems, breathable materials, and durable soles. Some are designed for specific types of running, such as trail or long-distance. With a wide range of styles and designs, runners of all levels can find the right pair to help them perform their best.","type":"text"}]},"url":"http://localhost:8000/api/categories","description":"<h2 id=\"creates-a-category-with-the-data-provided-in-the-payload\">Creates a category with the data provided in the payload</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n<h4 id=\"optional-data\">Optional data:</h4>\n<ul>\n<li><strong>description</strong>: max length 512 chars.</li>\n</ul>\n<h4 id=\"non-optional-data\">Non-optional data:</h4>\n<ul>\n<li><strong>name:</strong> unique, max length 128 chars.</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","categories"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"c7bea9f7-1383-4155-87cc-bb1d94cec755","name":"Category Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"Running Shoes","description":"Category name (max lenght 128 chars, unique=True, required=True)","type":"text"},{"key":"description","value":"Running shoes are athletic footwear designed for running. They provide comfort, support, and protection with cushioning systems, breathable materials, and durable soles. Some are designed for specific types of running, such as trail or long-distance. With a wide range of styles and designs, runners of all levels can find the right pair to help them perform their best.","description":"Category description (max lenght 512 chars)","type":"text"}]},"url":"http://localhost:8000/api/categories"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 17 Jul 2023 12:53:20 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"437"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 4,\n    \"name\": \"Running Shoes\",\n    \"description\": \"Running shoes are athletic footwear designed for running. They provide comfort, support, and protection with cushioning systems, breathable materials, and durable soles. Some are designed for specific types of running, such as trail or long-distance. With a wide range of styles and designs, runners of all levels can find the right pair to help them perform their best.\",\n    \"products_count\": 0\n}"}],"_postman_id":"8696a2b4-8813-437b-b0dc-9692ea7645a7"},{"name":"Category Details","id":"1948167c-c088-483f-ace2-2d31bd280616","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/categories/1","description":"<h2 id=\"retrieves-details-for-the-category-with-the-matching-id\">Retrieves details for the category with the matching ID.</h2>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/categories/{categoryID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>None: Non-authenticated users can retrieve the list of categories</li>\n</ul>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"5abbf26f-845b-4e1f-8f95-dfd672916870","id":"5abbf26f-845b-4e1f-8f95-dfd672916870","name":"Categories","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","categories","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"2731dc8d-642c-4757-bfac-dceec6bc9edf","name":"Get Category Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/categories/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 24 Jul 2023 15:26:27 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"483"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"name\": \"Laptops (Gaming)\",\n    \"description\": \"A gaming laptop is a high-performance computing device designed specifically for playing video games. These laptops are optimized for fast and smooth gameplay, with powerful processors, high-end graphics cards, and large amounts of RAM. They typically have large, high-resolution displays with fast refresh rates, and often feature advanced cooling systems to prevent overheating during intensive gaming sessions.\",\n    \"products_count\": 2\n}"}],"_postman_id":"1948167c-c088-483f-ace2-2d31bd280616"},{"name":"Category Update","id":"54e99dde-41fa-4216-95b0-edaa09743e5f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"Gamming Laptops","description":"<p>New value to be set</p>\n","type":"text"}]},"url":"http://localhost:8000/api/categories/1","description":"<h2 id=\"updates-the-details-for-the-category-with-the-matching-id\">Updates the details for the category with the matching ID.</h2>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/categories/{categoryID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n<h4 id=\"attributes-that-can-be-updated\">Attributes that can be updated:</h4>\n<ul>\n<li>name</li>\n<li>description</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","categories","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"023f6270-06ee-44cd-81d2-708e86df6553","name":"Category Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"Gamming Laptops","description":"New value to be set","type":"text"}]},"url":"http://localhost:8000/api/categories/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 24 Jul 2023 15:32:25 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"482"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"name\": \"Gamming Laptops\",\n    \"description\": \"A gaming laptop is a high-performance computing device designed specifically for playing video games. These laptops are optimized for fast and smooth gameplay, with powerful processors, high-end graphics cards, and large amounts of RAM. They typically have large, high-resolution displays with fast refresh rates, and often feature advanced cooling systems to prevent overheating during intensive gaming sessions.\",\n    \"products_count\": 2\n}"}],"_postman_id":"54e99dde-41fa-4216-95b0-edaa09743e5f"},{"name":"Category Products","id":"dc26eefa-6511-4978-834a-28ca8b0b06f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/categories/1/products","description":"<h2 id=\"retrieves-the-list-of-products-associated-with-the-category-with-the-matching-id\">Retrieves the list of products associated with the category with the matching ID.</h2>\n<h4 id=\"endpoint\">Endpoint:</h4>\n<p>The endpoint's URL has the form of <code>/api/categories/{CategoryID}/products</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required:</h4>\n<ul>\n<li>None: Non-authenticated users can retrieve the list of products associated with the category</li>\n</ul>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"5abbf26f-845b-4e1f-8f95-dfd672916870","id":"5abbf26f-845b-4e1f-8f95-dfd672916870","name":"Categories","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","categories","1","products"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"5409ae1b-e54d-4fa8-a6cc-283c14cdec1e","name":"Category Products","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/categories/1/products"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 24 Jul 2023 15:37:33 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"1782"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"name\": \"ASUS TUF Gaming A16 Advantage Edition (2023)\",\n        \"brand\": \"ASUS\",\n        \"image_url\": \"/media/products/A16_bg_kv_w8a7jPc.webp\",\n        \"description\": \"Jump right into the action with the TUF Gaming A16 Advantage™ Edition. Stream and multitask with ease thanks to the latest AMD Ryzen™ 9 7940HS CPU and up to 32GB of blisteringly fast 4800MHz DDR5 RAM on Windows 11. Leverage the full gaming performance of up to a AMD Radeon™ RX 7700S GPU with AMD Smart Access Graphics. When your game library gets full, an empty M.2 NVMe SSD slot makes upgrading storage capacity a breeze.\",\n        \"specifications\": {\n            \"os\": \"Windows 11\",\n            \"CPU\": \"Ryzen 9 7940HS\",\n            \"GPU\": \"Raedon RX 7700S\",\n            \"RAM\": \"32GB 4800MHz DDR5 Dual-Channel\",\n            \"Disk\": \"2TB PCIe 4.0 2x SSD\",\n            \"Refresh Rate\": \"240Hz QHD, 165Hz FHD\",\n            \"Charging Type\": \"Type-C  50% in 30 mins\",\n            \"Military Grade\": \"MIL-STD 810H Passed\",\n            \"Battery Capacity\": \"90Wh\",\n            \"Battery duration\": \"Up to 13.6 Hours of Video Playback\",\n            \"Screen-to-body Ratio\": \"90%\"\n        },\n        \"price\": \"1699.99\",\n        \"vendor\": 5,\n        \"category\": 1,\n        \"available\": true,\n        \"quantity\": 15,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 2,\n        \"name\": \"ASUS TUF GAMING F15 (2020)\",\n        \"brand\": \"ASUS\",\n        \"image_url\": \"/media/products/TUF-Gaming-F15-and-F17-1.png\",\n        \"description\": \"Geared for serious gaming and real-world durability, the TUF Gaming F15 is a fully-loaded Windows 11 Pro gaming laptop that can carry you to victory. Powered by the latest 10th Gen Intel® Core™ i5 CPU and GeForce® GTX 1660 GPU, action-packed gameplay is fast, fluid, and fully saturates speedy IPS-level displays up to 144Hz.\",\n        \"specifications\": {\n            \"CPU\": \"i5 10-300H\",\n            \"RAM\": \"16 GB DDR3 (dual-channel)\",\n            \"Storage\": \"512 GB NM.2 SSD x 2\",\n            \"Graphics\": \"Nvidia GTX Geforce 1650 4GB VRAM\"\n        },\n        \"price\": \"839.99\",\n        \"vendor\": 5,\n        \"category\": 1,\n        \"available\": true,\n        \"quantity\": 9,\n        \"rating\": null,\n        \"total_reviews\": 0\n    }\n]"}],"_postman_id":"dc26eefa-6511-4978-834a-28ca8b0b06f8"}],"id":"5abbf26f-845b-4e1f-8f95-dfd672916870","description":"<h2 id=\"categories-are-used-to-group-products-of-the-same-type-such-as-computers\">Categories are used to group products of the same type, such as <em>computers.</em></h2>\n<p>This section provides information on how to work with the endpoints in order to <em>create, retrieve, and update</em> categories, and also on how to retrieve the list of products associated with a category.</p>\n","auth":{"type":"noauth","isInherited":false},"event":[{"listen":"prerequest","script":{"id":"a2f3a44c-b519-4f00-b336-c9787cb8853f","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"66854cb8-eedf-43d7-a3a9-de96542d6bb5","type":"text/javascript","exec":[""]}}],"_postman_id":"5abbf26f-845b-4e1f-8f95-dfd672916870"},{"name":"Products","item":[{"name":"Product List","id":"36dd3151-d2f9-4898-959a-eefec95364bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"http://localhost:8000/api/products","description":"<h2 id=\"retrieves-the-list-of-available-products\">Retrieves the list of available products</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>None/Customer: At this level of authorization, unavailable products are filtered out.</li>\n<li>Admin/Superuser: Admins and Superusers can retrieve the full list of products (available and unavailable).</li>\n</ul>\n<h4 id=\"query-params\">Query Params</h4>\n<ul>\n<li>available:<ul>\n<li>If available=true retrieve only <em>available</em> products (default behavior)</li>\n<li>If available=false retrieve only <em>unavailable</em> products</li>\n</ul>\n</li>\n<li>all:<ul>\n<li>if all=true retrieve the full list of products</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","products"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"a447eab3-1ad8-4b29-a6a6-b61fca3789f7","name":"Available Product List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/products"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 16:20:05 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"5885"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"name\": \"ASUS TUF Gaming A16 Advantage Edition (2023)\",\n        \"brand\": \"ASUS\",\n        \"image_url\": \"/media/products/A16_bg_kv_w8a7jPc.webp\",\n        \"description\": \"Jump right into the action with the TUF Gaming A16 Advantage™ Edition. Stream and multitask with ease thanks to the latest AMD Ryzen™ 9 7940HS CPU and up to 32GB of blisteringly fast 4800MHz DDR5 RAM on Windows 11. Leverage the full gaming performance of up to a AMD Radeon™ RX 7700S GPU with AMD Smart Access Graphics. When your game library gets full, an empty M.2 NVMe SSD slot makes upgrading storage capacity a breeze.\",\n        \"specifications\": {\n            \"os\": \"Windows 11\",\n            \"CPU\": \"Ryzen 9 7940HS\",\n            \"GPU\": \"Raedon RX 7700S\",\n            \"RAM\": \"32GB 4800MHz DDR5 Dual-Channel\",\n            \"Disk\": \"2TB PCIe 4.0 2x SSD\",\n            \"Refresh Rate\": \"240Hz QHD, 165Hz FHD\",\n            \"Charging Type\": \"Type-C  50% in 30 mins\",\n            \"Military Grade\": \"MIL-STD 810H Passed\",\n            \"Battery Capacity\": \"90Wh\",\n            \"Battery duration\": \"Up to 13.6 Hours of Video Playback\",\n            \"Screen-to-body Ratio\": \"90%\"\n        },\n        \"price\": \"1699.99\",\n        \"vendor\": 5,\n        \"category\": 1,\n        \"available\": true,\n        \"quantity\": 15,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 2,\n        \"name\": \"ASUS TUF GAMING F15 (2020)\",\n        \"brand\": \"ASUS\",\n        \"image_url\": \"/media/products/TUF-Gaming-F15-and-F17-1.png\",\n        \"description\": \"Geared for serious gaming and real-world durability, the TUF Gaming F15 is a fully-loaded Windows 11 Pro gaming laptop that can carry you to victory. Powered by the latest 10th Gen Intel® Core™ i5 CPU and GeForce® GTX 1660 GPU, action-packed gameplay is fast, fluid, and fully saturates speedy IPS-level displays up to 144Hz.\",\n        \"specifications\": {\n            \"CPU\": \"i5 10-300H\",\n            \"RAM\": \"16 GB DDR3 (dual-channel)\",\n            \"Storage\": \"512 GB NM.2 SSD x 2\",\n            \"Graphics\": \"Nvidia GTX Geforce 1650 4GB VRAM\"\n        },\n        \"price\": \"839.99\",\n        \"vendor\": 5,\n        \"category\": 1,\n        \"available\": true,\n        \"quantity\": 9,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 3,\n        \"name\": \"Headset Razer Kraken Ultimate\",\n        \"brand\": \"Razer\",\n        \"image_url\": \"/media/images/razer_kraken_ultimate_6-100819867-orig.webp\",\n        \"description\": \"Hear the unfair advantage firsthand and be the one to beat with the Razer Kraken Ultimate—a PC gaming headset built for the ultimate competitive gaming experience. With threats lurking all around you, it’s time to go on the offensive and let them know who’s hunting who.\",\n        \"specifications\": null,\n        \"price\": \"129.99\",\n        \"vendor\": 5,\n        \"category\": 3,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 4,\n        \"name\": \"Argon (Leadwood/Silver)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/products/argon-leadwood-silver.webp\",\n        \"description\": \"Just like the diversity of elements in our world, our automatic watch made from leadwood and scratch-resistant sapphire glass should always remind you that it’s the inner values that count.\",\n        \"specifications\": {\n            \"color\": \"Walnut/Gray\",\n            \"movement\": \"quartz\",\n            \"release date\": \"2023-04-10\",\n            \"case material\": \"metal-wood\",\n            \"diameter (mm)\": 42,\n            \"is waterproof\": true,\n            \"bracelet material\": \"metal-wood\",\n            \"has date indicator\": false,\n            \"has cronograph features\": false\n        },\n        \"price\": \"499.00\",\n        \"vendor\": 5,\n        \"category\": 2,\n        \"available\": true,\n        \"quantity\": 8,\n        \"rating\": 5,\n        \"total_reviews\": 1\n    },\n    {\n        \"id\": 6,\n        \"name\": \"Carbon (Gray Maple/Dark Gray)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/products/carbon-graymaple-darkgray_1cz95iQ.webp\",\n        \"description\": \"We’re proud to present “Carbon” - a beautiful automatic watch with a unique skeleton design and see-through caseback. Made from colored maple wood, scratch-resistant sapphire glass, and gray stainless steel, this timepiece is guaranteed to turn heads.\",\n        \"specifications\": {\n            \"Automatic Movement\": \"Automatic watch movements represent the original and traditional functionality of wristwatches. This technology makes use of gravity and transforms the motion of your arm into energy to wind up your timepiece. \"\n        },\n        \"price\": \"499.00\",\n        \"vendor\": 5,\n        \"category\": 2,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 7,\n        \"name\": \"Decimal Necklace (Marble/Antique Silver)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/images/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q.jpg\",\n        \"description\": \"Discover our model “Decimal”, made from black marble and stainless steel in antique silver. If you take a closer look, you’ll see that none of these necklaces are the same as the next! A characteristic of the marble we use is the white veins and markings in the stone - these have completely natural origins and make every single piece entirely unique! Also, these necklaces are 100% waterproof and therefore ready for all kinds of fun.\",\n        \"specifications\": null,\n        \"price\": \"179.00\",\n        \"vendor\": 5,\n        \"category\": 5,\n        \"available\": true,\n        \"quantity\": 9,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 8,\n        \"name\": \"Countless Bracelet\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/images/3_220804_m_armband_countless_marmor_dunkelgrau_fa_363_q_nclRsjM.jpg\",\n        \"description\": \"Use this chance to get a unique piece of jewelry made from marble and stainless steel! We always produce in limited small amounts, whereby many models are quickly sold out. It may seem like a shame, but this is how we guarantee the typical Holzkern uniqueness of your special piece of nature. Secure your favorites today, and let yourself be reminded by our “Countless” bracelet of all the infinite opportunities that life offers you. Use them!\",\n        \"specifications\": null,\n        \"price\": \"119.00\",\n        \"vendor\": 5,\n        \"category\": 5,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 9,\n        \"name\": \"Ghost 15\",\n        \"brand\": \"Brooks\",\n        \"image_url\": \"/media/images/gost_15.png\",\n        \"description\": \"Runners have loved the Ghost for its soft cushioning, smooth transitions, and reliability as a daily trainer. Over the years, Brooks has continued to make updates, ensuring the Ghost remains a go-to among runners. Enhancements include improving the fit of the upper for distraction-free comfort mile after mile and an updated midsole with DNA Loft v2 for blissfully cushioned strides.\",\n        \"specifications\": null,\n        \"price\": \"140.00\",\n        \"vendor\": 1,\n        \"category\": 4,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    }\n]"},{"id":"1a614b15-74f9-499b-a82d-69977b2347f8","name":"Unavailable Product List","originalRequest":{"method":"GET","header":[],"url":{"raw":"http://localhost:8000/api/products?available=false","protocol":"http","host":["localhost"],"port":"8000","path":["api","products"],"query":[{"key":"available","value":"false"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 16:30:11 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"1621"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 10,\n        \"name\": \"Keychron K2 Wireless Mechanical Keyboard\",\n        \"brand\": \"Keychron\",\n        \"image_url\": \"/media/images/keychrone_k2.png\",\n        \"description\": \"The Keychron K2 is a compact mechanical keyboard designed for both Mac and Windows users. With its wireless and wired connectivity options, it offers flexibility and convenience for users on the go. The K2 features a durable aluminum frame, tactile and responsive Gateron switches, and customizable RGB backlighting. Whether you're a gamer, programmer, or typist, the Keychron K2 is a versatile keyboard that can enhance your productivity and elevate your typing experience.\",\n        \"specifications\": {\n            \"RGB\": \"15 modes of RGB Light\",\n            \"USB\": \"Type C\",\n            \"key\": 84,\n            \"Layout\": \"Mac & Windows\",\n            \"Body Ratio\": \"75%\",\n            \"Connectivity\": \"Wireless & Wired\",\n            \"Gateron Switches\": \"Red, Brown, and Blue\"\n        },\n        \"price\": \"79.99\",\n        \"vendor\": 5,\n        \"category\": 3,\n        \"available\": false,\n        \"quantity\": 0,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 5,\n        \"name\": \"Cobalt (Walnut/Blue)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/products/cobal_walnut_blue_y317MnS.jpg\",\n        \"description\": \"Cobalt is a naturally occurring element that can be found in the ground, the air and also in the bodies of living creatures. Its bonding properties have been used for the coloration of glass and ceramics since antiquity.\",\n        \"specifications\": {\n            \"color\": \"Walnut/Gray\",\n            \"movement\": \"quartz\",\n            \"release date\": \"2023-04-10\",\n            \"case material\": \"metal-wood\",\n            \"diameter (mm)\": 42,\n            \"is waterproof\": true,\n            \"bracelet material\": \"metal-wood\",\n            \"has date indicator\": false,\n            \"has cronograph features\": false\n        },\n        \"price\": \"499.00\",\n        \"vendor\": 5,\n        \"category\": 2,\n        \"available\": false,\n        \"quantity\": 0,\n        \"rating\": null,\n        \"total_reviews\": 0\n    }\n]"},{"id":"5e687c1d-b4f0-40dd-b7f6-3e1ef25bae54","name":"Full Product List","originalRequest":{"method":"GET","header":[],"url":{"raw":"http://localhost:8000/api/products?all=true","protocol":"http","host":["localhost"],"port":"8000","path":["api","products"],"query":[{"key":"all","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 16:31:30 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"7505"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"name\": \"ASUS TUF Gaming A16 Advantage Edition (2023)\",\n        \"brand\": \"ASUS\",\n        \"image_url\": \"/media/products/A16_bg_kv_w8a7jPc.webp\",\n        \"description\": \"Jump right into the action with the TUF Gaming A16 Advantage™ Edition. Stream and multitask with ease thanks to the latest AMD Ryzen™ 9 7940HS CPU and up to 32GB of blisteringly fast 4800MHz DDR5 RAM on Windows 11. Leverage the full gaming performance of up to a AMD Radeon™ RX 7700S GPU with AMD Smart Access Graphics. When your game library gets full, an empty M.2 NVMe SSD slot makes upgrading storage capacity a breeze.\",\n        \"specifications\": {\n            \"os\": \"Windows 11\",\n            \"CPU\": \"Ryzen 9 7940HS\",\n            \"GPU\": \"Raedon RX 7700S\",\n            \"RAM\": \"32GB 4800MHz DDR5 Dual-Channel\",\n            \"Disk\": \"2TB PCIe 4.0 2x SSD\",\n            \"Refresh Rate\": \"240Hz QHD, 165Hz FHD\",\n            \"Charging Type\": \"Type-C  50% in 30 mins\",\n            \"Military Grade\": \"MIL-STD 810H Passed\",\n            \"Battery Capacity\": \"90Wh\",\n            \"Battery duration\": \"Up to 13.6 Hours of Video Playback\",\n            \"Screen-to-body Ratio\": \"90%\"\n        },\n        \"price\": \"1699.99\",\n        \"vendor\": 5,\n        \"category\": 1,\n        \"available\": true,\n        \"quantity\": 15,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 2,\n        \"name\": \"ASUS TUF GAMING F15 (2020)\",\n        \"brand\": \"ASUS\",\n        \"image_url\": \"/media/products/TUF-Gaming-F15-and-F17-1.png\",\n        \"description\": \"Geared for serious gaming and real-world durability, the TUF Gaming F15 is a fully-loaded Windows 11 Pro gaming laptop that can carry you to victory. Powered by the latest 10th Gen Intel® Core™ i5 CPU and GeForce® GTX 1660 GPU, action-packed gameplay is fast, fluid, and fully saturates speedy IPS-level displays up to 144Hz.\",\n        \"specifications\": {\n            \"CPU\": \"i5 10-300H\",\n            \"RAM\": \"16 GB DDR3 (dual-channel)\",\n            \"Storage\": \"512 GB NM.2 SSD x 2\",\n            \"Graphics\": \"Nvidia GTX Geforce 1650 4GB VRAM\"\n        },\n        \"price\": \"839.99\",\n        \"vendor\": 5,\n        \"category\": 1,\n        \"available\": true,\n        \"quantity\": 9,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 3,\n        \"name\": \"Headset Razer Kraken Ultimate\",\n        \"brand\": \"Razer\",\n        \"image_url\": \"/media/images/razer_kraken_ultimate_6-100819867-orig.webp\",\n        \"description\": \"Hear the unfair advantage firsthand and be the one to beat with the Razer Kraken Ultimate—a PC gaming headset built for the ultimate competitive gaming experience. With threats lurking all around you, it’s time to go on the offensive and let them know who’s hunting who.\",\n        \"specifications\": null,\n        \"price\": \"129.99\",\n        \"vendor\": 5,\n        \"category\": 3,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 4,\n        \"name\": \"Argon (Leadwood/Silver)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/products/argon-leadwood-silver.webp\",\n        \"description\": \"Just like the diversity of elements in our world, our automatic watch made from leadwood and scratch-resistant sapphire glass should always remind you that it’s the inner values that count.\",\n        \"specifications\": {\n            \"color\": \"Walnut/Gray\",\n            \"movement\": \"quartz\",\n            \"release date\": \"2023-04-10\",\n            \"case material\": \"metal-wood\",\n            \"diameter (mm)\": 42,\n            \"is waterproof\": true,\n            \"bracelet material\": \"metal-wood\",\n            \"has date indicator\": false,\n            \"has cronograph features\": false\n        },\n        \"price\": \"499.00\",\n        \"vendor\": 5,\n        \"category\": 2,\n        \"available\": true,\n        \"quantity\": 8,\n        \"rating\": 5,\n        \"total_reviews\": 1\n    },\n    {\n        \"id\": 6,\n        \"name\": \"Carbon (Gray Maple/Dark Gray)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/products/carbon-graymaple-darkgray_1cz95iQ.webp\",\n        \"description\": \"We’re proud to present “Carbon” - a beautiful automatic watch with a unique skeleton design and see-through caseback. Made from colored maple wood, scratch-resistant sapphire glass, and gray stainless steel, this timepiece is guaranteed to turn heads.\",\n        \"specifications\": {\n            \"Automatic Movement\": \"Automatic watch movements represent the original and traditional functionality of wristwatches. This technology makes use of gravity and transforms the motion of your arm into energy to wind up your timepiece. \"\n        },\n        \"price\": \"499.00\",\n        \"vendor\": 5,\n        \"category\": 2,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 7,\n        \"name\": \"Decimal Necklace (Marble/Antique Silver)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/images/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q.jpg\",\n        \"description\": \"Discover our model “Decimal”, made from black marble and stainless steel in antique silver. If you take a closer look, you’ll see that none of these necklaces are the same as the next! A characteristic of the marble we use is the white veins and markings in the stone - these have completely natural origins and make every single piece entirely unique! Also, these necklaces are 100% waterproof and therefore ready for all kinds of fun.\",\n        \"specifications\": null,\n        \"price\": \"179.00\",\n        \"vendor\": 5,\n        \"category\": 5,\n        \"available\": true,\n        \"quantity\": 9,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 8,\n        \"name\": \"Countless Bracelet\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/images/3_220804_m_armband_countless_marmor_dunkelgrau_fa_363_q_nclRsjM.jpg\",\n        \"description\": \"Use this chance to get a unique piece of jewelry made from marble and stainless steel! We always produce in limited small amounts, whereby many models are quickly sold out. It may seem like a shame, but this is how we guarantee the typical Holzkern uniqueness of your special piece of nature. Secure your favorites today, and let yourself be reminded by our “Countless” bracelet of all the infinite opportunities that life offers you. Use them!\",\n        \"specifications\": null,\n        \"price\": \"119.00\",\n        \"vendor\": 5,\n        \"category\": 5,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 9,\n        \"name\": \"Ghost 15\",\n        \"brand\": \"Brooks\",\n        \"image_url\": \"/media/images/gost_15.png\",\n        \"description\": \"Runners have loved the Ghost for its soft cushioning, smooth transitions, and reliability as a daily trainer. Over the years, Brooks has continued to make updates, ensuring the Ghost remains a go-to among runners. Enhancements include improving the fit of the upper for distraction-free comfort mile after mile and an updated midsole with DNA Loft v2 for blissfully cushioned strides.\",\n        \"specifications\": null,\n        \"price\": \"140.00\",\n        \"vendor\": 1,\n        \"category\": 4,\n        \"available\": true,\n        \"quantity\": 10,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 10,\n        \"name\": \"Keychron K2 Wireless Mechanical Keyboard\",\n        \"brand\": \"Keychron\",\n        \"image_url\": \"/media/images/keychrone_k2.png\",\n        \"description\": \"The Keychron K2 is a compact mechanical keyboard designed for both Mac and Windows users. With its wireless and wired connectivity options, it offers flexibility and convenience for users on the go. The K2 features a durable aluminum frame, tactile and responsive Gateron switches, and customizable RGB backlighting. Whether you're a gamer, programmer, or typist, the Keychron K2 is a versatile keyboard that can enhance your productivity and elevate your typing experience.\",\n        \"specifications\": {\n            \"RGB\": \"15 modes of RGB Light\",\n            \"USB\": \"Type C\",\n            \"key\": 84,\n            \"Layout\": \"Mac & Windows\",\n            \"Body Ratio\": \"75%\",\n            \"Connectivity\": \"Wireless & Wired\",\n            \"Gateron Switches\": \"Red, Brown, and Blue\"\n        },\n        \"price\": \"79.99\",\n        \"vendor\": 5,\n        \"category\": 3,\n        \"available\": false,\n        \"quantity\": 0,\n        \"rating\": null,\n        \"total_reviews\": 0\n    },\n    {\n        \"id\": 5,\n        \"name\": \"Cobalt (Walnut/Blue)\",\n        \"brand\": \"Holzkern\",\n        \"image_url\": \"/media/products/cobal_walnut_blue_y317MnS.jpg\",\n        \"description\": \"Cobalt is a naturally occurring element that can be found in the ground, the air and also in the bodies of living creatures. Its bonding properties have been used for the coloration of glass and ceramics since antiquity.\",\n        \"specifications\": {\n            \"color\": \"Walnut/Gray\",\n            \"movement\": \"quartz\",\n            \"release date\": \"2023-04-10\",\n            \"case material\": \"metal-wood\",\n            \"diameter (mm)\": 42,\n            \"is waterproof\": true,\n            \"bracelet material\": \"metal-wood\",\n            \"has date indicator\": false,\n            \"has cronograph features\": false\n        },\n        \"price\": \"499.00\",\n        \"vendor\": 5,\n        \"category\": 2,\n        \"available\": false,\n        \"quantity\": 0,\n        \"rating\": null,\n        \"total_reviews\": 0\n    }\n]"}],"_postman_id":"36dd3151-d2f9-4898-959a-eefec95364bd"},{"name":"Product Create","id":"adc6a3c1-bae0-47d0-b8cd-127339f9528d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"HD Webcam C270","type":"text"},{"key":"brand","value":"Logitech","type":"text"},{"key":"image_url","value":"/media/images/c270_webcam.png","type":"text"},{"key":"description","value":"The C270 HD Webcam gives you sharp, smooth conference calls (720p/30fps) in a widescreen format. Automatic light correction shows you in lifelike, natural colors.","type":"text"},{"key":"specifications","value":"{\n    \"dimensions\": {\n        \"height\": \"2.87 in (72.91 mm)\",\n        \"width\": \"1.26 in (31.91 mm)\",\n        \"depth\": \"2.62 in (66.64 mm)\",\n        \"cable length\": \"5 ft (1.5 m)\",\n        \"weight\": \"2.65 oz (75 g)\"\n    },\n    \"technical specifications\": {\n        \"max resolution\": \"720p/30fps\",\n        \"camera mega pixel\": 0.9,\n        \"focus type\": \"fixed focus\",\n        \"lens type\": \"plastic\",\n        \"built-in mic\": \"Mono\",\n        \"mic range\": \"Up to 3 ft (1 m)\",\n        \"diagonal field of view (dFoV)\": \"55°\"\n    }\n}","type":"text"},{"key":"price","value":"24.99","type":"text"},{"key":"category","value":"3","type":"text"},{"key":"available","value":"True","type":"text"},{"key":"quantity","value":"5","type":"text"}]},"url":"http://localhost:8000/api/products","description":"<h2 id=\"creates-a-product-with-the-data-provided-in-the-payload\">Creates a product with the data provided in the payload</h2>\n<p>If the data provided in the payload is valid, a product will be created.</p>\n<p>The new product will then be added to the inventory associating it with an inventory item.</p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n<h4 id=\"required-data\">Required data</h4>\n<ul>\n<li>name: text (max length 128 chars)</li>\n<li>brand: text (max length 128 chars)</li>\n<li>description: text (max length 512 chars)</li>\n<li>price: decimal (max_digits=10, decimal_places=2)</li>\n<li>category: integer (category primary key)</li>\n</ul>\n<h4 id=\"optional-data\">Optional data</h4>\n<ul>\n<li>quantity: integer (default=1)</li>\n<li>avatar_url: text (max length 512 chars)</li>\n<li>specifications: json</li>\n<li>available: boolean (default=True)</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","products"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"dd18e5f4-a769-4722-b6be-7206f82e191e","name":"Product Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"HD Webcam C270","type":"text"},{"key":"brand","value":"Logitech","type":"text"},{"key":"image_url","value":"/media/images/c270_webcam.png","type":"text"},{"key":"description","value":"The C270 HD Webcam gives you sharp, smooth conference calls (720p/30fps) in a widescreen format. Automatic light correction shows you in lifelike, natural colors.","type":"text"},{"key":"specifications","value":"{\n    \"dimensions\": {\n        \"height\": \"2.87 in (72.91 mm)\",\n        \"width\": \"1.26 in (31.91 mm)\",\n        \"depth\": \"2.62 in (66.64 mm)\",\n        \"cable length\": \"5 ft (1.5 m)\",\n        \"weight\": \"2.65 oz (75 g)\"\n    },\n    \"technical specifications\": {\n        \"max resolution\": \"720p/30fps\",\n        \"camera mega pixel\": 0.9,\n        \"focus type\": \"fixed focus\",\n        \"lens type\": \"plastic\",\n        \"built-in mic\": \"Mono\",\n        \"mic range\": \"Up to 3 ft (1 m)\",\n        \"diagonal field of view (dFoV)\": \"55°\"\n    }\n}","type":"text"},{"key":"price","value":"24.99","type":"text"},{"key":"category","value":"3","type":"text"},{"key":"available","value":"True","type":"text"},{"key":"quantity","value":"5","type":"text"}]},"url":"http://localhost:8000/api/products"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 19:26:06 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"779"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 11,\n    \"name\": \"HD Webcam C270\",\n    \"brand\": \"Logitech\",\n    \"image_url\": \"/media/images/c270_webcam.png\",\n    \"description\": \"The C270 HD Webcam gives you sharp, smooth conference calls (720p/30fps) in a widescreen format. Automatic light correction shows you in lifelike, natural colors.\",\n    \"specifications\": {\n        \"dimensions\": {\n            \"height\": \"2.87 in (72.91 mm)\",\n            \"width\": \"1.26 in (31.91 mm)\",\n            \"depth\": \"2.62 in (66.64 mm)\",\n            \"cable length\": \"5 ft (1.5 m)\",\n            \"weight\": \"2.65 oz (75 g)\"\n        },\n        \"technical specifications\": {\n            \"max resolution\": \"720p/30fps\",\n            \"camera mega pixel\": 0.9,\n            \"focus type\": \"fixed focus\",\n            \"lens type\": \"plastic\",\n            \"built-in mic\": \"Mono\",\n            \"mic range\": \"Up to 3 ft (1 m)\",\n            \"diagonal field of view (dFoV)\": \"55°\"\n        }\n    },\n    \"price\": \"24.99\",\n    \"vendor\": 5,\n    \"category\": 3,\n    \"available\": true,\n    \"quantity\": 5,\n    \"rating\": null,\n    \"total_reviews\": 0\n}"}],"_postman_id":"adc6a3c1-bae0-47d0-b8cd-127339f9528d"},{"name":"Product Details","id":"b5447eef-628e-484f-8437-6dd41c230abe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/products/11","description":"<h2 id=\"retrieves-the-details-of-the-product-with-the-matching-id\">Retrieves the details of the product with the matching ID.</h2>\n<p>Level of authorization required</p>\n<ul>\n<li>None/Customer: Can only reach products that are available. Fetching existing but unavailable products will produce a 404 NOT FOUND response.</li>\n<li>Admin/Superusers: Can retrieve any existing product</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","products","11"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"42eed5cd-0a2c-4cef-8527-5e9714f8a842","name":"Product Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/products/11"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 19:29:20 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"779"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 11,\n    \"name\": \"HD Webcam C270\",\n    \"brand\": \"Logitech\",\n    \"image_url\": \"/media/images/c270_webcam.png\",\n    \"description\": \"The C270 HD Webcam gives you sharp, smooth conference calls (720p/30fps) in a widescreen format. Automatic light correction shows you in lifelike, natural colors.\",\n    \"specifications\": {\n        \"dimensions\": {\n            \"depth\": \"2.62 in (66.64 mm)\",\n            \"width\": \"1.26 in (31.91 mm)\",\n            \"height\": \"2.87 in (72.91 mm)\",\n            \"weight\": \"2.65 oz (75 g)\",\n            \"cable length\": \"5 ft (1.5 m)\"\n        },\n        \"technical specifications\": {\n            \"lens type\": \"plastic\",\n            \"mic range\": \"Up to 3 ft (1 m)\",\n            \"focus type\": \"fixed focus\",\n            \"built-in mic\": \"Mono\",\n            \"max resolution\": \"720p/30fps\",\n            \"camera mega pixel\": 0.9,\n            \"diagonal field of view (dFoV)\": \"55°\"\n        }\n    },\n    \"price\": \"24.99\",\n    \"vendor\": 5,\n    \"category\": 3,\n    \"available\": true,\n    \"quantity\": 5,\n    \"rating\": null,\n    \"total_reviews\": 0\n}"},{"id":"c2422d6d-1fd9-47d2-87d0-c7794c1b8d60","name":"Unavailable Product (Customer request)","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/products/10"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 19:42:48 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"23"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"},{"id":"d7bc2935-8be1-4573-a656-69c345edb75d","name":"Unavailable Product (Admin request)","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/products/10"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 19:44:41 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"910"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 10,\n    \"name\": \"Keychron K2 Wireless Mechanical Keyboard\",\n    \"brand\": \"Keychron\",\n    \"image_url\": \"/media/images/keychrone_k2.png\",\n    \"description\": \"The Keychron K2 is a compact mechanical keyboard designed for both Mac and Windows users. With its wireless and wired connectivity options, it offers flexibility and convenience for users on the go. The K2 features a durable aluminum frame, tactile and responsive Gateron switches, and customizable RGB backlighting. Whether you're a gamer, programmer, or typist, the Keychron K2 is a versatile keyboard that can enhance your productivity and elevate your typing experience.\",\n    \"specifications\": {\n        \"RGB\": \"15 modes of RGB Light\",\n        \"USB\": \"Type C\",\n        \"key\": 84,\n        \"Layout\": \"Mac & Windows\",\n        \"Body Ratio\": \"75%\",\n        \"Connectivity\": \"Wireless & Wired\",\n        \"Gateron Switches\": \"Red, Brown, and Blue\"\n    },\n    \"price\": \"79.99\",\n    \"vendor\": 5,\n    \"category\": 3,\n    \"available\": false,\n    \"quantity\": 0,\n    \"rating\": null,\n    \"total_reviews\": 0\n}"}],"_postman_id":"b5447eef-628e-484f-8437-6dd41c230abe"},{"name":"Product Update","id":"0112cdc5-ce6c-4f37-aa1d-6dc0f15380cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"price","value":"72.99","type":"text"},{"key":"available","value":"true","type":"text"}]},"url":"http://localhost:8000/api/products/10","description":"<h2 id=\"updates-the-product-with-the-matching-id\">Updates the product with the matching ID.</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n<h4 id=\"updatable-attributes\">Updatable attributes</h4>\n<ul>\n<li>name</li>\n<li>brand</li>\n<li>image_url</li>\n<li>description</li>\n<li>specifications</li>\n<li>price</li>\n<li>category</li>\n<li>available</li>\n</ul>\n<h4 id=\"non-updatable-attributes\">Non-updatable attributes</h4>\n<p>The following attributes cannot be updated as they are serialized as read-only.</p>\n<ul>\n<li>quantity: This is an attribute of the inventory item to which the product is associated with</li>\n<li>rating and total reviews: These two attributes belong to the rating instances to which the product is associated with.</li>\n<li>vendor (soon to be renamed to added_by): allows to keep track of who added the product, therefore it shouldn't be modifiable.</li>\n</ul>\n<h4 id=\"important-note\">Important note</h4>\n<p>In the example below, the attribute <code>available</code> is set to <code>true</code> with the PATCH request, but in the response, the attribute reads as <code>false.</code> Given that the <code>quantity</code> attribute is <code>0</code> the product is still unavailable.</p>\n<p>In order to serialize <code>available=true</code>, the product serializer will verify that:</p>\n<ul>\n<li>The available attribute of the product is equal to true</li>\n<li>The product inventory item quantity attribute is greater than 0</li>\n<li>The product is not in the <code>DeletedProducts</code> table</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","products","10"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"04beb9cf-403f-4621-af09-5b8f4800af6e","name":"Product Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"price","value":"79.99","description":"New value to be set","type":"text"}]},"url":"http://localhost:8000/api/products/10"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 18 Jul 2023 13:02:41 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"909"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 10,\n    \"name\": \"Keychron K2 Wireless Mechanical Keyboard\",\n    \"brand\": \"Keychron\",\n    \"image_url\": \"/media/images/keychrone_k2.png\",\n    \"description\": \"The Keychron K2 is a compact mechanical keyboard designed for both Mac and Windows users. With its wireless and wired connectivity options, it offers flexibility and convenience for users on the go. The K2 features a durable aluminum frame, tactile and responsive Gateron switches, and customizable RGB backlighting. Whether you're a gamer, programmer, or typist, the Keychron K2 is a versatile keyboard that can enhance your productivity and elevate your typing experience.\",\n    \"specifications\": {\n        \"RGB\": \"15 modes of RGB Light\",\n        \"USB\": \"Type C\",\n        \"key\": 84,\n        \"Layout\": \"Mac & Windows\",\n        \"Body Ratio\": \"75%\",\n        \"Connectivity\": \"Wireless & Wired\",\n        \"Gateron Switches\": \"Red, Brown, and Blue\"\n    },\n    \"price\": \"79.99\",\n    \"vendor\": 5,\n    \"category\": 3,\n    \"available\": true,\n    \"quantity\": 1,\n    \"rating\": null,\n    \"total_reviews\": 0\n}"}],"_postman_id":"0112cdc5-ce6c-4f37-aa1d-6dc0f15380cd"},{"name":"Product Delete","id":"2f878c11-8c5a-4603-bde8-ae763b04fe5b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:8000/api/products/10","description":"<h2 id=\"soft-deletes-the-matching-product-by-adding-it-to-the-deletedproducts-table\">Soft deletes the matching product by adding it to the <code>DeletedProducts</code> table.</h2>\n<p>Deleting a product breaks multiple relationships, which could break any front-end app built with the API. This endpoint added the matching product to the <code>DeletedProducts</code>, which maintains the API integrity.</p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Admin</li>\n<li>Superuser</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","products","10"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"bb76bfd8-c6a5-4724-abbc-306f156e8a41","name":"Product Delete","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/products/10"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 21:14:01 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"47"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"The product has been soft deleted\"\n}"}],"_postman_id":"2f878c11-8c5a-4603-bde8-ae763b04fe5b"}],"id":"532a569e-6f64-47bb-b254-41f2c71a2b7f","description":"<h2 id=\"this-section-provides-documentation-on-how-to-work-with-the-products-endpoints\">This section provides documentation on how to work with the products' endpoints.</h2>\n<h4 id=\"the-endpoints-provide-functionality-for\">The endpoints provide functionality for</h4>\n<ul>\n<li>List products</li>\n<li>Create products</li>\n<li>Retrieve details of a product</li>\n<li>Update products</li>\n<li>Delete Products (soft delete)</li>\n</ul>\n<h4 id=\"product-availability\">Product Availability</h4>\n<p>It is important to note that unavailable products are unreachable by customers as they are filtered out automatically.</p>\n<h5 id=\"the-availability-of-a-product-is-determined-by\">The availability of a product is determined by:</h5>\n<ul>\n<li>Quantity of the product in inventory &gt; 0</li>\n<li>Product's <code>available</code> attribute set to <code>True</code></li>\n<li>The product is not in the <code>DeleteProduct</code> table</li>\n</ul>\n","_postman_id":"532a569e-6f64-47bb-b254-41f2c71a2b7f"},{"name":"Inventory","item":[{"name":"Inventory Item List","id":"0abaad61-a84b-4c5a-8189-0b4fc78d6514","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/inventory-items","description":"<h2 id=\"retrieves-the-list-of-inventory-items\">Retrieves the list of inventory items</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"cda994f4-663e-4c00-9232-a87f23a1c178","id":"cda994f4-663e-4c00-9232-a87f23a1c178","name":"Inventory","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","inventory-items"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"a31139b1-3b03-4e2b-8479-c75147f481e7","name":"Inventory Item List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/inventory-items"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 22:46:08 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"1273"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 11,\n        \"quantity\": 5,\n        \"added_on\": \"2023-07-25T19:26:06.364931Z\",\n        \"updated_on\": \"2023-07-25T19:26:06.364948Z\",\n        \"product\": 11\n    },\n    {\n        \"id\": 1,\n        \"quantity\": 15,\n        \"added_on\": \"2023-07-20T21:28:22.165094Z\",\n        \"updated_on\": \"2023-07-22T13:47:23.993678Z\",\n        \"product\": 1\n    },\n    {\n        \"id\": 10,\n        \"quantity\": 0,\n        \"added_on\": \"2023-07-18T14:31:36.076541Z\",\n        \"updated_on\": \"2023-07-18T00:00:00Z\",\n        \"product\": 10\n    },\n    {\n        \"id\": 9,\n        \"quantity\": 10,\n        \"added_on\": \"2023-07-17T15:37:09.846489Z\",\n        \"updated_on\": \"2023-07-17T00:00:00Z\",\n        \"product\": 9\n    },\n    {\n        \"id\": 8,\n        \"quantity\": 10,\n        \"added_on\": \"2023-07-17T15:37:03.622481Z\",\n        \"updated_on\": \"2023-07-17T00:00:00Z\",\n        \"product\": 8\n    },\n    {\n        \"id\": 7,\n        \"quantity\": 9,\n        \"added_on\": \"2023-07-17T15:36:55.066587Z\",\n        \"updated_on\": \"2023-07-22T18:15:53.546796Z\",\n        \"product\": 7\n    },\n    {\n        \"id\": 6,\n        \"quantity\": 10,\n        \"added_on\": \"2023-07-17T15:36:45.638815Z\",\n        \"updated_on\": \"2023-07-17T00:00:00Z\",\n        \"product\": 6\n    },\n    {\n        \"id\": 5,\n        \"quantity\": 0,\n        \"added_on\": \"2023-07-17T15:36:37.562174Z\",\n        \"updated_on\": \"2023-07-21T15:41:59.969077Z\",\n        \"product\": 5\n    },\n    {\n        \"id\": 4,\n        \"quantity\": 8,\n        \"added_on\": \"2023-07-17T15:36:17.305111Z\",\n        \"updated_on\": \"2023-07-22T18:22:20.855182Z\",\n        \"product\": 4\n    },\n    {\n        \"id\": 3,\n        \"quantity\": 10,\n        \"added_on\": \"2023-07-17T15:36:08.462680Z\",\n        \"updated_on\": \"2023-07-17T00:00:00Z\",\n        \"product\": 3\n    },\n    {\n        \"id\": 2,\n        \"quantity\": 9,\n        \"added_on\": \"2023-07-17T15:35:55.057882Z\",\n        \"updated_on\": \"2023-07-22T18:10:35.187022Z\",\n        \"product\": 2\n    }\n]"}],"_postman_id":"0abaad61-a84b-4c5a-8189-0b4fc78d6514"},{"name":"Inventory Item Detail","id":"d721b3dd-b168-4e2c-9c0e-9336e1955c8d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/inventory-items/1","description":"<h2 id=\"retrieves-the-details-of-the-inventory-item-with-the-matching-id\">Retrieves the details of the inventory item with the matching ID.</h2>\n<h4 id=\"endpoint\">Endpoint</h4>\n<p>The endpoint's URL has the structure <code>/api/inventory-items/{inventory-itemID}</code></p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"cda994f4-663e-4c00-9232-a87f23a1c178","id":"cda994f4-663e-4c00-9232-a87f23a1c178","name":"Inventory","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","inventory-items","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"6cd2cffd-9940-45d1-b34c-6da160c89dca","name":"Inventory Item Detail","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/inventory-items/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 22 Jul 2023 13:46:55 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"118"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"quantity\": 15,\n    \"added_on\": \"2023-07-20T21:28:22.165094Z\",\n    \"updated_on\": \"2023-07-22T13:45:10.924711Z\",\n    \"product\": 1\n}"}],"_postman_id":"d721b3dd-b168-4e2c-9c0e-9336e1955c8d"},{"name":"Inventory Item Update","id":"1bd98348-b7ad-4402-a83e-8bba5056260a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"quantity","value":"10","type":"text"}]},"url":"http://localhost:8000/api/inventory-items/1","description":"<h2 id=\"updates-the-inventory-item-with-the-matching-id\">Updates the inventory item with the matching ID.</h2>\n<h4 id=\"endpoint\">Endpoint</h4>\n<p>The endpoint's URL has the structure <code>/api/inventory-items/{inventory-itemID}</code></p>\n<h4 id=\"updatable-attributes\">Updatable attributes</h4>\n<ul>\n<li>quantity: an integer that determines the quantity in stock of the product related to the inventory item.</li>\n</ul>\n<h4 id=\"non-updatable-attributes\">Non-updatable attributes</h4>\n<ul>\n<li>product: allowing such attributes to change will definitely break the API.</li>\n<li>added_on: this attribute is used to keep track of when the inventory item</li>\n<li>updated_on: this attribute gets automatically updated by Django once the inventory item is updated.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"cda994f4-663e-4c00-9232-a87f23a1c178","id":"cda994f4-663e-4c00-9232-a87f23a1c178","name":"Inventory","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","inventory-items","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"04e6b9af-a4fe-432b-95e1-23968d59a6c4","name":"Inventory Item Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"quantity","value":"10","type":"text"}]},"url":"http://localhost:8000/api/inventory-items/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 Jul 2023 22:59:29 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"118"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"quantity\": 10,\n    \"added_on\": \"2023-07-20T21:28:22.165094Z\",\n    \"updated_on\": \"2023-07-25T22:59:29.124418Z\",\n    \"product\": 1\n}"}],"_postman_id":"1bd98348-b7ad-4402-a83e-8bba5056260a"}],"id":"cda994f4-663e-4c00-9232-a87f23a1c178","description":"<h2 id=\"manage-products-in-stock-with-the-inventorys-endpoints\">Manage products in stock with the Inventory's endpoints</h2>\n<p>On creation, each product gets an inventory item with a quantity attribute.</p>\n<p>The inventory item instance associated with a product is used to register the quantity of the product in stock (a.k.a inventory).</p>\n<h4 id=\"authorization\">Authorization</h4>\n<p>The Inventory's endpoints are internal-use only, therefore, only admins and superusers are allowed to perform operations over them.</p>\n<h4 id=\"functionalities\">Functionalities</h4>\n<ul>\n<li>Retrieve the inventory items list</li>\n<li>Retrieve inventory items' details</li>\n<li>Update inventory item's quantity (a.k.a products in stock)</li>\n</ul>\n<h4 id=\"important-notes\">Important notes</h4>\n<ul>\n<li>The endpoints don't allow the creation of new inventory items because inventory item instances are automatically created and linked to products upon their creation (products creation).</li>\n<li>The endpoints don't allow deleting inventory items due to their important relationship with products; inventory items are used to determine<ul>\n<li>if a product can be listed as available</li>\n<li>if a product can be added to a shopping cart</li>\n<li>if a product in a shopping cart can be ordered.</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"67f42a00-7259-400e-bf9e-81010770ce99","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"aad31a04-0bf3-4a1c-8aa1-2a34f9bdf6b3","type":"text/javascript","exec":[""]}}],"_postman_id":"cda994f4-663e-4c00-9232-a87f23a1c178"},{"name":"Carts","item":[{"name":"Cart Endpoints For Customers","item":[{"name":"Cart Details","id":"13c95960-cb2d-41e4-a4bb-1d322a9c82ad","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart","description":"<h2 id=\"retrieves-cart-details-for-the-customer-making-the-request\">Retrieves cart details for the customer making the request</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"11063162-9ff8-46e2-93d8-8593b1cb616c","id":"11063162-9ff8-46e2-93d8-8593b1cb616c","name":"Cart Endpoints For Customers","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"81512871-b4d4-4ed0-a5ef-fc9f7a124c67","name":"Cart Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 12:59:33 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"168"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 2,\n    \"user\": \"http://localhost:8000/api/customers/2\",\n    \"cart_items\": [\n        \"http://localhost:8000/api/cart/items/5\"\n    ],\n    \"total\": 179,\n    \"updated_on\": \"2023-07-26T12:56:22.876790Z\"\n}"}],"_postman_id":"13c95960-cb2d-41e4-a4bb-1d322a9c82ad"},{"name":"Cart Item Create","id":"6c6f400d-cea0-42d1-909c-d0f3f4ceaf79","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"product_id","value":"2","type":"text","description":"<p>Id of the product to be added to the cart</p>\n"},{"key":"quantity","value":"1","type":"text","description":"<p>Units of the product to be added to the cart</p>\n"}]},"url":"http://localhost:8000/api/cart/items","description":"<h4 id=\"creates-a-cart-item-which-is-then-added-to-the-cart-of-the-customer-making-the-request\">Creates a cart item which is then added to the cart of the customer making the request</h4>\n<h4 id=\"required-payload\">Required payload</h4>\n<ul>\n<li>product_id: integer (product primary key)</li>\n<li>quantity: integer (the units of the product to be added to the cart)</li>\n</ul>\n<h4 id=\"constraints-and-clarifications\">Constraints and clarifications</h4>\n<ul>\n<li>quantity:<ul>\n<li>The minimum accepted value is one (1)</li>\n<li>The maximum accepted value is equal to the quantity of product in stock</li>\n</ul>\n</li>\n<li>cart item:<ul>\n<li>Cart items can only hold one product</li>\n<li>If a customer has already created a cart item for X product, he cannot create a second cart item with the same product</li>\n</ul>\n</li>\n<li>products:<ul>\n<li>Unavailable products cannot be added to a cart item</li>\n</ul>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"11063162-9ff8-46e2-93d8-8593b1cb616c","id":"11063162-9ff8-46e2-93d8-8593b1cb616c","name":"Cart Endpoints For Customers","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart","items"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"14bdec93-2a5e-4842-911c-571e4d55c803","name":"Add Product To Cart With Cart Item","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"product_id","value":"2","type":"text","description":"Id of the product to be added to the cart"},{"key":"quantity","value":"1","type":"text","description":"Units of the product to be added to the cart"}]},"url":"http://localhost:8000/api/cart/items"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 13:12:57 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"421"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 6,\n    \"cart\": \"http://localhost:8000/api/carts/2\",\n    \"product\": \"http://localhost:8000/api/products/2\",\n    \"quantity\": 1,\n    \"sub_total\": 839.99,\n    \"product_name\": \"ASUS TUF GAMING F15 (2020)\",\n    \"product_image\": \"/media/products/TUF-Gaming-F15-and-F17-1.png\",\n    \"product_brand\": \"ASUS\",\n    \"product_price\": 839.99,\n    \"product_vendor\": \"adolfoj\",\n    \"product_available\": true,\n    \"added_on\": \"2023-07-26T13:12:57.969645Z\",\n    \"updated_on\": \"2023-07-26T13:12:57.969656Z\"\n}"}],"_postman_id":"6c6f400d-cea0-42d1-909c-d0f3f4ceaf79"},{"name":"Cart Item List","id":"95a0f12d-9579-4e83-aa2a-3e7d562f73b1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart/items","description":"<h2 id=\"retrieves-the-list-of-items-in-the-cart-of-the-requesting-customer\">Retrieves the list of items in the cart of the requesting customer</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"11063162-9ff8-46e2-93d8-8593b1cb616c","id":"11063162-9ff8-46e2-93d8-8593b1cb616c","name":"Cart Endpoints For Customers","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart","items"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"ab6e8a00-5269-4d00-8315-ee22a14d4a55","name":"Cart Item List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart/items"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 13:15:27 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"889"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 5,\n        \"cart\": \"http://localhost:8000/api/carts/2\",\n        \"product\": \"http://localhost:8000/api/products/7\",\n        \"quantity\": 1,\n        \"sub_total\": 179,\n        \"product_name\": \"Decimal Necklace (Marble/Antique Silver)\",\n        \"product_image\": \"/media/images/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q.jpg\",\n        \"product_brand\": \"Holzkern\",\n        \"product_price\": 179,\n        \"product_vendor\": \"adolfoj\",\n        \"product_available\": true,\n        \"added_on\": \"2023-07-26T12:56:22.873543Z\",\n        \"updated_on\": \"2023-07-26T12:56:22.873553Z\"\n    },\n    {\n        \"id\": 6,\n        \"cart\": \"http://localhost:8000/api/carts/2\",\n        \"product\": \"http://localhost:8000/api/products/2\",\n        \"quantity\": 1,\n        \"sub_total\": 839.99,\n        \"product_name\": \"ASUS TUF GAMING F15 (2020)\",\n        \"product_image\": \"/media/products/TUF-Gaming-F15-and-F17-1.png\",\n        \"product_brand\": \"ASUS\",\n        \"product_price\": 839.99,\n        \"product_vendor\": \"adolfoj\",\n        \"product_available\": true,\n        \"added_on\": \"2023-07-26T13:12:57.969645Z\",\n        \"updated_on\": \"2023-07-26T13:12:57.969656Z\"\n    }\n]"}],"_postman_id":"95a0f12d-9579-4e83-aa2a-3e7d562f73b1"},{"name":"Cart Item Details","id":"1a4d9eb6-8f23-4e33-9551-26ff17795ead","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart/items/5","description":"<h2 id=\"retrieves-details-of-the-cart-item-with-the-matching-id-in-the-requesting-customers-cart\">Retrieves details of the cart item with the matching ID in the requesting customer's cart</h2>\n<h4 id=\"endpoint-url\">Endpoint URL</h4>\n<p>The endpoint's URL has the structure <code>api/cart/items/{itemID}</code></p>\n<h4 id=\"constraints\">Constraints</h4>\n<ul>\n<li>customers cannot retrieve cart items in other customers' carts</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"11063162-9ff8-46e2-93d8-8593b1cb616c","id":"11063162-9ff8-46e2-93d8-8593b1cb616c","name":"Cart Endpoints For Customers","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart","items","5"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"c129a8d0-ace7-48c2-8d23-520d9868d456","name":"Get Cart Item Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart/items/2"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 22 Jul 2023 14:14:00 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"421"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 2,\n    \"cart\": \"http://localhost:8000/api/carts/2\",\n    \"product\": \"http://localhost:8000/api/products/2\",\n    \"quantity\": 1,\n    \"sub_total\": 839.99,\n    \"product_name\": \"ASUS TUF GAMING F15 (2020)\",\n    \"product_image\": \"/media/products/TUF-Gaming-F15-and-F17-1.png\",\n    \"product_brand\": \"ASUS\",\n    \"product_price\": 839.99,\n    \"product_vendor\": \"adolfoj\",\n    \"product_available\": true,\n    \"added_on\": \"2023-07-22T14:12:33.307336Z\",\n    \"updated_on\": \"2023-07-22T14:12:33.307345Z\"\n}"}],"_postman_id":"1a4d9eb6-8f23-4e33-9551-26ff17795ead"},{"name":"Cart Item Update","id":"f04197a8-782e-4db7-98e6-baf4cb4ad1a8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"quantity","value":"2","type":"text"}]},"url":"http://localhost:8000/api/cart/items/5","description":"<h2 id=\"updates-the-cart-item-with-the-matching-id\">Updates the cart item with the matching ID.</h2>\n<h4 id=\"endpoint-url\">Endpoint URL</h4>\n<p>The endpoint's URL has the structure <code>api/cart/items/{itemID}</code></p>\n<h4 id=\"updatable-data\">Updatable data</h4>\n<ul>\n<li>quantity</li>\n</ul>\n<h4 id=\"constraints\">Constraints</h4>\n<ul>\n<li>quantity: the new quantity to be set has to be less or equal to the available quantity of the product in stock. A 400 Bad Request is returned otherwise.</li>\n<li>customers: customers cannot retrieve cart items in other customers' carts</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"11063162-9ff8-46e2-93d8-8593b1cb616c","id":"11063162-9ff8-46e2-93d8-8593b1cb616c","name":"Cart Endpoints For Customers","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart","items","5"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"69d13b0a-d5e7-4445-906d-dc09c6e3eed0","name":"Cart Item Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"quantity","value":"2","type":"text"}]},"url":"http://localhost:8000/api/cart/items/5"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 13:17:33 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"465"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 5,\n    \"cart\": \"http://localhost:8000/api/carts/2\",\n    \"product\": \"http://localhost:8000/api/products/7\",\n    \"quantity\": 2,\n    \"sub_total\": 358,\n    \"product_name\": \"Decimal Necklace (Marble/Antique Silver)\",\n    \"product_image\": \"/media/images/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q.jpg\",\n    \"product_brand\": \"Holzkern\",\n    \"product_price\": 179,\n    \"product_vendor\": \"adolfoj\",\n    \"product_available\": true,\n    \"added_on\": \"2023-07-26T13:17:33.380339Z\",\n    \"updated_on\": \"2023-07-26T13:17:33.380346Z\"\n}"}],"_postman_id":"f04197a8-782e-4db7-98e6-baf4cb4ad1a8"},{"name":"Cart Item Delete","id":"2147e611-f205-44d7-8b74-77a65c3bdfed","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/cart/items/6","description":"<h2 id=\"deletes-the-cart-item-with-the-matching-id-in-the-requesting-customers-cart\">Deletes the cart item with the matching ID in the requesting customer's cart.</h2>\n<h4 id=\"endpoint-url\">Endpoint URL</h4>\n<p>The endpoint's URL has the structure <code>api/cart/items/{itemID}</code></p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"11063162-9ff8-46e2-93d8-8593b1cb616c","id":"11063162-9ff8-46e2-93d8-8593b1cb616c","name":"Cart Endpoints For Customers","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart","items","6"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"45a7c2a9-b979-4e40-8d00-010190876555","name":"Cart Item Delete","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/cart/items/6"},"status":"No Content","code":204,"_postman_previewlanguage":"plain","header":[{"key":"Date","value":"Wed, 26 Jul 2023 13:40:30 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"0"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"2147e611-f205-44d7-8b74-77a65c3bdfed"}],"id":"11063162-9ff8-46e2-93d8-8593b1cb616c","description":"<h2 id=\"this-section-provides-information-on-how-customers-can-work-with-their-carts\">This section provides information on how customers can work with their carts.</h2>\n<h4 id=\"endpoints\">Endpoints</h4>\n<ul>\n<li><code>/api/cart</code>: Retrives the cart's details for the customer making the request</li>\n<li><code>/api/cart/items</code>: Retrieves the items in the customers' cart</li>\n<li><code>/api/cart/items/{itemID}</code>: Retrieves cart item details</li>\n</ul>\n<h4 id=\"level-of-authorization-required\">Level of Authorization required</h4>\n<ul>\n<li>Customers</li>\n</ul>\n<h4 id=\"important-note\">Important note</h4>\n<ul>\n<li>Admins and Superusers cannot use these endpoints because they require the requesting user to have an assigned cart. Admins and superusers do not have carts.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"19deac7b-0a68-4ff7-aa0d-be788a4fc25b","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"bacb01d6-2a57-4982-a805-7fa1e64ef46a","type":"text/javascript","exec":[""]}}],"_postman_id":"11063162-9ff8-46e2-93d8-8593b1cb616c"},{"name":"Cart Endpoints For Admins","item":[{"name":"Get Customer Cart List","id":"c1e5ec81-09ca-484b-8fe0-9a4ba08e7ff0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/carts","description":"<h2 id=\"retrieves-the-list-of-customers-carts\">Retrieves the list of customers' carts</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"293ceb84-e93c-4597-a910-0c8fda2b760a","id":"293ceb84-e93c-4597-a910-0c8fda2b760a","name":"Cart Endpoints For Admins","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","carts"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"68de775c-f0fd-4a05-a19e-5983ceb924a7","name":"Get Customer Cart List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/carts"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 14:05:32 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"505"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 3,\n        \"user\": \"http://localhost:8000/api/customers/3\",\n        \"cart_items\": [],\n        \"total\": 0,\n        \"updated_on\": \"2023-07-22T18:22:20.859711Z\"\n    },\n    {\n        \"id\": 2,\n        \"user\": \"http://localhost:8000/api/customers/2\",\n        \"cart_items\": [\n            \"http://localhost:8000/api/cart/items/5\"\n        ],\n        \"total\": 358,\n        \"updated_on\": \"2023-07-26T13:12:57.972779Z\"\n    },\n    {\n        \"id\": 1,\n        \"user\": \"http://localhost:8000/api/customers/1\",\n        \"cart_items\": [\n            \"http://localhost:8000/api/cart/items/7\",\n            \"http://localhost:8000/api/cart/items/8\"\n        ],\n        \"total\": 259,\n        \"updated_on\": \"2023-07-26T14:05:14.065207Z\"\n    }\n]"}],"_postman_id":"c1e5ec81-09ca-484b-8fe0-9a4ba08e7ff0"},{"name":"Get Customer Cart Details","id":"c036fb3d-4c8e-40e8-9251-2ae0c7b146db","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/carts/1","description":"<h2 id=\"retrieves-the-details-for-the-customers-cart-with-the-matching-id\">Retrieves the details for the customer's cart with the matching ID</h2>\n<h4 id=\"endpoint-url\">Endpoint URL</h4>\n<p>The endpoint's URL has the structure <code>/api/carts/{cartID}</code></p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"293ceb84-e93c-4597-a910-0c8fda2b760a","id":"293ceb84-e93c-4597-a910-0c8fda2b760a","name":"Cart Endpoints For Admins","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","carts","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"04862426-3dae-4d38-a39a-bac8ab19e034","name":"Get Customer Cart Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/carts/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 14:06:31 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"209"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"user\": \"http://localhost:8000/api/customers/1\",\n    \"cart_items\": [\n        \"http://localhost:8000/api/cart/items/7\",\n        \"http://localhost:8000/api/cart/items/8\"\n    ],\n    \"total\": 259,\n    \"updated_on\": \"2023-07-26T14:05:14.065207Z\"\n}"}],"_postman_id":"c036fb3d-4c8e-40e8-9251-2ae0c7b146db"},{"name":"Get Customers Cart Item List","id":"51d030a8-d028-429b-b3d4-c7d96c3ddd08","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart-items","description":"<h2 id=\"retrieves-the-list-of-cart-items-in-all-customers-carts\">Retrieves the list of cart items in all customers' carts</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"293ceb84-e93c-4597-a910-0c8fda2b760a","id":"293ceb84-e93c-4597-a910-0c8fda2b760a","name":"Cart Endpoints For Admins","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart-items"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"cc763313-b8a5-44e9-a816-7d2cbcd3df1a","name":"Get Customers Cart Item List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart-items"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 14:09:57 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"1307"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 5,\n        \"cart\": \"http://localhost:8000/api/carts/2\",\n        \"product\": \"http://localhost:8000/api/products/7\",\n        \"quantity\": 2,\n        \"sub_total\": 358,\n        \"product_name\": \"Decimal Necklace (Marble/Antique Silver)\",\n        \"product_image\": \"/media/images/1_220804_m_halskette_decimal_marmor_antiksilber_cv_1_q.jpg\",\n        \"product_brand\": \"Holzkern\",\n        \"product_price\": 179,\n        \"product_vendor\": \"adolfoj\",\n        \"product_available\": true,\n        \"added_on\": \"2023-07-26T13:17:33.380339Z\",\n        \"updated_on\": \"2023-07-26T13:17:33.380346Z\"\n    },\n    {\n        \"id\": 7,\n        \"cart\": \"http://localhost:8000/api/carts/1\",\n        \"product\": \"http://localhost:8000/api/products/9\",\n        \"quantity\": 1,\n        \"sub_total\": 140,\n        \"product_name\": \"Ghost 15\",\n        \"product_image\": \"/media/images/gost_15.png\",\n        \"product_brand\": \"Brooks\",\n        \"product_price\": 140,\n        \"product_vendor\": \"peter_roe\",\n        \"product_available\": true,\n        \"added_on\": \"2023-07-26T14:04:47.935854Z\",\n        \"updated_on\": \"2023-07-26T14:04:47.935865Z\"\n    },\n    {\n        \"id\": 8,\n        \"cart\": \"http://localhost:8000/api/carts/1\",\n        \"product\": \"http://localhost:8000/api/products/8\",\n        \"quantity\": 1,\n        \"sub_total\": 119,\n        \"product_name\": \"Countless Bracelet\",\n        \"product_image\": \"/media/images/3_220804_m_armband_countless_marmor_dunkelgrau_fa_363_q_nclRsjM.jpg\",\n        \"product_brand\": \"Holzkern\",\n        \"product_price\": 119,\n        \"product_vendor\": \"adolfoj\",\n        \"product_available\": true,\n        \"added_on\": \"2023-07-26T14:05:14.061276Z\",\n        \"updated_on\": \"2023-07-26T14:05:14.061296Z\"\n    }\n]"}],"_postman_id":"51d030a8-d028-429b-b3d4-c7d96c3ddd08"},{"name":"Get Customer Cart Item Details","id":"7fcd54da-d74f-44c1-98a8-c7aa08dbcb26","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart-items/8","description":"<h2 id=\"retrieves-the-details-of-the-cart-item-with-the-matching-id\">Retrieves the details of the cart item with the matching ID</h2>\n<h4 id=\"endpoint-url\">Endpoint URL</h4>\n<p>The endpoint's URL has the structure <code>/api/cart-items/{cart-itemID}</code></p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"293ceb84-e93c-4597-a910-0c8fda2b760a","id":"293ceb84-e93c-4597-a910-0c8fda2b760a","name":"Cart Endpoints For Admins","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","cart-items","8"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"9ab4443a-adee-4337-b15e-4f875529ab16","name":"Get Customer Cart Item Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart-items/8"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 14:12:38 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"452"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 8,\n    \"cart\": \"http://localhost:8000/api/carts/1\",\n    \"product\": \"http://localhost:8000/api/products/8\",\n    \"quantity\": 1,\n    \"sub_total\": 119,\n    \"product_name\": \"Countless Bracelet\",\n    \"product_image\": \"/media/images/3_220804_m_armband_countless_marmor_dunkelgrau_fa_363_q_nclRsjM.jpg\",\n    \"product_brand\": \"Holzkern\",\n    \"product_price\": 119,\n    \"product_vendor\": \"adolfoj\",\n    \"product_available\": true,\n    \"added_on\": \"2023-07-26T14:05:14.061276Z\",\n    \"updated_on\": \"2023-07-26T14:05:14.061296Z\"\n}"}],"_postman_id":"7fcd54da-d74f-44c1-98a8-c7aa08dbcb26"}],"id":"293ceb84-e93c-4597-a910-0c8fda2b760a","description":"<h2 id=\"this-section-provides-information-on-how-admins-and-superusers-can-work-with-customers-carts\">This section provides information on how admins and superusers can work with customer's carts</h2>\n<h4 id=\"constraints\">Constraints</h4>\n<ul>\n<li>Admins and superusers cannot perform unsafe requests (POST, PUT, PATCH, DELETE) over customers' carts.</li>\n</ul>\n<h4 id=\"important-notes\">Important notes</h4>\n<ul>\n<li>Customers' carts and their cart items can be modified through the Django Admin Interface</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"9a0ee032-6644-4cd0-9f78-6f5a8b51c0b7","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"8af5c263-43a3-4d79-808a-e960d31217da","type":"text/javascript","exec":[""]}}],"_postman_id":"293ceb84-e93c-4597-a910-0c8fda2b760a"}],"id":"6abe2943-ca1c-4c4b-80ea-98dac97e1d57","description":"<h2 id=\"carts-shopping-carts-allow-customers-to-save-products-for-later-purchase\">Carts (shopping carts) allow customers to save products for later purchase</h2>\n<p>This section provides information on how to work with the endpoints for carts, which also includes cart items.</p>\n<h3 id=\"cart-structure\">Cart Structure</h3>\n<p>The structure of a cart is defined as follows:</p>\n<ul>\n<li>A cart can hold multiple cart items</li>\n<li>A cart item can hold only one product</li>\n<li>A cart item has attributes such as<ul>\n<li>quantity: quantity of a single product (e.g., Webcam C270 x 2)</li>\n<li>subtotal: product price * cart item quantity (e.g., 24.99 * 2)</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"endpoints\">Endpoints</h4>\n<p>To simplify the process of working with cart and cart items, this API offers endpoints for customers and admin/superusers.</p>\n<p>You will find sub-sections down below for:</p>\n<ul>\n<li>customers' cart endpoints</li>\n<li>admin/superusers cart endpoints</li>\n</ul>\n","_postman_id":"6abe2943-ca1c-4c4b-80ea-98dac97e1d57"},{"name":"Orders","item":[{"name":"Create Order","id":"c6ee00fa-d2b5-4b81-bd4f-d41426269f12","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"url":"http://localhost:8000/api/orders","description":"<h2 id=\"creates-an-order-with-the-available-cart-items-in-the-requesting-customers-cart\">Creates an order with the available cart items in the requesting customer's cart</h2>\n<p>This request will create an order which will be automatically associated with the requesting customer. The available cart items in the customer's cart will be used to create order items for the order.</p>\n<h4 id=\"constraints\">Constraints</h4>\n<ul>\n<li>Admins and superusers cannot perform this request because it depends on the requesting user's cart, which admins and superusers don't have.</li>\n<li>Customers cannot retrieve orders and order items that belong to other customers</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","orders"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"579a8a2d-8b55-48a3-a11f-6e11be85cece","name":"Create Order","originalRequest":{"method":"POST","header":[],"url":"http://localhost:8000/api/orders"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 15:06:42 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"255"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 4,\n    \"user\": \"http://localhost:8000/api/customers/1\",\n    \"order_items\": [\n        \"http://localhost:8000/api/order-items/4\",\n        \"http://localhost:8000/api/order-items/5\"\n    ],\n    \"total\": 259,\n    \"created_on\": \"2023-07-26T15:06:42.619479Z\",\n    \"updated_on\": \"2023-07-26T15:06:42.619489Z\"\n}"}],"_postman_id":"c6ee00fa-d2b5-4b81-bd4f-d41426269f12"},{"name":"Get Order List","id":"0fc3b981-9f1c-493d-8b3c-e62a9b3585ca","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/orders","description":"<h2 id=\"retrieves-the-list-of-orders\">Retrieves the list of orders</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Customer: customers can only retrieve the list of their own orders</li>\n<li>Admin/supersupers: admins and superusers can retrieve the list of all orders</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"4eb074de-7fdb-4e13-9bf9-38df71191450","id":"4eb074de-7fdb-4e13-9bf9-38df71191450","name":"Orders","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","orders"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"a0d5d929-e9bd-455d-ade4-a45296d7d840","name":"Get Order List (Customer Request)","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/orders"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 16:25:26 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"515"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 4,\n        \"user\": \"http://localhost:8000/api/customers/1\",\n        \"order_items\": [\n            \"http://localhost:8000/api/order-items/4\",\n            \"http://localhost:8000/api/order-items/5\"\n        ],\n        \"total\": 259,\n        \"created_on\": \"2023-07-26T15:06:42.619479Z\",\n        \"updated_on\": \"2023-07-26T15:06:42.619489Z\"\n    },\n    {\n        \"id\": 5,\n        \"user\": \"http://localhost:8000/api/customers/1\",\n        \"order_items\": [\n            \"http://localhost:8000/api/order-items/6\",\n            \"http://localhost:8000/api/order-items/7\"\n        ],\n        \"total\": 1338.99,\n        \"created_on\": \"2023-07-26T16:25:04.832595Z\",\n        \"updated_on\": \"2023-07-26T16:25:04.832605Z\"\n    }\n]"},{"id":"a612e233-1c19-4428-8fe5-78550a151717","name":"Get Order List (Admin Request)","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/orders"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 16:26:28 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"1158"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"user\": \"http://localhost:8000/api/customers/2\",\n        \"order_items\": [\n            \"http://localhost:8000/api/order-items/1\"\n        ],\n        \"total\": 839.99,\n        \"created_on\": \"2023-07-22T18:10:35.171698Z\",\n        \"updated_on\": \"2023-07-22T18:10:35.171707Z\"\n    },\n    {\n        \"id\": 2,\n        \"user\": \"http://localhost:8000/api/customers/2\",\n        \"order_items\": [\n            \"http://localhost:8000/api/order-items/2\"\n        ],\n        \"total\": 179,\n        \"created_on\": \"2023-07-22T18:15:53.538132Z\",\n        \"updated_on\": \"2023-07-22T18:15:53.538141Z\"\n    },\n    {\n        \"id\": 3,\n        \"user\": \"http://localhost:8000/api/customers/3\",\n        \"order_items\": [\n            \"http://localhost:8000/api/order-items/3\"\n        ],\n        \"total\": 998,\n        \"created_on\": \"2023-07-22T18:22:20.847822Z\",\n        \"updated_on\": \"2023-07-22T18:22:20.847831Z\"\n    },\n    {\n        \"id\": 4,\n        \"user\": \"http://localhost:8000/api/customers/1\",\n        \"order_items\": [\n            \"http://localhost:8000/api/order-items/4\",\n            \"http://localhost:8000/api/order-items/5\"\n        ],\n        \"total\": 259,\n        \"created_on\": \"2023-07-26T15:06:42.619479Z\",\n        \"updated_on\": \"2023-07-26T15:06:42.619489Z\"\n    },\n    {\n        \"id\": 5,\n        \"user\": \"http://localhost:8000/api/customers/1\",\n        \"order_items\": [\n            \"http://localhost:8000/api/order-items/6\",\n            \"http://localhost:8000/api/order-items/7\"\n        ],\n        \"total\": 1338.99,\n        \"created_on\": \"2023-07-26T16:25:04.832595Z\",\n        \"updated_on\": \"2023-07-26T16:25:04.832605Z\"\n    }\n]"}],"_postman_id":"0fc3b981-9f1c-493d-8b3c-e62a9b3585ca"},{"name":"Get Order Details","id":"c28562e3-ad3a-465a-b82e-edba88747ef5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/orders/1","description":"<h2 id=\"retrieves-the-details-of-the-order-with-the-matching-id\">Retrieves the details of the order with the matching ID</h2>\n<h4 id=\"endpoint-url\">Endpoint URL</h4>\n<p><code>The endpoint's URL has the structure /api/orders/{orderID}`</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Customer: customers can only retrieve the details of their own orders</li>\n<li>Admin/supersupers: admins and superusers can retrieve details of any order</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"4eb074de-7fdb-4e13-9bf9-38df71191450","id":"4eb074de-7fdb-4e13-9bf9-38df71191450","name":"Orders","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","orders","1"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"77a766fb-aba4-4dc6-a835-1d8fb19f5857","name":"Order Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/orders/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 22 Jul 2023 18:17:29 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"214"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"user\": \"http://localhost:8000/api/customers/2\",\n    \"order_items\": [\n        \"http://localhost:8000/api/order-items/1\"\n    ],\n    \"total\": 839.99,\n    \"created_on\": \"2023-07-22T18:10:35.171698Z\",\n    \"updated_on\": \"2023-07-22T18:10:35.171707Z\"\n}"}],"_postman_id":"c28562e3-ad3a-465a-b82e-edba88747ef5"},{"name":"Get Order Item List","id":"2454142c-40f8-4c75-b9aa-47eeb685987b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/order-items","description":"<h2 id=\"retrieves-the-list-or-order-items\">Retrieves the list or order items</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Customer: customers can only retrieve the list of their own order items</li>\n<li>Admin/supersupers: admins and superusers can retrieve the list of all order items</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"4eb074de-7fdb-4e13-9bf9-38df71191450","id":"4eb074de-7fdb-4e13-9bf9-38df71191450","name":"Orders","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","order-items"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"4330ceef-1022-4a6c-9eba-2027be80d10a","name":"Get Order Item List (Customer Request)","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/order-items"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 16:33:13 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"3344"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 4,\n        \"order\": \"http://localhost:8000/api/orders/4\",\n        \"product\": \"http://localhost:8000/api/products/8\",\n        \"product_values\": {\n            \"name\": \"Countless Bracelet\",\n            \"brand\": \"Holzkern\",\n            \"price\": \"119.00\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Men's Jewelry\",\n            \"description\": \"Use this chance to get a unique piece of jewelry made from marble and stainless steel! We always produce in limited small amounts, whereby many models are quickly sold out. It may seem like a shame, but this is how we guarantee the typical Holzkern uniqueness of your special piece of nature. Secure your favorites today, and let yourself be reminded by our “Countless” bracelet of all the infinite opportunities that life offers you. Use them!\",\n            \"specifications\": null\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"119.00\",\n        \"added_on\": \"2023-07-26T15:06:42.627599Z\",\n        \"updated_on\": \"2023-07-26T15:06:42.627608Z\"\n    },\n    {\n        \"id\": 5,\n        \"order\": \"http://localhost:8000/api/orders/4\",\n        \"product\": \"http://localhost:8000/api/products/9\",\n        \"product_values\": {\n            \"name\": \"Ghost 15\",\n            \"brand\": \"Brooks\",\n            \"price\": \"140.00\",\n            \"vendor\": \"peter_roe\",\n            \"category\": \"Running Shoes\",\n            \"description\": \"Runners have loved the Ghost for its soft cushioning, smooth transitions, and reliability as a daily trainer. Over the years, Brooks has continued to make updates, ensuring the Ghost remains a go-to among runners. Enhancements include improving the fit of the upper for distraction-free comfort mile after mile and an updated midsole with DNA Loft v2 for blissfully cushioned strides.\",\n            \"specifications\": null\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"140.00\",\n        \"added_on\": \"2023-07-26T15:06:42.632144Z\",\n        \"updated_on\": \"2023-07-26T15:06:42.632151Z\"\n    },\n    {\n        \"id\": 6,\n        \"order\": \"http://localhost:8000/api/orders/5\",\n        \"product\": \"http://localhost:8000/api/products/6\",\n        \"product_values\": {\n            \"name\": \"Carbon (Gray Maple/Dark Gray)\",\n            \"brand\": \"Holzkern\",\n            \"price\": \"499.00\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Men's Timepieces\",\n            \"description\": \"We’re proud to present “Carbon” - a beautiful automatic watch with a unique skeleton design and see-through caseback. Made from colored maple wood, scratch-resistant sapphire glass, and gray stainless steel, this timepiece is guaranteed to turn heads.\",\n            \"specifications\": {\n                \"Automatic Movement\": \"Automatic watch movements represent the original and traditional functionality of wristwatches. This technology makes use of gravity and transforms the motion of your arm into energy to wind up your timepiece. \"\n            }\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"499.00\",\n        \"added_on\": \"2023-07-26T16:25:04.839957Z\",\n        \"updated_on\": \"2023-07-26T16:25:04.839964Z\"\n    },\n    {\n        \"id\": 7,\n        \"order\": \"http://localhost:8000/api/orders/5\",\n        \"product\": \"http://localhost:8000/api/products/2\",\n        \"product_values\": {\n            \"name\": \"ASUS TUF GAMING F15 (2020)\",\n            \"brand\": \"ASUS\",\n            \"price\": \"839.99\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Gamming Laptops\",\n            \"description\": \"Geared for serious gaming and real-world durability, the TUF Gaming F15 is a fully-loaded Windows 11 Pro gaming laptop that can carry you to victory. Powered by the latest 10th Gen Intel® Core™ i5 CPU and GeForce® GTX 1660 GPU, action-packed gameplay is fast, fluid, and fully saturates speedy IPS-level displays up to 144Hz.\",\n            \"specifications\": {\n                \"CPU\": \"i5 10-300H\",\n                \"RAM\": \"16 GB DDR3 (dual-channel)\",\n                \"Storage\": \"512 GB NM.2 SSD x 2\",\n                \"Graphics\": \"Nvidia GTX Geforce 1650 4GB VRAM\"\n            }\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"839.99\",\n        \"added_on\": \"2023-07-26T16:25:04.845181Z\",\n        \"updated_on\": \"2023-07-26T16:25:04.845192Z\"\n    }\n]"},{"id":"cf227882-64de-4f13-951a-80e5cf78e4b5","name":"Get Order Item List (Admin Request)","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/order-items"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 16:34:20 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"5866"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"order\": \"http://localhost:8000/api/orders/1\",\n        \"product\": \"http://localhost:8000/api/products/2\",\n        \"product_values\": {\n            \"name\": \"ASUS TUF GAMING F15 (2020)\",\n            \"brand\": \"ASUS\",\n            \"price\": \"839.99\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Laptops (Gaming)\",\n            \"description\": \"Geared for serious gaming and real-world durability, the TUF Gaming F15 is a fully-loaded Windows 11 Pro gaming laptop that can carry you to victory. Powered by the latest 10th Gen Intel® Core™ i5 CPU and GeForce® GTX 1660 GPU, action-packed gameplay is fast, fluid, and fully saturates speedy IPS-level displays up to 144Hz.\",\n            \"specifications\": {\n                \"CPU\": \"i5 10-300H\",\n                \"RAM\": \"16 GB DDR3 (dual-channel)\",\n                \"Storage\": \"512 GB NM.2 SSD x 2\",\n                \"Graphics\": \"Nvidia GTX Geforce 1650 4GB VRAM\"\n            }\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"839.99\",\n        \"added_on\": \"2023-07-22T18:10:35.181313Z\",\n        \"updated_on\": \"2023-07-22T18:10:35.181357Z\"\n    },\n    {\n        \"id\": 2,\n        \"order\": \"http://localhost:8000/api/orders/2\",\n        \"product\": \"http://localhost:8000/api/products/7\",\n        \"product_values\": {\n            \"name\": \"Decimal Necklace (Marble/Antique Silver)\",\n            \"brand\": \"Holzkern\",\n            \"price\": \"179.00\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Men's Jewelry\",\n            \"description\": \"Discover our model “Decimal”, made from black marble and stainless steel in antique silver. If you take a closer look, you’ll see that none of these necklaces are the same as the next! A characteristic of the marble we use is the white veins and markings in the stone - these have completely natural origins and make every single piece entirely unique! Also, these necklaces are 100% waterproof and therefore ready for all kinds of fun.\",\n            \"specifications\": null\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"179.00\",\n        \"added_on\": \"2023-07-22T18:15:53.542836Z\",\n        \"updated_on\": \"2023-07-22T18:15:53.542844Z\"\n    },\n    {\n        \"id\": 3,\n        \"order\": \"http://localhost:8000/api/orders/3\",\n        \"product\": \"http://localhost:8000/api/products/4\",\n        \"product_values\": {\n            \"name\": \"Argon (Leadwood/Silver)\",\n            \"brand\": \"Holzkern\",\n            \"price\": \"499.00\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Men's Timepieces\",\n            \"description\": \"Just like the diversity of elements in our world, our automatic watch made from leadwood and scratch-resistant sapphire glass should always remind you that it’s the inner values that count.\",\n            \"specifications\": {\n                \"color\": \"Walnut/Gray\",\n                \"movement\": \"quartz\",\n                \"release date\": \"2023-04-10\",\n                \"case material\": \"metal-wood\",\n                \"diameter (mm)\": 42,\n                \"is waterproof\": true,\n                \"bracelet material\": \"metal-wood\",\n                \"has date indicator\": false,\n                \"has cronograph features\": false\n            }\n        },\n        \"quantity\": 2,\n        \"sub_total\": \"998.00\",\n        \"added_on\": \"2023-07-22T18:22:20.852373Z\",\n        \"updated_on\": \"2023-07-22T18:22:20.852380Z\"\n    },\n    {\n        \"id\": 4,\n        \"order\": \"http://localhost:8000/api/orders/4\",\n        \"product\": \"http://localhost:8000/api/products/8\",\n        \"product_values\": {\n            \"name\": \"Countless Bracelet\",\n            \"brand\": \"Holzkern\",\n            \"price\": \"119.00\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Men's Jewelry\",\n            \"description\": \"Use this chance to get a unique piece of jewelry made from marble and stainless steel! We always produce in limited small amounts, whereby many models are quickly sold out. It may seem like a shame, but this is how we guarantee the typical Holzkern uniqueness of your special piece of nature. Secure your favorites today, and let yourself be reminded by our “Countless” bracelet of all the infinite opportunities that life offers you. Use them!\",\n            \"specifications\": null\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"119.00\",\n        \"added_on\": \"2023-07-26T15:06:42.627599Z\",\n        \"updated_on\": \"2023-07-26T15:06:42.627608Z\"\n    },\n    {\n        \"id\": 5,\n        \"order\": \"http://localhost:8000/api/orders/4\",\n        \"product\": \"http://localhost:8000/api/products/9\",\n        \"product_values\": {\n            \"name\": \"Ghost 15\",\n            \"brand\": \"Brooks\",\n            \"price\": \"140.00\",\n            \"vendor\": \"peter_roe\",\n            \"category\": \"Running Shoes\",\n            \"description\": \"Runners have loved the Ghost for its soft cushioning, smooth transitions, and reliability as a daily trainer. Over the years, Brooks has continued to make updates, ensuring the Ghost remains a go-to among runners. Enhancements include improving the fit of the upper for distraction-free comfort mile after mile and an updated midsole with DNA Loft v2 for blissfully cushioned strides.\",\n            \"specifications\": null\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"140.00\",\n        \"added_on\": \"2023-07-26T15:06:42.632144Z\",\n        \"updated_on\": \"2023-07-26T15:06:42.632151Z\"\n    },\n    {\n        \"id\": 6,\n        \"order\": \"http://localhost:8000/api/orders/5\",\n        \"product\": \"http://localhost:8000/api/products/6\",\n        \"product_values\": {\n            \"name\": \"Carbon (Gray Maple/Dark Gray)\",\n            \"brand\": \"Holzkern\",\n            \"price\": \"499.00\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Men's Timepieces\",\n            \"description\": \"We’re proud to present “Carbon” - a beautiful automatic watch with a unique skeleton design and see-through caseback. Made from colored maple wood, scratch-resistant sapphire glass, and gray stainless steel, this timepiece is guaranteed to turn heads.\",\n            \"specifications\": {\n                \"Automatic Movement\": \"Automatic watch movements represent the original and traditional functionality of wristwatches. This technology makes use of gravity and transforms the motion of your arm into energy to wind up your timepiece. \"\n            }\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"499.00\",\n        \"added_on\": \"2023-07-26T16:25:04.839957Z\",\n        \"updated_on\": \"2023-07-26T16:25:04.839964Z\"\n    },\n    {\n        \"id\": 7,\n        \"order\": \"http://localhost:8000/api/orders/5\",\n        \"product\": \"http://localhost:8000/api/products/2\",\n        \"product_values\": {\n            \"name\": \"ASUS TUF GAMING F15 (2020)\",\n            \"brand\": \"ASUS\",\n            \"price\": \"839.99\",\n            \"vendor\": \"adolfoj\",\n            \"category\": \"Gamming Laptops\",\n            \"description\": \"Geared for serious gaming and real-world durability, the TUF Gaming F15 is a fully-loaded Windows 11 Pro gaming laptop that can carry you to victory. Powered by the latest 10th Gen Intel® Core™ i5 CPU and GeForce® GTX 1660 GPU, action-packed gameplay is fast, fluid, and fully saturates speedy IPS-level displays up to 144Hz.\",\n            \"specifications\": {\n                \"CPU\": \"i5 10-300H\",\n                \"RAM\": \"16 GB DDR3 (dual-channel)\",\n                \"Storage\": \"512 GB NM.2 SSD x 2\",\n                \"Graphics\": \"Nvidia GTX Geforce 1650 4GB VRAM\"\n            }\n        },\n        \"quantity\": 1,\n        \"sub_total\": \"839.99\",\n        \"added_on\": \"2023-07-26T16:25:04.845181Z\",\n        \"updated_on\": \"2023-07-26T16:25:04.845192Z\"\n    }\n]"}],"_postman_id":"2454142c-40f8-4c75-b9aa-47eeb685987b"},{"name":"Get Order Item Details","id":"b9cc41f2-1bde-41cd-94a2-6352c8cf5958","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/order-items/7","description":"<h2 id=\"retrieves-the-details-of-the-ordered-item-with-the-matching-id\">Retrieves the details of the ordered item with the matching ID</h2>\n<h4 id=\"endpoint-url\">Endpoint URL</h4>\n<ul>\n<li>The endpoint's URL has the structure <code>/api/order-items/{order-itemID}</code></li>\n</ul>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Customer: customers can only retrieve the details of their own order items</li>\n<li>Admin/supersupers: admins and superusers can retrieve details of any order item</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"4eb074de-7fdb-4e13-9bf9-38df71191450","id":"4eb074de-7fdb-4e13-9bf9-38df71191450","name":"Orders","type":"folder"}},"urlObject":{"protocol":"http","port":"8000","path":["api","order-items","7"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"66253aec-d597-428f-912e-532927fabe91","name":"Get Order Item Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/order-items/7"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 26 Jul 2023 17:25:36 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"851"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 7,\n    \"order\": \"http://localhost:8000/api/orders/5\",\n    \"product\": \"http://localhost:8000/api/products/2\",\n    \"product_values\": {\n        \"name\": \"ASUS TUF GAMING F15 (2020)\",\n        \"brand\": \"ASUS\",\n        \"price\": \"839.99\",\n        \"vendor\": \"adolfoj\",\n        \"category\": \"Gamming Laptops\",\n        \"description\": \"Geared for serious gaming and real-world durability, the TUF Gaming F15 is a fully-loaded Windows 11 Pro gaming laptop that can carry you to victory. Powered by the latest 10th Gen Intel® Core™ i5 CPU and GeForce® GTX 1660 GPU, action-packed gameplay is fast, fluid, and fully saturates speedy IPS-level displays up to 144Hz.\",\n        \"specifications\": {\n            \"CPU\": \"i5 10-300H\",\n            \"RAM\": \"16 GB DDR3 (dual-channel)\",\n            \"Storage\": \"512 GB NM.2 SSD x 2\",\n            \"Graphics\": \"Nvidia GTX Geforce 1650 4GB VRAM\"\n        }\n    },\n    \"quantity\": 1,\n    \"sub_total\": \"839.99\",\n    \"added_on\": \"2023-07-26T16:25:04.845181Z\",\n    \"updated_on\": \"2023-07-26T16:25:04.845192Z\"\n}"}],"_postman_id":"b9cc41f2-1bde-41cd-94a2-6352c8cf5958"}],"id":"4eb074de-7fdb-4e13-9bf9-38df71191450","description":"<h2 id=\"this-section-provides-information-on-how-customers-and-adminssuperusers-can-work-with-orders-endpoints\">This section provides information on how customers and admins/superusers can work with orders' endpoints</h2>\n<h4 id=\"usage\">Usage</h4>\n<ul>\n<li>Orders are -in a way- <em>bills</em> that customers get when they make a purchase. They store information such as the ordered (purchased) products, the quantity of each product ordered, the total of the order, and also date time of when the order was created.</li>\n<li>Upon creation, an order takes the available cart items in the requesting customer's cart. They create order items and delete the cart items in the customer's cart.</li>\n</ul>\n<h4 id=\"structure\">Structure</h4>\n<p>The structure of orders and order items is very similar to the structure of carts and cart items.</p>\n<ul>\n<li>orders: orders can hold multiple order items</li>\n<li>order items: order items can hold only one product</li>\n</ul>\n<h4 id=\"constraints\">Constraints</h4>\n<ul>\n<li><p>Orders only process cart items whose products are available. If a product was added to a cart (with a cart item) and then it became unavailable (e.g., it ran out), the order will not process such a cart item, therefore, it will be left in the cart.</p>\n</li>\n<li><p>Customers can only retrieve their own orders and order-items</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"83c4995f-6eb9-4e36-8107-6d32448cb521","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"b2499435-d10b-49eb-84e7-8b9a4c991a21","type":"text/javascript","exec":[""]}}],"_postman_id":"4eb074de-7fdb-4e13-9bf9-38df71191450"},{"name":"Reviews","item":[{"name":"Create Review","id":"0f639c96-9d8b-49c6-b73f-b9128693e233","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"title","value":"Ich liebe es!","type":"text"},{"key":"text","value":"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme!","type":"text"},{"key":"rating","value":"5","type":"text"},{"key":"order","value":"2","type":"text"},{"key":"product","value":"7","type":"text"}]},"url":"http://localhost:8000/api/reviews","description":"<h2 id=\"creates-a-review-with-the-provided-data\">Creates A Review With The Provided Data</h2>\n<h4 id=\"required-attributes\">Required Attributes</h4>\n<ul>\n<li>title: text max length 128 chars</li>\n<li>text: text max length 512 chars</li>\n<li>rating: integer (min value 1, max value 5)</li>\n<li>order: integer (order primary key)</li>\n<li>product: integer (product primary key)</li>\n</ul>\n<h4 id=\"level-of-authorization-required\">Level of authorization Required</h4>\n<ul>\n<li>Customer: Only customers can perform this request</li>\n</ul>\n<h4 id=\"constraints\">Constraints</h4>\n<ul>\n<li>Customers:<ul>\n<li>Can only review products they have ordered</li>\n<li>Can only review a product once per order</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","reviews"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"70463884-e55c-43ac-b960-2554aeb91489","name":"Create Review","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"title","value":"Ich liebe es!","type":"text"},{"key":"text","value":"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme!","type":"text"},{"key":"rating","value":"5","type":"text"},{"key":"order","value":"2","type":"text"},{"key":"product","value":"7","type":"text"}]},"url":"http://localhost:8000/api/reviews"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 27 Jul 2023 20:15:17 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"355"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 4,\n    \"image_url\": null,\n    \"title\": \"Ich liebe es!\",\n    \"text\": \"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme!\",\n    \"rating\": 5,\n    \"date\": \"2023-07-27\",\n    \"order\": 2,\n    \"product\": 7,\n    \"user\": 2\n}"}],"_postman_id":"0f639c96-9d8b-49c6-b73f-b9128693e233"},{"name":"Get Review List","id":"dc12f3ba-b807-48d1-a9da-be0a5bb0eeca","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"http://localhost:8000/api/reviews","description":"<h2 id=\"retrieve-the-list-of-reviews\">Retrieve The List Of Reviews</h2>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>None: Non-authenticated users can retrieve the list of reviews</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","reviews"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"83aae251-d58e-4365-93ae-6aa2fe191b5c","name":"Get Review List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/reviews"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 27 Jul 2023 20:15:49 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"992"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"image_url\": null,\n        \"title\": \"Amazing comfort and support\",\n        \"text\": \"I Had the Ghost 14's as my first set of Brooks running sneakers.\\nSo I had to give the Ghost 15's a try since I enjoyed the previous ones I had.\\nThis is by far the most comfortable sneaker I've ran/walked in. It feels like I'm running\\non pillows. I also use to have shin splints when I ran for more than 15min straight; but with these sneakers I do not feel the same pain.\\nHighly recommend these sneakers to those getting into running/walking, or just want a really comfortable pair of sneakers !\",\n        \"rating\": 5,\n        \"date\": \"2023-07-22\",\n        \"order\": 3,\n        \"product\": 4,\n        \"user\": 3\n    },\n    {\n        \"id\": 4,\n        \"image_url\": null,\n        \"title\": \"Ich liebe es!\",\n        \"text\": \"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme!\",\n        \"rating\": 5,\n        \"date\": \"2023-07-27\",\n        \"order\": 2,\n        \"product\": 7,\n        \"user\": 2\n    }\n]"}],"_postman_id":"dc12f3ba-b807-48d1-a9da-be0a5bb0eeca"},{"name":"Get Review Details","id":"b664d3c9-c027-4fe4-8feb-34b0497b3fe9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"http://localhost:8000/api/reviews/4","description":"<h2 id=\"retrieves-details-for-the-review-with-the-matching-id\">Retrieves details for the review with the matching Id</h2>\n<h4 id=\"endpoint-url-structure\">Endpoint URL Structure</h4>\n<p><code>/api/reviews/{reviewID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>None: Non-authenticated users can make the request</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","reviews","4"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"8a66a310-2a14-4fef-87b9-16068ce5390d","name":"Get Review Details","originalRequest":{"method":"GET","header":[],"url":"http://localhost:8000/api/reviews/4"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 27 Jul 2023 20:16:38 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"355"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 4,\n    \"image_url\": null,\n    \"title\": \"Ich liebe es!\",\n    \"text\": \"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme!\",\n    \"rating\": 5,\n    \"date\": \"2023-07-27\",\n    \"order\": 2,\n    \"product\": 7,\n    \"user\": 2\n}"}],"_postman_id":"b664d3c9-c027-4fe4-8feb-34b0497b3fe9"},{"name":"Update Review","id":"5e2adb45-b394-4a39-a18b-e3bdd8f026b8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"text","value":"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme. Vielleicht kaufe ich noch eins für meinen Ehepartner!","type":"text"}]},"url":"http://localhost:8000/api/reviews/4","description":"<h2 id=\"updates-the-review-with-the-matching-id\">Updates the review with the matching ID.</h2>\n<h4 id=\"endpoint-url-structure\">Endpoint URL Structure</h4>\n<p><code>/api/reviews/{reviewID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Customer: customers can only update their own reviews</li>\n<li>Admins/superusers: admins and superusers can update any reviews</li>\n</ul>\n<h4 id=\"updatable-attributes\">Updatable Attributes</h4>\n<ul>\n<li>title</li>\n<li>text</li>\n<li>image_url</li>\n<li>rating</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","reviews","4"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"fe3d4c81-ebbc-4b79-8ed6-173eb3a1f0d5","name":"Update Review","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"text","value":"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme. Vielleicht kaufe ich noch eins für meinen Ehepartner!","type":"text"}]},"url":"http://localhost:8000/api/reviews/4"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 27 Jul 2023 20:17:29 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"410"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 4,\n    \"image_url\": null,\n    \"title\": \"Ich liebe es!\",\n    \"text\": \"Der Versand war schnell und die Produkte so schön wie in den Bildern. Was mich aber nochmal positiv beeindruckt hat war, wie leicht die Brillen sind. Da schier mit Holz gearbeitet wird, verleiht den Produkten einen einmaligen Charme. Vielleicht kaufe ich noch eins für meinen Ehepartner!\",\n    \"rating\": 5,\n    \"date\": \"2023-07-27\",\n    \"order\": 2,\n    \"product\": 7,\n    \"user\": 2\n}"}],"_postman_id":"5e2adb45-b394-4a39-a18b-e3bdd8f026b8"},{"name":"Delete Review","id":"c31c86a2-b142-4430-aa3f-13597b23c0f1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:8000/api/reviews/4","description":"<h2 id=\"deletes-the-review-with-the-matching-id\">Deletes the review with the matching ID</h2>\n<h4 id=\"endpoint-url-structure\">Endpoint URL Structure</h4>\n<p><code>/api/reviews/{reviewID}</code></p>\n<h4 id=\"level-of-authorization-required\">Level of authorization required</h4>\n<ul>\n<li>Customer:<ul>\n<li>customers can only delete their own reviews</li>\n</ul>\n</li>\n<li>Admin/superuser:<ul>\n<li>Admins and superusers can delete any review</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","reviews","4"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"bca803bd-27cb-4edd-aaac-a3adbbcdd422","name":"Delete Review","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/reviews/4"},"status":"No Content","code":204,"_postman_previewlanguage":"plain","header":[{"key":"Date","value":"Thu, 27 Jul 2023 20:18:08 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.11.3"},{"key":"Vary","value":"Accept, origin"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"0"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"c31c86a2-b142-4430-aa3f-13597b23c0f1"}],"id":"c09130e5-3f3e-4ac1-9eb5-56ee934c8b43","description":"<h2 id=\"this-section-provides-information-on-how-customers-and-adminssuperusers-can-work-with-the-reviews\">This section provides information on how customers and admins/superusers can work with the reviews</h2>\n<h4 id=\"review-structure\">Review Structure</h4>\n<p>A review instance consists of</p>\n<ul>\n<li>title</li>\n<li>body</li>\n<li>rating</li>\n<li>image_url</li>\n<li>product</li>\n<li>order</li>\n</ul>\n<h4 id=\"constraints-and-authorization\">Constraints and Authorization</h4>\n<ul>\n<li>Non-authenticated users can retrieve reviews (list and details)</li>\n<li>Only customers can create reviews</li>\n<li>Customers can only review products they have ordered</li>\n<li>Customers can only review a product once (per order)</li>\n<li>Admins/superusers can update customer's reviews</li>\n<li>Admins/superusers can delete customer's reviews</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"f9bd319e-7660-4fd3-874d-bd2596fdc1e2","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"51b47a08-9afb-45bc-8848-40ac11a10b91","type":"text/javascript","exec":[""]}}],"_postman_id":"c09130e5-3f3e-4ac1-9eb5-56ee934c8b43"}],"event":[{"listen":"prerequest","script":{"id":"9214fc62-be9e-4ebe-a717-862265d8b7cc","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"41e42fb2-727c-4732-99c0-e388d92c1ee7","type":"text/javascript","exec":[""]}}]}