Special operations on the database every single month

Hi guys! I do have a database structure denoted like that:

  schema "users" do
    field :april, :integer
    field :august, :integer
    field :december, :integer
    field :february, :integer
    field :january, :integer
    field :july, :integer
    field :june, :integer
    field :march, :integer
    field :may, :integer
    field :name, :string
    field :november, :integer
    field :october, :integer
    field :points, :integer
    field :role, :string
    field :september, :integer
    field :surname, :string
  end

And I would like to clear one column every single month, for each user. This column is :points. By clear I mean set up value 0. By default the :points value is set up to 0.
I would like also to update each month every column in range :January - :December to value 50, which is set up also by default.

I know how to get a month from the date, but how could I by every single month restore to default values those columns? here is my migration file:

    create table(:users) do
      add :name, :string
      add :surname, :string
      add :role, :string
      add :points, :integer, default: 0
      add :january, :integer, default: 50
      add :february, :integer, default: 50
      add :march, :integer, default: 50
      add :april, :integer, default: 50
      add :may, :integer, default: 50
      add :june, :integer, default: 50
      add :july, :integer, default: 50
      add :august, :integer, default: 50
      add :september, :integer, default: 50
      add :october, :integer, default: 50
      add :november, :integer, default: 50
      add :december, :integer, default: 50
    end

A job library like Oban can schedule it for you.

3 Likes

I’d use a different design, that uses another table for the scores, one row per player/month.

1 Like

@NobbZ is right. Future you will be grateful for having historical data.

Otherwise I find Quantum way easier to deal with than Oban.