|
@@ -7,17 +7,21 @@ use App\Http\Requests\API\Task\AssignRequest;
|
|
|
use App\Http\Requests\API\Task\BatchCreateItemRules;
|
|
|
use App\Http\Requests\API\Task\BatchCreateRequest;
|
|
|
use App\Http\Requests\API\Task\CreateOrUpdateRequest;
|
|
|
+use App\Http\Requests\Task\LinkContainerRequest;
|
|
|
use App\Http\Resources\API\TaskDetailResource;
|
|
|
use App\Http\Resources\API\TaskResource;
|
|
|
+use App\Models\Container;
|
|
|
use App\Models\CustomField;
|
|
|
use App\Models\Enums\ActionObjectType;
|
|
|
use App\Models\Enums\FileObjectType;
|
|
|
use App\Models\Enums\ObjectAction;
|
|
|
+use App\Models\Library;
|
|
|
use App\Models\NamingRule;
|
|
|
use App\Models\Project;
|
|
|
use App\Models\Requirement;
|
|
|
use App\Models\Enums\TaskStatus;
|
|
|
use App\Models\Task;
|
|
|
+use App\Models\TaskContainer;
|
|
|
use App\Repositories\ActionRepository;
|
|
|
use App\Repositories\CustomFieldRepository;
|
|
|
use App\Services\File\FileAssociationService;
|
|
@@ -89,7 +93,9 @@ class TaskController extends Controller
|
|
|
*/
|
|
|
public function show(string $id)
|
|
|
{
|
|
|
- $task = Task::query()->allowed($id)->findOrFail($id);
|
|
|
+ $task = Task::query()->allowed($id)->with([
|
|
|
+ 'containers'
|
|
|
+ ])->findOrFail($id);
|
|
|
|
|
|
return new TaskDetailResource($task);
|
|
|
}
|
|
@@ -328,4 +334,82 @@ class TaskController extends Controller
|
|
|
|
|
|
return $this->noContent();
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 容器链接
|
|
|
+ *
|
|
|
+ * @param LinkContainerRequest $request
|
|
|
+ * @param string $id
|
|
|
+ * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response
|
|
|
+ */
|
|
|
+ public function linkContainer(LinkContainerRequest $request, string $id)
|
|
|
+ {
|
|
|
+ $task = Task::query()->allowed($id)->findOrFail($id);
|
|
|
+
|
|
|
+ $libraryIds = Library::query()->allowed()->where("project_id", $task->project_id)->pluck("id");
|
|
|
+ if ($libraryIds->isEmpty()) {
|
|
|
+ return $this->badRequest("No container exists for the current task item");
|
|
|
+ }
|
|
|
+
|
|
|
+ $containers = Container::query()
|
|
|
+ ->allowed()
|
|
|
+ ->whereIn("library_id", $libraryIds->toArray())
|
|
|
+ ->whereIn("id", $request->get("container_ids", []))
|
|
|
+ ->get(['id']);
|
|
|
+
|
|
|
+ if (! $containers) {
|
|
|
+ return $this->badRequest("Please select a valid container");
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($containers as $container) {
|
|
|
+ TaskContainer::query()->firstOrCreate([
|
|
|
+ 'container_id' => $container->id,
|
|
|
+ 'task_id' => $task->id
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $this->noContent();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function unlinkContainer(string $id)
|
|
|
+ {
|
|
|
+ $taskContainer = TaskContainer::query()->findOrFail($id);
|
|
|
+
|
|
|
+ Task::query()->allowed($taskContainer->task_id)->findOrFail($taskContainer->task_id);
|
|
|
+
|
|
|
+ $taskContainer->delete();
|
|
|
+
|
|
|
+ return $this->noContent();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 待关联的容器
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @param string $id
|
|
|
+ * @return \Illuminate\Http\JsonResponse
|
|
|
+ */
|
|
|
+ public function containerToBeLinked(Request $request, string $id)
|
|
|
+ {
|
|
|
+ $task = Task::query()->allowed($id)->findOrFail($id);
|
|
|
+
|
|
|
+ $libraryIds = Library::query()->allowed()->where("project_id", $task->project_id)->pluck("id");
|
|
|
+ if ($libraryIds->isEmpty()) {
|
|
|
+ return $this->badRequest("No container exists for the current task item");
|
|
|
+ }
|
|
|
+
|
|
|
+ $containers = Container::query()
|
|
|
+ ->allowed()
|
|
|
+ ->leftJoin("task_container", "containers.id", "=", "task_container.container_id")
|
|
|
+ ->where($request->only(['library_id']))
|
|
|
+ ->whereIn("library_id", $libraryIds->toArray())
|
|
|
+ ->whereNull("task_container.id")
|
|
|
+ ->selectRaw("containers.id, containers.name")
|
|
|
+ ->get();
|
|
|
+
|
|
|
+ return $this->success([
|
|
|
+ 'data' => $containers
|
|
|
+ ]);
|
|
|
+ }
|
|
|
}
|