filter($request->all())->paginate(); $foldsCount = Folder::query() ->where('object_type','container') ->where('parent_id',0) ->whereIn("object_id", $containers->pluck("id")->toArray()) ->selectRaw("count(*) as cut, object_id") ->groupBy("object_id") ->pluck("cut", "object_id"); $fileCount = File::query() ->where('object_type','container') ->whereIn('object_id',$containers->pluck("id")->toArray()) ->where("folder_id", 0) ->where("is_latest_version", 1) ->selectRaw("count(*) as cut, object_id") ->groupBy("object_id") ->pluck("cut", "object_id"); $containers = $containers->map(function (Container $container) use ($foldsCount,$fileCount) { $container->itemCount =$foldsCount->get($container->id, 0)+$fileCount->get($container->id, 0); $container->type = 'container'; $container->uniId = $container->type . '_' . $container->id; return $container; }); return $this->success([ 'data' => $containers ]); //return ContainerResource::collection($containers); } /** * Store a newly created resource in storage. */ public function store( CreateOrUpdateRequest $request, ImageUrlService $imageUrlService, FileAssociationService $service, CustomFieldRepository $customFieldRepo ) { $formData = [ ...$request->all(), 'company_id' => Auth::user()->company_id, 'created_by' => Auth::id(), 'whitelist' => $request->whitelist ? sprintf(",%s,", implode(',', $request->whitelist)) : null, ]; $service->check( $request->get("file_ids", []), FileObjectType::CONTAINER, $request->get("file_uuid"), ); if ($request->has("naming_rule_id") && $request->get("naming_rule_id") > 0) { $keys = $customFieldRepo->keysByGroup($request->get("naming_rule_id")); $formData['naming_rules'] = $request->only($keys); } $container = new Container(); $container->mergeFillable(['company_id']); $container->fill($formData); $container->save(); ActionRepository::createByContainer($container, ObjectAction::CREATED); $service->association($container->id); $files = File::query()->where('object_id', $container->id) ->where('object_type', ActionObjectType::CONTAINER) ->where('source', 1) ->pluck("id") ->sort(); $contentFormData = [ 'description' => $imageUrlService->interceptImageUrl($request->description), 'container_id' => $container->id, 'created_by' => Auth::id(), 'name' => $request->name, 'files' => $files->implode(",") ?: null ]; ContainerContent::query()->create($contentFormData); return $this->created(); } /** * Display the specified resource. */ public function show(string $id) { $container = Container::query()->allowed() ->when(\request("version") > 0, fn($query) => $query->where("version", ">=", \request("version"))) ->findOrFail($id); return new ContainerDetailResource($container); } /** * Update the specified resource in storage. */ public function update( CreateOrUpdateRequest $request, ImageUrlService $imageUrlService, CustomFieldRepository $customFieldRepo, string $id ) { $container = Container::query()->allowed()->findOrFail($id); $formData = [ ...$request->all(), 'whitelist' => $request->whitelist ? sprintf(",%s,", implode(',', $request->whitelist)) : null, 'description' => $imageUrlService->interceptImageUrl($request->description) , ]; if ($request->has("naming_rule_id") && $request->get("naming_rule_id") > 0) { $keys = $customFieldRepo->keysByGroup($request->get("naming_rule_id")); $formData['naming_rules'] = $request->only($keys); } $container->fill($formData); $changes = ModelChangeDetector::detector(ActionObjectType::CONTAINER, $container); $files = File::query()->where('object_id', $container->id) ->where('object_type', ActionObjectType::CONTAINER) ->where('source', 1) ->pluck("id") ->sort(); $contentFormData = [ 'description' => $imageUrlService->interceptImageUrl($request->description), 'name' => $request->name, 'files' => $files->implode(",") ?: null ]; $containerContent = $container->content; $containerContent->fill($contentFormData); $contentChange = ModelChangeDetector::detector(ActionObjectType::CONTAINER_CONTENT, $containerContent); if ($contentChange) { $container->version++; $changes = array_merge($changes, $contentChange); ContainerContent::query()->create([ ...$contentFormData, 'container_id' => $container->id, 'created_by' => Auth::id(), 'version' => $container->version, ]); } $container->save(); ActionRepository::createByContainer($container, ObjectAction::EDITED, objectChanges: $changes); return $this->noContent(); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { $container = Container::query()->allowed()->findOrFail($id); $container->delete(); ActionRepository::createByContainer($container, ObjectAction::DELETED); return $this->noContent(); } public function linkage(string $libraryId) { $items = Container::query()->allowed()->where("library_id", $libraryId)->get(['id', 'name'])->each(function ($items) { // 设置固定的type值 $items->type = 'container'; $items->uniId=$items->type.'_'.$items->id; }); return $this->success([ 'data' => $items ]); } }