- Delegate responsibility of calculating overlapping shapes to the database to make use of the geometry datatype, and spatial indexing. However a basic square db could be build using logic from here: https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection
- In this case I have used an in-memory MariaDB implementation of MySQL, however in production I would prefer PostGis.
- Shape is described by the "well known text" geometry representation, this allows a single endpoint for "all shapes", and avoids implementing concrete classes for shapes, e.g. Square, Triangle etc.
- Only managed polygons, and needs work to get circles
- The ST_Overlaps(g1, g2) function does not detect the "same" shape - need to look into this
- The overlaps function can be "bypassed" by concurrent writes to the database
- Only had time to write "full integration" tests, normally would cover with unit tests, and appropriately scoped integration tests as well.
Requirements:
- Java 11
Note: ran out of time to Dockerize
Build:
./mvnw package
Run:
java -jar target/shapes-0.0.1-SNAPSHOT.jar
NOTE: Still need to wire up the db run with the application, rather than just in ShapesApplicationTests