Skip to content

kalex19/Sophia-Rails

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SOPHIA

Speech Operated Personal Household Interactive Assistant

Table of Contents

Description

SOPHIA is a speech operated personal household interactive assistant. This app is built for two audiences: Clients and Caretakers. Clients are anyone with a disability (physical, cognitive, long-term, temporary) who needs care. Caretakers include anyone who is willing to help take care of clients. Taking care could include running errands, cleaning, yardwork, paying bills, grocery shopping, etc. SOPHIA was built to connect clients to caretakers to help meet their daily needs.

Please reference the user stories to understand the full functionality of SOPHIA.

SOPHIA is an A11Y app with a large focus on accessibility.

Technologies Used

Learning Goals

This is a unique opportunity that presents some valuable goals:

  • Ultimately, demonstrate knowledge you’ve gained throughout Turing
  • Use an agile process to turn well defined requirements into deployed and production ready software
  • Gain experience dividing applications into components and domains of responsibilities to facilitate multi-developer teams.
  • Service oriented architecture concepts and patterns are highly encouraged.
  • Explore and implement new concepts, patterns, or libraries that have not been explicitly taught while at Turing
  • Practice an advanced, professional git workflow (see whole-team expectations)
  • Gain more experience using continuous integration tools to build and automate the deployment of features in various environments
  • Build applications that execute in development, test, CI, and production environments
  • Focus on communication between front-end and back-end teams in order to complete and deploy features that have been outlined by the project spec

Setup

  1. Clone this repository
  2. Run command bundle
  3. Run command rails db:create
  4. Run command rails db:migrate
  5. Run command rails db:seed
  6. Run command rails start to start a server

Testing

  1. Add gem rspec-rails
  2. Run command bundle
  3. Run command rails g rspec:install

Endpoints

Client Endpoints

Caretaker Endpoints

Login


Client Endpoints

Single Client

Client Profile:

Send a GET request to receive all information related to a single client

GET /api/v1/clients/:id

if a client does not have diet_restrictions, needs, allergies, or medications, these attributes do not show. The client below has no 'allergies' associated

Content-Type: application/json
Accept: application/json
Successful Response
{
  "id": "1",
  "username": "katierulz",
  "name": "Katie",
  "street_address": "123 Test St",
  "city": "Denver",
  "state": "CO",
  "zip": "12345",
  "email": "[email protected]",
  "phone_number": "1235551234",
  "needs": ["groceries", "bills"],
  "medications": ["drug_1", "drug_2"],
  "diet_restrictions": ["vegetarian", "peanut-free"],
  "role": "client",
  "created_at": "DateTime",
  "updated_at": "DateTime"
}
Unsuccessful Response

A valid client ID must be provided otherwise a 404 status code (page not found) will be returned.

Client Creation:

Send a POST request to create a client

POST /api/v1/clients/

headers:
Content-Type: application/json
Accept: application/json

body:

MUST have password AND password confirmation and they must match

{
    "username": "string-required",
    "name": "string-required",
    "password": "password",
    "password_confirmation": "password",
    "street_address": "string-required",
    "city": "string-required",
    "state": "string-required",
    "zip": "string-required",
    "email": "string-required",
    "phone_number": "string-required",
    "needs": ["array"],
    "allergies": ["array"],
    "medications": ["array"],
    "diet_restrictions": ["array"],
    "role": "client"
}
Successful Response
{
  "id": "1",
  "username": "katierulz",
  "name": "Katie",
  "street_address": "123 Test St",
  "city": "Denver",
  "state": "CO",
  "zip": "12345",
  "email": "[email protected]",
  "phone_number": "1235551234",
  "needs": ["groceries", "bills"],
  "allergies": ["pollen", "peanuts"],
  "medications": ["drug_1", "drug_2"],
  "diet_restrictions": ["vegetarian", "peanut-free"],
  "role": "client",
  "created_at": "DateTime",
  "updated_at": "DateTime"
}

Unsuccessful Responses:

Email Taken:
{
  "email": ["has already been taken"]
}
Empty state:
{
  "state": ["can't be blank"]
}
Unmatching Password:
{
  "password_confirmation": ["does not match password"]
}

Client Update

Send a PATCH request to update a clients profile

PATCH /api/v1/clients/:id

Headers:

Content-Type: application/json
Accept: application/json

Body:

{
"email": "[email protected]"
}
Successful Response
{
  "id": "1",
  "username": "katierulz",
  "name": "Katie",
  "street_address": "123 Test St",
  "city": "Denver",
  "state": "CO",
  "zip": "12345",
  "email": "[email protected]",
  "phone_number": "1235551234",
  "needs": ["groceries", "bills"],
  "allergies": ["pollen", "peanuts"],
  "medications": ["drug_1", "drug_2"],
  "created_at": "DateTime",
  "updated_at": "DateTime"
}
Unsuccessful Response

A valid client ID must be provided otherwise a 404 status code (page not found) will be returned.

Client Deletion

Send a DELETE request to delete a client

DELETE /api/v1/clients/:id

Successful Response:

will return a 204 status code with no body

Unsuccessful Response

A valid client ID must be provided otherwise a 404 status code (page not found) will be returned.

Client Tasks

List Task Creation

Send a POST request to create a list task

post /api/v1/clients/:client_id/lists/:list_id/tasks

Headers:
Content-Type: application/json
Accept: application/json

Body:

Due date is optional

{
  "name": "task one",
  "description": "description of the first task",
  "due_date": "2018-12-08"
}
Successful Response
{
  "id": 1,
  "name": "task_uno",
  "description": "description of the first task",
  "completed": "false",
  "due_date": "2018-12-08"
}
Unsuccessful Response

A valid client and list ID must be provided otherwise a 404 status code (page not found) will be returned.

List Tasks Index

Send a GET request to get all tasks associated with a clients list

get /api/v1/clients/:client_id/lists/:list_id/tasks

Headers:
Content-Type: application/json
Accept: application/json
Successful Response
[
{"id":83,
  "name":"Coriander Seed",
  "description":"3 gallon",
  "completed":false,
  "list_id":349,
  "created_at":"2019-09-06T04:43:25.260Z",
  "updated_at":"2019-09-06T04:43:25.260Z",
  "due_date":"2019-09-17T00:00:00.000Z"},
 {"id":84,
  "name":"Mung Beans",
  "description":"3 gallon",
  "completed":false,
  "list_id":349,
  "created_at":"2019-09-06T04:43:25.262Z",
  "updated_at":"2019-09-06T04:43:25.262Z",
  "due_date":"2019-09-07T00:00:00.000Z"},
 {"id":85,
  "name":"Sweet Potato",
  "description":"1 gallon",
  "completed":false,
  "list_id":349,
  "created_at":"2019-09-06T04:43:25.263Z",
  "updated_at":"2019-09-06T04:43:25.263Z",
  "due_date":"2019-09-24T00:00:00.000Z"}
]
Unsuccessful Response

A valid client and list ID must be provided otherwise a 404 status code (page not found) will be returned.

List Tasks Update

Send a PATCH request to update a task

patch /api/v1/clients/:client_id/lists/:list_id/tasks/:task_id

Headers:
Content-Type: application/json
Accept: application/json
Body:
{
  name: "updated name"
}
Successful Response
{
  "id": 1,
  "name": "updated name",
  "description": "description of the first task",
  "completed": "false",
  "due_date": "date_time"
}
Unsuccessful Response

A valid client, list, and task ID must be provided otherwise a 404 status code (page not found) will be returned.

List Tasks Deletion

Send a DELTE request to delete a task

delete /api/v1/clients/:client_id/lists/:list_id/tasks/:task_id

Successful Response

Will return a 204 status code with no body.

Unsuccessful Response

A valid client, list, and task ID must be provided otherwise a 404 status code (page not found) will be returned.


Caretaker Endpoints

Single Caretaker:

Caretaker Profile

Send a GET request to receive all information related to a single caretaker

GET /api/v1/caretakers/:id

Successful Response
{
  "id": "1",
  "username": "katierulz",
  "name": "Katie",
  "email": "[email protected]",
  "phone_number": "1235551234",
  "abilities": "ability_1",
  "role": "caretaker",
  "created_at": "DateTime",
  "updated_at": "DateTime"
}
Unsuccessful Response

A valid caretaker ID must be provided otherwise a 404 status code (page not found) will be returned.

Caretaker Creation:

Send a POST request to create a caretaker

POST /api/v1/caretakers/:id

headers:
Content-Type: application/json
Accept: application/json

body:

MUST have password AND password confirmation and they must match

{
    "username": "string-required",
    "name": "string-required",
    "password": "password",
    "password_confirmation": "password",
    "email": "string-required",
    "phone_number": "string-required",
    "abilities": "ability_1",
    "role": "caretaker"
}
Successful Response
{
  "id": "1",
  "username": "katierulz",
  "name": "Katie",
  "email": "[email protected]",
  "phone_number": "1235551234",
  "abilities": "ability_1",
  "role": "caretaker",
  "created_at": "DateTime",
  "updated_at": "DateTime"
}

Unsuccessful Responses:

Username Taken:
{
  "message": ["Username has been taken"]
}
Email Taken:
{
  "message": ["Email has been taken"]
}
Unmatching Password:
{
  "password_confirmation": ["does not match password"]
}

Caretaker Update

Send a PATCH request to update a caretaker

PATCH /api/v1/caretakers/:id

headers:
Content-Type: application/json
Accept: application/json

body:

{
    "username": "updated_username",
    "name": "update_name",
    "email": "[email protected]",
    "phone_number": "updated_number",
    "abilities": "updated_ability_1"
}
Successful Response
{
  "id": "1",
  "username": "updated_username",
  "name": "update_name",
  "email": "[email protected]",
  "phone_number": "updated_number",
  "abilities": "updated_ability_1",
  "created_at": "DateTime",
  "updated_at": "DateTime"
}

Unsuccessful Responses:

Username Taken:
{
  "message": ["Username has been taken"]
}
Email Taken:
{
  "message": ["Email has been taken"]
}

Caretaker Deletion

Send a DELETE request to delete a caretaker

DELETE /api/v1/caretakers/:id

Successful Response:

will return a 204 status code with no body

Unsuccessful Response

A valid caretaker ID must be provided otherwise a 404 status code (page not found) will be returned.

Caretaker Lists

Caretaker List Show

Send a GET request to get a single list associated with a caretaker

get /api/v1/caretakers/:id/lists/:list_id/

Successful Response
{
    "id": 1,
    "name": "groceries",
    "client_id": 2,
    "caretaker_id": 4,
    "created_at": "2019-09-04T22:14:25.439Z",
    "updated_at": "2019-09-04T22:14:25.439Z"
}
Unsuccessful Response

A valid caretaker and list ID must be provided otherwise a 404 status code (page not found) will be returned.

Caretaker List Index

Send a GET request to get all the lists associated with a caretaker

get /api/v1/caretakers/:id/lists/

Successful Response
[
  {
    "id": 1,
    "name": "groceries",
    "client_id": 2,
    "caretaker_id": 4,
    "created_at": "2019-09-04T22:14:25.439Z",
    "updated_at": "2019-09-04T22:14:25.439Z"
  },
  {
    "id": 2,
    "name": "bills",
    "client_id": 2,
    "caretaker_id": 4,
    "created_at": "2019-09-04T22:14:25.439Z",
    "updated_at": "2019-09-04T22:14:25.439Z"
  }
]
Unsuccessful Response

A valid caretaker ID must be provided otherwise a 404 status code (page not found) will be returned.

Caretaker Tasks:

Caretaker Tasks Update

Send a PATCH request to update a task

patch /api/v1/caretakers/:id/lists/:list_id/tasks/:task_id

Headers:
Content-Type: application/json
Accept: application/json
Body:
{
  name: "updated name",
  completed: "true"
}
Successful Response
{
  "id": 1,
  "name": "updated name",
  "description": "description of the first task",
  "completed": "true",
  "due_date": "date_time"
}
Unsuccessful Response

A valid client, list, and task ID must be provided otherwise a 404 status code (page not found) will be returned.

Login

Send a POST request to get user id from username and password

post /api/v1/login

Headers:
Content-Type: application/json
Accept: application/json
Body:
{
  username: "testClient",
  password: "pass"
}
Successful Response

returns the user object who matches given username and password

{
  "id": "1",
  "username": "testClient",
  "name": "Katie",
  "street_address": "123 Test St",
  "city": "Denver",
  "state": "CO",
  "zip": "12345",
  "email": "[email protected]",
  "phone_number": "1235551234",
  "needs": ["groceries", "bills"],
  "medications": ["drug_1", "drug_2"],
  "diet_restrictions": ["vegetarian", "peanut-free"],
  "created_at": "DateTime",
  "updated_at": "DateTime"
}
Unsuccessful Response
Bad Username/Password:

Returns 400 and body:

  {
    "message": "Invalid Username/Password"
  }

Database Schema

sophia_db_schema

Challenges

Technicle Debt: This project has two types of users, a client and a caretaker. When planning our database architecture, we were more focused on implementing the client funcionality first. When we moved on to implementing the caretaker funcionality, we had to rearrange much of the existing routes and controllers to accomidate.

Successes

Testing: During the course of developing this project, we were consitently able to maintain 97% to 100% test coverage.

Extensions

We would eventually like to combine both the client and caretaker tables into one.

Developers

👤 Noah Flint, Vince Carollo, Katie Lewis, Andreea Hanson

Frontend Repo

Production

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 93.5%
  • HTML 4.9%
  • Other 1.6%