In this homework, you will implement the handling of plant hire requests in BuildIt’s information system. In order to test this functionality, you will implement the components of the RentIT system required to receive purchase orders, to retrieve/view purchases orders and to accept/reject purchase orders.
The RentIT and the BuildIT systems should be implemented as separate Spring boot projects. The RentIT system must be developed in Spring version 2.0.0 (this is the same version you used for homeworks 1 and 2), while the BuildIT system will be developed using Spring 2.1.3 (which is the version you used in Practice #7).
The required functionality is described below:
As you can see, in addition to the processing inside BuildIt, the scenario above incurs in at least 3 major REST interations between BuildIt and RentIt:
-
querying RentIt’s plant catalog (BuildIt ⇒ RentIt),
-
creating a purchase order (BuildIt ⇒ RentIt), and
-
notifying the decision made by a RentIt’s employee on Purchase order submitted by BuildIt (RenIt ⇒ BuildIt).
Different from some of previous lab sessions and homework, we will assume that the decision on whether to accept or reject a purchase order is made by a RentIt’s employee and not automatically. The latter also implies that we would need that both information systems are running and that you would write some Cucumber user stories to simulate the user interactions with both information systems. Since, in this moment we have not discussed anything about authentication/authorization, we would not distinguish the role of users in BuildIt side (e.g. no distinction between users playing the roles of site and works engineers).
Throughout the scenario, the information systems exchange information (e.g. BuildIt retrieves the information about plant inventory entries during the catalog query and later submits a purchase order to RentIt, etc.). Moreover, BuildIt’s information system must, at some stages, store reference to RentIt’s resources: e.g. the Plant Hire Request (BuildIt’s document) keeps a reference to the Purchase Order (RentIt’s document), etc. In this context, we expect that your domain model considers to store only the reference to remote resources a not the full representation as illustrated in the following (partial) diagram:
Henceforth, we would expect that your BuildIt’s information system stores only the reference to RentIt’s resources (e.g. “href” in hypermedia REST) and not their full representation. Note that such reference, i.e. href value, should be considered the resource identifier. As mentioned during the lecture, storing some additional information (e.g. plant inventory entry’s name) is possible to avoid some interactions and have enough information to render in BuildIt’s front-end. The idea is that, when the full representation is required, we can use the “href' to retrieve it.
You must submit the link to your bitbucket repository (no github) to the course’s submission web page. Add username manuel_camargo as a collaborator in your project repository(ies). Remember that the homework must be submitted in teams of 3 or 4 students. Add the name of the team members in a file to Git repository (e.g. text file or markdown file). If a student did not complete his part of the homework, please send an email to the lecturer.
As in the previous homeworks, you are required to submit the link to the Git repository(ies) – it can be only one or two repositories (or three or four if you wish to implement the frontends in separate repositories). The design artifacts (domain model, sequence diagram and other diagrams) must be added to the corresponding repository as a PDF file.