- Install ruby-2.7.2
You will have to install this specific version. To do so, use whatever ruby version manager you want (both rvm and rbenv will work). If you run into any issues finding this version, make sure
ruby-builder
is up to date.
- On Ubuntu 20.04, you can follow the rbenv tutorial up to, but not including Step 3.
- Install the dependencies. Installation is OS dependent. You can use
brew
if using a MacOS. On Ubuntu you can usesudo apt-get install.
- Node
- Yarn
- Postgres
- Redis
Yarn:
curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
Postgres:
- Install
postgresql-contrib
andlibpq-dev
along withpostgresql
, see tutorial.Redis:
- Install
redis-server
- Edit the
supervised
directive tosystemd
, see tutorial. Follow the tutorial to the end of step 3, don't set a redis password.
- Create a new user with the password see
config/database.yml
.- Open the postgres console
psql postgres
- Check all your users and roles using the
\du;
postgres command - If you don't have a user you can create one by using the postgres command
CREATE USER new_user with PASSWORD 'your_super_secret_password';
- Create the role and password for the app using
CREATE ROLE nbjc_app LOGIN SUPERUSER PASSWORD 'YOUR_PASSWORD_HERE';
- Open the postgres console
❗ NOTE: You will have to then upde
config/local_env.yml.example
file with the password used for the rolenbjc_app
in the last step, otherwise it will think your database password is literally 'password' as that is the assumed default password inconfig/database.yml
-
Start the services.
If you installed these with
brew
, you can start them withbrew services start <SERVICE>
. If you're using Ubuntu, you can check the status of these services with thesudo systemctl status <SERVICE_NAME>
bash command.- Postgres
- Redis
-
Install gems with
bundle install
- Make sure the dependencies listed above are installed first to avoid errors when running
bundle install
- Make sure the dependencies listed above are installed first to avoid errors when running
-
Check your local env setup with
config/local_env.yml.example
- Copy
config/local_env.yml.example
toconfig/local_env.yml
- Update
config/local_env.yml
with correct variables
- Copy
-
Get the database up and running:
rake db:create
- You may need to rename
config/local_env.yml.example
toconfig/local_env.yml
- You may need to uncomment the line
NBJC_APP_DATABASE_PASSWORD:
and set the password to the one used when creating thenbjc_app
role
- You may need to rename
-
Get the schema setup:
rake db:migrate
Note: if you make a change in a migration file that has not been committed and do not see the change reflected in the schema run
rake db:rollback
and rerun the migration.
- Seed the database"
rake db:seed
If you need to drop the database and reseed use
rake db:reset
- Start the app:
rails s
- All CSV files under
db/seed_data/
will automatically be used to seed the DB - To add seeding data for a new table, create a new file under the mentioned directory that matches the table name
- All CSV files in the directory must contain a header row and columns matching (at least) all required fields
- See
db/seed_data/languages.csv
(which will seed thelanguages
table) for an example
- To get a full list of available routes check
rails routes
- Filtered by indicators with id 1 and 2 (ATM and ASL): api/v1/spaces?price=3&search=bakery
- A single space's details: api/v1/space/1
- All indicators: api/v1/indicators
- If you need to remove a model, first migrate down the relevant version
rails db:migrate:down VERSION=<NUMBER>
- Then destroy the model
rails destroy model <MODEL_NAME>
Endpoint | Description | Payload (JSON) | Example Resonse |
POST /api/v1/spaces |
Create a new space, for a list of the fields and their types, refer to the schema and descriptions [here][schema-sheet] |
{
"space": {
"provider_urn": "yelp:bxU7CnSO9cFhq_1tQyX40A",
"provider_url": "https://www.yelp.com/biz/name",
"name": "787 Coffee",
"price_level": 2,
"address_attributes": {
"address_1": "131 E 7th St",
"address_2": "",
"city": "New York",
"postal_code": "10009",
"country": "US",
"state": "NY"
},
"languages_attributes": [
{
"name": "Polish"
}
],
"indicators_attributes": [
{
"id": 2
}
],
"photos_attributes": [
{
"url": "https://s3-media2.fl.yelpcdn.com/photo.jpg",
"cover": true
}
],
"reviews_attributes": [
{
"anonymous": true,
"vibe_check": 3,
"rating": 4,
"content": "This is a great place."
}
],
"phone": "+16466492774",
"hours_of_op": {
"open": [
{
"is_overnight": false,
"start": "0800",
"end": "1500",
"day": 0
}
]
}
}
}
|
201 success |
GET /api/v1/spaces/:space_id |
Get a space's details | Includes all possible fields | See the mock response for a fake space /spaces/1 |
GET /api/vi/spaces?search=terms and filtering |
Get all spaces with the search terms in their names | The search terms should be the values for the "search" key, the price between 1-4 and the indicators should be an array of indicator ids.
{
"search": "bakery",
"filtering": {
"price": 2,
"indicators": [1, 2]
}
}
|
See this the mock for api/v1/spaces?price=3&search=bakery |
PUT /api/v1/spaces/:space_id | Update a space's details | See the POST route for available fields for update | 202 Success |
DELETE /api/v1/spaces/:space_id | Deletes a space | Only admins will be able to delete a space | 204 Success |
Diagram for login here
- To get a bearer token for testing, login to the auth0 dashboard, navigate to the nbjc-app API and on the testing tab follow the instructions.
rspec
You can find the build pipeline in the circleci dashboard. Reach out in Slack for the pipeline link. Deployments only happen for tagged versions. See the circleci config in the .circleci
folder.
- See the tagging guidelines here
- A PR can only be merged when both build and test circleci jobs pass.
Diagram for login here
- To get a bearer token for testing, login to the auth0 dashboard, navigate to the nbjc-app API and on the testing tab follow the instructions.