diff --git a/app/controllers/crawlers/courses_crawler_controller.rb b/app/controllers/crawlers/courses_crawler_controller.rb index a590ced..8b52363 100644 --- a/app/controllers/crawlers/courses_crawler_controller.rb +++ b/app/controllers/crawlers/courses_crawler_controller.rb @@ -40,6 +40,27 @@ class Crawlers::CoursesCrawlerController < Crawlers::TissCrawlerController end def add_to_fav + params[:api] = '/api/course/' + regex = params[:detail_url].match(/courseNr=(?\S{6})/) + params[:number] = regex[:number] + regex = params[:detail_url].match(/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 diff --git a/app/models/favorite_course.rb b/app/models/favorite_course.rb new file mode 100644 index 0000000..60d0d1f --- /dev/null +++ b/app/models/favorite_course.rb @@ -0,0 +1,4 @@ +class FavoriteCourse < ApplicationRecord + validates :title, :semester, :number, presence: true + validates :semester, :number, uniqueness: {scope: [:semester, :number]} +end diff --git a/db/migrate/20200521091231_create_favorite_courses.rb b/db/migrate/20200521091231_create_favorite_courses.rb new file mode 100644 index 0000000..4937ab0 --- /dev/null +++ b/db/migrate/20200521091231_create_favorite_courses.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 03758f8..2ea4a22 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,17 @@ # # 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| t.integer "tiss_id", null: false diff --git a/test/fixtures/favorite_courses.yml b/test/fixtures/favorite_courses.yml new file mode 100644 index 0000000..5181636 --- /dev/null +++ b/test/fixtures/favorite_courses.yml @@ -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 diff --git a/test/models/favorite_course_test.rb b/test/models/favorite_course_test.rb new file mode 100644 index 0000000..6dc9720 --- /dev/null +++ b/test/models/favorite_course_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class FavoriteCourseTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end