Wishlist App for the adidas code challenge.
make app-run
will also run the API as docker dependency, the API will listen in port 8085, and the react app on port 3000 open http://localhost:3000/ to test.
make frontend-tests
requires docker and docker-compose.
make api-run
You can access the swagger ui by openning this URL: http://localhost:8085/ui/
requires brew
and python 3.6
brew install pipenv
cd api
pipenv shell
pipenv install
./app.py
make api-lint
make api-utests
make api-itests
make api-build
A hosted version is also available an deployed here: TBD
I've started first to draw project mookups, this is the first step in order to validate the feature with differents users.
The application provides two screens
- As an adidas user I can search any product
- As an adidas user I can add a specific product to my wishlist
- As an adidas user I can list my wishlist
- As an adidas user I can delete a product from my wishlist
- (Optional) As an adidas user I can clear my wishlist
Once the mookups are defined, I started to define the REST API by writing the swagger V2 specification.
The swagger is available at api/swagger.yaml
and hosted as well in swaggerhub https://app.swaggerhub.com/apis-docs/koukama/Wishlist/1.0.0#/Wishlist
This approch allow :
- Parallel developement of the client and the backend.
- Quick Validation the API with the clients.
In order the speedup and to provide the first MVP, i decided to go for connexion which is a Swagger/OpenAPI First framework for Python on top of Flask with automatic endpoint validation.
One of the feature I like with this framework is the provided Web Swagger Console UI so that the users of the API can have live documentation and even call API's endpoints through it.
This step can be done in parallel with Step 3 thanks the the API prototype.
To build the frontend I used React, and build the MVP withcreate-react-app
cli tool.
Some basic tests are also available and written using Jest as a test runner and Enzyme.
- Mookups
- API description in swagger
- Basic API implementation
- Dockerization of the API
- Makefile
- Tests for the API including unit and integration
- Front end with React
- Basic CSS with bootstrap
- Documentation
- Add pagination to the wishlist page
- Login implementation
- Add Redux
- CSS improvements
- DB storage for the API
- Push image to docker registry after the build
- CI/CD implementation
- Deploy in the cloud