The goal is to be able to have multiple varying implementations of the Allocator interface in the future with the user being able to select any given algorithm and even configuration. Hence a Factory for Allocator needs to be built.
Currently the domain has an Allocator that expects a sequence of TimeSlot, but lacks a mechanism to find empty time slots from a sequence Schedule or Event objects.
Expected Outcome
Given a sequence of Event or Schedule objects, and a valid working hours TimeSlot, this new service should be able to find any free or empty slots between these events.
In case no free slots are available in between the given list of Schedule or Event objects, it should return the earliest available TimeSlot after all of them.
Create a full fledged implementation of the Allocator interface that would take into account Task estimate, deadline and priority and uses the 80-20 principle to allocate the tasks.
Requirements
Tasks with extremely low estimates should be allocated first.
Tasks with same estimates should be allocated based on priority such that a task with higher priority gets precedence.
Tasks with deadline should get highest precedence. Given two tasks, if one has a nearer deadline, it should get allocated first.
Currently the domain model is devoid of any representation of regular calendar events which may or may not have associated tasks, for example appointments.
The current domain model lacks any ownership information or mechanism. In a multiuser system, a sense of ownership for all business aggregates is essential.
Expected Outcome
All Domain aggregates such as Task and Schedule are attributed with ownership information.
Future scenarios such as sharing of certain aggregates are taken into consideration in the ownership model.
Because the current SimpleFirstFit algorithm only checks if a task fits a slot before trying to create a schedule, but the Schedule.createSchedule method validates with the deadline field as well.