-
Notifications
You must be signed in to change notification settings - Fork 8
Home
1. Introduction
2. Description
3. Requirements
3.1 UI Requirements
3.2 Functional Requirements
3.3 Non-Functional Requirements
4. Prioritization
5. Diagrams
This wiki will first cover an in-depth description of the project's scope. Then, a list of specific requirements the project needs will be explained in detail. Finally, the priorities of each of these requirements will be assigned in order to ensure the project is completed successfully. This will provide a more solid idea of the expected flow of the development and testing phases.
PinMe is a social media app that allows users to see various types of events going on in their vicinity. This wiki contains a collection of requirements for the PinMe app to function successfully, which will provide aid in assigning priorities during the various stages of development.
PinMe is a map-based social media app that allows users to see local events in real time. The main feature will be the map user-interface, which will allow users to place pins using GPS. These pins will show where events are happening near the user, with examples including: study groups, social gatherings, sports meetups, food distribution, accident warnings, and other types of special events.
Term | Definition |
---|---|
User | Someone who will be interacting with the app |
DESC | Description |
RAT | Rational |
DEP | Dependency |
There are four main components to the PinMe application: the user, the app/client, Google Maps API, and the AWS backend that is comprised of various components. The interactions are shown in the image below.
This application only has one type of user which only interacts with the application on their phone (the client). The client will be responsible for all functionality given to the user, including creating/logging in to an account, placing a new pin, editing the pin's information/description, searching for preexisting pins, and changing settings on the app.
The client is the user interactive experience a person will see when using the PinMe app. This is the application that the user will download and use to interact with the other components, which may include other users. The client will initiate interaction with the system, and this interaction will be done through a simple, user-friendly GUI. The GUI is an essential component of the client, therefore the rest of the app will need to be built around it. The user experience is holding a higher priority at the moment than user performance; once the functionality of the GUI is solidified, performance will become the next priority. The GUI framework will be developed using React Native and one of its many kits for building animated GUIs.
Amplify is a JavaScript library provided by Amazon Web Services (AWS) that allows you to create cloud-based applications. This is used to configure and access the resources (Cognito, DynamoDB) created on AWS.
The AWS back-end is comprised of various different components such as: AppSync, Cognito, and DynamoDB.
-
AppSync is used to manage the GraphQL API that's used for creating queries or mutations on the database.
- This is a querying language that makes it easy to query the database or make new entries using a simple query or mutation.
-
Cognito will handle all user authentication and account management for the application. It adds user sign-up, sign-in and access control to our application which we can then manage on the AWS Console by setting password requirements or (MFA) multi-factor authentication.
-
DynamoDB will be used as the database for the app to store data for the pins dropped on the map.
The API will be used in conjunction with the React Native Maps component for Android and iOS. It will be used to display the main component of the app, the map view that will house the pins dropped and will allow the user to move around to different regions.
AWS DynamoDB will be used to store all data for the pins. There will be one table to contain all entries needed by the application.
When a pin is created, a new entry to both tables in the database will be made with the following schema:
Attribute name | Type | Description |
---|---|---|
id | string | Unique id for each pin |
createdAt | string | timestamp of when pin was created |
userId | string | username of the user who created the pin |
eventName | string | Name of the event |
eventType | string | The type of event |
startTime | string | The date and time the event is starting |
endTime | string | The date and time the event is ending |
description | string | Description of the event |
latitude | string | Latitude coordinate value of pin |
longitude | string | Longitude coordinate value of pin |
id | createdAt | userId | eventName | eventType | startTime | endTime | description | latitude | longitude |
---|---|---|---|---|---|---|---|---|---|
"93856" | "2018-12-06T03:47:56.147Z" | "jkvang" | "Donuts and Coffee at Engineering" | "Food" | "4/7/2018, 7:00:00 AM" | "4/7/2018, 10:00:00 AM" | "Have some free donuts and coffee while you meet the new faculty!" | "36.812617" | "-119.745802" |
"76593" | "2018-12-06T04:04:19.090Z" | "ecast96" | "Car Accident on Shaw" | "Warning" | "4/8/2018, 5:00:00 PM" | "4/8/2018, 6:00:00 PM" | "There is a car accident on Shaw Ave. Avoid!" | "37.775054" | "-122.417329" |
ID: UIR1
TITLE: Main window
DESC: Given that a user has downloaded and started the app, a window must be displayed to the user.
RAT: In order for the user to see a UI.
DEP: None.
ID: UIR2
TITLE: Login Page
DESC: Given that the main window has opened, the first page displayed by the window should allow the user to sign in with email and password, go to another page to create a new account, or recover email and password.
RAT: In order for the user to log in or go sign up for a new account on a new page.
DEP: UIR1
ID: UIR3
TITLE: Sign Up Page
DESC: Given that the user selected to create a new account from the login page, they should be able to enter a username, email, and password to create a new account.
RAT: In order for the user to create a new account for the app.
DEP: UIR2
ID: UIR4
TITLE: Home Page
DESC: Given that the user has signed in, the sign in page should turn into a new page with a map view that contains the core functionality of the app.
RAT: In order for the UI to house the core functionality of the app.
DEP: UIR2
ID: UIR5
TITLE: Create Pin Button
DESC: Given that the map has loaded, the user should be able to touch a button in the bottom right of the screen to create a pin.
RAT: In order for the UI to support the creation of pins.
DEP: UIR4
ID: UIR7
TITLE: Google Toolbar
DESC: Given that the user has selected a pin, an option should be displayed to allow the user to open up google maps
RAT: In order for the UI to provide directions.
DEP: UIR5
ID: UIR8
TITLE: Pin Placement Page
DESC: Given that the user has selected to manually selection the location of the pin, a new page should load, allowing the user to move the pin around the map and set the location.
RAT: In order for the UI to display a map allowing the user to create a pin.
DEP: UIR7
ID: UIR9
TITLE: Pin Information Page
DESC: Given that the user has confirmed the location of the pin, a new page should load, allowing the user to enter information about the pin.
RAT: In order for the UI to support the input of information for the pins.
DEP: UIR6, UIR8
ID: UIR10
TITLE: Search Button
DESC: Given that the map has loaded, the user should be able to search dropped pins on the map based on event name.
RAT: In order for the UI to search of pins on the map.
DEP: UIR4
ID: UIR11
TITLE: Menu Button
DESC: Given that the map has loaded, the user should be able to touch a button in the top left to open the menu.
RAT: In order for the UI to support the menu page.
DEP: UIR4
ID: UIR12
TITLE: Menu Page
DESC: Given that the user has selected to open the menu, a menu drawer should open from the left side of the screen displaying options (buttons):
- Search
- Map
- My Pins
RAT: In order for the user to interact with the app’s settings.
DEP: UIR11
This section includes the requirements that specify all the fundamental actions of the software system
ID: FR1
TITLE: User Registration
DESC: A user should be able to register through the mobile application. The user must provide a user-name, email, and password
RAT: In order for a user to register
DEP: none
ID: FR2
TITLE: User log-in
DESC: Given that a user has registered, then the user should be able to log into the application. The log-in information will be stored via Amazon Web Services and in the future the users should logged in automatically.
RAT: In order for a user to log in
DEP: FR1
ID: FR3
TITLE: Turn location services on
DESC: Given that a user has logged in, then the user should have the option to turn location services on or off.
RAT: In order for a user to turn location services on or off
DEP: FR2
ID: FR4
TITLE: View interactive map
DESC: Given that a user has logged in, then the first page that is shown is an interactive map. From this page users should be able to add a pin, view a pin, select the menu, search for events, and view pin user has made. Any nearby events should be shown on the map for the user to select and view.
RAT: In order for the user to view the interactive map
DEP: FR2
ID: FR5
TITLE: Adding a pin
DESC: Given that a user has reached the interactive map, the user should be able to pick a location and add a pin to the interactive map. The information that can be added includes:
- The user’s username
- What type of pin the user wants to place
- The start and end time of the pin.
- The user can choose to add a description of the pin
RAT: In order for a user to add a pin.
DEP: FR4
ID: FR6
TITLE: Clicking a pin
DESC: Given that a user has reached the interactive map, the user should be able to select a nearby pin and view interactive options for that pin:
- The description of the pin
- The name of the pin
- Get directions to the pin
- Get an Uber or a Lyft to the pin.
- View the pin in google maps.
RAT: In order for a user to view information about a pin.
DEP: FR4
ID: FR7
TITLE: Menu
DESC: Given that a user has reached the interactive map, the user should be able to go to the menu. The menu should include:
- The user will have a home button that takes them to the interactive map.
- The user will have a 'My pins' section to view their pins they've set.
- The user will have a search button that takes them to a search page.
RAT: In order for the user to navigate around the app.
DEP: FR4
ID: FR8
TITLE: Search
DESC: Given that a user has reached the search page then the user should be able to search for any pin on the map by the name. Results will show all relevant information about that pin, presented as a list of cards, and provide a clickable button to take the user to that spot on the map with the pin in the center. Relevant information includes:
- The username of the creator of the pin
- The name of the pin
- The time frame when the pin starts and when the pin ends
- Description of the pin
RAT: In order for a user to search for pins and view information about it.
DEP: FR4
ID: FR9
TITLE: Getting Directions
DESC: Given that a user has clicked on a pin, the user should be able to get directions to that pin through the google toolbar.
RAT: In order for a user to get directions to a pin.
DEP: FR6
ID: FR10
TITLE: Entering pin information
DESC: Given that a user has hit the add pin button and chose a location, then the user should be able to enter information about the pin that will be dropped.
RAT: In order for a user to enter information about a pin.
DEP: FR9
ID: FR11
TITLE: Viewing/deleting Pins added by the user
DESC: Given that a user has dropped a pin, then the user should be able to see a list of all their pins as well as being able to delete those pins.
RAT: In order for a user to see and manage their dropped pins.
DEP: FR5
ID: FR12
TITLE: Ordering a Lyft or an Uber
DESC: Given that the user has selected a pin on the interactive map, then the user should be able order and uber or a lyft to or from the pin's location.
RAT: In order for the user to be able to order a lfyt or uber to or from the pin's location.
DEP: FR7
ID: FR13
TITLE: Canceling a pin
DESC: Given that the user has begun entering information about a pin, then the user should be able to cancel the pin if he/she so decides.
RAT: In order for the user to cancel a pin placement.
DEP: FR5
ID: FR14
TITLE: Change location in the middle of adding pin
DESC: Given that the user has begun entering information about a pin, they should be able to change locations without losing any info they have already entered.
RAT: In order for the user to easily change location of the pin without losing already inputted data.
DEP: FR5
ID: FR15
TITLE: Filtered Search
DESC: Given that the user has begun a search, then the list of pins should filter real time. The filter will apply to the names of the pin.
RAT: In order for the user search for specific pins.
DEP: FR8
ID: NFR1
TITLE: Loading Pin
DESC: The pin will load with ease. It will load upon opening the app and when the refresh button is press.
RAT: In order for the user to see the all of the pins.
ID: NFR2
TITLE: Sliding the drawer menu
DESC: User will be able to use the sliding drawer menu with ease. User will also be able to close the drawer with ease.
RAT: In order for the user to see gain access to the different pages.
ID: NFR3
TITLE: Go to user location
DESC: The user location will calibrate the user location faster and seamlessly move to the user location.
RAT: In order for the user to see their current location when it isn't visible.
ID: NFR4
TITLE: Go to pin location
DESC: When using the search and MyPin page user are allow to click on the name to go to the pin location. This feature will need to seamlessly switch the pages and go to the pin location.
RAT: In order for the user to pin point the location of the pin selected.
ID: NFR5
TITLE: Deleting Pin
DESC: While on the MyPin page, user are allow to delete their pin. The delete button will need the action to delete the pin with ease and fully erase the pin from the database.
RAT: In order for the user to clean their MyPin page with ease.
ID: NFR6
TITLE: Global Variable
DESC: Have variable like current user, pin info, and region be global to allow the ease of calling the variable when needed.
RAT: In order for the function to call the different variable with ease.
Request will be filtered in to three levels, high medium, and low. The high level will have the highest priority; will consist of bugs and issues that prevent the user from using the app.
The medium level will have medium priority; will consist of bugs that don’t harm user interacting but harm user performance.
Low level will have the lowest priority; will consist of individual bugs user have and features requested user. If team approve of a request feature, it could move up in priority.
To approve of new features our team will vote on which feature would be more beneficial to PinMe. The feature with the most votes will be class as medium level, as for the other features they will be class as low level.
The following diagram shows the user case diagram created for the PinMe app. This diagram illustrates the different ways that external entities will interact within the app.
The following diagram shows the class diagram created for the PinMe app. This diagram illustrates the different ways that the different classes and pages will interact within the app.
The following diagram shows the sequence diagram for the PinMe app. This diagram illustrates hows classes will interact with one another and how the functions will work within the app.
California State University, Fresno
Erick Castro - Heather Libecki - Chris Quesada - Johnson Vang
Fall 2018