{"info":{"_postman_id":"a231d836-abdc-4ecb-91cf-1cc0a128bde2","name":"Vinyl-Swarm","description":"<html><head></head><body><p>This project provides a RESTful API to manage vinyl records, stores, and user records in a database through a Rust backend, The implementation is based on Postgres databases, The Schema can be seen within the project as <code>sqlx a toolkit for interacting with SQL databases.</code>The API facilitates CRUD (Create, Read, Update, Delete) operations on records, record stores, and users, with special features for handling user-specific records that can be stored within a collection a <code>user_records</code> collection or <code>user_wishlist</code> for the reference when cash is flowing and your willing to spend some local dollars on great music. The API also stores <strong>Record Store</strong> data, so enthusiests can browse user selected hot spots for collecting their treasures.</p>\n<p>The goal was to build a service that allows users to manage their music collections and associated record stores, providing a comprehensive system for others to admire or simply intermingle and express fandom for a once popular art, that has seen a vibrant resurgance.</p>\n<p><strong>Vinyl Swarm Database Schema</strong></p>\n<p>the following shows the <code>postgreSQL</code> implementation of the database objects used to represent these endpoints and may be used for your reference.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-sql\">-- PostgreSQL:\nCREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";\n\n-- users table \nCREATE TABLE \n    IF NOT EXISTS users (\n        user_id UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n        user_name VARCHAR(50) NOT NULL UNIQUE,\n        user_first_name VARCHAR(50) NOT NULL,\n        user_last_name VARCHAR(50) NOT NULL,\n        user_email VARCHAR(250) NOT NULL UNIQUE, \n        user_password TEXT NOT NULL,\n        created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()\n    );\n\n-- records table\nCREATE TABLE \n    IF NOT EXISTS records (\n        record_id UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n        artist VARCHAR(100) NOT NULL,\n        title VARCHAR(100) NOT NULL,\n        released DATE NOT NULL,\n        genre TEXT[],\n        format VARCHAR(50),\n        price DECIMAL(10,2),\n        label VARCHAR(150) NOT NULL,\n        duration_length TIME NOT NULL,\n        CONSTRAINT unique_artist_release UNIQUE (artist, title, format)\n    );\n\n-- record_stores table\nCREATE TABLE \n    IF NOT EXISTS record_stores (\n        record_store_id UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n        store_name VARCHAR(50) NOT NULL,\n        store_address VARCHAR(200) NOT NULL,\n        store_city VARCHAR(75) NOT NULL,\n        store_state VARCHAR(50) NOT NULL,\n        store_zip VARCHAR(20) NOT NULL, \n        phone_number VARCHAR(20), \n        website TEXT,\n        CONSTRAINT unique_record_store UNIQUE (store_name, store_address, store_city, store_state)\n    );\n\n\n-- user_record_stores table\nCREATE TABLE\n    IF NOT EXISTS user_record_stores (\n        user_favorite_stores_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),\n        user_key UUID NOT NULL REFERENCES users (user_id) ON DELETE CASCADE,\n        record_store_id UUID NOT NULL REFERENCES record_stores (record_store_id) ON DELETE CASCADE,\n        CONSTRAINT unique_user_record_store UNIQUE (user_key, record_store_id)\n    );\n\n-- user_records table\nCREATE TABLE \n    IF NOT EXISTS user_records (\n    user_record_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),\n    user_id UUID NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,\n    record_id UUID NOT NULL REFERENCES records(record_id) ON DELETE CASCADE,\n    added_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),\n    CONSTRAINT unique_user_record UNIQUE (user_id, record_id)\n);\n\n-- user_wish_list table\nCREATE TABLE \n    IF NOT EXISTS user_wishlist (\n        user_wish_list_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),\n        user_id UUID NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,\n        record_id UUID NOT NULL REFERENCES records(record_id) ON DELETE CASCADE,\n        added_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),\n        CONSTRAINT unique_wish_list_record UNIQUE (user_id, record_id)\n    );\n\n</code></pre>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"5839344","collectionId":"a231d836-abdc-4ecb-91cf-1cc0a128bde2","publishedId":"2sAYk7SizX","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-03-11T06:43:52.000Z"},"item":[{"name":"Records","item":[{"name":"Wishlist Records","item":[{"name":"Get User Wishlist Records","id":"db408277-da88-4ab2-b8f3-665e03d5c89d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/records/wishlist/:user_id","description":"<p>Method which requires a <code>user_id</code> and this method checks the database for any related <code>user_wishlist</code> pairing the <code>user_id</code> with the the associated <code>record</code> objects that are related to the user's collection.</p>\n<p><strong>Example Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"results\": 3,\n    \"status\": \"success\",\n    \"user_wishlist_records\": [\n        {\n            \"artist\": \"Sabrina Carpenter\",\n            \"duration_length\": \"00:42:10\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Pop\"\n            ],\n            \"label\": \"Hollywood Records\",\n            \"price\": \"19.9900\",\n            \"record_id\": \"dede8be0-e8d5-4ae2-bbba-25912e68c717\",\n            \"released\": \"2022-05-20\",\n            \"title\": \"Evolve\"\n        },\n        {\n            \"artist\": \"Emancipator\",\n            \"duration_length\": \"00:50:14\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Downtempo\",\n                \"Electronic\",\n                \"Trip-Hop\"\n            ],\n            \"label\": \"Loci Records\",\n            \"price\": \"24.9900\",\n            \"record_id\": \"41dbd2c1-00f8-4367-bc68-fbdfb99c206e\",\n            \"released\": \"2006-11-06\",\n            \"title\": \"Soon It Will Be Cold Enough\"\n        },\n        {\n            \"artist\": \"STS9\",\n            \"duration_length\": \"01:12:45\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Electronic\",\n                \"Downtempo\",\n                \"Live\"\n            ],\n            \"label\": \"SCI Fidelity\",\n            \"price\": \"18.9900\",\n            \"record_id\": \"d979f112-8d82-4cfb-baa8-23e00dabc86f\",\n            \"released\": \"2005-03-08\",\n            \"title\": \"Artifact\"\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records","wishlist",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"db408277-da88-4ab2-b8f3-665e03d5c89d"},{"name":"Create Wishlist Record","id":"38291477-366d-4b91-9293-f06cb68d840b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":" {\n            \"artist\": \"STS9\",\n            \"duration_length\": \"01:12:45\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Electronic\",\n                \"Downtempo\",\n                \"Live\"\n            ],\n            \"label\": \"SCI Fidelity\",\n            \"price\": \"18.9900\",\n            \"record_id\": \"2d8939dc-faa4-4a61-8fa4-cbc7b7de6c53\",\n            \"released\": \"2005-03-08\",\n            \"title\": \"Artifact\"\n        }","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/records/wishlist/:user_id","description":"<p>Method for adding a new <code>user_wishlist</code> record. This requires the <strong>path</strong> to include a <strong>valid</strong> <code>user_id</code> supplied to the request in order to return the correct wishlist. This will create a record with the new record to add to the wishlist for the user within the <strong>body</strong> of the request</p>\n<p><strong>Example JSON Body</strong></p>\n<p>An excellent record, I hope to purchase soon, I am wishing for it.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"artist\": \"Bobbing\",\n    \"title\": \"Year of the Newt\",\n    \"released\": \"2023-09-15\",\n    \"genre\": [\"Experimental\", \"Electronic\", \"Ambient\"],\n    \"format\": \"LP\",\n    \"price\": \"22.99\",\n    \"label\": \"Newt Records\",\n    \"duration_length\": \"45:32\"\n}\n\n</code></pre>\n<p>below is another example for general use.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records","wishlist",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"38291477-366d-4b91-9293-f06cb68d840b"},{"name":"Put Wishlist Record","id":"612b31e4-3e7b-4554-beab-2e09dbb5d2da","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"record_id\": \"afff0231-edd5-48fe-9e13-1f6522508720\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/records/wishlist/:user_id","description":"<p>Perhaps you want to quickly move a record that another user has added to your personal wishlist but you don't know the details of the record? Put Wishlist Record takes the <code>user_id</code> as a <strong>path</strong> parameter and the <strong>body</strong> is the <code>json</code> record id supplied by the user.</p>\n<p>assuming the request recieves a valid <strong>body</strong> and <code>user_id</code> the result should return</p>\n<p><strong>*200 Success</strong>* assuming the record was successfully added and other codes for error and missing users such as <strong>*404 Not Found</strong>* and <strong>*500 Internal Error</strong>* for incorrect writing.</p>\n<p><strong>Example Response Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record\": {\n        \"artist\": \"Sabrina Carpenter\",\n        \"duration_length\": \"00:42:10\",\n        \"format\": \"LP\",\n        \"genre\": [\n            \"Pop\"\n        ],\n        \"label\": \"Hollywood Records\",\n        \"price\": \"19.9900\",\n        \"record_id\": \"afff0231-edd5-48fe-9e13-1f6522508720\",\n        \"released\": \"2022-05-20\",\n        \"title\": \"Evolve\"\n    },\n    \"records_collected\": \"1\",\n    \"status\": \"success\",\n    \"user_id\": \"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8\",\n    \"user_wish_list_id\": \"50a0fa67-6b84-4d55-b54d-ac51f69215ed\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records","wishlist",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"612b31e4-3e7b-4554-beab-2e09dbb5d2da"},{"name":"Remove Wishlist Record","id":"95bb9d46-01a0-41c1-a18b-272c79e48126","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"  {\n            \"record_id\": \"afff0231-edd5-48fe-9e13-1f6522508720\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/records/wishlist/:user_id","description":"<p>Method for quickly removing <code>user_wishlist</code> record associations for the cases where users might have purchased the record or just don't want to have them listed.</p>\n<p>the method takes a <strong>path</strong> variable of the <code>user_id</code> and the <strong>body</strong> is the standard <code>json</code> wrapped with the associated <code>record_id</code> the user wants to remove from their wishlist.</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - removed the record from the <code>user_wishlist</code> successfully</p>\n</li>\n<li><p>404 Not Found - can't find the <code>record_id</code>/ <code>user_id</code> to remove</p>\n</li>\n<li><p>500 Error - Caused when It can't connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records","wishlist",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"95bb9d46-01a0-41c1-a18b-272c79e48126"},{"name":"Remove Wishlist for User","id":"fdcba65c-e505-4681-a781-6ae33b113860","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://0.0.0.0:8000/api/records/wishlist/:user_id","description":"<p>takes the <strong>path</strong> variable <code>user_id</code> to remove <strong>ALL</strong> <code>user_wishlist</code> records. this will not delete the user</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>204 No Content - case where the <code>record</code> was removed from the <code>user_wishlist</code> table</p>\n</li>\n<li><p>404 Not Found - when the user is not found by the <code>user_id</code></p>\n</li>\n<li><p>500 Error - code provided when the database is not running or there was a removal error</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records","wishlist",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"fdcba65c-e505-4681-a781-6ae33b113860"}],"id":"106bca2a-db55-4630-81e0-cae84b5dd6fa","description":"<p>Holds the collection of <code>user_wishlist</code> data operations. This Table within the project holds the <code>user_id</code> and allows a linking between a <code>record_id</code> which will represent a user's <strong>wishlist</strong> this will hold collections users desires, or plans on purchasing in the future.</p>\n<p><strong>WishList Record</strong></p>\n","_postman_id":"106bca2a-db55-4630-81e0-cae84b5dd6fa"},{"name":"Get All Records","id":"bfd64b4d-63cf-44e5-9019-e0228ca6268f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/records?limit=3","description":"<p>Method for getting all of the records from the connected database. There is also as you can see above optional <strong>query parameter</strong> <code>limit</code> which will limit the response given and can be used for pagination along with the <strong>query parameter</strong> <code>page</code> for pagination and for REST clients to digest.</p>\n<p><strong>Example Response JSON</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"records\": [\n        {\n            \"artist\": \"Boards of Canada\",\n            \"duration_length\": \"01:11:00\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Electronic\",\n                \"Trip Hop\",\n                \"Ambient\"\n            ],\n            \"label\": \"Warp Records\",\n            \"price\": \"21\",\n            \"record_id\": \"1be06aed-bb43-49a3-b998-a4dea0ec2738\",\n            \"released\": \"1998-04-20\",\n            \"title\": \"Music Has The Right To Children\"\n        },\n        {\n            \"artist\": \"Bonobo\",\n            \"duration_length\": \"01:01:53\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Electronica\",\n                \"Ambient\",\n                \"Downtempo\"\n            ],\n            \"label\": \"Ninja Tune\",\n            \"price\": \"27\",\n            \"record_id\": \"eede84ee-7f5f-4621-98e5-341565cf19a0\",\n            \"released\": \"2017-01-13\",\n            \"title\": \"Migration\"\n        },\n        {\n            \"artist\": \"Emancipator\",\n            \"duration_length\": \"00:50:14\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Downtempo\",\n                \"Electronic\",\n                \"Trip-Hop\"\n            ],\n            \"label\": \"Loci Records\",\n            \"price\": \"24.9900\",\n            \"record_id\": \"b261a177-14d2-4ace-a30a-192d0e7cae81\",\n            \"released\": \"2006-11-06\",\n            \"title\": \"Soon It Will Be Cold Enough\"\n        }\n    ],\n    \"results\": 3,\n    \"status\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records"],"host":["0","0","0","0"],"query":[{"key":"limit","value":"3"}],"variable":[]}},"response":[],"_postman_id":"bfd64b4d-63cf-44e5-9019-e0228ca6268f"},{"name":"Get Record","id":"02b6118a-866f-4d74-842c-01456146aa2b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/records/:id","description":"<p>method for getting a <code>record</code> by the <strong>path</strong> <code>id</code> parameter.</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>201 Created - when the asset is created from the request.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>404 Not Found - when the requested <strong>path</strong> variable <code>id</code> is not found in the <code>records</code> table</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n<p><strong>Example Response Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record\": {\n        \"artist\": \"Khruangbin\",\n        \"duration_length\": \"00:39:44\",\n        \"format\": \"LP\",\n        \"genre\": [\n            \"Dub\",\n            \"Psychedelic Rock\",\n            \"Surf Rock\",\n            \"Funk\"\n        ],\n        \"label\": \"Night Time Stories\",\n        \"price\": \"21\",\n        \"record_id\": \"4d3be7e4-1707-43f3-b8e7-59e44173b576\",\n        \"released\": \"2015-10-06\",\n        \"title\": \"The Universe Smiles Upon You\"\n    },\n    \"status\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records",":id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"4d3be7e4-1707-43f3-b8e7-59e44173b576","key":"id"}]}},"response":[],"_postman_id":"02b6118a-866f-4d74-842c-01456146aa2b"},{"name":"Create Record","id":"20b88f67-5dc8-4a61-8641-f147d46f78a5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"artist\": \"MF DOOM\",\n    \"title\": \"Operation: Doomsday\",\n    \"released\": \"1999-04-20\",\n    \"genre\": [\"Hip-Hop\", \"Underground Rap\"],\n    \"format\": \"LP\",\n    \"price\": \"29.99\",\n    \"label\": \"Fondle 'Em Records\",\n    \"duration_length\": \"01:08:52\"\n}\n","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/records","description":"<p>Method for creating a <strong>new Record</strong> object into the <code>records</code> database. it takes a valid <code>json</code> body with all of the valid record attributes.  </p>\n<p><strong>Example Record JSON response</strong>  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record\": {\n        \"artist\": \"Mildlife\",\n        \"duration_length\": \"00:40:21\",\n        \"format\": \"LP\",\n        \"genre\": [\n            \"Jazz Fusion\",\n            \"Psychedelic\",\n            \"Electronic\"\n        ],\n        \"label\": \"Research Records\",\n        \"price\": \"27.9900\",\n        \"record_id\": \"ad541626-3f93-4c67-bd21-9f8df3c65e38\",\n        \"released\": \"2020-09-18\",\n        \"title\": \"Automatic\"\n    },\n    \"status\": \"success\"\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>201 Created - when the asset is created from the request.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records"],"host":["0","0","0","0"],"query":[],"variable":[]}},"response":[],"_postman_id":"20b88f67-5dc8-4a61-8641-f147d46f78a5"},{"name":"Delete Record By Id","id":"86ffb490-5119-42b8-a534-6696a241c005","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://0.0.0.0:8000/api/records/:id","description":"<p>method for deleting a specific record and filtering the delet operation by the <strong>path</strong> parameter by <code>id</code>  </p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - when the record is deleted.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records",":id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"2d8939dc-faa4-4a61-8fa4-cbc7b7de6c53","key":"id"}]}},"response":[],"_postman_id":"86ffb490-5119-42b8-a534-6696a241c005"},{"name":"Edit Record Details By Record Id","id":"b3a2d942-3777-4eb7-8d21-f8da60caff18","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"artist\": \"Khruangbin & Leon Bridges\",\n    \"title\": \"Texas Sun\",\n    \"released\": \"2020-02-07\",\n    \"genre\": [\"Soul\", \"Psychedelic\", \"R&B\"],\n    \"format\": \"EP\",\n    \"price\": \"23\",\n    \"label\": \"Dead Oceans\",\n    \"duration_length\": \"20:13\"\n}\n","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/records/:id","description":"<p>Method used to Edit an existing <strong>Record</strong> by referencing the <strong>path</strong> parameter <code>id</code> which is the <code>record_id</code> of the object that needs to be edited.</p>\n<p>Example Body Below: Notice that the Record format is \"LP\" but this record is a <em>*short play*</em> not a <em>*long play*</em> so <strong>EP</strong> is a better description so the change is being past to the record body.**</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - when the record is deleted.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n<p><strong>Example Response Body JSON</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record\": {\n        \"artist\": \"Khruangbin &amp; Leon Bridges\",\n        \"duration_length\": \"20:13:00\",\n        \"format\": \"EP\",\n        \"genre\": [\n            \"Soul\",\n            \"Psychedelic\",\n            \"R&amp;B\"\n        ],\n        \"label\": \"Dead Oceans\",\n        \"price\": \"23\",\n        \"record_id\": \"f5098c0b-2f53-4d8a-b11c-6a4dd2667d8a\",\n        \"released\": \"2020-02-07\",\n        \"title\": \"Texas Sun\"\n    },\n    \"status\": \"success\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","records",":id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"f5098c0b-2f53-4d8a-b11c-6a4dd2667d8a","key":"id"}]}},"response":[],"_postman_id":"b3a2d942-3777-4eb7-8d21-f8da60caff18"}],"id":"fb5d986a-0663-4b41-8339-9ff2d95079f3","description":"<p>Record are instances in `json`they're described in Rust through several structs.</p>\n<p>The basic Operations for <strong>PUT POST DELETE</strong></p>\n<p>each record for an existing instance of a record will require a json object in the following way.</p>\n<p>This often will be described in the method and is often found declared within the endpoint's description</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n   \"record_id\": \"6cc1600c-8a5b-40bb-aaaa-6383bbb61aab\"\n}\n\n</code></pre>\n<p><strong>Common JSON Object</strong></p>\n<p>for most <strong>POST</strong> methods the following format is required.</p>\n","_postman_id":"fb5d986a-0663-4b41-8339-9ff2d95079f3"},{"name":"Stores","item":[{"name":"User Stores","item":[{"name":"Get User Record Stores","id":"573e44df-b756-4bae-8aee-54a956445fb7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/record_stores/:user_id","description":"<p>Endpoint for pulling a <code>user_record_stores</code> colllection and returning a list of the associated record stores with the provided <code>user_id</code> within the request path.  </p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 Success - when the record store is successfully returned.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n<p><strong>Example of Return Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"results\": 2,\n    \"status\": \"success\",\n    \"user_record_stores\": [\n        {\n            \"phone_number\": \"206-900-7088\",\n            \"record_store_id\": \"ba825f4f-1eac-4d75-a2d4-cb2945729103\",\n            \"store_address\": \"472 1st Ave N\",\n            \"store_city\": \"Seattle\",\n            \"store_name\": \"Light in the Attic Record Shop\",\n            \"store_state\": \"WA\",\n            \"store_zip\": \"98109\",\n            \"website\": \"https://light-in-the-attic-record-shop.square.site\"\n        },\n        {\n            \"phone_number\": \"(512) 538-0174\",\n            \"record_store_id\": \"48b48af7-7247-43ca-81e3-36ba080372a0\",\n            \"store_address\": \"211 W North Loop Blvd\",\n            \"store_city\": \"Austin\",\n            \"store_name\": \"Breakaway Records\",\n            \"store_state\": \"TX\",\n            \"store_zip\": \"78751\",\n            \"website\": \"https://breakawayrecordshop.com\"\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","record_stores",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"573e44df-b756-4bae-8aee-54a956445fb7"},{"name":"Create a User Record Store","id":"e986de48-2fb0-47fe-89fe-6cd6b6c9b555","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"store_name\": \"Third Man Records\",\n  \"store_address\": \"630 7th Ave. S\",\n  \"store_city\": \"Nashville\",\n  \"store_state\": \"TN\",\n  \"store_zip\": \"37203\",\n  \"phone_number\": \"(615) 891-4393\",\n  \"website\": \"https://thirdmanrecords.com\"\n}\n","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/record_stores/:user_id","description":"<p>Method used to associate a <code>user_record_store</code> with the <strong>path</strong> parameter of the <code>id</code> this will take the Body example below and create a new associated <code>user_record_stores</code> entry for the user and the recordstore details provided</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - when the <code>record_store</code> is added to the <code>user's user_record_stores</code> successfully.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>409 Conflict - response occurs when a record with the same [<code>store_name</code></p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n<p><strong>Example Response JSON Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record\": {\n        \"phone_number\": \"(615) 891-4393\",\n        \"record_store_id\": \"a8032652-615e-48d6-b3cc-a67387568c27\",\n        \"store_address\": \"630 7th Ave. S\",\n        \"store_city\": \"Nashville\",\n        \"store_name\": \"Third Man Records\",\n        \"store_state\": \"TN\",\n        \"store_zip\": \"37203\",\n        \"website\": \"https://thirdmanrecords.com\"\n    },\n    \"status\": \"success\",\n    \"user_id\": \"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8\",\n    \"user_record_store_id\": \"a8032652-615e-48d6-b3cc-a67387568c27\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","record_stores",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"e986de48-2fb0-47fe-89fe-6cd6b6c9b555"},{"name":"Add Existing Record Store to User Stores","id":"2eb5407c-a012-4de1-812e-2277b0cf0c0a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"record_store_id\": \"48b48af7-7247-43ca-81e3-36ba080372a0\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/record_stores/:user_id","description":"<p>Method to provide a way of adding an existing record from the <code>record_stores</code> table into the <code>user_record_stores</code> table the <strong>path</strong> parameter <code>id</code> represents the <code>user_id</code></p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - when the <code>record_store</code> is added to the user's <code>user_record_stores</code> successfully.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>404 Not Found - supplied an invalid <code>user_id</code> or invalid <code>record_store_id</code></p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","record_stores",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"2eb5407c-a012-4de1-812e-2277b0cf0c0a"},{"name":"Remove Existing User Record Store","id":"8eee5e0d-bed3-4dbc-b47e-d1426df437c3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\n    \"record_store_id\": \"4475262d-159e-45e6-9cdc-5031ced85808\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/record_stores/:user_id","description":"<p>Method for removing a <code>user_record_store</code> associated with a user id specified by the <strong>path parameter</strong> <code>user_id</code> and using the <strong>body</strong> <strong>JSON</strong> parameters specified below by supplying a <code>\"record_store_id\"</code> field with a valid Record Store.  </p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - when the <code>record_store</code> is removed from the user's <code>user_record_stores</code> successfully.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>404 Not Found - supplied an invalid <code>user_id</code> or invalid <code>record_store_id</code></p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","record_stores",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"8eee5e0d-bed3-4dbc-b47e-d1426df437c3"}],"id":"14ddb2d8-be1c-4057-9483-456b2532d3fe","description":"<p><code>user_stores</code> are used to store a user's specific or favorite record stores they enjoy spending and spinning time in.</p>\n<p>the instance of the object for a <strong>POST</strong> method is just like any other method expect it will require <code>user_id</code> fields in either the <strong>path</strong> parameter or as a reference to a <code>json</code> instance of the object you intend to <strong>PUT, POST, DELETE</strong></p>\n<p><strong>Basic Instance of User Record Store Bodies</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record_store_id\": \"48b48af7-7247-43ca-81e3-36ba080372a0\"\n}\n\n</code></pre>\n","_postman_id":"14ddb2d8-be1c-4057-9483-456b2532d3fe"},{"name":"GET All Stores","id":"ae6ec76c-76fe-4b29-a8cb-69093c5c6e15","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/stores","description":"<p>Method to return all of the <code>record_store</code> objects from the running instance of the application.</p>\n<p>upon start up this will be filled with my personal collection of a few favorites I thought I would share.</p>\n<p>there are no parameters for this endpoint simply call the URI.</p>\n<p><strong>Expected JSON Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record_stores\": [\n        {\n            \"phone_number\": \"(512) 538-0174\",\n            \"record_store_id\": \"48b48af7-7247-43ca-81e3-36ba080372a0\",\n            \"store_address\": \"211 W North Loop Blvd\",\n            \"store_city\": \"Austin\",\n            \"store_name\": \"Breakaway Records\",\n            \"store_state\": \"TX\",\n            \"store_zip\": \"78751\",\n            \"website\": \"https://breakawayrecordshop.com\"\n        },\n        {\n            \"phone_number\": \"502-883-0478\",\n            \"record_store_id\": \"2ee62607-29f4-4bf3-bf55-559ed9b6e5d7\",\n            \"store_address\": \"1806 Frankfort Ave\",\n            \"store_city\": \"Louisville\",\n            \"store_name\": \"Guestroom Records\",\n            \"store_state\": \"KY\",\n            \"store_zip\": \"40206\",\n            \"website\": \"https://www.guestroomrecordslouisville.com/\"\n        },\n        {\n            \"phone_number\": \"828-258-2999\",\n            \"record_store_id\": \"6535cf96-14e9-466f-a3b9-f4647c3603e5\",\n            \"store_address\": \"415 Haywood Rd, Suite B\",\n            \"store_city\": \"Asheville\",\n            \"store_name\": \"Harvest Records\",\n            \"store_state\": \"NC\",\n            \"store_zip\": \"28806\",\n            \"website\": \"https://www.harvest-records.com/\"\n        },\n        {\n            \"phone_number\": \"503-239-7561\",\n            \"record_store_id\": \"4b38a1d0-8c5f-4d0f-bc7b-7c0b4bde7326\",\n            \"store_address\": \"3574 SE Hawthorne Blvd\",\n            \"store_city\": \"Portland\",\n            \"store_name\": \"Jackpot Records\",\n            \"store_state\": \"OR\",\n            \"store_zip\": \"97214\",\n            \"website\": \"https://jackpotrecords.com/\"\n        },\n        {\n            \"phone_number\": \"206-900-7088\",\n            \"record_store_id\": \"ba825f4f-1eac-4d75-a2d4-cb2945729103\",\n            \"store_address\": \"472 1st Ave N\",\n            \"store_city\": \"Seattle\",\n            \"store_name\": \"Light in the Attic Record Shop\",\n            \"store_state\": \"WA\",\n            \"store_zip\": \"98109\",\n            \"website\": \"https://light-in-the-attic-record-shop.square.site\"\n        },\n        {\n            \"phone_number\": \"503-231-8926\",\n            \"record_store_id\": \"90e3254c-5fbd-4e78-be39-872f3db42270\",\n            \"store_address\": \"3158 E Burnside St\",\n            \"store_city\": \"Portland\",\n            \"store_name\": \"Music Millennium\",\n            \"store_state\": \"OR\",\n            \"store_zip\": \"97214\",\n            \"website\": \"https://www.musicmillennium.com\"\n        },\n        {\n            \"phone_number\": \"(615) 891-4393\",\n            \"record_store_id\": \"4475262d-159e-45e6-9cdc-5031ced85808\",\n            \"store_address\": \"630 7th Ave. S\",\n            \"store_city\": \"Nashville\",\n            \"store_name\": \"Third Man Records\",\n            \"store_state\": \"TN\",\n            \"store_zip\": \"37203\",\n            \"website\": \"https://thirdmanrecords.com\"\n        }\n    ],\n    \"results\": 7,\n    \"status\": \"success\"\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - when the <code>record_store</code> list is returned successfully.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","stores"],"host":["0","0","0","0"],"query":[],"variable":[]}},"response":[],"_postman_id":"ae6ec76c-76fe-4b29-a8cb-69093c5c6e15"},{"name":"GET Store","id":"a871222a-dc9c-46de-8443-2a3a2c19dbb4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/stores/:store_id","description":"<p>takes the <strong>path parameter</strong> <code>store_id</code> and returns the resulting <strong>Record Store</strong></p>\n<p><strong>Example Store JSON</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record_store\": {\n        \"phone_number\": \"503-231-8926\",\n        \"record_store_id\": \"ff699ecb-eae5-4602-9382-52748a4535b2\",\n        \"store_address\": \"3158 E Burnside St\",\n        \"store_city\": \"Portland\",\n        \"store_name\": \"Music Millennium\",\n        \"store_state\": \"OR\",\n        \"store_zip\": \"97214\",\n        \"website\": \"https://www.musicmillennium.com\"\n    },\n    \"status\": \"success\"\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - returns the <strong>Record Store</strong> as JSON when executed successfully.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>404 Not Found - supplied an invalid invalid <code>record_store_id</code></p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","stores",":store_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"ff699ecb-eae5-4602-9382-52748a4535b2","key":"store_id"}]}},"response":[],"_postman_id":"a871222a-dc9c-46de-8443-2a3a2c19dbb4"},{"name":"Delete Record Store","id":"792d2f20-5e7b-4390-9593-80004a90bc32","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/stores/:record_store_id","description":"<p>using the provided <strong>path parameter</strong> <code>record_store_id</code> this method will delete a record store that matches that description for all users in the system.**</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - when the <code>record_store</code> is removed from the user's <code>user_record_stores</code> successfully.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied</p>\n</li>\n<li><p>404 Not Found - supplied an invalid invalid <code>record_store_id</code></p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","stores",":record_store_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"a8032652-615e-48d6-b3cc-a67387568c27","key":"record_store_id"}]}},"response":[],"_postman_id":"792d2f20-5e7b-4390-9593-80004a90bc32"},{"name":"Create a Record Store","id":"eb859866-286e-43a3-b46d-5be83adf61a1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"store_name\": \"Breakaway Records\",\n    \"store_address\": \"211 W North Loop Blvd\",\n    \"store_city\": \"Austin\",\n    \"store_state\": \"TX\",\n    \"store_zip\": \"78751\",\n    \"phone_number\": \"(512) 538-0174\",\n    \"website\": \"https://breakawayrecordshop.com\"\n}\n","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/stores","description":"<p>using the <strong>body json</strong> of a <strong>Record Store</strong> resource sending a formatted correctly formatted body should result in the creation of a new <strong>Record Store</strong> for anyone to view. If you want to add this to your personal collection of favorites you will have to use the <strong>User Stores</strong> endpoint above.</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - when the <code>record_store</code> is created from the user's correctly formatted <strong>JSON</strong> successfully.</p>\n</li>\n<li><p>409 Conflict - occurs when a request with the same fields of either <code>[store_name store_address, store_city, store_state]</code> already exist for a record_store.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","stores"],"host":["0","0","0","0"],"query":[],"variable":[]}},"response":[],"_postman_id":"eb859866-286e-43a3-b46d-5be83adf61a1"},{"name":"Update a Record Store","id":"7e3dd019-bfbd-44c8-be39-f3043b3043ef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"store_name\": \"Missisipi Records\",\n    \"store_address\": \"5202 N Albina Ave\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/stores/:record_store_id","description":"<p>accidents happen, for instance I added a record store, that doesn't actually sell records, it's a record label. but before I deleted it I updated it. That's what this method is for. supply a set of features you would like to modify that adhere to the <strong>Record Store</strong> database specification and send the update.</p>\n<p><strong>Example JSON Response</strong><br />assuming the <code>record_store_id</code> is correct you should receive something like this.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record_store\": {\n        \"phone_number\": \"503-239-7561\",\n        \"record_store_id\": \"a38e4acb-d390-4487-a28c-a98d1eac1e3a\",\n        \"store_address\": \"5202 N Albina Ave\",\n        \"store_city\": \"Portland\",\n        \"store_name\": \"Missisipi Records\",\n        \"store_state\": \"OR\",\n        \"store_zip\": \"97214\",\n        \"website\": \"https://jackpotrecords.com/\"\n    },\n    \"status\": \"success\"\n}\n\n</code></pre>\n<p>The correctly formatted <strong>Record Store</strong> that is also a record label that only sells their records. Oops.</p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - when the <code>record_store</code> is created from the user's correctly formatted <strong>JSON</strong> successfully, and returns the <strong>modified Record Store</strong> with a status.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","stores",":record_store_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"a38e4acb-d390-4487-a28c-a98d1eac1e3a","key":"record_store_id"}]}},"response":[],"_postman_id":"7e3dd019-bfbd-44c8-be39-f3043b3043ef"}],"id":"79bf4b66-863c-40e5-8eb8-9ce05144bb75","description":"<p>Stores are instances of <strong>Record Stores.</strong> they are objects in JSON to hold the instances of stores that will sell the user some sweet records the API repo has an initializer that will install some of my favorite record stores for a novice to interact with these endpoints with. Along with some basic <strong>PUT, POST, GET</strong> methods to demonstrate it's capabilities.</p>\n<p><strong>Record Store JSON</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"store_name\": \"Breakaway Records\",\n    \"store_address\": \"211 W North Loop Blvd\",\n    \"store_city\": \"Austin\",\n    \"store_state\": \"TX\",\n    \"store_zip\": \"78751\",\n    \"phone_number\": \"(512) 538-0174\",\n    \"website\": \"https://breakawayrecordshop.com\"\n}\n\n</code></pre>\n<p><strong>Example GET Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">   {\n            \"phone_number\": \"503-231-8926\",\n            \"record_store_id\": \"90e3254c-5fbd-4e78-be39-872f3db42270\",\n            \"store_address\": \"3158 E Burnside St\",\n            \"store_city\": \"Portland\",\n            \"store_name\": \"Music Millennium\",\n            \"store_state\": \"OR\",\n            \"store_zip\": \"97214\",\n            \"website\": \"https://www.musicmillennium.com\"\n        }\n\n</code></pre>\n<p>As previously metntioned there will be specific ways to <strong>PUT, POST, DELETE</strong><br />likely after reviewing the documentation, a supplied <code>json</code> object that includes the store's<br /><code>record_store_id</code></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record_store_id\": \"48b48af7-7247-43ca-81e3-36ba080372a0\"\n}\n\n</code></pre>\n","_postman_id":"79bf4b66-863c-40e5-8eb8-9ce05144bb75"},{"name":"Users","item":[{"name":"User Records","item":[{"name":"Get User Records","id":"652ea550-ae01-4b6a-8b6c-106b4e89a958","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/users/records/:user_id","description":"<p>method for taking the <strong>path parameter</strong> <code>user_id</code> and returns the associated <code>user_records</code> associated with that user ie their collection of sweet dreamy music.</p>\n<p><strong>Example User Collection JSON Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"results\": 3,\n    \"status\": \"success\",\n    \"user_records\": [\n        {\n            \"artist\": \"Thievery Corporation\",\n            \"duration_length\": \"01:00:00\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Dub\",\n                \"Trip Hop\",\n                \"Electronica\"\n            ],\n            \"label\": \"ESL Music\",\n            \"price\": \"30\",\n            \"record_id\": \"7fbfd74d-8ffb-4796-9621-ec08a859f59e\",\n            \"released\": \"2017-02-10\",\n            \"title\": \"The Temple of I &amp; I\"\n        },\n        {\n            \"artist\": \"Khruangbin\",\n            \"duration_length\": \"00:39:44\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Dub\",\n                \"Psychedelic Rock\",\n                \"Surf Rock\",\n                \"Funk\"\n            ],\n            \"label\": \"Night Time Stories\",\n            \"price\": \"21\",\n            \"record_id\": \"fce6c4db-6122-4144-a745-dc0f8f5a45f9\",\n            \"released\": \"2015-10-06\",\n            \"title\": \"The Universe Smiles Upon You\"\n        },\n        {\n            \"artist\": \"Emancipator\",\n            \"duration_length\": \"00:50:14\",\n            \"format\": \"LP\",\n            \"genre\": [\n                \"Downtempo\",\n                \"Electronic\",\n                \"Trip-Hop\"\n            ],\n            \"label\": \"Loci Records\",\n            \"price\": \"24.9900\",\n            \"record_id\": \"8d29f341-9a43-4cdb-a486-9dc89d109171\",\n            \"released\": \"2006-11-06\",\n            \"title\": \"Soon It Will Be Cold Enough\"\n        }\n    ]\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - when the <code>user_id</code> is valid, correctly formatted <strong>JSON</strong> of the <strong>User's Collection</strong> is returned</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>404 Not Found - when the <code>user_id</code> is not found in the database</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users","records",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"652ea550-ae01-4b6a-8b6c-106b4e89a958"},{"name":"Create User Record","id":"587bd350-5507-4ac5-a691-6d4eadbb3d4d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"artist\": \"Emancipator\",\n    \"title\": \"Soon It Will Be Cold Enough\",\n    \"released\": \"2006-11-06\",\n    \"genre\": [\"Downtempo\", \"Electronic\", \"Trip-Hop\"],\n    \"format\": \"LP\",\n    \"price\": \"24.99\",\n    \"label\": \"Loci Records\",\n    \"duration_length\": \"00:50:14\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/users/records/:user_id","description":"<p>method used to add a <strong>New Record</strong> to a User's collection using the <code>user_id</code> as the filter of where to associate the new record passed by the <strong>JSON Body</strong></p>\n<p>**<br />Example User Record JSON Response**</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record\": {\n        \"artist\": \"Kendrick Lamar\",\n        \"duration_length\": \"00:54:54\",\n        \"format\": \"LP\",\n        \"genre\": [\n            \"Hip-Hop\",\n            \"Conscious Rap\"\n        ],\n        \"label\": \"Top Dawg Entertainment\",\n        \"price\": \"29.9900\",\n        \"record_id\": \"b666a7b8-064f-4a47-9ed6-44768b1402c4\",\n        \"released\": \"2017-04-14\",\n        \"title\": \"DAMN.\"\n    },\n    \"records_collected\": \"1\",\n    \"status\": \"success\",\n    \"user_id\": \"e2b824df-0d4c-4248-a045-a2892ab4875b\",\n    \"user_record_id\": \"183943e1-40cc-4647-bd15-3ed3a94e8db1\"\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - when the <code>user_id</code> is valid, correctly formatted <strong>JSON</strong> of the <strong>User's Collection</strong> is returned</p>\n</li>\n<li><p>409 Conflict - If the client attempts to post the Record to the <strong>User's Collection</strong> multiple times</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>404 Not Found - when the <code>user_id</code> is not found in the database</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users","records",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"587bd350-5507-4ac5-a691-6d4eadbb3d4d"},{"name":"Delete ALL User Records","id":"e82ed3ea-ce22-418e-9217-8ec143d2b410","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://0.0.0.0:8000/api/users/records/:user_id","description":"<p>Method to <strong>Remove</strong> all associated User's records. this is not reversible and highly advised to user sparingly  </p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - if the supplied <code>user_id</code> is valid, that person lost all their collection.</p>\n</li>\n<li><p>404 Not Found - if the supplied <code>user_id</code> is not in the data base.</p>\n</li>\n<li><p>500 Error - Client is not connecting to the DB or the Database isn't running.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users","records",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"e82ed3ea-ce22-418e-9217-8ec143d2b410"},{"name":"Add Record to User Collection","id":"ddefa590-776b-46d0-8770-823c50be6a4f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"record_id\": \"8d29f341-9a43-4cdb-a486-9dc89d109171\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/users/records/:user_id","description":"<p>takes supplied <code>user_id</code> and the <strong>json body</strong> which contains the <code>record_id</code> that the client intends to add to the <strong>User's Record</strong> collection.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users","records",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"ddefa590-776b-46d0-8770-823c50be6a4f"},{"name":"Add Existing Record to User's Collection","id":"0647a0f0-1876-4685-a1b3-520e9c8722cf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"record_id\": \"afff0231-edd5-48fe-9e13-1f6522508720\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/users/records/:user_id","description":"<p>method that takes the <code>user_id</code> and a <strong>body as JSON</strong> and will return a response of the user's collection. the idea for this end point is for user's to quickly add records that are in circulation to their collection.  </p>\n<p><strong>Example User Record Response JSON</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"record\": {\n        \"artist\": \"Thievery Corporation\",\n        \"duration_length\": \"01:00:00\",\n        \"format\": \"LP\",\n        \"genre\": [\n            \"Dub\",\n            \"Trip Hop\",\n            \"Electronica\"\n        ],\n        \"label\": \"ESL Music\",\n        \"price\": \"30\",\n        \"record_id\": \"7fbfd74d-8ffb-4796-9621-ec08a859f59e\",\n        \"released\": \"2017-02-10\",\n        \"title\": \"The Temple of I &amp; I\"\n    },\n    \"records_collected\": \"1\",\n    \"status\": \"success\",\n    \"user_id\": \"e2b824df-0d4c-4248-a045-a2892ab4875b\",\n    \"user_record_id\": \"24eb6518-83cd-414f-a25b-b99fe0eabff7\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users","records",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"0647a0f0-1876-4685-a1b3-520e9c8722cf"}],"id":"ebd6bce8-4e25-441c-9012-f36b235c40f6","description":"<p>This Collection of Endpoints is for the ability for the API to access a User's Collection. These endpoints handle all functionality for adding, editing and removing the collection for a specified user.</p>\n","_postman_id":"ebd6bce8-4e25-441c-9012-f36b235c40f6"},{"name":"GET All Users","id":"24d4f78f-d19e-474b-b999-c75c2f205016","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/users","description":"<p>method for returning all users within the system, this method requires no arguments</p>\n<p><strong>Example Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"results\": 2,\n    \"status\": \"success\",\n    \"users\": [\n        {\n            \"created_at\": \"2025-03-09T22:07:27.043929Z\",\n            \"user_email\": \"angiemarie1123@gmail.com\",\n            \"user_first_name\": \"Angie\",\n            \"user_id\": \"4515ae00-7e06-498f-9e8f-12f9dfce4f8e\",\n            \"user_last_name\": \"Witt\",\n            \"user_name\": \"angie-howard\"\n        },\n        {\n            \"created_at\": \"2025-03-09T04:27:07.064988Z\",\n            \"user_email\": \"greg@goodguygregory.com\",\n            \"user_first_name\": \"Greg\",\n            \"user_id\": \"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8\",\n            \"user_last_name\": \"Witt\",\n            \"user_name\": \"goodguygregory\"\n        }\n    ]\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - returns a list of <strong>Users</strong> in <strong>JSON</strong></p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users"],"host":["0","0","0","0"],"query":[],"variable":[]}},"response":[],"_postman_id":"24d4f78f-d19e-474b-b999-c75c2f205016"},{"name":"GET User","id":"b094cc5d-970d-4b49-8d76-c5b3747fc0c1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://0.0.0.0:8000/api/users/:user_id","description":"<p>returns the <strong>User json</strong> associated from the provided <strong>path</strong> <code>user_id</code></p>\n<p><strong>Example User JSON Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"status\": \"success\",\n    \"user\": {\n        \"created_at\": \"2025-03-09T04:27:07.064988Z\",\n        \"user_email\": \"greg@goodguygregory.com\",\n        \"user_first_name\": \"Greg\",\n        \"user_id\": \"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8\",\n        \"user_last_name\": \"Witt\",\n        \"user_name\": \"goodguygregory\"\n    }\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - returns a detail of the requested <strong>User</strong> in <strong>JSON</strong></p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>404 Not Found - when the <code>user_id</code> is not found within the database</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8","key":"user_id"}]}},"response":[],"_postman_id":"b094cc5d-970d-4b49-8d76-c5b3747fc0c1"},{"name":"Update User","id":"8ea6c32f-be77-4ecb-ad44-85b89dbd0590","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"user_name\": \"xbwang\",\n    \"user_first_name\": \"Xiao\",\n    \"user_last_name\": \"Wang\",\n    \"user_email\": \"someone@elses.com\",\n    \"user_password\": \"jelly-bellies\"\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/users/:id","description":"<p>method to modify user attributess from a <strong>json</strong> <strong>body</strong> being supplied by the user within the body of the request, taking the <code>user_id      </code><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - when the <code>user</code> is edited from the user's correctly formatted <strong>JSON</strong> successfully.</p>\n</li>\n<li><p>409 Conflict - occurs when a request with the same fields of either <code>[user_name, user_email ]</code> already exist for a <code>user</code>.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users",":id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"7569ea46-7415-4f30-a241-901111a435c7","key":"id"}]}},"response":[],"_postman_id":"8ea6c32f-be77-4ecb-ad44-85b89dbd0590"},{"name":"Create User","id":"4a0f8017-bce3-4180-8960-fea0fb748ae5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"user_name\": \"forest_park\",\n    \"user_first_name\": \"Jake\", \n    \"user_last_name\": \"Zirnheld\",\n    \"user_email\": \"jake_the_snake@gmail.com\",\n    \"user_password\": \"taco_flavored_kisses\"\n\n}","options":{"raw":{"language":"json"}}},"url":"http://0.0.0.0:8000/api/users","description":"<p>method for creating the user. The following style within the <strong>json body</strong> allows for the fields for the user to pass to the backend which hashes and stores the plain text password. it is up to the client to either hash or send a plain text password.</p>\n<p><strong>Example User Create JSON Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"status\": \"success\",\n    \"user\": {\n        \"created_at\": \"2025-03-12T02:44:05.394433Z\",\n        \"user_email\": \"someone@elses.com\",\n        \"user_first_name\": \"Xiao\",\n        \"user_id\": \"88efa0c0-80fb-402c-ad5f-2756dbec1ecc\",\n        \"user_last_name\": \"Wang\",\n        \"user_name\": \"xbwang\"\n    }\n}\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - returns a list of <strong>Users</strong> in <strong>JSON</strong></p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users"],"host":["0","0","0","0"],"query":[],"variable":[]}},"response":[],"_postman_id":"4a0f8017-bce3-4180-8960-fea0fb748ae5"},{"name":"Remove User By Id","id":"6245730d-c99b-4b7d-aa08-13e61b295df4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://0.0.0.0:8000/api/users/:user_id","description":"<p>with the supplied <code>user_id</code> this method is called to ensure that the user id supplied is removed from the database.  </p>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 No Content - returns nothing and removes that user.</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","users",":user_id"],"host":["0","0","0","0"],"query":[],"variable":[{"type":"any","value":"","key":"user_id"}]}},"response":[],"_postman_id":"6245730d-c99b-4b7d-aa08-13e61b295df4"}],"id":"0f071d61-9049-4bd5-8ded-b4327f4c721c","description":"<p><strong>Users</strong> are the real music here, when they're added they can make harmonious relationships with their data, and share data amongst others through this API, by looking through their collections. Users will have multiple endpoints, <strong>User Records</strong> which holds the user's specific collection of <strong>Record</strong> objects and the <strong>User</strong> <strong>Store</strong> which represents the stores a user prefers and is willing to reveal their secrets where abouts to.</p>\n<p><strong>User JSON Object:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n            \"created_at\": \"2025-03-09T04:27:07.064988Z\",\n            \"user_email\": \"greg@goodguygregory.com\",\n            \"user_first_name\": \"Greg\",\n            \"user_id\": \"d908bdea-8761-4ac0-b1c0-ded15ef4c3f8\",\n            \"user_last_name\": \"Witt\",\n            \"user_name\": \"goodguygregory\"\n        }\n\n</code></pre>\n<p><strong>Status Codes</strong></p>\n<ul>\n<li><p>200 OK - when the <code>user_id</code> is valid, correctly formatted <strong>JSON</strong> is returned</p>\n</li>\n<li><p>400 Bad Request - when a malformed request is supplied, something went wrong with your json format or the request isn't correct.</p>\n</li>\n<li><p>404 Not Found - when the user is not found in the database</p>\n</li>\n<li><p>500 Error - when the server or database is not running to connect.</p>\n</li>\n</ul>\n","_postman_id":"0f071d61-9049-4bd5-8ded-b4327f4c721c"}]}