Implement favoriting of courses
This commit is contained in:
parent
a43c2b8edb
commit
b8cc0d5b61
@ -40,6 +40,27 @@ class Crawlers::CoursesCrawlerController < Crawlers::TissCrawlerController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def add_to_fav
|
def add_to_fav
|
||||||
|
params[:api] = '/api/course/'
|
||||||
|
regex = params[:detail_url].match(/courseNr=(?<number>\S{6})/)
|
||||||
|
params[:number] = regex[:number]
|
||||||
|
regex = params[:detail_url].match(/semester=(?<semester>\d{4}[SW])/)
|
||||||
|
params[:semester] = regex[:semester]
|
||||||
|
|
||||||
|
@course = TissCrawler.get_course_details(params)
|
||||||
|
|
||||||
|
# create stores the object to the db after creation
|
||||||
|
favorite_hash = {number: @course['courseNumber'],
|
||||||
|
semester: @course['semesterCode'],
|
||||||
|
title: @course['title']['de'],
|
||||||
|
# the user who is currently active
|
||||||
|
user_id: current_user.id}
|
||||||
|
if FavoriteCourse.create(favorite_hash).valid?
|
||||||
|
FavoriteCourse.create(favorite_hash)
|
||||||
|
flash[:alert] = 'Course added to your favorites!'
|
||||||
|
else
|
||||||
|
flash[:alert] = 'Course is already favorited!'
|
||||||
|
end
|
||||||
|
redirect_back(fallback_location: search)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
4
app/models/favorite_course.rb
Normal file
4
app/models/favorite_course.rb
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
class FavoriteCourse < ApplicationRecord
|
||||||
|
validates :title, :semester, :number, presence: true
|
||||||
|
validates :semester, :number, uniqueness: {scope: [:semester, :number]}
|
||||||
|
end
|
||||||
13
db/migrate/20200521091231_create_favorite_courses.rb
Normal file
13
db/migrate/20200521091231_create_favorite_courses.rb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
class CreateFavoriteCourses < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
create_table :favorite_courses do |t|
|
||||||
|
t.string :number, null: false
|
||||||
|
t.string :semester, null: false
|
||||||
|
t.string :title, null: false
|
||||||
|
t.integer :user_id, null: false
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
add_index :favorite_courses, [:number, :semester], unique: true
|
||||||
|
end
|
||||||
|
end
|
||||||
12
db/schema.rb
12
db/schema.rb
@ -10,7 +10,17 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2020_04_21_152314) do
|
ActiveRecord::Schema.define(version: 2020_05_21_091231) do
|
||||||
|
|
||||||
|
create_table "favorite_courses", force: :cascade do |t|
|
||||||
|
t.string "number", null: false
|
||||||
|
t.string "semester", null: false
|
||||||
|
t.string "title", null: false
|
||||||
|
t.integer "user_id", null: false
|
||||||
|
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
|
||||||
|
end
|
||||||
|
|
||||||
create_table "favorite_people", id: false, force: :cascade do |t|
|
create_table "favorite_people", id: false, force: :cascade do |t|
|
||||||
t.integer "tiss_id", null: false
|
t.integer "tiss_id", null: false
|
||||||
|
|||||||
11
test/fixtures/favorite_courses.yml
vendored
Normal file
11
test/fixtures/favorite_courses.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||||
|
|
||||||
|
# This model initially had no columns defined. If you add columns to the
|
||||||
|
# model remove the '{}' from the fixture names and add the columns immediately
|
||||||
|
# below each fixture, per the syntax in the comments below
|
||||||
|
#
|
||||||
|
one: {}
|
||||||
|
# column: value
|
||||||
|
#
|
||||||
|
two: {}
|
||||||
|
# column: value
|
||||||
7
test/models/favorite_course_test.rb
Normal file
7
test/models/favorite_course_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class FavoriteCourseTest < ActiveSupport::TestCase
|
||||||
|
# test "the truth" do
|
||||||
|
# assert true
|
||||||
|
# end
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user