Files
Leantime/app/Domain/Tickets/Controllers/TicketResourceApi.php
wangruiguo d647428529
Some checks failed
Security Audit / Composer Security Audit (push) Has been cancelled
Security Audit / NPM Security Audit (push) Has been cancelled
Security Audit / CodeQL Analysis (push) Has been cancelled
OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
2026-09-03 18:49:20 +08:00

61 lines
2.0 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Leantime\Domain\Tickets\Controllers;
use Illuminate\Http\Request;
use Leantime\Domain\Tickets\Services\TicketResource as TicketResourceService;
use Symfony\Component\HttpFoundation\Response;
/**
* 待办事项 ↔ 资源关联(BOM/工艺文件/工具清单/文件/wiki)JSON API。
* 每个动作都在 Service 层按 ticket 所属项目自鉴权。
*/
class TicketResourceApi
{
public function __construct(
private TicketResourceService $service,
) {}
/**
* 关联一个资源:POST /tickets/resource-api/{ticketId}/link
*/
public function link(int $ticketId, Request $request): Response
{
$type = (string) $request->input('type', '');
$resourceId = (int) $request->input('resourceId', 0);
$result = $this->service->link($ticketId, $type, $resourceId);
return $result['success']
? response()->json(['status' => 'success'])
: response()->json(['status' => 'error', 'message' => $result['message'] ?? '关联失败'], 400);
}
/**
* 解除一个资源关联:DELETE /tickets/resource-api/{ticketId}/unlink/{type}/{resourceId}
*/
public function unlink(int $ticketId, string $type, int $resourceId): Response
{
$result = $this->service->unlink($ticketId, $type, $resourceId);
return $result['success']
? response()->json(['status' => 'success'])
: response()->json(['status' => 'error', 'message' => $result['message'] ?? '解除失败'], 400);
}
/**
* 候选资源列表:GET /tickets/resource-api/{projectId}/candidates
*/
public function candidates(int $projectId): Response
{
return response()->json(['status' => 'success', 'data' => $this->service->listCandidates($projectId)]);
}
/**
* 已关联资源:GET /tickets/resource-api/{ticketId}/links
*/
public function links(int $ticketId): Response
{
return response()->json(['status' => 'success', 'data' => $this->service->getLinkedResources($ticketId)]);
}
}