An understanding of
In this project, you will build the Participatr web service, which provides a very small subset of the functionality of Meetup.com, a social networking portal that facilitates offline group meetings.
This system will support the following entities:
- Users, which have the following attributes
- email address (also serves as unique ID)
- first and last name
- brief biography
- groups in which the user is a member
- Groups, which have the following attributes
- unique name
- user who created the group
- group members
The system will support the following scenarios:
- user signs up
- user changes his/her full name and/or biography
- user deletes his/her account
- user creates new group
- user changes description of group he/she owns
- user deletes group he/she owns
- user views list of groups with descriptions and membership count
- user joins group
- user views members of group he/she owns or has joined
- user leaves group
These entities will be exposed as addressable, interconnected resources with suitable representations, and the scenarios will be supported through the uniform HTTP request interface.
Architectural and Other Nonfunctional Requirements
Overall, you should follow the architectural and design principles outlined here:
- XHTML (suitable for a human user)
- JSON (suitable for a programmatic client)
In addition, the following nonfunctional requirements apply to this project:
- The project is managed using Maven.
- Restlet is used to expose the given functionality in a resource-oriented form. Where appropriate, suitable representations should be included that make the (read-only) functionality accessible through a web browser (XHTML). Otherwise, the functionality should be accessible through cURL and through a suitable client also implemented in Restlet (JSON).
- There should be a comprehensive test suite following the approaches found in the LinearRegressionRestletSpring and NumguessRestletSpring examples. JUnit should be used to automate both types of tests:
- Direct, local, component-level unit and integration testing of the domain objects (User, Group, and related objects) and any services you layered on top of the domain objects. (Local JUnit testing of the Restlet resources is not required in this project. I have not yet figured out how to do that.)
- HTTP-client-based system-level testing of the service using the JSON representation.
- Persistence is provided using db4o.
- Dependencies among components should be managed using the Spring framework.
- Working code in the repository.
- Also in the repository, detailed documentation of your resource-oriented architecture, including
- a list of resources with a brief description of each
- for each resource, the supported HTTP methods and their meaning/effect on the resource state (in terms of the scenarios listed above).