diff --git a/app/models/sdg/manager.rb b/app/models/sdg/manager.rb new file mode 100644 index 000000000..049ceb608 --- /dev/null +++ b/app/models/sdg/manager.rb @@ -0,0 +1,6 @@ +class SDG::Manager < ApplicationRecord + belongs_to :user, touch: true + delegate :name, :email, to: :user + + validates :user_id, presence: true, uniqueness: true +end diff --git a/app/models/user.rb b/app/models/user.rb index 5daabdb50..083f21732 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -15,6 +15,7 @@ class User < ApplicationRecord has_one :moderator has_one :valuator has_one :manager + has_one :sdg_manager, class_name: "SDG::Manager", dependent: :destroy has_one :poll_officer, class_name: "Poll::Officer" has_one :organization has_one :lock @@ -197,6 +198,10 @@ class User < ApplicationRecord manager.present? end + def sdg_manager? + sdg_manager.present? + end + def poll_officer? poll_officer.present? end diff --git a/db/migrate/20201124145559_create_sdg_manager.rb b/db/migrate/20201124145559_create_sdg_manager.rb new file mode 100644 index 000000000..f216f16ba --- /dev/null +++ b/db/migrate/20201124145559_create_sdg_manager.rb @@ -0,0 +1,8 @@ +class CreateSDGManager < ActiveRecord::Migration[5.2] + def change + create_table :sdg_managers do |t| + t.belongs_to :user, foreign_key: true, index: { unique: true } + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 601a3cdd3..5f69e9ac4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_11_23_124006) do +ActiveRecord::Schema.define(version: 2020_11_24_145559) do # These are extensions that must be enabled in order to support this database enable_extension "pg_trgm" @@ -1324,6 +1324,13 @@ ActiveRecord::Schema.define(version: 2020_11_23_124006) do t.index ["target_id"], name: "index_sdg_local_targets_on_target_id" end + create_table "sdg_managers", force: :cascade do |t| + t.bigint "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_sdg_managers_on_user_id", unique: true + end + create_table "sdg_relations", force: :cascade do |t| t.string "related_sdg_type" t.bigint "related_sdg_id" @@ -1694,6 +1701,7 @@ ActiveRecord::Schema.define(version: 2020_11_23_124006) do add_foreign_key "proposals", "communities" add_foreign_key "related_content_scores", "related_contents" add_foreign_key "related_content_scores", "users" + add_foreign_key "sdg_managers", "users" add_foreign_key "users", "geozones" add_foreign_key "valuators", "users" end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 2d3359798..66e5e716b 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -106,6 +106,10 @@ FactoryBot.define do user end + factory :sdg_manager, class: "SDG::Manager" do + user + end + factory :poll_officer, class: "Poll::Officer" do user { association(:user, username: name) } diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 36addcc16..f10eefed7 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -189,6 +189,18 @@ describe User do end end + describe "sdg_manager?" do + it "is false when the user is not a sdg manager" do + expect(subject.sdg_manager?).to be false + end + + it "is true when the user is a sdg manager" do + subject.save! + create(:sdg_manager, user: subject) + expect(subject.sdg_manager?).to be true + end + end + describe "poll_officer?" do it "is false when the user is not a poll officer" do expect(subject.poll_officer?).to be false