diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb new file mode 100644 index 000000000..efb80c99e --- /dev/null +++ b/app/controllers/projects_controller.rb @@ -0,0 +1,41 @@ +class ProjectsController < ApplicationController + before_action :set_project, except: %i[ index new create ] + + def index + @projects = Current.user.projects.all + end + + def new + @project = Current.account.projects.build + end + + def create + @project = Current.account.projects.create!(project_params) + redirect_to @project + end + + def show + end + + def edit + end + + def update + @project.update!(project_params) + redirect_to @project + end + + def destroy + @project.destroy + redirect_to projects_url + end + + private + def set_project + @project = Current.user.projects.find(params[:id]) + end + + def project_params + params.require(:project).permit(:name) + end +end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb new file mode 100644 index 000000000..db5c5ce1a --- /dev/null +++ b/app/helpers/projects_helper.rb @@ -0,0 +1,2 @@ +module ProjectsHelper +end diff --git a/app/models/account.rb b/app/models/account.rb index 325beea79..97bf11278 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -1,3 +1,6 @@ class Account < ApplicationRecord has_many :users, dependent: :destroy + + has_many :projects, dependent: :destroy + has_many :bubbles, through: :projects end diff --git a/app/models/current.rb b/app/models/current.rb index 2bef56dad..e5546b93b 100644 --- a/app/models/current.rb +++ b/app/models/current.rb @@ -1,4 +1,6 @@ class Current < ActiveSupport::CurrentAttributes attribute :session + delegate :user, to: :session, allow_nil: true + delegate :account, to: :user, allow_nil: true end diff --git a/app/models/project.rb b/app/models/project.rb index 010b99a08..deb6b4d31 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,6 +1,13 @@ class Project < ApplicationRecord - belongs_to :creator, class_name: "User" - belongs_to :account, default: -> { creator&.account } + belongs_to :account + belongs_to :creator, class_name: "User", default: -> { Current.user } has_many :accesses, dependent: :destroy + has_many :users, through: :accesses + + has_many :bubbles, dependent: :destroy + + after_create do + accesses.create!(user: creator) + end end diff --git a/app/views/projects/edit.html.erb b/app/views/projects/edit.html.erb new file mode 100644 index 000000000..3ae220332 --- /dev/null +++ b/app/views/projects/edit.html.erb @@ -0,0 +1,6 @@ +
Name:
<%= form.text_field :name %>
<%= form.submit %> +<% end %> diff --git a/app/views/projects/index.html.erb b/app/views/projects/index.html.erb new file mode 100644 index 000000000..5d76b7a4f --- /dev/null +++ b/app/views/projects/index.html.erb @@ -0,0 +1,9 @@ +
<%= link_to "New", new_project_path %>
+ +Name:
<%= form.text_field :name %>
<%= form.submit %> +<% end %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb new file mode 100644 index 000000000..6d74ea985 --- /dev/null +++ b/app/views/projects/show.html.erb @@ -0,0 +1,2 @@ +
<%= link_to "Edit", edit_project_path(@project) %> diff --git a/config/routes.rb b/config/routes.rb index 7cafc501d..54b203fcd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,6 +3,8 @@ Rails.application.routes.draw do resource :session + resources :projects + resources :bubbles do resource :image, controller: "bubbles/images" diff --git a/db/migrate/20240916191616_create_projects.rb b/db/migrate/20240916191616_create_projects.rb index 6bed67b48..5e3e27ca2 100644 --- a/db/migrate/20240916191616_create_projects.rb +++ b/db/migrate/20240916191616_create_projects.rb @@ -8,6 +8,6 @@ class CreateProjects < ActiveRecord::Migration[8.0] t.timestamps end - Project.create!(name: "Writebook", creator: User.first) + Account.first.projects.create! name: "Writebook", account: , creator: User.first end end diff --git a/test/controllers/projects_controller_test.rb b/test/controllers/projects_controller_test.rb new file mode 100644 index 000000000..bc11e96bb --- /dev/null +++ b/test/controllers/projects_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class ProjectsControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end +end