Our mission at Helplist is to harness the power of crowdsourcing to alleviate the burden for survivors as they rebuild their lives. We aim to make providing resources easy and accessible to anyone utilizing our partner orginazations, empowering everyday people to make a meaningful impact.
- HelpList allows victims of domestic violence in collaboration with an organization to create personalized wishlist's of needed items to post anonymously.
- Users can select a facility, select a wishlist, and purchase items from wishlists to be sent directly to the organization and survivors.
Navigate to desired directory
Run git@github.com:HelpListCrew/HelpListBE.git
Run cd HelpListBE
Run bundle
Run rails db:{create,migrate}
Run bundle exec rspec
- The database utilizes a self-referential table for
Users
to be identified as a eitherRecipient
orDonor
. Recipients
are associated with an organization by way ofOrganizationUsers
table.Recipients
createWishlistItems
records when adding Kroger API items on the frontendDonors
createDonorItems
records when purchasingRecipients' WishlistItems
on the frontend
POST: Authenticate User
Request:
POST /api/v1/users
Params:
Name | Requirement | Type | Description |
---|---|---|---|
email |
Required | string | User email |
uid |
Optional | string | Google Oauth2.0 identification |
password |
Optional | string | User password |
Note: Either uid
or password
are REQUIRED
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
401 |
{
"data": {
"id": "1",
"type": "user",
"attributes": {
"email": "example@example.com",
"user_type": "donor",
"username": "example_username"
}
}
}
GET: All Users
Request:
GET /api/v1/users
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
401 |
{
"data": [
{
"id": "1",
"type": "user",
"attributes": {
"email": "example@example.com",
"user_type": "donor",
"username": "example_username"
}
},
{
"id": "2",
"type": "user",
"attributes": {
"email": "example2@example2.com",
"user_type": "recipient",
"username": "example_username"
}
},
]
}
GET: Single User
Request:
GET /api/v1/users/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | User id |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
404 |
{
"data": {
"id": "1",
"type": "user",
"attributes": {
"email": "example@example.com",
"user_type": "donor",
"username": "example_username"
}
}
}
POST: Create User
Request:
POST /api/v1/users
Params:
Name | Requirement | Type | Description |
---|---|---|---|
email |
Required | string | User email |
password |
Required | string | User password |
username |
Optional | string | Username |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
400 |
{
"data": {
"id": "1",
"type": "user",
"attributes": {
"email": "example@example.com",
"user_type": "donor",
"username": "example_username"
}
}
}
DELETE: Destroy User
Request:
DELETE /api/v1/users
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | User id |
Response:
Result | Status |
---|---|
Success |
204 |
Failure |
404 |
PATCH: Update User
Request:
PATCH /api/v1/users/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | User id |
email |
Optional | string | User email |
user_type |
Optional | string | User type |
password |
Optional | string | User password |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
400 |
{
"data": {
"id": "1",
"type": "user",
"attributes": {
"email": "updated_example@example.com",
"user_type": "recipient",
"username": "example_username"
}
}
}
GET: All Wishlist Items
Request:
GET /api/v1/wishlist_items
Params:
Name | Requirement | Type | Description |
---|---|---|---|
user_id |
Optional | string | User id |
modifier |
Optional | string | unpurchased or donated |
Note: Must include user_id
when using modifier
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
401 |
{
"data": [
{
"id": "1",
"type": "wishlist_item",
"attributes": {
"api_item_id": "0004171623215",
"purchased": false,
"received": false,
"size": "12 ct / 1 oz",
"name": "Frigo® Cheese Heads® Original Mozzarella String Cheese",
"price": 5.99,
"image_path": "https://www.kroger.com/product/images/medium/front/0004171623215"
}
},
{
"id": "2",
"type": "wishlist_item",
"attributes": {
"api_item_id": "0000019400413",
"purchased": true,
"received": false,
"size": "1 ct",
"name": "Liberty Mountain 371118 Compact Tooth Brush",
"price": 1.99,
"image_path": "https://www.kroger.com/product/images/medium/front/0000019400413"
}
},
]
}
GET: Single Wishlist Item
Request:
GET /api/v1/wishlist_items/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | Wishlist Item id |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
404 |
{
"data":
{
"id": "1",
"type": "wishlist_item",
"attributes": {
"api_item_id": "0004171623215",
"purchased": false,
"received": false,
"size": "12 ct / 1 oz",
"name": "Frigo® Cheese Heads® Original Mozzarella String Cheese",
"price": 5.99,
"image_path": "https://www.kroger.com/product/images/medium/front/0004171623215"
}
},
}
POST: Create Wishlist Item
Request:
POST /api/v1/wishlist_items
Params:
Name | Requirement | Type | Description |
---|---|---|---|
api_item_id |
Required | string | Wishlist Item Kroger API Id |
size |
Required | string | Wishlist Item Size |
name |
Required | string | Wishlist Item Name |
price |
Required | string | Wishlist Item Price |
image_path |
Required | string | Wishlist Item Image URL |
purchased |
Optional | string | Wishlist Item has been purchased |
received |
Optional | string | Wishlist Item has been received |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
400 |
{
"data":
{
"id": "1",
"type": "wishlist_item",
"attributes": {
"api_item_id": "0004171623215",
"purchased": false,
"received": false,
"size": "12 ct / 1 oz",
"name": "Frigo® Cheese Heads® Original Mozzarella String Cheese",
"price": 5.99,
"image_path": "https://www.kroger.com/product/images/medium/front/0004171623215"
}
},
}
PATCH: Update Wishlist Item
Request:
PATCH /api/v1/wishlist_items/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
api_item_id |
Optional | string | Wishlist Item Kroger API Id |
size |
Optional | string | Wishlist Item Size |
name |
Optional | string | Wishlist Item Name |
price |
Optional | string | Wishlist Item Price |
image_path |
Optional | string | Wishlist Item Image URL |
purchased |
Optional | string | Wishlist Item has been purchased |
received |
Optional | string | Wishlist Item has been received |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
400 |
{
"data":
{
"id": "1",
"type": "wishlist_item",
"attributes": {
"api_item_id": "0004171623215",
"purchased": false,
"received": false,
"size": "12 ct / 1 oz",
"name": "Frigo® Cheese Heads® Original Mozzarella String Cheese",
"price": 5.99,
"image_path": "https://www.kroger.com/product/images/medium/front/0004171623215"
}
},
}
DELETE: Destroy Wishlist Item
Request:
DELETE /api/v1/wishlist_items/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | Wishlist Item id |
Response:
Result | Status |
---|---|
Success |
204 |
Failure |
404 |
GET: All Organizations
Request:
GET /api/v1/organizations
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
401 |
{
"data": [
{
"id": "1",
"type": "organization",
"attributes": {
"name": "Welch LLC",
"street_address": "1101 W. 7th Ave.",
"city": "Denver",
"state": "CO",
"zip_code": "80204",
"email": "cherlyn@dickinson-bode.test",
"phone_number": "1-855-077-9529 x349",
"website": "http://example.com/jake"
}
},
{
"id": "2",
"type": "organization",
"attributes": {
"name": "Robel, Dibbert and Windler",
"street_address": "3805 Marshall St.",
"city": "Wheat Ridge",
"state": "CO",
"zip_code": "80033",
"email": "werner_paucek@sporer.example",
"phone_number": "(712) 040-6128 x4872",
"website": "http://example.com/nelson.gerhold"
}
},
]
}
GET: Single Organization
Request:
GET /api/v1/organizations/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | Organization id |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
404 |
{
"data":
{
"id": "1",
"type": "organization",
"attributes": {
"name": "Welch LLC",
"street_address": "1101 W. 7th Ave.",
"city": "Denver",
"state": "CO",
"zip_code": "80204",
"email": "cherlyn@dickinson-bode.test",
"phone_number": "1-855-077-9529 x349",
"website": "http://example.com/jake"
}
},
}
POST: Create Organization
Request:
POST /api/v1/organizations
Params:
Name | Requirement | Type | Description |
---|---|---|---|
name |
Required | string | Organization name |
street_address |
Required | string | Organization street address |
city |
Required | string | Organization city |
state |
Required | string | Organization state |
zip_code |
Required | string | Organization zip code |
email |
Required | string | Organization email address |
phone_number |
Required | string | Organization phone number |
website |
Required | string | Organization website |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
400 |
{
"data":
{
"id": "1",
"type": "organization",
"attributes": {
"name": "Welch LLC",
"street_address": "1101 W. 7th Ave.",
"city": "Denver",
"state": "CO",
"zip_code": "80204",
"email": "cherlyn@dickinson-bode.test",
"phone_number": "1-855-077-9529 x349",
"website": "http://example.com/jake"
}
},
}
PATCH: Update Organization
Request:
PATCH /api/v1/organizations/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
name |
Optional | string | Organization name |
street_address |
Optional | string | Organization street address |
city |
Optional | string | Organization city |
state |
Optional | string | Organization state |
zip_code |
Optional | string | Organization zip code |
email |
Optional | string | Organization email address |
phone_number |
Optional | string | Organization phone number |
website |
Optional | string | Organization website |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
400 |
{
"data":
{
"id": "1",
"type": "organization",
"attributes": {
"name": "Welch LLC",
"street_address": "1101 W. 7th Ave.",
"city": "Denver",
"state": "CO",
"zip_code": "80204",
"email": "cherlyn@dickinson-bode.test",
"phone_number": "1-855-077-9529 x349",
"website": "http://example.com/jake"
}
},
}
DELETE: Destroy Organization
Request:
DELETE /api/v1/organizations/:id
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | Organization id |
Response:
Result | Status |
---|---|
Success |
204 |
Failure |
404 |
GET: All Users for Organization
Request:
GET /api/v1/organization/:id/users
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
401 |
Params:
Name | Requirement | Type | Description |
---|---|---|---|
id |
Required | string | Organization id |
{
"data": [
{
"id": "1",
"type": "user",
"attributes": {
"email": "example@example.com",
"user_type": "donor",
"username": "example_username"
}
},
{
"id": "2",
"type": "user",
"attributes": {
"email": "example2@example2.com",
"user_type": "recipient",
"username": "example_username"
}
},
]
}
GET: Search Organizations
Request:
GET /api/v1/organizations
Params:
Name | Requirement | Type | Description |
---|---|---|---|
address |
Required | string | User location address |
miles |
Required | string | Radius in miles from user location |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
400 |
{
"data": [
{
"id": "1",
"type": "organization",
"attributes": {
"name": "Welch LLC",
"street_address": "1101 W. 7th Ave.",
"city": "Denver",
"state": "CO",
"zip_code": "80204",
"email": "cherlyn@dickinson-bode.test",
"phone_number": "1-855-077-9529 x349",
"website": "http://example.com/jake"
}
},
{
"id": "2",
"type": "organization",
"attributes": {
"name": "Robel, Dibbert and Windler",
"street_address": "3805 Marshall St.",
"city": "Wheat Ridge",
"state": "CO",
"zip_code": "80033",
"email": "werner_paucek@sporer.example",
"phone_number": "(712) 040-6128 x4872",
"website": "http://example.com/nelson.gerhold"
}
},
]
}
GET: Search User
Request:
GET /api/v1/users
Params:
Name | Requirement | Type | Description |
---|---|---|---|
username |
Required | string | Username |
Response:
Result | Status |
---|---|
Success |
201 |
Failure |
404 |
{
"data": {
"id": "1",
"type": "user",
"attributes": {
"email": "example@example.com",
"user_type": "donor"
}
}
}
| Adam Baily Github | Andra Helton GitHub| Axel De La Guardia GitHub | Elle Majors GitHub | Jade Stewart GitHub |