Developer guide
Setup a dev environment
Bellow are the steps to create a dev environment. Examples bellow will use Endurain repo, but you should adapt those for your scenario (forked repo, etc).
- Clone the repo to your dev machine:
$ cd <folder_to_store_code>
$ git clone https://github.com/joaovitoriasilva/endurain.git # this will clone the repo structure to the previous folder inside a folder called endurain
Docker image and backend logic
Make sure Docker is installed, more info here.
- On the project root folder, create a new Docker image, the example bellow uses
unified-image
as the image name:
$ docker build -f docker/Dockerfile -t unified-image .
- Go to the project root folder and create a file called
docker-compose.yml
and adapt it to your needs. Example bellow:
services:
endurain:
container_name: endurain
image: unified-image # based on image that will be created above
environment:
- TZ=Europe/Lisbon # change if needed. Default is UTC
- DB_TYPE=postgres
- DB_HOST=postgres
- DB_PORT=5432
- DB_PASSWORD=changeme
- SECRET_KEY=changeme
- GEOCODES_MAPS_API=changeme
- ENDURAIN_HOST=http://localhost:8080 # change if needed
- BEHIND_PROXY=false
volumes:
- <path_to_project_root_folder>/backend/app:/app/backend/ # this will replace the backend code logic with yours. Any changes in the code need a container reboot for them to apply
ports:
- "8080:8080" # change if needed
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
postgres:
image: postgres:latest
container_name: postgres
environment:
- POSTGRES_PASSWORD=changeme
- POSTGRES_DB=endurain
- POSTGRES_USER=endurain
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U endurain"]
interval: 5s
timeout: 5s
retries: 5
volumes:
- <path_to_container_folders>/postgres:/var/lib/postgresql/data
restart: unless-stopped
adminer:
container_name: adminer
image: adminer
ports:
- 8081:8080
restart: unless-stopped
- Start your project based on the docker compose file created before:
$ docker compose up -d
- To stop the project:
$ docker compose down
- To remove the create
unified-image
Docker image:
$ docker image remove unified-image
- Backend uses Poetry for dependency management. You may need to install Python and Poetry if dependency management is necessary.
Frontend
Make sure you have an up-to-date version of Node.js installed.
- Go to the root of the project and move to frontend/app folder and install the dependencies:
$ cd frontend/app
$ npm install
- Create a file called
.env.local
inside frontend/app and add the following to it:
VITE_ENDURAIN_HOST=http://localhost:8080 # Adapt this based on the docker compose of your dev environment
VITE_STRAVA_CLIENT_ID=MY_APP_STRAVA_CLIENT_ID
- After the dependencies are installed run the frontend:
$ npm run dev
- After the frontend starts running, it should be available in the port
5173
. You should now be able to access the dev environment athttp://localhost:5173
. Screenshot bellow shows the output from thenpm run dev
. Adapt the port based on the command output.
- Some processes, like token refresh may redirect your dev env from port
5173
to8080
(or other, depending on your compose file). If this happens simply navigate again to5173
.
API Integration (v0.3.0+)
Endurain supports integration with other apps:
API Requirements
- Add a header: Every request must include an
X-Client-Type
header with eitherweb
ormobile
as the value. Requests with other values will receive a403
error. - Authorization: Every request must include an
Authorization Bearer: <access token>
header with a valid (new or refreshed) access token.
Token Handling
- The backend will generate an
access_token
valid for 15 minutes and anrefresh_token
valid for 7 days. This follow the logic of short and longed lived tokens for auth session. - The
access_token
is used for authorization; Therefresh_token
is used to refresh theaccess_token
. - For web apps, the backend sends access/refresh tokens as HTTP-only cookies.
- For mobile apps, tokens are included in the response body.
API Endpoints
The API is reachable under /api/v1
. Below are some example endpoints. All endpoints information can be checked on the backend docs (http://localhost:98/docs
or http://ip_address:98/docs
or https://domain/docs
):
What | Url | Expected Information |
---|---|---|
Authorize | /token |
FORM with the fields username and password . This will be sent in clear text, use of HTTPS is highly recommended |
Refresh Token | /refresh |
header Authorization Bearer: <Refresh Token> |
Activity Upload | /activities/create/upload |
.gpx or .fit file |
Set Weight | /health/weight |
JSON {'weight': yyyy-MM-dd } |
Supported activity types
The table bellow details the activity types supported by Endurain:
Name | Value |
---|---|
Run | 1 |
Trail run | 2 |
Virtual run | 3 |
Road cycling | 4 |
Gravel cycling | 5 |
MTB cycling | 6 |
Virtual cycling | 7 |
Indoor swimming | 8 |
Open water swimming | 9 |
General workout | 10 |
Walk | 11 |
Hike | 12 |
Rowing | 13 |
Yoga | 14 |
Alpine ski | 15 |
Nordic Ski | 16 |
Snowboard | 17 |
Supported gear types
The table bellow details the gear types supported by Endurain:
Name | Value |
---|---|
Bike | 1 |
Shoes | 2 |
Wetsuit | 3 |