mirror of
https://gh.wpcy.net/https://github.com/ztersinc/freescout-clickup-module.git
synced 2026-04-17 19:22:21 +08:00
151 lines
4.2 KiB
PHP
151 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace Modules\ClickupIntegration\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Routing\Controller;
|
|
use App\Conversation as AppConversation;
|
|
use Modules\ClickupIntegration\Entities\Conversation;
|
|
use Modules\ClickupIntegration\Entities\Task;
|
|
use Modules\ClickupIntegration\Providers\ClickupIntegrationServiceProvider as Provider;
|
|
use Modules\ClickupIntegration\Services\ClickupService;
|
|
use Validator;
|
|
|
|
class ClickupIntegrationController extends Controller
|
|
{
|
|
/**
|
|
* GET - Returns a list of linked tasks for the $conversationId
|
|
*
|
|
* @param string $conversationId
|
|
* @return Response
|
|
*/
|
|
public function linkedTasks(ClickupService $service, $conversationId)
|
|
{
|
|
return view(
|
|
Provider::MODULE_NAME . '::conversation.partials.linked-tasks-list',
|
|
$service->getLinkedTasks($conversationId)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* POST - Links an existing task to a conversation
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function linkTask(Request $request, ClickupService $service)
|
|
{
|
|
// Validation
|
|
$validator = Validator::make($request->all(), [
|
|
'task_url_id' => 'required',
|
|
'conversation_id' => 'required'
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'error' => 'A Task URL or ID is required'
|
|
], 400);
|
|
}
|
|
|
|
$conversationId = $request->conversation_id;
|
|
$response = $service->linkTask($conversationId, $request->task_url_id);
|
|
|
|
if ($response['task']) {
|
|
Conversation::addNote($conversationId, $response['task']);
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* DELETE - Removes a (linked id and url) from the specified task_id
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function unlinkTask(Request $request, ClickupService $service)
|
|
{
|
|
// Validation
|
|
$validator = Validator::make($request->all(), [
|
|
'task_id' => 'required'
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'error' => 'Task ID is required'
|
|
], 400);
|
|
} else {
|
|
$service->unlinkTask($request->task_id);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* GET - Returns the modal to link a new Task to the conversation
|
|
*
|
|
* @param string $conversationId
|
|
* @return Response
|
|
*/
|
|
public function linkTasks(ClickupService $service, $conversationId)
|
|
{
|
|
$conversation = AppConversation::findOrFail($conversationId);
|
|
return view(Provider::MODULE_NAME . '::conversation.partials.link-tasks-modal', compact('conversation'));
|
|
}
|
|
|
|
/**
|
|
* GET - Return a list of assignee (users) to be added for a new Task
|
|
*
|
|
* @param ClickupService $service
|
|
* @return array
|
|
*/
|
|
public function assignees(ClickupService $service)
|
|
{
|
|
return $service->assignees();
|
|
}
|
|
|
|
/**
|
|
* GET - Return a list of tags to be added for a new Task
|
|
*
|
|
* @param ClickupService $service
|
|
* @return array
|
|
*/
|
|
public function tags(ClickupService $service)
|
|
{
|
|
return $service->tags();
|
|
}
|
|
|
|
/**
|
|
* POST - Creates and link a new Task to the conversation
|
|
*
|
|
* @param Request $request
|
|
* @param ClickupService $service
|
|
* @return array [task => Task::class, error: '']
|
|
*/
|
|
public function create(Request $request, ClickupService $service)
|
|
{
|
|
// Validation
|
|
$validator = Validator::make($request->all(), [
|
|
'conversation_id' => 'required',
|
|
'submitter_name' => 'required',
|
|
'submitter_email' => 'required|email',
|
|
'name' => 'required',
|
|
'description' => 'required',
|
|
'assignees' => 'array|min:1',
|
|
'tags' => 'array|min:1',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'error' => $validator->errors()->first()
|
|
], 400);
|
|
}
|
|
|
|
$conversationId = $request->conversation_id;
|
|
$task = Task::hydrate($request->all());
|
|
$response = $service->createTask($conversationId, $task);
|
|
|
|
if ($response['task']) {
|
|
Conversation::addNote($conversationId, $response['task']);
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
}
|