For this course you will be developing a final project that you will present and demonstrate at the end of the semester. Below is a template of various types of entities your project must support. A description is provided for each of the types of entities. Note that this is a generic template that should be tailored for your particular project. It only provides a general guidance of the types of entities that are expected for each project.
Your project must provide the ability to manage users of your application. In particular your application should support
- User Register/Login/Logout - your application should allow users to register, login and logout. Once logged in, the identity of the user should be maintained across the application. Logged in users can view all information related to that user
- Role assignment - your application should support at least two roles. For instance, admin and end user
- Access Control Management - your application should support some kind of access control management where users should be allowed to do certain tasks only if they are in the appropriate role. For instance, only users in the admin role can delete or change another user’s profile or role
- Admin console for user management - your application should provide the means for managing the users in the the application
For your application you will choose a particular domain of interest. It could be cooking, transportation, tourism, fund raising, social networking, etc. Discuss the domain with your instructor. You will create the various entities that describe the data and relations for your domain. Even though the diagram shows a single DomainModel class, you will probably have many more classes. For instance, if your domain is cooking, then the domain model might consist of User, Recipe, Food, Ingredient, etc. If your domain is a social network, then your domain model might consist of User, Group, Post, Comment, Picture, Album, etc. Each of these entities will have various relations between them. For instance, there is a one to many relation between User and Post, Recipe and Ingredient, etc. Your data model should include a detailed class diagram illustrating it.
The user should be related to one or several domain classes, e.g., User and Post, User and Recipe, User and Order, User and Phone, etc.
The user should be related to other users, e.g., users can bookmark another user such as a user following another user.
A user can be related to other users in some hierarchy, e.g., an employee reporting to a director, and a director reporting to a vice president
An entity on your domain model can be related to another entity of the same type creating a hierarchical relation between the instances, e.g., Category has many sub Categories which have many sub Categories, recursively
Your data model should include aggregation and composition relations. Compositions establish a life cycle dependency between classes in a parent child relation, e.g., House has many Rooms. In a composition child instances are removed if the parent instance is removed. In aggregation relations there is no life cycle dependency. If the parent instance is removed, then the child references can still exist, e.g., Order has many Products. If we remove the order, the products still exist.
Your application should support at least two types of users, e.g., end user, admin, sales, human resources, etc.
Your domain model should also contain various specializations, e.g., several types of vehicles, several types of buildings, several types of jobs, etc.
All classes in your class diagram must be implemented as entities mapped to a table or collection. They should implement the various types relations with other classes following the class diagram
All access to the database should be done through data access objects that provide an API to access the database. There should be no SQL or JPQL or Mongoose or collection access outside a DAO. Create all necessary CRUD operations to create, read, update and delete instances of your data model.
All data transferred between user interface and controller, or through a network, should be encapsulated in a data transfer object. There should be no use of literal strings in your code to represent a serialization of your data model.
Expose the data model through a Web service REST API to be used by your user interface or by any third party
Retrieve data from your Web service or a 3rd party public REST API to render in the user interface or store in your database
- Login / Registration / Logout
- Profile - displays information for the currently logged in user. This page should include personal information as well as a list of various instances to which this user is related to. For instance, if a user has commented on a post, then the list of all comments should be shown here. If they click on the title of the comment, they navigate to the original post. If they liked a recipe, they the list of all recipes that they liked should be listed in the profile. If they click on the title of the recipe, then they navigate to the details page of the recipe. If they are following a user, all users that they follow should be listed in the profile. If they click on the username, then they navigate to the profile of that user. While in someone elses profile, you can like or follow the person. You can also see all the other people they are following, and lists of comments they created. If you click on their lists, you navigate to the appropriate details page.
- Home - this is the splash screen you first see. There is no need to login to see the home page. You can start a search right in the home page or navigate to the search page. If you try to navigate to a profile page, they you will be asked to log in.
- Search / Search Results - this page provides a search field and/or a set of filters from where the user can generate searches. When they submit the search, the list of search results summaries are shown. If they click on a search result, they navigate to a details page that shows much more information.
- Details - this page shows details of the search result. If users commented on this item, then all the comments are shown in this page. You can like or comment on the item. These are stored in the local database. If you click on the username of a comment, then you navigate to the profile of that user.