user()->shippingAddresses()->latest('id')->get(); return ShippingAddressResource::collection($addresses->sortByDesc('is_default')); } /** * 添加地址 * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function store(Request $request) { $input = $request->validate([ 'zone_id' => ['bail', 'required', 'int'], 'consignee' => ['bail', 'required', 'max:255'], 'telephone' => ['bail', 'required', new PhoneNumber()], 'address' => ['bail', 'required', 'string', 'max:255'], 'is_default' => ['bail', 'required', 'bool'], ]); $zone = Zone::areas()->findOrFail($input['zone_id']); $user = $request->user(); $address = $user->shippingAddresses()->create( array_merge($input, ['zone' => $zone->full_name]) ); if ($address->is_default) { $user->shippingAddresses()->where('id', '!=', $address->id)->update(['is_default' => false]); } return ShippingAddressResource::make($address); } /** * 查看地址 * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function show($id, Request $request) { $address = $request->user()->shippingAddresses()->findOrFail($id); return ShippingAddressResource::make($address); } /** * 编辑地址 * * @param int $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function update($id, Request $request) { $input = $request->validate([ 'zone_id' => ['bail', 'required', 'int'], 'consignee' => ['bail', 'required', 'max:255'], 'telephone' => ['bail', 'required', new PhoneNumber()], 'address' => ['bail', 'required', 'string', 'max:255'], 'is_default' => ['bail', 'required', 'bool'], ]); $user = $request->user(); $address = $user->shippingAddresses()->findOrFail($id); $address->fill($input); if ($address->isDirty('zone_id')) { $zone = Zone::areas()->findOrFail($input['zone_id']); $address->zone = $zone->full_name; } $address->save(); if ($address->is_default && $address->wasChanged('is_default')) { $user->shippingAddresses()->where('id', '!=', $address->id)->update(['is_default' => false]); } return ShippingAddressResource::make($address); } /** * 删除地址 * * @param int $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function destroy($id, Request $request) { $request->user()->shippingAddresses()->where('id', $id)->delete(); return response()->noContent(); } }