---
# System prepended metadata

title: She Safe App Design Project - README

---

She Safe App Design Project - README 
===

# She Safe

## Table of Contents
1. [Overview](#Overview)
1. [Product Spec](#Product-Spec)
1. [Wireframes](#Wireframes)
2. [Schema](#Schema)

## Overview
### Description
SheSafe is an application that seeks to help reduce the rate of crime against women by showing an updated map with reports of theft, kidnapping and any risk situation that a woman has ever lived near you.

### App Evaluation
- **Category:** Lifestyle/Safety
- **Story:** Allows users to share their experiences with risk situations in public places.
- **Market:** Anyone. The objective of the app is that all the women can avoid high risk places based in the past experiences shared in our database.
- **Habit:** Users can use the app every day several times. Our app can be used as a resource page to check the level of risk in a specific place, but it can also be used as route finder of the most secure route for way home.
- **Scope:** She Safe will start like a database where you can find all the reports of crimen related to womans. But, the objective of the app is turn into a consulting app where you can find any resource about safety in women and society.

## Product Spec

### 1. User Stories (Required and Optional)

For She Safe, we identified the following “must-have” features which a user needs to be able to perform for the app to work:

**Required Must-have Stories**

* User can login
* User can sign up
* User can see the latest report of risky situation of every location
* User can create a new report of risky situation in determined location
* User can get the historical of reports for every location  
* User can get a detail view of the reports of the risky situation
* User can access a list of useful resources as self-defense courses, law orientation or therapy


**Optional Nice-to-have Stories**
* User can press a SOS button and send all his emergency information via WhatsApp to his emergency contacts and police
* User can search places and see his historical reports
* User can see the latest report without internet (PersistSQL lite)
* User can see the nearlest user of his
* User can see the nearest users 
* Caching or Clustering Pins
* User can receive notification of the newest reports nearest

### 2. Screen Archetypes

* Login Screen
    * User can login
* Sign up Screen
    * User can sign up
* Map 
    * User can see the latest report of risky situation of every location
* Report Form (modal overlay) 
    * User can create a new report of risky situation in determined location
* Historical Reports
    * User can get the historical of reports for every location  
* Report Detail View
    * User can get a detail view of the reports of the risky situation
* Resources Screen
    * * User can access a list of useful resources as self-defense courses, law orientation or therapy

### 3. Navigation

**Tab Navigation** (Tab to Screen)

* Map
* Resources Screen
* Report Form

**Flow Navigation** (Screen to Screen)

* Login screen ->Sign up Screen
   * Map
        * -> Historical reports -> Report Detail View
        * -> Resources screen
## Work Breakdown
### 1. Design
|Design element|Type of feature|Importance|Do it?|
|-|-|-|-|
|Logo|Core|1|
|Color Pallete|Core|1||
|Tool bar|Strech|2||
|Transition|Stretch|3||

### 2. API
|API's name|Type of API|Importance|Use|Implemented?|
|-|-|-|-|-|
|Parse SDK|Core|1|Save the user and reports||
|Google Maps SDK|Core|1|Visualize the reports geographically||
|YouTube API|Stretch|3|Show the videos of the courses||

### 3. Tables of the DataBase implemented in Back4end
|Table|Type of element|Importance|Designed?|Implemented?|JavaClass|
|-----|---------------|----------|---------|------------|---------|
|User|Core|1||||
|Report|Core|1||||
|EmergencyContacts|Core|1|||
|EmergencyMessage|Core|1||||

<!-- |Web Resources|Stretch|2||||
|Courses|Stretch|3||||
|CourseVideos|Stretch|3||||
|VideoCheck|Strech|3|||| -->

### 4. Activities
|Activity|Type of feature|Importance|Layout|Java Class|
|-|-|-|-|-|
|LaunchActivity|Stretch|2|||
|LoginActivity|Core|1|||
|SignupActivity|Core|1|||
|MapActivity|Core|1|||
|ToolBarMenu|Core|1|||
|ReportViewActivity|Core|1|||
|ReportFormActivity|Core|1|||
|HistoricalReportsActivity|Core|1|||
|ResourcesActivity|Stretch|2|||
|WebResourcesView|Stretch|2|||
|CoursesView|Stretch|3|||
|CourseVideosView|Stretch|3|||

### 5. Features
|Feature|Description|Type of feature|Importance|Related JavaClass|Implemented?|
|-|-|-|-|-|-|
|SaveReport|-----------|Core|1|ReportFormActivity||
|QueryReport|-----------|Core|1|HistoricalReportsActivity,MapActivity|
|SOSonCLick|Send a SMS your ubication and your personalize emergency message to your selected numbers|Core|1|ToolBarMenu|||





## Wireframes
[Add picture of your hand sketched wireframes in this section]
<img src="https://raw.githubusercontent.com/ElmerAdrianV/SheSafe/main/Wireframes.jpeg" width=600>

### [BONUS] Digital Wireframes & Mockups

### [BONUS] Interactive Prototype

### Models
#### User
| Property      | Type     | Description |
   | ------------- | -------- | ------------|
   | objectId      | String   | unique id for the user  (default field) |
   | image         | File     | User's Profile Photo |
   | createdAt     | DateTime | date when user is created (default field) |
   | updatedAt     | DateTime | date when user is last updated (default field) |
   
#### Report
| Property      | Type     | Description |
   | ------------- | -------- | ------------|
   | objectId      | String   | unique id for the user  (default field) |
   | image         | File     | User's Profile Photo |
   | createdAt     | DateTime | date when user is created (default field) |
   | updatedAt     | DateTime | date when user is last updated (default field) |
#### EmergencyContacts
#### EmergencyMessage



   
### Networking
#### List of network requests by screen
   - Home Feed Screen
      - (Read/GET) Query all posts where user is author
         ```swift
         let query = PFQuery(className:"Post")
         query.whereKey("author", equalTo: currentUser)
         query.order(byDescending: "createdAt")
         query.findObjectsInBackground { (posts: [PFObject]?, error: Error?) in
            if let error = error { 
               print(error.localizedDescription)
            } else if let posts = posts {
               print("Successfully retrieved \(posts.count) posts.")
           // TODO: Do something with posts...
            }
         }
         ```
      - (Create/POST) Create a new like on a post
      - (Delete) Delete existing like
      - (Create/POST) Create a new comment on a post
      - (Delete) Delete existing comment
   - Create Post Screen
      - (Create/POST) Create a new post object
   - Profile Screen
      - (Read/GET) Query logged in user object
      - (Update/PUT) Update user profile image
#### [OPTIONAL:] Existing API Endpoints
##### An API Of Ice And Fire
- Base URL - [http://www.anapioficeandfire.com/api](http://www.anapioficeandfire.com/api)

   HTTP Verb | Endpoint | Description
   ----------|----------|------------
    `GET`    | /characters | get all characters
    `GET`    | /characters/?name=name | return specific character by name
    `GET`    | /houses   | get all houses
    `GET`    | /houses/?name=name | return specific house by name

##### Game of Thrones API
- Base URL - [https://api.got.show/api](https://api.got.show/api)

   HTTP Verb | Endpoint | Description
   ----------|----------|------------
    `GET`    | /cities | gets all cities
    `GET`    | /cities/byId/:id | gets specific city by :id
    `GET`    | /continents | gets all continents
    `GET`    | /continents/byId/:id | gets specific continent by :id
    `GET`    | /regions | gets all regions
    `GET`    | /regions/byId/:id | gets specific region by :id
    `GET`    | /characters/paths/:name | gets a character's path with a given name