summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorMarius Peter <marius.peter@tutanota.com>2025-08-24 20:29:54 +0200
committerMarius Peter <marius.peter@tutanota.com>2025-08-24 20:29:54 +0200
commit52b044d6a4278c229992404ad5801769c2d13363 (patch)
treeb30b34da58f26117c035391d09366b190350b1e3 /app/models
First commit.
Vive le Castel Peter !
Diffstat (limited to 'app/models')
-rw-r--r--app/models/application_record.rb3
-rw-r--r--app/models/bed.rb4
-rw-r--r--app/models/concerns/.keep0
-rw-r--r--app/models/crop.rb4
-rw-r--r--app/models/fertilizer_component.rb3
-rw-r--r--app/models/fertilizer_composition.rb6
-rw-r--r--app/models/fertilizer_product.rb7
-rw-r--r--app/models/nutrient.rb7
-rw-r--r--app/models/nutrient_measurement.rb4
-rw-r--r--app/models/raft.rb5
10 files changed, 43 insertions, 0 deletions
diff --git a/app/models/application_record.rb b/app/models/application_record.rb
new file mode 100644
index 0000000..b63caeb
--- /dev/null
+++ b/app/models/application_record.rb
@@ -0,0 +1,3 @@
+class ApplicationRecord < ActiveRecord::Base
+ primary_abstract_class
+end
diff --git a/app/models/bed.rb b/app/models/bed.rb
new file mode 100644
index 0000000..33eafd2
--- /dev/null
+++ b/app/models/bed.rb
@@ -0,0 +1,4 @@
+class Bed < ApplicationRecord
+ has_many :rafts, -> { order(:location) }, dependent: :destroy
+ validates :location, presence: true, uniqueness: true
+end
diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/app/models/concerns/.keep
diff --git a/app/models/crop.rb b/app/models/crop.rb
new file mode 100644
index 0000000..b0f168d
--- /dev/null
+++ b/app/models/crop.rb
@@ -0,0 +1,4 @@
+class Crop < ApplicationRecord
+ has_many :rafts
+ enum :crop_type, { leafy: 0, fruit: 1, herb: 2 }
+end
diff --git a/app/models/fertilizer_component.rb b/app/models/fertilizer_component.rb
new file mode 100644
index 0000000..701ae9b
--- /dev/null
+++ b/app/models/fertilizer_component.rb
@@ -0,0 +1,3 @@
+class FertilizerComponent < ApplicationRecord
+ validates :name, presence: true
+end
diff --git a/app/models/fertilizer_composition.rb b/app/models/fertilizer_composition.rb
new file mode 100644
index 0000000..cf2bb93
--- /dev/null
+++ b/app/models/fertilizer_composition.rb
@@ -0,0 +1,6 @@
+class FertilizerComposition < ApplicationRecord
+ belongs_to :fertilizer_product
+ belongs_to :fertilizer_component
+
+ validates :percent_w, numericality: { greater_than: 0, less_than_or_equal_to: 100 }
+end
diff --git a/app/models/fertilizer_product.rb b/app/models/fertilizer_product.rb
new file mode 100644
index 0000000..e41316b
--- /dev/null
+++ b/app/models/fertilizer_product.rb
@@ -0,0 +1,7 @@
+class FertilizerProduct < ApplicationRecord
+ has_many :fertilizer_compositions, dependent: :destroy
+ has_many :fertilizer_components, through: :fertilizer_compositions
+
+ validates :name, presence: true, uniqueness: true
+ validates :purity, numericality: { greater_than: 0, less_than_or_equal_to: 100 }
+end
diff --git a/app/models/nutrient.rb b/app/models/nutrient.rb
new file mode 100644
index 0000000..c584668
--- /dev/null
+++ b/app/models/nutrient.rb
@@ -0,0 +1,7 @@
+class Nutrient < ApplicationRecord
+ validates :formula, presence: true, uniqueness: true
+ validates :name, presence: true
+
+ before_update { raise ActiveRecord::ReadOnlyRecord }
+ before_destroy { raise ActiveRecord::ReadOnlyRecord }
+end
diff --git a/app/models/nutrient_measurement.rb b/app/models/nutrient_measurement.rb
new file mode 100644
index 0000000..f1d6d5b
--- /dev/null
+++ b/app/models/nutrient_measurement.rb
@@ -0,0 +1,4 @@
+class NutrientMeasurement < ApplicationRecord
+ validates :measured_on, presence: true
+ validates :measured_on, uniqueness: true
+end
diff --git a/app/models/raft.rb b/app/models/raft.rb
new file mode 100644
index 0000000..af52700
--- /dev/null
+++ b/app/models/raft.rb
@@ -0,0 +1,5 @@
+class Raft < ApplicationRecord
+ belongs_to :bed
+ belongs_to :crop
+ validates :location, presence: true, uniqueness: { scope: :bed_id }
+end
Copyright 2019--2025 Marius PETER