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)