diff --git a/Gemfile b/Gemfile index 0f2f3bf..93e3b88 100644 --- a/Gemfile +++ b/Gemfile @@ -37,6 +37,9 @@ gem 'devise-encryptable', '0.2.0' # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.2', require: false +# for composite primary keys +gem 'composite_primary_keys' + group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] diff --git a/app/controllers/crawlers/projects_crawler_controller.rb b/app/controllers/crawlers/projects_crawler_controller.rb index 460f496..c25cb31 100644 --- a/app/controllers/crawlers/projects_crawler_controller.rb +++ b/app/controllers/crawlers/projects_crawler_controller.rb @@ -36,9 +36,9 @@ class Crawlers::ProjectsCrawlerController < Crawlers::TissCrawlerController @project = TissCrawler.get_project_details(params) # create stores the object to the db after creation - favorite_hash = {id: params[:id], + favorite_hash = {id: [params[:id], current_user.id], # the user who is currently active - user_id: current_user.id, + # user_id: current_user.id, title: @project['titleDe']} if FavoriteProject.create(favorite_hash).valid? FavoriteProject.create(favorite_hash) diff --git a/app/controllers/crawlers/theses_crawler_controller.rb b/app/controllers/crawlers/theses_crawler_controller.rb index ae2d336..97c8e65 100644 --- a/app/controllers/crawlers/theses_crawler_controller.rb +++ b/app/controllers/crawlers/theses_crawler_controller.rb @@ -36,9 +36,9 @@ class Crawlers::ThesesCrawlerController < Crawlers::TissCrawlerController @thesis = TissCrawler.get_thesis_details(params) # create stores the object to the db after creation - favorite_hash = {id: params[:id], + favorite_hash = {id: [params[:id], current_user.id], # the user who is currently active - user_id: current_user.id, + # user_id: current_user.id, title: @thesis['title']['de']} if FavoriteThesis.create(favorite_hash).valid? FavoriteThesis.create(favorite_hash) diff --git a/app/models/favorite_course.rb b/app/models/favorite_course.rb index 60d0d1f..7bac3e6 100644 --- a/app/models/favorite_course.rb +++ b/app/models/favorite_course.rb @@ -1,4 +1,6 @@ class FavoriteCourse < ApplicationRecord + self.primary_keys = :id, :user_id + validates :title, :semester, :number, presence: true - validates :semester, :number, uniqueness: {scope: [:semester, :number]} + validates :semester, :number, uniqueness: {scope: [:semester, :number, :user_id]} end diff --git a/app/models/favorite_person.rb b/app/models/favorite_person.rb index 9d1e8b8..e5d4186 100644 --- a/app/models/favorite_person.rb +++ b/app/models/favorite_person.rb @@ -1,5 +1,5 @@ class FavoritePerson < ApplicationRecord - self.primary_key = 'tiss_id' + self.primary_keys = :tiss_id, :user_id - validates :tiss_id, uniqueness: true + validates :tiss_id, uniqueness: { scope: [:user_id] } end diff --git a/app/models/favorite_project.rb b/app/models/favorite_project.rb index f7482c4..ca4e37e 100644 --- a/app/models/favorite_project.rb +++ b/app/models/favorite_project.rb @@ -1,5 +1,5 @@ class FavoriteProject < ApplicationRecord - self.primary_key = 'id' + self.primary_keys = :id, :user_id - validates :id, uniqueness: true + validates :id, :user_id, uniqueness: {scope: [:id, :user_id]} end diff --git a/app/models/favorite_thesis.rb b/app/models/favorite_thesis.rb index f1618f9..23f5238 100644 --- a/app/models/favorite_thesis.rb +++ b/app/models/favorite_thesis.rb @@ -1,5 +1,5 @@ class FavoriteThesis < ApplicationRecord - self.primary_key = 'id' + self.primary_keys = :id, :user_id - validates :id, uniqueness: true + validates :id, :user_id, uniqueness: {scope: [:id, :user_id]} end diff --git a/db/migrate/20200421152314_create_favorite_people.rb b/db/migrate/20200421152314_create_favorite_people.rb index 039d27d..e412e40 100644 --- a/db/migrate/20200421152314_create_favorite_people.rb +++ b/db/migrate/20200421152314_create_favorite_people.rb @@ -1,15 +1,13 @@ class CreateFavoritePeople < ActiveRecord::Migration[6.0] def change - create_table :favorite_people, id: false do |t| + create_table :favorite_people, primary_key: [:tiss_id, :user_id] do |t| t.integer :tiss_id, null: false - t.integer :user_id, null: false + t.belongs_to :user t.string :first_name t.string :last_name t.string :picture_uri t.string :personal_annotation - t.timestamps end - add_index :favorite_people, :tiss_id, unique: true end end diff --git a/db/migrate/20200521091231_create_favorite_courses.rb b/db/migrate/20200521091231_create_favorite_courses.rb index d475a0b..45b675e 100644 --- a/db/migrate/20200521091231_create_favorite_courses.rb +++ b/db/migrate/20200521091231_create_favorite_courses.rb @@ -1,14 +1,14 @@ class CreateFavoriteCourses < ActiveRecord::Migration[6.0] def change - create_table :favorite_courses do |t| + create_table :favorite_courses , primary_key: [:id, :user_id] do |t| + t.integer :id + t.belongs_to :user t.string :number, null: false t.string :semester, null: false t.string :title, null: false - t.integer :user_id, null: false t.string :personal_annotation t.timestamps end - add_index :favorite_courses, [:number, :semester], unique: true end end diff --git a/db/migrate/20200525132942_create_favorite_theses.rb b/db/migrate/20200525132942_create_favorite_theses.rb index c0edcef..4292946 100644 --- a/db/migrate/20200525132942_create_favorite_theses.rb +++ b/db/migrate/20200525132942_create_favorite_theses.rb @@ -1,13 +1,12 @@ class CreateFavoriteTheses < ActiveRecord::Migration[6.0] def change - create_table :favorite_theses, id: false do |t| + create_table :favorite_theses, primary_key: [:id, :user_id] do |t| t.integer :id, null: false - t.integer :user_id, null: false + t.belongs_to :user t.string :title t.string :personal_annotation t.timestamps end - add_index :favorite_theses, :id, unique: true end end diff --git a/db/migrate/20200529081537_create_favorite_projects.rb b/db/migrate/20200529081537_create_favorite_projects.rb index 701e4e5..90dc787 100644 --- a/db/migrate/20200529081537_create_favorite_projects.rb +++ b/db/migrate/20200529081537_create_favorite_projects.rb @@ -1,13 +1,12 @@ class CreateFavoriteProjects < ActiveRecord::Migration[6.0] def change - create_table :favorite_projects, id: false do |t| + create_table :favorite_projects, primary_key: [:id, :user_id] do |t| t.integer :id, null: false - t.integer :user_id, null: false + t.belongs_to :user t.string :title t.string :personal_annotation t.timestamps end - add_index :favorite_projects, :id, unique: true end end diff --git a/db/schema.rb b/db/schema.rb index 603affc..88fe6f3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -12,47 +12,48 @@ ActiveRecord::Schema.define(version: 2020_05_29_081537) do - create_table "favorite_courses", force: :cascade do |t| + create_table "favorite_courses", primary_key: ["id", "user_id"], force: :cascade do |t| + t.integer "id" + t.integer "user_id" t.string "number", null: false t.string "semester", null: false t.string "title", null: false - t.integer "user_id", null: false t.string "personal_annotation" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false - t.index ["number", "semester"], name: "index_favorite_courses_on_number_and_semester", unique: true + t.index ["user_id"], name: "index_favorite_courses_on_user_id" end - create_table "favorite_people", id: false, force: :cascade do |t| + create_table "favorite_people", primary_key: ["tiss_id", "user_id"], force: :cascade do |t| t.integer "tiss_id", null: false - t.integer "user_id", null: false + t.integer "user_id" t.string "first_name" t.string "last_name" t.string "picture_uri" t.string "personal_annotation" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false - t.index ["tiss_id"], name: "index_favorite_people_on_tiss_id", unique: true + t.index ["user_id"], name: "index_favorite_people_on_user_id" end - create_table "favorite_projects", id: false, force: :cascade do |t| + create_table "favorite_projects", primary_key: ["id", "user_id"], force: :cascade do |t| t.integer "id", null: false - t.integer "user_id", null: false + t.integer "user_id" t.string "title" t.string "personal_annotation" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false - t.index ["id"], name: "index_favorite_projects_on_id", unique: true + t.index ["user_id"], name: "index_favorite_projects_on_user_id" end - create_table "favorite_theses", id: false, force: :cascade do |t| + create_table "favorite_theses", primary_key: ["id", "user_id"], force: :cascade do |t| t.integer "id", null: false - t.integer "user_id", null: false + t.integer "user_id" t.string "title" t.string "personal_annotation" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false - t.index ["id"], name: "index_favorite_theses_on_id", unique: true + t.index ["user_id"], name: "index_favorite_theses_on_user_id" end create_table "users", force: :cascade do |t|