validate([ 'file' => ['required', 'file', 'max:5120'], 'purpose' => ['required', 'string', 'in:logo,banner,icon,avatar'], ]); $user = $request->user(); $organisation = $user->organisations()->first(); try { $url = $this->uploadService->uploadImage( file: $request->file('file'), directory: 'uploads/' . $request->input('purpose'), organisationId: $organisation?->id, ); } catch (\DomainException $e) { return response()->json(['message' => $e->getMessage()], 422); } activity('upload') ->causedBy($user) ->withProperties([ 'purpose' => $request->input('purpose'), 'original_name' => $request->file('file')->getClientOriginalName(), 'size_bytes' => $request->file('file')->getSize(), 'mime' => $request->file('file')->getMimeType(), ]) ->log('image.uploaded'); return response()->json([ 'data' => ['url' => $url], ]); } }