Question on working with dates and recurring tasks

Hello everyone! I’ve started working on a new project for a client where I have complete freedom as to how to design the system and which technologies to use. Naturally, I selected Elixir/Phoenix for the backend but I’ve been struggling trying to translate the requirements into a functioning system.

The gist of it is that a client may pay for a service or pay for a subscription (this is an in-person service that’s being provided). Essentially, I need to save each user’s preferences and reschedule appointments based on that, each month (maybe?) but every solution I can think of seems to come with its own set of drawbacks (as it often does…).

Each user can pay in advance up to 3 months, and select which days of the week/month they want to schedule the service in (e.g. 3 days a week, 2 days a month, etc.). The way I’ve been thinking about solving this is to have a recurring task each month which does the following:
Iterate over the active users |> Check if they need to be assigned that month (because not everyone will register the same month and subscription lengths vary) |> Create appointments based on their preferences.

Planning on running this a few days before the end of the month at very early hours. This would allow for users to ensure they’ll be getting service at least during the month that they’ve paid for in advance, while letting non-subscription users to schedule an appointment.

I don’t think this is a trivial issue, working with dates and recurring tasks, but I’m also thinking that it shouldn’t be that hard. I’m worried that I’m either reinventing the wheel or overthinking/engineering this, so I’m looking for any advice, libraries or design patterns that I should be looking at.

1 Like