From b5ca688d9cf4f8ed67ed616585be22ab29dc687c Mon Sep 17 00:00:00 2001 From: Davide Papagni Date: Tue, 6 Dec 2016 09:25:56 +0100 Subject: [PATCH] draft modeling for timestamped trackables #109 --- backend/app/models/checkin/condition.rb | 4 +++- backend/app/models/checkin/rating.rb | 7 +++++++ backend/app/models/checkin/symptom.rb | 4 +++- backend/app/models/checkin/taking.rb | 8 ++++++++ backend/app/models/checkin/timeable.rb | 9 +++++++++ backend/app/models/checkin/treatment.rb | 7 ++++++- 6 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 backend/app/models/checkin/rating.rb create mode 100644 backend/app/models/checkin/taking.rb create mode 100644 backend/app/models/checkin/timeable.rb diff --git a/backend/app/models/checkin/condition.rb b/backend/app/models/checkin/condition.rb index 361593ead..f8b3e3727 100644 --- a/backend/app/models/checkin/condition.rb +++ b/backend/app/models/checkin/condition.rb @@ -1,9 +1,11 @@ class Checkin::Condition include Mongoid::Document include Checkin::Trackable - include Checkin::Fiveable field :condition_id, type: Integer + has_many :ratings, class_name: 'Checkin::Rating', as: :trackable + # TODO: use accepts_nested_attributes_for :ratings ? + validates :condition_id, uniqueness: { scope: :checkin_id } end diff --git a/backend/app/models/checkin/rating.rb b/backend/app/models/checkin/rating.rb new file mode 100644 index 000000000..4d50b1e4b --- /dev/null +++ b/backend/app/models/checkin/rating.rb @@ -0,0 +1,7 @@ +class Checkin::Rating + include Mongoid::Document + include Checkin::Timeable + include Checkin::Fiveable + + belongs_to :trackable, polymorphic: true +end diff --git a/backend/app/models/checkin/symptom.rb b/backend/app/models/checkin/symptom.rb index bec162916..083743aa5 100644 --- a/backend/app/models/checkin/symptom.rb +++ b/backend/app/models/checkin/symptom.rb @@ -1,9 +1,11 @@ class Checkin::Symptom include Mongoid::Document include Checkin::Trackable - include Checkin::Fiveable field :symptom_id, type: Integer + has_many :ratings, class_name: 'Checkin::Rating', as: :trackable + # TODO: use accepts_nested_attributes_for :ratings ? + validates :symptom_id, uniqueness: { scope: :checkin_id } end diff --git a/backend/app/models/checkin/taking.rb b/backend/app/models/checkin/taking.rb new file mode 100644 index 000000000..f8eca773f --- /dev/null +++ b/backend/app/models/checkin/taking.rb @@ -0,0 +1,8 @@ +class Checkin::Taking + include Mongoid::Document + include Checkin::Timeable + + field :dose, type: String + + belongs_to :treatment, class_name: 'Checkin::Treatment', index: true +end diff --git a/backend/app/models/checkin/timeable.rb b/backend/app/models/checkin/timeable.rb new file mode 100644 index 000000000..56e6f1c1b --- /dev/null +++ b/backend/app/models/checkin/timeable.rb @@ -0,0 +1,9 @@ +module Checkin::Timeable + extend ActiveSupport::Concern + + included do + field :time_of_day, type: Integer # minutes from 00:00 + validates :time_of_day, inclusion: { in: (0..1440) }, if: 'time_of_day.present?' + end + +end diff --git a/backend/app/models/checkin/treatment.rb b/backend/app/models/checkin/treatment.rb index d5be5a595..9fdda1cb8 100644 --- a/backend/app/models/checkin/treatment.rb +++ b/backend/app/models/checkin/treatment.rb @@ -6,9 +6,14 @@ class Checkin::Treatment # Fields # field :treatment_id, type: Integer - field :value, type: String field :is_taken, type: Boolean + # + # Relations + # + has_many :takings, class_name: 'Checkin::Taking' + # TODO: use accepts_nested_attributes_for :takings ? + # # Indexes #