fixed bugfix where another user could not store the same object again

fixed the primary keys => all the classes have now composite primary key which contais an id + user_id, necessary gem: 'composite_primary_keys'
fixed the user_id relation => every class now "belongs_to" user

pls kill me know
This commit is contained in:
Pfingstfrosch 2020-06-05 00:35:04 +02:00
parent 1e87036094
commit ca38d7260d
12 changed files with 38 additions and 36 deletions

View File

@ -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]

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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|