From ee5d4090d7a8e923d4303cf0e42f647076324877 Mon Sep 17 00:00:00 2001 From: 0x1eef <0x1eef@protonmail.com> Date: Thu, 23 May 2024 18:18:36 -0300 Subject: [PATCH] Add Twenty::Milestone --- .../twenty/server/migration/4_add_milestones.rb | 17 +++++++++++++++++ .../server/migration/5_add_tasks_milestones.rb | 17 +++++++++++++++++ server/lib/twenty/server/model.rb | 1 + server/lib/twenty/server/model/milestone.rb | 10 ++++++++++ server/lib/twenty/server/model/task.rb | 4 ++++ 5 files changed, 49 insertions(+) create mode 100644 server/lib/twenty/server/migration/4_add_milestones.rb create mode 100644 server/lib/twenty/server/migration/5_add_tasks_milestones.rb create mode 100644 server/lib/twenty/server/model/milestone.rb diff --git a/server/lib/twenty/server/migration/4_add_milestones.rb b/server/lib/twenty/server/migration/4_add_milestones.rb new file mode 100644 index 0000000..0d469ba --- /dev/null +++ b/server/lib/twenty/server/migration/4_add_milestones.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +Sequel.migration do + up do + create_table(:milestones) do + primary_key :id + String :name, null: false + Date :due_date, null: true + DateTime :created_at, null: false + DateTime :updated_at, null: false + end + end + + down do + drop_table :milestones + end +end diff --git a/server/lib/twenty/server/migration/5_add_tasks_milestones.rb b/server/lib/twenty/server/migration/5_add_tasks_milestones.rb new file mode 100644 index 0000000..8454bdc --- /dev/null +++ b/server/lib/twenty/server/migration/5_add_tasks_milestones.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +Sequel.migration do + up do + create_table(:tasks_milestones) do + primary_key :id + Integer :task_id, null: false + Integer :milestone_id, null: false + DateTime :created_at, null: false + DateTime :updated_at, null: false + end + end + + down do + drop_table :tasks_milestones + end +end diff --git a/server/lib/twenty/server/model.rb b/server/lib/twenty/server/model.rb index 2b20431..b6415ce 100644 --- a/server/lib/twenty/server/model.rb +++ b/server/lib/twenty/server/model.rb @@ -8,4 +8,5 @@ module Twenty::Model require_relative "model/project" require_relative "model/task" + require_relative "model/milestone" end diff --git a/server/lib/twenty/server/model/milestone.rb b/server/lib/twenty/server/model/milestone.rb new file mode 100644 index 0000000..a5c45e8 --- /dev/null +++ b/server/lib/twenty/server/model/milestone.rb @@ -0,0 +1,10 @@ +module Twenty + class Milestone < Sequel::Model + include Model + validates_presence_of :name + + many_to_many :tasks, + class_name: "Twenty::Task", + join_table: :tasks_milestones + end +end diff --git a/server/lib/twenty/server/model/task.rb b/server/lib/twenty/server/model/task.rb index e8748b8..15667fc 100644 --- a/server/lib/twenty/server/model/task.rb +++ b/server/lib/twenty/server/model/task.rb @@ -20,7 +20,11 @@ class Twenty::Task < Sequel::Model validates_presence_of :content validates_presence_of :project validates_inclusion_of :status, in: [STATUS_KEYS, *STATUS_KEYS.map(&:to_s)] + many_to_one :project, class_name: "Twenty::Project" + many_to_many :milestones, + class_name: "Twenty::Milestone", + join_table: :tasks_milestones def status=(v) super(v.to_sym)