docker-compose up -d
go build . && ./backend
docker-compose up -d
# start backend with test configuration
go test ./... -tags ci
# start mongodb container containing test db
docker-compose -f systest/docker-compose.yml up -d
# start backend with test configuration
go build && ./backend -config <test_config_path>
go test ./systest/... -config <test_config_path>
Song = {
"id": "7unF2ARDGldwWxZWCmlwDM",
"name": "A Love Supreme, Pt. II - Resolution",
"artists": ["list", "of", "artists"],
"duration_ms": 1337,
"cover_url": "https://i.scdn.co/image/ab67616d0000b2737fe4eca2f931b806a9c9a9dc",
"album_name": "A Love Supreme",
"preview_url": "url to 30 second song preview",
"suggested_by": "anton",
"score": 3,
"time_added": "time string",
"upvoters": ["omar", "cybotter", "anton"],
"downvoters": []
}
User = {
"id": "omar@sessionID",
"username": "omar",
"secret": "secret",
"session_id": "128 character random alphanumerical string",
"is_admin": nope, //bool
"score": 9001,
"spotify_authorized": true,
}
UserListElement = {
"username": "omar",
"is_admin": false,
"score": 9001
}
POST /users/join/{username}/session/{sessionID}
- response:
{"user_info": User, "auth_url": "spotify authorization url"}
- errors:
[SessionNotFoundError, UserConflictError, InternalServerError]
POST /users/{username}/ping
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response:
{"message": "pong"}
- errors:
[InternalServerError]
GET /users/{username}/list
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response:
[UserListElement]
- errors:
[InternalServerError]
POST /users/{username}/suggest/{song_id}
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response:
Song
- errors:
[InternalServerError]
POST /users/{username}/vote/{song_id}/up
POST /users/{username}/vote/{song_id}/down
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response:
[Song]
- errors:
[BadVoteError, InternalServerError]
GET /users/{username}/listSongs
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response:
[Song]
- errors:
[InternalServerError]
GET /users/{username}/clientToken
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response
{"access_token": "...", "token_type": "...", "expiry": Time
} - errors:
[InternalServerError]
GET /users/{username}/authToken
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response
{"access_token": "...", "token_type": "...", "expiry": Time
} - errors:
[RequestNotAuthorized, SpotifyNotAuthenticated, InternalServerError]
POST /admin/{username}/createSession
- response:
{"user_info": User, "auth_url": "spotify authorization url"}
- errors:
[SessionConflictError, UserConflictError, InternalServerError]
DELETE /users/{username}/removeSong/{song_id}
- headers:
{"Authorization": <secret>, "Session": <sessionID>}
- response:
[Song]
- errors:
[SessionConflictError, SongNotFoundError, InternalServerError]
GET /events/{username}/{session_id}
- response:
event stream
GET /ping