{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/old/03-assignments/01-assignment_1/lending-system-problem-description",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnéuniversitetet","language":"sv","courseCode":"1DV607"}},"mdx":{"fields":{"id":"95db8400-018a-530a-b563-635879f779b8","title":"Stuff Lending System Problem Description","slug":"/old/03-assignments/01-assignment_1/lending-system-problem-description"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Stuff Lending System Problem Description\",\n  \"metaTitle\": \"Stuff Lending System Problem Description\",\n  \"metaDescription\": \"This is the meta description for this page\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", null, \"Introduction\"), mdx(\"p\", null, \"An environment-conscious community seeks to develop a system that promotes item sharing, reducing the overall amount of consumer goods each household needs to possess. The Stuff Lending System allows members to lend out their belongings in exchange for credits, which they can use to borrow items from others. The system tracks where items are at a given time.\"), mdx(\"h1\", null, \"Stuff Lending System Use Cases\"), mdx(\"h2\", null, \"Primary Actors\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Member\"), \"\\nThe members register their possessions to the system and earn credits for every listing. They also lend items from other members using credits and are responsible for returning the items within the agreed time.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"System Administrator\"), \"\\nManages overall system functionality and provides administrative oversight. This includes tracking item listings, membership records, and the day counter.\"), mdx(\"h2\", null, \"Supporting Actors\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Member Validation Service\"), \"\\nEnsures unique member registration by validating identity, and checking email and phone number uniqueness.\"), mdx(\"h2\", null, \"Use Cases\"), mdx(\"h1\", null, \"Stuff Lending System Use Cases\"), mdx(\"h2\", null, \"Primary Actors\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Member\"), \"\\nThe members register their possessions to the system and earn credits for every listing. They also lend items from other members using credits and are responsible for returning the items within the agreed time.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"System Administrator\"), \"\\nManages overall system functionality and provides administrative oversight. This includes tracking item listings, membership records, and the day counter.\"), mdx(\"h2\", null, \"Supporting Actors\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Member Validation Service\"), \"\\nEnsures unique member registration by validating identity, and checking email and phone number uniqueness.\"), mdx(\"h2\", null, \"Use Cases\"), mdx(\"h2\", null, \"1 Authenticate\"), mdx(\"p\", null, \"A person wants to be authenticated as a role. The person is authenticated and assigned a role.\"), mdx(\"p\", null, \"Precondition: The person is not already authenticated.\"), mdx(\"p\", null, \"Postcondition: The person is authenticated as a role (Member, System Administrator).\"), mdx(\"h3\", null, \"Main Scenario\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The person wants to be authenticated.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system asks for log in information.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The person supplies a username and password.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system controls the username and password and authenticates the person as a role (Member, System Administrator) in the system, the assigned role is presented.\")), mdx(\"h3\", null, \"Secondary Scenarios\"), mdx(\"h4\", null, \"2.1 The combination of user name and password is wrong\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system presents an error message and asks for log in information again.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Go to step 3 in main scenario.\")), mdx(\"h2\", null, \"2 Register Member\"), mdx(\"p\", null, \"Precondition: The person is not yet registered in the Stuff Lending System.\\nPostcondition: The person is registered as a member and assigned a unique member ID.\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The person initiates a request to register as a member.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system asks for member information.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The person supplies a username, a password, an email and a phone number.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system contacts the Member Validation Service with the email and phone number.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The Member Validation Service checks the identity of the person and returns a positive reply.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system creates a new member profile, assigns a unique member ID, and records the date of creation.\")), mdx(\"h3\", null, \"Secondary Scenario:\"), mdx(\"p\", null, \"4A. The system detects a non-unique email or phone number\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system denies the registration request and informs the user of the reason for denial.\")), mdx(\"p\", null, \"5A. The Member Validation Service cannot confirm the identity.\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system denies the registration request and informs the user of the reason for denial.\")), mdx(\"h2\", null, \"3 Add Item\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The member provides the item details including category, name, and a short description.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System validates the information and registers the item to the member's account.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The system rewards member with 100 credits and records the day of item registration.\")), mdx(\"h2\", null, \"4 Establish Lending Contract and Verify Credit Amount\"), mdx(\"p\", null, \"Precondition: The borrower has enough credits and the item is available for specific timeframe.\\nPostcondition: A contract is created, credits are transferred, and item availability is updated for specific timeframe.\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Member initiates a request to borrow an item.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System verifies the member's credit amounts against the item's lending cost.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"If sufficient credits exist, move forward with lending process.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System creates a lending contract.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Credits are transferred from lender member to lending member based on the contract.\")), mdx(\"h3\", null, \"Secondary Scenario:\"), mdx(\"p\", null, \"3A. If member does not have enough credits or the item is unavailable, the system denies the lending request.\"), mdx(\"h2\", null, \"5 Advance Day Count\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Admin triggers Advance Day count command.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System increases the current day count.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System triggers all established lending contracts.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Each lending contract triggers a credit transfer equalling the item's lending cost.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System transfers credits from the borrowing member to the lending member's account.\")), mdx(\"h3\", null, \"Secondary Scenario:\"), mdx(\"p\", null, \"4A. If a lending contract cannot be executed (i.e. insufficient credits), the system flags the contract and notifies both the borrowing and lending member.\"), mdx(\"h2\", null, \"6 Change Item information\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Member initiates a request to update item details.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System validates and updates the requested information.\")), mdx(\"h2\", null, \"7 Member Profile Update\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Member initiates a request to update profile information.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System validates the information and updates the member's profile.\")), mdx(\"h2\", null, \"8 View Member/Item details\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"A request is initiated to view Member/Item details.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System fetches and displays the requested details.\")), mdx(\"h2\", null, \"9 Delete Member\"), mdx(\"p\", null, \"Precondition: The member exists in the system.\\nPostcondition: The member and their associated data are removed from the system.\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"A request to delete a specific member profile is initiated.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System validates and deletes the member profile.\")), mdx(\"h2\", null, \"10 Delete an Item\"), mdx(\"p\", null, \"Precondition: The item is listed in the system.\\nPostcondition: The Item and its associated data are removed from the system.\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"A request to delete a specific item is initiated.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System validates and deletes the item from the system.\")), mdx(\"h2\", null, \"11 View Contracts\"), mdx(\"p\", null, \"Precondition: A contract exists for the member (as a borrower or a lender).\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Member requests to view contract details.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System retrieves the necessary contract information and displays it to the member.\")), mdx(\"h2\", null, \"12 List All Members\"), mdx(\"h3\", null, \"Main Scenario:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Admin triggers a request to view all members.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"System retrieves and displays all member details and number of owned items in a simple or verbose manner.\")), mdx(\"h1\", null, \"Open Issues\"), mdx(\"p\", null, \"Open Issues\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Define Credit System:\"), \" The use cases mention that a member gains credits when they list an item and spends credits when they borrow. It would help to define a use case detailing the conditions under which credits are awarded, spent, or transferred.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Item Availability and Loan Terms:\"), \" More details are needed about how item availability is determined and tracked. What happens if a borrowed item is not returned within the agreed timeframe should also be defined.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Conflict Resolution:\"), \" It's unclear what happens if there's a disagreement between two members over an item's condition, or if an item is lost or damaged. Incorporating a use case covering conflict resolution or dispute processes might be necessary.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Notifications:\"), \" Notifications or updates being sent to members should be covered in the use cases. This is a common feature in lending or rental platforms. A use case for notifications, especially in situations like credit transfers, item unavailability, or disputed transactions, should be considered.\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#introduction","title":"Introduction"},{"url":"#stuff-lending-system-use-cases","title":"Stuff Lending System Use Cases","items":[{"url":"#primary-actors","title":"Primary Actors"},{"url":"#supporting-actors","title":"Supporting Actors"},{"url":"#use-cases","title":"Use Cases"}]},{"url":"#stuff-lending-system-use-cases-1","title":"Stuff Lending System Use Cases","items":[{"url":"#primary-actors-1","title":"Primary Actors"},{"url":"#supporting-actors-1","title":"Supporting Actors"},{"url":"#use-cases-1","title":"Use Cases"},{"url":"#1-authenticate","title":"1 Authenticate","items":[{"url":"#main-scenario","title":"Main Scenario"},{"url":"#secondary-scenarios","title":"Secondary Scenarios","items":[{"url":"#21-the-combination-of-user-name-and-password-is-wrong","title":"2.1 The combination of user name and password is wrong"}]}]},{"url":"#2-register-member","title":"2 Register Member","items":[{"url":"#main-scenario-1","title":"Main Scenario:"},{"url":"#secondary-scenario","title":"Secondary Scenario:"}]},{"url":"#3-add-item","title":"3 Add Item","items":[{"url":"#main-scenario-2","title":"Main Scenario:"}]},{"url":"#4-establish-lending-contract-and-verify-credit-amount","title":"4 Establish Lending Contract and Verify Credit Amount","items":[{"url":"#main-scenario-3","title":"Main Scenario:"},{"url":"#secondary-scenario-1","title":"Secondary Scenario:"}]},{"url":"#5-advance-day-count","title":"5 Advance Day Count","items":[{"url":"#main-scenario-4","title":"Main Scenario:"},{"url":"#secondary-scenario-2","title":"Secondary Scenario:"}]},{"url":"#6-change-item-information","title":"6 Change Item information","items":[{"url":"#main-scenario-5","title":"Main Scenario:"}]},{"url":"#7-member-profile-update","title":"7 Member Profile Update","items":[{"url":"#main-scenario-6","title":"Main Scenario:"}]},{"url":"#8-view-memberitem-details","title":"8 View Member/Item details","items":[{"url":"#main-scenario-7","title":"Main Scenario:"}]},{"url":"#9-delete-member","title":"9 Delete Member","items":[{"url":"#main-scenario-8","title":"Main Scenario:"}]},{"url":"#10-delete-an-item","title":"10 Delete an Item","items":[{"url":"#main-scenario-9","title":"Main Scenario:"}]},{"url":"#11-view-contracts","title":"11 View Contracts","items":[{"url":"#main-scenario-10","title":"Main Scenario:"}]},{"url":"#12-list-all-members","title":"12 List All Members","items":[{"url":"#main-scenario-11","title":"Main Scenario:"}]}]},{"url":"#open-issues","title":"Open Issues"}]},"parent":{"relativePath":"old/03-assignments/01-assignment_1/lending-system-problem-description.md"},"frontmatter":{"metaTitle":"Stuff Lending System Problem Description","metaDescription":"This is the meta description for this page","fullWidth":null}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/forelasningar-2026","title":"Föreläsningar 2026"}}},{"node":{"fields":{"slug":"/","title":"Objektorienterad analys och design med UML (1DV607)"}}},{"node":{"fields":{"slug":"/laborationer-2026","title":"Laborationer 2026"}}},{"node":{"fields":{"slug":"/old","title":"Old"}}},{"node":{"fields":{"slug":"/forelasningar-2026/00-tema-2-objektorienterad-analys-och-uml","title":"Tema 2 – Objektorienterad analys och modellering med UML"}}},{"node":{"fields":{"slug":"/forelasningar-2026/00-tema-3-objektorienterad-design-med-uml","title":"Tema 3 – Objektorienterad design med UML"}}},{"node":{"fields":{"slug":"/forelasningar-2026/01-kursintroduktion-och-domanmodellering","title":"1. Kursintroduktion och domänmodellering"}}},{"node":{"fields":{"slug":"/forelasningar-2026/02-objektorienterad-analys-och-modellering","title":"2. Objektorienterad analys och modellering"}}},{"node":{"fields":{"slug":"/forelasningar-2026/03-uml-modellering","title":"3. Fortsatt modellering med UML"}}},{"node":{"fields":{"slug":"/forelasningar-2026/04-grasp","title":"4. GRASP"}}},{"node":{"fields":{"slug":"/forelasningar-2026/00-tema-1-grunderna","title":"Tema 1 – Grunderna i objektorienterad analys och design"}}},{"node":{"fields":{"slug":"/laborationer-2026/01-laboration-1","title":"Laboration 1 – Domänmodellering"}}},{"node":{"fields":{"slug":"/old/001-introduction","title":"Course Introduction"}}},{"node":{"fields":{"slug":"/old/01-information","title":"Course Information"}}},{"node":{"fields":{"slug":"/laborationer-2026/02-laboration-2","title":"Laboration 2"}}},{"node":{"fields":{"slug":"/old/02-theory","title":"Theory"}}},{"node":{"fields":{"slug":"/old/03-assignments","title":"Assignments"}}},{"node":{"fields":{"slug":"/old/01-information/01-welcome","title":"Welcome to the Course"}}},{"node":{"fields":{"slug":"/old/01-information/registration","title":"Course Registration"}}},{"node":{"fields":{"slug":"/old/02-theory/01-intro_to_ooad","title":"Introduction to Object Oriented Analysis and Design"}}},{"node":{"fields":{"slug":"/old/01-information/grading","title":"Course Grading"}}},{"node":{"fields":{"slug":"/old/02-theory/03_software_architecture","title":"Software Architecture"}}},{"node":{"fields":{"slug":"/old/02-theory/04_mvc","title":"Model View Controller"}}},{"node":{"fields":{"slug":"/old/02-theory/02-domain_modeling","title":"Domain Modeling"}}},{"node":{"fields":{"slug":"/old/02-theory/06_grasp1","title":"GRASP 1"}}},{"node":{"fields":{"slug":"/old/02-theory/05_layers_components","title":"Layers & Components"}}},{"node":{"fields":{"slug":"/old/02-theory/07_grasp2","title":"GRASP 2"}}},{"node":{"fields":{"slug":"/old/02-theory/09_gof1","title":"GoF 1"}}},{"node":{"fields":{"slug":"/old/02-theory/10_gof2","title":"GoF 2"}}},{"node":{"fields":{"slug":"/old/02-theory/11_solid","title":"SOLID"}}},{"node":{"fields":{"slug":"/old/02-theory/08_grasp3","title":"GRASP 3"}}},{"node":{"fields":{"slug":"/old/02-theory/design_class_diagram","title":"UML Design Class Notation"}}},{"node":{"fields":{"slug":"/old/02-theory/design_class_relations","title":"UML Design Class Relations"}}},{"node":{"fields":{"slug":"/old/02-theory/design_object_diagram","title":"UML Object Diagram Notation"}}},{"node":{"fields":{"slug":"/old/02-theory/99-exercises","title":"Exercises"}}},{"node":{"fields":{"slug":"/old/02-theory/design_package_diagram","title":"UML Package Notation"}}},{"node":{"fields":{"slug":"/old/02-theory/domain_class_diagram","title":"UML Domain Model"}}},{"node":{"fields":{"slug":"/old/02-theory/reading-instructions","title":"Reading Instructions"}}},{"node":{"fields":{"slug":"/old/03-assignments/01-assignment_1","title":"Assignment 1"}}},{"node":{"fields":{"slug":"/old/03-assignments/02-assignment_2","title":"Assignment 2"}}},{"node":{"fields":{"slug":"/old/03-assignments/03-assignment_3","title":"Assignment 3"}}},{"node":{"fields":{"slug":"/old/03-assignments/04-yahtzee","title":"Yahtzee Assignment"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-a","title":"Övningsuppgifter del A"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-b","title":"Övningsuppgifter del B"}}},{"node":{"fields":{"slug":"/old/03-assignments/01-assignment_1/lending-system-problem-description","title":"Stuff Lending System Problem Description"}}},{"node":{"fields":{"slug":"/old/03-assignments/01-assignment_1/yacht-club-problem-description","title":"Yacht Club Problem Description"}}},{"node":{"fields":{"slug":"/old/old_template/videologgar","title":"Vlog"}}},{"node":{"fields":{"slug":"/old/old_template/codeblock/1-index","title":"Sub Page"}}},{"node":{"fields":{"slug":"/old/03-assignments/02-assignment_2/test_specification","title":"Test Specification"}}},{"node":{"fields":{"slug":"/old/old_template/codeblock","title":"Syntax Highlighting"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-a/01-hello-world","title":"Hello world"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-a/02-simple-addition","title":"Enkel addition"}}}]}},"pageContext":{"id":"95db8400-018a-530a-b563-635879f779b8"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}