- added some basic classes
- updated php version in composer.json to 8.1, so I can use Enums
- removed the specific Fruit and Vegetable classes as they are not special from each other and the collections/models can be
already distinguished by the ProduceType - added same base tests for Model creation
- basic requirements should be done
- only simple tests, no tests for edge cases and wrong input
- todo: add the possibility to switch between kg/g for list()
- added support for unit switching
- Because of the time restrictions on my side I went for a really simple solution
- I expect only correct input and I don't have checks for wrong inputs and don't use any exception in my code.
- I don't test for wrong inputs and wrong behavior
- I didn't implement the search functionality
- I would probably get rid of the Interfaces (same way I got rid of AbstractClasses) as they don't have any real purpose here. The Produce and Collection types are already differentiated enough by the type, and they don't have any special functionality that would call for separate Interface/Abstract class (If I would really want to follow KISS and YAGNI principles here).
We want to build a service which will take a request.json
and:
- Process the file and create two separate collections for
Fruits
andVegetables
- Each collection has methods like
add()
,remove()
,list()
; - Units have to be stored as grams;
- As a bonus you might consider giving option to decide which units are returned (kilograms/grams);
- As a bonus you might consider how to implement
search()
method collections;
You have two ways of moving on:
- You call the Service from PHPUnit test like it's done in dummy test (just run
bin/phpunit
from the console)
or
- You create a Controller which will be calling the service with a json payload
- Keep KISS, DRY, YAGNI, SOLID principles in mind
- Timebox your work
- Your code should be tested
Optional. Just here if you want to run it isolated.
docker pull tturkowski/fruits-and-vegetables
docker build -t tturkowski/fruits-and-vegetables -f docker/Dockerfile .
docker run -it -w/app -v$(pwd):/app tturkowski/fruits-and-vegetables sh
docker run -it -w/app -v$(pwd):/app tturkowski/fruits-and-vegetables bin/phpunit
docker run -it -w/app -v$(pwd):/app -p8080:8080 tturkowski/fruits-and-vegetables php -S 0.0.0.0:8080 -t /app/public
# Open http://127.0.0.1:8080 in your browser