{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"3d321be0-0a76-4a94-a3f6-b146f36a3ad7","name":"Bill of Materials - Docs","description":"# Introduction\nThis is my submission to the coding challenge. \nBelow I will provide a general tour of the functionality.\n\n# Testing\nThe testing is wholly done in the \"Bill of Materials - Test Run\" Postman Collection available here: \nhttps://www.getpostman.com/collections/f2754eaa58c38bd441db\n\nAll of the Testing that I did for the application is done using Postman, As I thought that it was probably more familiar to you and your staff than reading test scripts for Play! Framework.\n\nAll of the test collections need to run in order, as earlier requests do setup work (saving environment variables) for later requests.\n\n# Overview\nThis service is run on the JVM using the Play! Framework for Scala.\n\nI created the Pens in the test run using the folowing heirarchy:\n\nA complete pen may be put into a package that includes...\n \n- box top\n- box bottom\n- box insert (which holds the pen)\n- pen\n\n\t- barrel bottom\n\t\t-a rubber grip \n\t- barrel top\n\t\t- pocket clip (usually assembled onto the barrel top)\n\t\t- “thruster” (the part you push with your thumb)\n\t- a cam (the part that locks down/up when the thruster is depressed)\n\n\t- spring\n\t- ink cartridge, which may consist of...\n\t\t- cartridge body\n\t\t\t- ink (Note this is inside the cartridge body)\n\t\t- cartridge cap\n\t\t- writing tip\n\n\n\n\n\n# Authentication\nThere is no authentication currently.\n\n# Statuses\n- _200 OK_ - for all queries against part collections, as well as for adding and removing parts\n- _201 Created_ - for all new parts\n- _204 No Content_ - for all deletions, even if the resource is missing\n- _400 BadRequest_ - for POSTs with malformed JSON\n- _404 NotFound_ - for missing resources\n\n\n# Resources\n\nThe various endpoints described below will return a one  of the following resources:\n\n## Part Resource\n  Can consist of:\n  - An **id** which is a UUID string \n  - A **link** to the path of this Part Resource\n  - A **details** object, with:\n\t- An optional **color** field\n\t- An optional **material** field\n  - A **type**, either \"PartResource\" or \"AssemblyResource\" (if there is a partsList field as well)\n  - An optional **partsList** field mapped to a Parts List Resource (present for adding children, deleting children, and listing direct children of a part)\n\n## Parts List Resource\n  Can consist of:\n  - A **link** to the path of this PartsList Resource\n  - A **parstList** field mapped to a list of Part Resources\n\n\n\n","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"6751411","collectionId":"3d321be0-0a76-4a94-a3f6-b146f36a3ad7","publishedId":"S11LtHhy","public":true,"publicUrl":"https://documenter-api.postman.tech/view/6751411/S11LtHhy","privateUrl":"https://go.postman.co/documentation/6751411-3d321be0-0a76-4a94-a3f6-b146f36a3ad7","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","version":"8.10.1","publishDate":"2019-03-04T07:33:05.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[{"name":"BOM","id":"ee3bb732-ad43-4ab6-bf48-8ace3c5de5e7","owner":"6751411","values":[{"value":"3a698798-13a8-4f3e-8098-3c60329a77e5","key":"Ink Cartridge","enabled":true},{"value":"6d135bc6-62ee-4f1c-b646-eb804d1fbce2","key":"Ink Cartridge.Blue","enabled":true},{"value":"070f647f-bf79-409d-bea0-789137aa227d","key":"Cartridge Body.Blue","enabled":true},{"value":"3a698798-13a8-4f3e-8098-3c60329a77e5","key":"Ink Cartridge.Black","enabled":true},{"value":"8283f452-1ac0-4e4f-90df-22b661905ddf","key":"Barrel Top.Blue.Plastic","enabled":true},{"value":"d0bae2fc-a696-448b-b3bb-28045b1e9c9a","key":"Barrel Bottom.Blue.Plastic","enabled":true},{"value":"8af9ef7b-5a31-4538-ae75-8af369e7df1d","key":"Barrel Top.Black.Plastic","enabled":true},{"value":"296c2fb1-3f85-42a5-b409-0a0a72559ac4","key":"Barrel Bottom.Black.Plastic","enabled":true},{"value":"e3d72f49-e69f-4f93-accb-1e158e68562d","key":"Barrel Top.Metal","enabled":true},{"value":"f50ffdfc-09a6-440e-ad4e-e7d6561a702e","key":"Barrel Bottom.Metal","enabled":true},{"value":"dec41654-1562-4119-bfee-7b6a98ee04d7","key":"Pen.Blue.Plastic","enabled":true},{"value":"205b59d8-aaf9-46c6-9b94-0cd09161b540","key":"Pen.Blue.Metal","enabled":true},{"value":"c2c3540b-a817-4b08-b7ee-85d7b47f1100","key":"Pen.Black.Plastic","enabled":true},{"value":"fc8ebfe1-75ab-4139-aa86-7ac07a8cfbf3","key":"Pen.Black.Metal","enabled":true},{"value":"bb281b6d-faee-4122-8dc2-89c502949a71","key":"Boxed Pen.Blue.Plastic","enabled":true},{"value":"14876af6-5d94-4bf0-8ee6-7886ec7d73f3","key":"Boxed Pen.Black.Plastic","enabled":true},{"value":"60faf4b9-f759-41be-a80c-06d5f1af1e80","key":"Boxed Pen.Blue.Metal","enabled":true},{"value":"55e9e935-84c9-442f-af84-37080c491340","key":"Boxed Pen.Black.Metal","enabled":true},{"value":"c3541531-f9f2-4d8b-bbf9-4654ee71a984","key":"blueMetalBoxedPenId","enabled":true},{"value":"230b61be-d6a9-4376-85fc-0ca91ff044ff","key":"blueWritingTipId","enabled":true},{"value":"9785e96b-f7f4-4c86-8d49-d416956a026e","key":"Pen.Blue","enabled":true},{"value":"9c745094-c1a7-4ad1-9ef3-2e3775103a07","key":"Box Top.Grey","enabled":true},{"value":"7bfa4696-ee5a-4e33-9556-1a42a92424aa","key":"Box Insert.White","enabled":true},{"value":"58b3610e-a544-4e23-893d-dd6317d98ab7","key":"Box Bottom.Grey","enabled":true}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"BOM","value":"6751411-ee3bb732-ad43-4ab6-bf48-8ace3c5de5e7"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/S11LtHhy"}