filter($request->all())->paginate(); 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, ]; 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( $request->get("file_ids", []), $container->id, FileObjectType::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), '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; $foldCount=Folder::query()->where('object_type',$items->type)->where('object_id',$items->id)->count(); $filesCount=File::query()->where('object_type',$items->type)->where('object_id',$items->id)->where('is_latest_version',1)->count(); $items->itemCount=$foldCount+$filesCount; }); return $this->success([ 'data' => $items ]); } }