feat: Add create issue API

This commit is contained in:
Muhsin Keloth
2024-05-08 16:21:31 +05:30
parent 792bc5cf9d
commit bacf4f52ba
5 changed files with 49 additions and 0 deletions
@@ -18,6 +18,18 @@ class Api::V1::Accounts::Integrations::LinearController < Api::V1::Accounts::Bas
end
end
def create_issue
team_id = params[:team_id]
title = params[:title]
description = params[:description]
issue = linear_processor_service.create_issue(team_id, title, description)
if issue.is_a?(Hash) && issue[:error]
render json: { error: issue[:error] }, status: :unprocessable_entity
else
render json: issue, status: :ok
end
end
private
def linear_processor_service
+1
View File
@@ -231,6 +231,7 @@ Rails.application.routes.draw do
collection do
get :teams
get :team_entites
post :create_issue
end
end
end
@@ -20,6 +20,13 @@ class Integrations::Linear::ProcessorService
}
end
def create_issue(team_id, title, description)
response = linear_client.create_issue(team_id, title, description)
return response if response[:error]
response
end
private
def linear_hook
+14
View File
@@ -27,6 +27,14 @@ class Linear
execute_query(LinearQueries.team_entites_query(team_id))
end
def create_issue(team_id, title, description)
raise ArgumentError, 'Missing team id' if team_id.blank?
raise ArgumentError, 'Missing title' if title.blank?
raise ArgumentError, 'Missing description' if description.blank?
execute_mutation(LinearMutations::ISSUE_CREATE, input: { teamId: team_id, title: title, description: description })
end
private
def execute_query(query)
@@ -41,6 +49,12 @@ class Linear
log_and_return_error("Unexpected Error: #{e.message}")
end
def execute_mutation(query, variables)
response = @client.query(query, variables: variables)
log_and_return_error("Error creating issue: #{response.errors.messages}") if response.data.nil? && response.errors.any?
response.data.to_h
end
def log_and_return_error(message)
Rails.logger.error message
{ error: message }
+15
View File
@@ -0,0 +1,15 @@
module LinearMutations
ISSUE_CREATE = <<~GRAPHQL.freeze
mutation IssueCreate($input: IssueCreateInput!) {
issueCreate(
input: $input
) {
success
issue {
id
title
}
}
}
GRAPHQL
end