Adds JoinedUserActivity model to associate users to every activities they created

This commit is contained in:
Lou 2021-04-29 21:03:52 +02:00
commit 99747e3f2d
9 changed files with 63 additions and 3 deletions

View file

@ -13,6 +13,10 @@ class Api::V1::ActivitiesController < ApplicationController
def create
activity = current_user.created_activities.build(activity_params)
if activity.save
JoinedUserActivity.create!(
user_id: current_user.id,
activity_id: activity.id
)
render json: activity, status: :created
else
render json: { errors: activity.errors }, status: :unprocessable_entity

View file

@ -1,6 +1,9 @@
class Activity < ApplicationRecord
belongs_to :author, class_name: "User"
has_one :joined_user_activities
has_one :user, :through => :joined_user_activities
validates :name, presence: true
validates :author, presence: true
end

View file

@ -0,0 +1,4 @@
class JoinedUserActivity < ApplicationRecord
belongs_to :user
belongs_to :activity
end

View file

@ -5,5 +5,9 @@ class User < ApplicationRecord
validates :password_digest, presence: true
has_many :created_activities, foreign_key: 'author_id', class_name: 'Activity', dependent: :destroy
has_many :joined_user_activities
has_many :activities, :through => :joined_user_activities
has_secure_password
end

View file

@ -0,0 +1,10 @@
class CreateJoinedUserActivities < ActiveRecord::Migration[6.1]
def change
create_table :joined_user_activities do |t|
t.references :user
t.references :activity
t.timestamps
end
end
end

View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2021_04_13_142821) do
ActiveRecord::Schema.define(version: 2021_04_29_184439) do
create_table "activities", force: :cascade do |t|
t.string "name", null: false
@ -23,6 +23,15 @@ ActiveRecord::Schema.define(version: 2021_04_13_142821) do
t.index ["name"], name: "index_activities_on_name"
end
create_table "joined_user_activities", force: :cascade do |t|
t.integer "user_id"
t.integer "activity_id"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["activity_id"], name: "index_joined_user_activities_on_activity_id"
t.index ["user_id"], name: "index_joined_user_activities_on_user_id"
end
create_table "users", force: :cascade do |t|
t.string "email", null: false
t.string "username", null: false

View file

@ -2,11 +2,13 @@ User.delete_all
User.reset_pk_sequence
Activity.delete_all
Activity.reset_pk_sequence
JoinedUserActivity.delete_all
JoinedUserActivity.reset_pk_sequence
10.times do |i|
name = Faker::Name.first_name.downcase
user = User.create! username: "#{name}", email: "#{name}@email.com", password: "azerty"
puts "Created user ##{i} - #{user.username}"
puts "Created USER ##{i} - #{user.username}"
2.times do
activity = Activity.create!(
@ -15,6 +17,12 @@ Activity.reset_pk_sequence
description: Faker::Company.catch_phrase,
author_id: user.id
)
puts "Created activity \"#{activity.name}\" for #{activity.client}"
puts "Created ACTIVITY \"#{activity.name}\" for #{activity.client}"
joined_user_activity = JoinedUserActivity.create!(
user_id: user.id,
activity_id: activity.id
)
puts "Created ASSOCIATION ##{joined_user_activity.id}"
end
end

View 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

View file

@ -0,0 +1,7 @@
require "test_helper"
class JoinedUserActivityTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end