*/ public function rules(): array { return [ 'year' => 'required|integer|gte:0', 'subscription_id' => 'required|exists:subscriptions,id', 'member_id' => 'required|exists:members,id', ]; } /** * @return array */ public function handle(Member $member, Subscription $subscription, int $year): array { $factory = $member->first()->getInvoiceFactory() ->forSingleMember() ->year($year) ->withSubscription($subscription); $invoice = Invoice::createFromFactory($factory); return [ ...$invoice->getAttributes(), 'to' => $invoice->to, 'positions' => $invoice->getRelationValue('positions')->toArray(), ]; } public function asController(ActionRequest $request, Member $member): JsonResponse { $payload = $this->handle(Member::find($request->member_id), Subscription::find($request->input('subscription_id')), $request->input('year')); return response()->json($payload); } }