Class: Api::ProjectsController
- Inherits:
-
ApplicationController
- Object
- ActionController::API
- ApplicationController
- Api::ProjectsController
- Includes:
- Affiliation, Customfields, ExternalLinks, Follow, Hooks, Media, Members, Recommendations, Relations, Upload, Utils
- Defined in:
- app/controllers/api/projects_controller.rb
Instance Method Summary collapse
- #create ⇒ Object
- #destroy ⇒ Object
-
#index ⇒ Object
Before action for the relations Api::Relations.
- #index_needs ⇒ Object
- #my_projects ⇒ Object
- #show ⇒ Object
- #update ⇒ Object
Methods included from Utils
#get_id_from_short_title, #is_admin, #is_member, #is_reviewer, #nickname_exist, #short_title_exist
Methods included from Upload
#remove_avatar, #remove_banner, #remove_document, #upload_avatar, #upload_banner, #upload_document
Methods included from Relations
#clap, #clappers, #follow, #review, #reviewed_object, #save, #saved_objects
Methods included from Recommendations
Methods included from Members
#get_current_role, #get_roles_list, #has_membership, #invite, #invite_as_admin, #join, #leave, #members_list, #remove_member, #update_member
Methods included from Media
#media_create, #media_destroy, #media_index, #media_show, #media_update, #media_upload
Methods included from Hooks
#create_external_hook, #delete_external_hook, #get_external_hooks, #hook_new_member, #hook_new_need, #hook_new_post, #hook_new_project, #hook_new_project_challenge, #update_external_hook
Methods included from Follow
Methods included from ExternalLinks
#create_link, #destroy_link, #index_link, #update_link
Methods included from Customfields
#create_custom_data, #create_custom_field, #delete_custom_field, #get_custom_data, #get_custom_fields, #get_my_custom_datas, #update_custom_data, #update_custom_field, #validate_data, #validate_fields
Methods included from Affiliation
#affiliation_create, #affiliation_destroy, #affiliation_index, #affiliation_show, #affiliation_update
Methods included from Response
Instance Method Details
#create ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/controllers/api/projects_controller.rb', line 54 def create current_user.active_at! unless current_user.nil? if Project.where(short_title: params[:project][:short_title]).empty? @project = Project.new(project_params) @project.status = 'draft' @project.creator_id = current_user.id if @project.save @project.update_skills(params[:project][:skills]) unless params[:project][:skills].nil? @project.update_interests(params[:project][:interests]) unless params[:project][:interests].nil? current_user.add_role :owner, @project current_user.add_role :admin, @project current_user.add_role :member, @project current_user.add_edge(@project, 'is_author_of') current_user.add_edge(@project, 'is_member_of') current_user.add_edge(@project, 'is_admin_of') current_user.add_edge(@project, 'is_owner_of') render json: { id: @project.id, data: 'Success' }, status: :created else render json: { data: 'Something went wrong :(' }, status: :unprocessable_entity end else render json: { data: 'ShortTitle is already taken' }, status: :unprocessable_entity end end |
#destroy ⇒ Object
108 109 110 111 112 113 114 115 116 117 |
# File 'app/controllers/api/projects_controller.rb', line 108 def destroy # NOTE: a project with 1 user is considered a test project, and can be destroyed if @project.users.count == 1 && current_user.has_role?(:owner, @project) @project.destroy render json: { data: "Project id:#{params[:id]} destroyed" }, status: :ok else @project.archived! render json: { data: "Project id:#{@project.id} archived" }, status: :ok end end |
#index ⇒ Object
Before action for the relations Api::Relations
32 33 34 35 36 37 |
# File 'app/controllers/api/projects_controller.rb', line 32 def index param = params[:order] == 'desc' ? 'id DESC' : 'id ASC' @pagy, @projects = pagy(Project.where.not(status: 1).order(param).all) render json: @projects end |
#index_needs ⇒ Object
39 40 41 42 43 |
# File 'app/controllers/api/projects_controller.rb', line 39 def index_needs @pagy, @needs = pagy(@project.needs) render json: @needs, each_serializer: Api::NeedSerializer end |
#my_projects ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'app/controllers/api/projects_controller.rb', line 45 def my_projects @projects = Project.with_role(:owner, current_user) @projects += Project.with_role(:admin, current_user) @projects += Project.with_role(:member, current_user) @pagy, @projects = pagy_array(@projects.uniq) render json: @projects end |
#show ⇒ Object
81 82 83 |
# File 'app/controllers/api/projects_controller.rb', line 81 def show render json: @project, includes: %i[challenges], show_objects: true end |
#update ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/controllers/api/projects_controller.rb', line 85 def update if params[:project][:creator_id].present? if current_user.has_role? :owner, @project @project.roles.find_by(resource_type: @project.class.name, resource_id: @project.id, name: 'owner').delete @new_owner = User.find_by(id: params[:project][:creator_id]) if @new_owner.nil? render json: { data: "New owner id:#{params[:project][:creator_id]} does not exist" }, status: :not_found else @new_owner.add_role :owner, @project end else render json: { data: 'You cannot change the creator_id' }, status: :forbidden end end if @project.update(project_params) @project.update_skills(params[:project][:skills]) unless params[:project][:skills].nil? @project.update_interests(params[:project][:interests]) unless params[:project][:interests].nil? render json: @project, status: :ok else render json: { data: 'Something went wrong :(' }, status: :unprocessable_entity end end |