https://github.com/sealbro/sealway-strava
Strava API request caching server
https://github.com/sealbro/sealway-strava
graphql mongodb sports-stats strava
Last synced: 8 months ago
JSON representation
Strava API request caching server
- Host: GitHub
- URL: https://github.com/sealbro/sealway-strava
- Owner: sealbro
- Created: 2021-09-22T12:34:47.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-06-25T12:14:18.000Z (over 1 year ago)
- Last Synced: 2024-06-25T13:41:16.847Z (over 1 year ago)
- Topics: graphql, mongodb, sports-stats, strava
- Language: Go
- Homepage:
- Size: 282 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# sealway-strava
Caching request service to strava.
Entities cached/stored in mongodb and you can get them with graphQL
[](https://hub.docker.com/r/sealway/strava/)
[](https://hub.docker.com/r/sealway/strava/)```mermaid
sequenceDiagram
participant GraphQL
participant MongoDB
participant Strava API
GraphQL->>MongoDB: Mutation - addToken // store athlete refresh_token
GraphQL->>MongoDB: Mutation - reloadAthleteActivities (:athleteIds)
MongoDB->>Strava API: request GET activities with refresh_token
Strava API->>MongoDB: insert activities into mongodb
MongoDB->>GraphQL: Subscription - activities // send to subscribers
GraphQL->>MongoDB: Query - activity | activities (:athleteIds)
MongoDB->>GraphQL: get activities with specified fields
```## Environments
- `STRAVA_CLIENT` - strava client id
- `STRAVA_SECRET` - strava secret id
- `MONGO_CONNECTION` (localhost) - mongo connection string
- `ACTIVITY_BATCH_SIZE` (50) - max batch size, after which data is sent to subscribers
- `ACTIVITY_BATCH_TIME` (45s) - time after which data is sent to subscribers
- `SLUG` (integration-strava) - prefix for url path
- `PORT` (8080) - server port## API Endpoints
- GET `{SLUG}/healthz` - health check
- GET `{SLUG}/api/quota` - actual strava's request quota
- GET `{SLUG}/api/subscription` - used for registration strava [webhook](https://developers.strava.com/docs/webhooks/)
- POST `{SLUG}/api/subscription` - strava sends changes here
- GET `{SLUG}/graphql/` - graphQL playgroud
- [More](./interfaces/graph/schema.graphqls) about graphQL queries / mutations / subscriptions## Debug
- set environments
- `STRAVA_CLIENT`, `STRAVA_SECRET`, `MONGO_CONNECTION`
- localhost mongo `docker run -d --restart=always --name mongodb -p 27017:27017 mongo`
- local service `docker run -d --restart=always --name strava-graphql --network host -e STRAVA_CLIENT= -e STRAVA_SECRET= sealway/strava`
- strava api credentials [here](https://www.strava.com/settings/api)
- [graphql queries docs](https://graphql.org/learn/queries/)
- [timestamp converter](https://www.epochconverter.com/)## Generate something
- Generate strava client
- ```git clone https://github.com/swagger-api/swagger-codegen.git```
- ```cd ./swagger-codegen```
- for Windows in `./run-in-docker.sh` add `MSYS_NO_PATHCONV=1` before `docker run ...`
- ```./run-in-docker.sh generate --input-spec https://developers.strava.com/swagger/swagger.json --lang go --output /gen/go/```
- ```./run-in-docker.sh generate --input-spec https://developers.strava.com/swagger/swagger.json --lang openapi --output /gen/openapi/```
- Replace
- ```package swagger``` to ```package strava```
- ```(json:"([^,]+),)``` to ```bson:"$2" $1```
- Generate grahpql with strava models
- `cd ./graph`
- `go run github.com/99designs/gqlgen generate`
- Replace `model.` to `strava.` without mutations in `graph/generated/generated.go` and rollback `schema.resolvers.go`
- `strava.NewAthleteToken` => `model.NewAthleteToken`
- `strava.AthleteToken` => `model.AthleteToken`## Upgrade
- change go version in `go.mod`
- `go get -u all`## Problems
- graphql generate `[Type!]!` or `[Type!]` [here](https://github.com/graph-gophers/graphql-go/issues/78#issue-220709670)