authorize('update', $dynamic); return Inertia::render('Ledgers/Create', [ 'dynamic' => new DynamicResource($dynamic), ]); } /** * Store a newly created resource in storage. */ public function store(StoreLedgerRequest $request, Dynamic $dynamic) { $this->authorize('create', [Ledger::class, $dynamic]); $ledger = $dynamic->ledgers()->create($request->except('media')); if ($request->hasFile('media')) { foreach ($request->file('media') as $file) { $path = $file->store('media', 'public'); $ledger->media()->create([ 'file_path' => $path, 'file_name' => $file->getClientOriginalName(), 'mime_type' => $file->getMimeType(), ]); } } return redirect()->route('dynamics.show', $dynamic); } /** * Display the specified resource. */ public function show(Request $request, Dynamic $dynamic, Ledger $ledger, ActivityService $activityService) { $this->authorize('view', $ledger); $activityService->updateCursor($request->user(), $ledger); $dynamic->load('chat', 'participants'); $ledger->load([ 'media', 'mutations' => function ($query) { $query->latest(); }, 'mutations.user', 'mutations.media', 'mutations.chat', ]); return Inertia::render('Ledgers/Show', [ 'dynamic' => new DynamicResource($dynamic), 'ledger' => new LedgerResource($ledger), 'messages' => MessageResource::collection($dynamic->getOrCreateChat()->messages()->with(['user', 'media'])->latest()->paginate(\App\Models\Message::PAGINATION_COUNT)), 'can' => [ 'update' => $request->user()->can('update', $ledger), 'close' => $request->user()->can('close', $ledger), ], ]); } public function messages(Request $request, Dynamic $dynamic, Ledger $ledger) { $this->authorize('view', $ledger); return MessageResource::collection($dynamic->getOrCreateChat()->messages()->with(['user', 'media'])->latest()->paginate(\App\Models\Message::PAGINATION_COUNT)); } /** * Show the form for editing the specified resource. */ public function edit(Dynamic $dynamic, Ledger $ledger) { $this->authorize('update', $ledger); return Inertia::render('Ledgers/Edit', [ 'dynamic' => new DynamicResource($dynamic), 'ledger' => new LedgerResource($ledger), ]); } /** * Update the specified resource in storage. */ public function update(StoreLedgerRequest $request, Dynamic $dynamic, Ledger $ledger) { $this->authorize('update', $ledger); $ledger->update($request->validated()); return redirect()->route('dynamics.ledgers.show', [$dynamic, $ledger]); } public function close(Request $request, Dynamic $dynamic, Ledger $ledger) { $this->authorize('close', $ledger); $ledger->update(['status' => 'closed']); return redirect()->route('dynamics.ledgers.show', [$dynamic, $ledger]); } /** * Remove the specified resource from storage. */ public function destroy(Ledger $ledger) { // } }