From d0efb8c068a86436359b3c20950d427c7a6a27cd Mon Sep 17 00:00:00 2001 From: hellekin Date: Mon, 5 Oct 2020 21:59:34 +0200 Subject: Add Agent and Agency models Since IN COMMON is about collective management of data we're using the concept of Agent to describe a group of users acting together. In ActivityPub terms, Agent will be the Actor when manipulating data, so that any individual User (or application) member of this Agent will be able to manipulate data on behalf of this Agent. Therefore a User has many Agencies, and an Agent as well: the Agency model allows not only to create a joint table between Agents and Users, but also to manage User roles within the related Agent. Roles are defined as: - observer: one who can read and review or flag data - editor: one who create or edit data - maintainer: one who can edit data and manage maps - leader: one who can manage roles A User may have zero or more roles in an Agent. A User without a Agency record for a specific Agent will only be able to 'observe' public data from this Agent. (Note that this is not currently specified, but matches existing reflection on Agents) https://doc.incommon.cc/#agents --- db/migrate/20201005154908_create_agents.rb | 11 +++++++++ db/migrate/20201005155004_create_agencies.rb | 12 ++++++++++ db/schema.rb | 35 +++++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20201005154908_create_agents.rb create mode 100644 db/migrate/20201005155004_create_agencies.rb (limited to 'db') diff --git a/db/migrate/20201005154908_create_agents.rb b/db/migrate/20201005154908_create_agents.rb new file mode 100644 index 0000000..32792ee --- /dev/null +++ b/db/migrate/20201005154908_create_agents.rb @@ -0,0 +1,11 @@ +class CreateAgents < ActiveRecord::Migration[6.0] + def change + create_table :agents do |t| + t.string :name + t.uuid :uuid + + t.timestamps + end + add_index :agents, [:uuid], unique: true + end +end diff --git a/db/migrate/20201005155004_create_agencies.rb b/db/migrate/20201005155004_create_agencies.rb new file mode 100644 index 0000000..ab7cb03 --- /dev/null +++ b/db/migrate/20201005155004_create_agencies.rb @@ -0,0 +1,12 @@ +class CreateAgencies < ActiveRecord::Migration[6.0] + def change + create_table :agencies do |t| + t.references :agent, null: false, foreign_key: true + t.references :user, null: false, foreign_key: true + t.integer :roles, default: 0, null: false, limit: 2 + + t.timestamps + end + add_index :agencies, [:agent_id, :user_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index b10373b..ef4f4cd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,9 +10,42 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 0) do +ActiveRecord::Schema.define(version: 2020_10_05_155004) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "agencies", force: :cascade do |t| + t.bigint "agent_id", null: false + t.bigint "user_id", null: false + t.integer "roles", limit: 2, default: 0, null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["agent_id", "user_id"], name: "index_agencies_on_agent_id_and_user_id", unique: true + t.index ["agent_id"], name: "index_agencies_on_agent_id" + t.index ["user_id"], name: "index_agencies_on_user_id" + end + + create_table "agents", force: :cascade do |t| + t.string "name" + t.uuid "uuid" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["uuid"], name: "index_agents_on_uuid", unique: true + end + + create_table "users", force: :cascade do |t| + t.string "name" + t.string "username" + t.string "email" + t.bigint "external_id" + t.string "avatar_url" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["external_id"], name: "index_users_on_external_id", unique: true + end + + add_foreign_key "agencies", "agents" + add_foreign_key "agencies", "users" end -- cgit v1.2.3