An API that allows you to create and share lists
docker-compose up --build
This creates a NodeJS container, with NestJS installed and a DynamoDB container.
When the containers have started, create the local DynamoDB table:
docker exec -it lists nodejs create-table.js
Deployment uses serverless. Following their documentation, ensure .aws/credentials
has your AWS credentials and then run:
docker exec -it lists npm run deploy:prod
docker exec -it lists npm run test
docker exec -it lists npm run test:e2e
primary (pk) | secondary (sk) | item | ttl | bought_by | name | uuid |
---|---|---|---|---|---|---|
{user-email} | ListId | {timestamp} | {listid*} | |||
{userid} | Name | |||||
{userid} | ListId | {timestamp} | ||||
{userid} | ListItem{itemuid} | {description} | {timestamp} | {buyer-useruid} | ||
{userid}_favourites | {listuid*} |
New:
TODO how to store user id --> lists and list id -> list metadata (e.g. name)
primary (pk) | secondary (sk) | item | ttl | bought_by | name | uuid |
---|---|---|---|---|---|---|
user:{user-email} | UserId | {useruuid} | ||||
list:{listuuid} | owner:{owner-uuid} | {listuuid} | ||||
list:{listuuid} | item:{itemuid} | {description} | {timestamp} | {buyer-useruid} | ||
favouritelists:{userid} | {listuuid} |
* currently listid is synonymous with user id
Authentication is handled through Auth0. Either through username/password or gmail account. In either case the token from Auth0 is passed in the Authorization
header as Bearer <token>
.
The token is validated using the shared secret key (see AUTH0_SECRET
in config/secrets). The authenticated user's email is contained in the attribute
https://xmas.c7e.uk/email
.
some, or all of these, as required.
AWS_REGION=local AWS_ACCESS_KEY_ID=foo AWS_SECRET_ACCESS_KEY=bar dynamodb-admin
curl localhost:3001/list/health
LIST_ID=$(curl -s localhost:3001/list | jq -r .[0].uuid)
curl localhost:3001/list-item/$LIST_ID | jq
curl -X POST -H "Content-Type: application/json" -d '{"description": "foo"}' localhost:3001/list-item/$LIST_ID
curl -X POST -H "Content-Type: application/json" -d '{"description": "bar"}' localhost:3001/list-item/$LIST_ID
ITEM_ID=$(curl -s localhost:3001/list-item/$LIST_ID | jq -r .items[0].id) curl -X DELETE localhost:3001/list-item/$LIST_ID/$ITEM_ID
TODO- this overrides owner curl -X PUT -H "Content-Type: application/json" -d '{"name": "my new list"}' localhost:3001/list-item/$LIST_ID/
curl localhost:3001/list-item/$LIST_ID | jq
ITEM_ID=$(curl -s localhost:3001/list-item/$LIST_ID | jq -r .items[0].id) curl -X POST -H "Content-Type: application/json" localhost:3001/mark-item/$LIST_ID/$ITEM_ID
curl -X DELETE -H "Content-Type: application/json" localhost:3001/mark-item/$LIST_ID/$ITEM_ID
curl localhost:3001/list-item/g0qi6zt0 | jq
TODO
- Delete favourited list when list is deleted
- Delete items from list when list is deletd