Class: Api::NeedsController

Inherits:
ApplicationController show all
Includes:
Follow, Hooks, Media, Members, Recommendations, Relations, Upload, Utils
Defined in:
app/controllers/api/needs_controller.rb

Instance Method Summary collapse

Methods included from Recommendations

#recommended, #similar

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 Upload

#remove_avatar, #remove_banner, #remove_document, #upload_avatar, #upload_banner, #upload_document

Methods included from Utils

#get_id_from_short_title, #is_admin, #is_member, #is_reviewer, #nickname_exist, #short_title_exist

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 Follow

#followers, #following

Methods included from Relations

#clap, #clappers, #follow, #review, #reviewed_object, #save, #saved_objects

Methods included from Response

#json_response

Instance Method Details

#createObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'app/controllers/api/needs_controller.rb', line 39

def create
  find_project
  can_create

  @need = Need.new(need_params)
  @need.user_id = current_user.id
  @need.status = :active
  if @need.save!
    @need.update_skills(params[:need][:skills]) unless params[:need][:skills].nil?
    @need.update_ressources(params[:need][:ressources]) unless params[:need][:ressources].nil?
    @project.needs << @need
    current_user.add_role :owner, @need
    current_user.add_role :admin, @project
    current_user.add_role :member, @need
    current_user.add_edge(@need, 'is_author_of')
    @project.add_edge(@need, 'has_need')
    # First let's render the JSON because the need went through
    render json: { id: @need.id, data: 'Your need has been published' }, status: :created
    hook_new_need(@project.externalhooks, @need)

  else
    render json: { data: 'Something went wrong' }, status: :unprocessable_entity
  end
end

#destroyObject



72
73
74
75
76
77
78
# File 'app/controllers/api/needs_controller.rb', line 72

def destroy
  if @need.destroy
    current_user.remove_edge(@need, 'is_author_of')
    @need.project.remove_edge(@need, 'has_need')
    render json: { data: "Your need id:#{@need.id} has been deleted" }, status: :ok
  end
end

#indexObject



23
24
25
26
27
28
29
# File 'app/controllers/api/needs_controller.rb', line 23

def index
  param = params[:order] == 'desc' ? 'id DESC' : 'id ASC'

  @pagy, @needs = pagy(Need.includes(%i[project user]).order(param).all)

  render json: @needs, each_serializer: Api::NeedSerializer, status: :ok
end

#my_needsObject



35
36
37
# File 'app/controllers/api/needs_controller.rb', line 35

def my_needs
  render json: Need.with_role(:member, current_user), each_serializer: Api::NeedSerializer
end

#showObject



31
32
33
# File 'app/controllers/api/needs_controller.rb', line 31

def show
  render json: @need, includes: %i[project user], show_objects: true
end

#updateObject



64
65
66
67
68
69
70
# File 'app/controllers/api/needs_controller.rb', line 64

def update
  if @need.update(need_params)
    @need.update_skills(params[:need][:skills]) unless params[:need][:skills].nil?
    @need.update_ressources(params[:need][:ressources]) unless params[:need][:ressources].nil?
    render json: { data: "Need id:#{@need.id} has been updated" }, status: :ok
  end
end