subscriptions()->where('module_id', $request->user('module')->id); if ($request->filled('status')) { $subscriptions->where('status', $request->input('status')); } if ($request->filled('plan_id')) { $subscriptions->where('plan_id', $request->input('plan_id')); } $subscriptions = $subscriptions->paginate(); return $this->success($subscriptions); } /** * 向用户发送订阅请求。 */ public function store(Request $request, User $user): JsonResponse { $request->validate([ 'name' => 'required|string|max:255', 'plan_id' => 'required|string|max:255', 'configuration' => 'nullable|json', 'price' => 'required|numeric|min:0', 'trial_ends_at' => 'nullable|date|after:now', ]); $subscription = $user->subscriptions()->create([ 'name' => $request->input('name'), 'plan_id' => $request->input('plan_id'), 'configuration' => $request->input('configuration'), 'price' => $request->input('price'), 'trial_ends_at' => $request->input('trial_ends_at'), 'module_id' => $request->user('module')->id, ]); $subscription->url = route('subscriptions.show', $subscription); return $this->success($subscription); } /** * 展示订阅详情。 */ public function show(Subscription $subscription): JsonResponse { return $this->success($subscription); } /** * 更新订阅。 */ public function update(Request $request, User $user, Subscription $subscription): JsonResponse { unset($user); if ($subscription->status === 'active') { return $this->badRequest('此订阅已经成立,无法修改。'); } $subscription->update($request->only([ 'name', 'plan_id', 'configuration', 'price', 'trial_ends_at', ])); return $this->success($subscription); } /** * Remove the specified resource from storage. */ public function destroy(User $user, Subscription $subscription): JsonResponse { unset($user); $subscription->safeDelete(); return $this->deleted(); } public function by_plan_id(User $user, Subscription $subscription): JsonResponse { unset($user); return $this->success($subscription); } }