diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index dfbc6f9..0e7c05f 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -12,9 +12,12 @@ use Illuminate\Support\Facades\Storage; use App\Services\Api\UserService; use App\Http\Requests\CodeRequest; use App\Http\Requests\UserInfoRequest; +use App\Http\Requests\ReceiveGiftRequest; use App\Models\Activity; use App\Models\UserActivity; +use App\Models\UserGift; use App\Http\Resources\Api\UserResource; +use App\Http\Resources\Api\UserGiftResource; use App\Http\Resources\Api\UserActivityResource; class UserController extends ApiController @@ -66,6 +69,29 @@ class UserController extends ApiController return $this->success(['activities' => UserActivityResource::collection($userActivities)->resolve()]); } + public function giftList(Request $request) + { + $userGifts = $request->user()->gifts()->with(['gift', 'gift.activity'])->sort() + ->simplePaginate($request->query('per_page', 20)); + + return $this->success(['activities' => UserGiftResource::collection($userGifts)->resolve()]); + } + + public function userGift(UserGift $userGift, Request $request) + { + return UserGiftResource::make($userGift); + } + + public function receiveGift(UserGift $userGift, ReceiveGiftRequest $request) + { + if($userGift->user_id === $request->user()->id){ + $this->service->receiveGift($userGift, $request->input()); + }else{ + return $this->error('领取失败。'); + } + return $this->success(null, '领取成功'); + } + public function updateUserInfo(UserInfoRequest $request) { $user = $request->user(); @@ -101,7 +127,7 @@ class UserController extends ApiController $item = null; if (is_array($fileData)) { foreach ($fileData as $file) { - if($_save_res = $this->saveFile($path, $file)){ + if($_save_res = $this->service->saveFile($path, $file)){ $file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($_save_res); }else{ $file_path = ''; @@ -109,7 +135,7 @@ class UserController extends ApiController $item[] = $file_path; } } else { - if($save_res = $this->saveFile($path, $fileData)){ + if($save_res = $this->service->saveFile($path, $fileData)){ $file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($save_res); }else{ $file_path = ''; @@ -125,10 +151,10 @@ class UserController extends ApiController if (is_array($files)) { // $_stop = 0; foreach ($files as $file) { - $item[] = Storage::disk(Admin::config('admin.upload.disk'))->url($this->saveFile($path, $file)); + $item[] = Storage::disk(Admin::config('admin.upload.disk'))->url($this->service->saveFile($path, $file)); } } else { - $item = Storage::disk(Admin::config('admin.upload.disk'))->url($this->saveFile($path, $files)); + $item = Storage::disk(Admin::config('admin.upload.disk'))->url($this->service->saveFile($path, $files)); } $result[$key] = $item; } @@ -136,30 +162,4 @@ class UserController extends ApiController return $this->json($result); } - - protected function saveFile($path, $file = null) - { - if (gettype($file) == 'object') { - //获取文件大小 - if($size = $file->getSize() > 2*1024*1024){//大于2M - return false; - } - $type = $file->getClientOriginalExtension(); - if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { - $file = Storage::disk(Admin::config('admin.upload.disk'))->putFile($path, $file); - }else{ - return false; - } - } else if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)) { - $type = $result[2]; - if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { - $savePath = $path . '/' . uniqid() . '.' . $type; - Storage::disk(Admin::config('admin.upload.disk'))->put($savePath, base64_decode(str_replace($result[1], '', $file))); - $file = $savePath; - }else{ - return false; - } - } - return $file; - } } \ No newline at end of file diff --git a/app/Http/Requests/ReceiveGiftRequest.php b/app/Http/Requests/ReceiveGiftRequest.php new file mode 100644 index 0000000..5ed3571 --- /dev/null +++ b/app/Http/Requests/ReceiveGiftRequest.php @@ -0,0 +1,50 @@ + 'required|max:20', + 'phone'=> 'regex:/^1[3456789]\d{9}$/', + 'address'=>'required|max:50', + ]; + } + + public function messages(){ + $messages = [ + 'consignee.required'=>'请填写收件人', + 'consignee.max'=>'收件人名称不能超过20位长度', + 'phone.regex'=>'请输入11位有效手机号', + 'address.required'=>'请填写收货地址', + 'address.max'=>'收货地址不能超过50位长度', + ]; + return $messages; + } + + protected function failedValidation(Validator $validator){ + $error = $validator->errors()->all(); + throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]])); + } +} diff --git a/app/Http/Resources/Api/UserGiftResource.php b/app/Http/Resources/Api/UserGiftResource.php new file mode 100644 index 0000000..d0b7e6b --- /dev/null +++ b/app/Http/Resources/Api/UserGiftResource.php @@ -0,0 +1,49 @@ +$this->whenLoaded('gift', function () { + return $this->gift->name; + }, ''), + 'gift_logo'=> $this->whenLoaded('gift', function () { + return $this->gift->logo; + }, ''), + 'gift_rank'=> $this->whenLoaded('gift', function () { + return $this->gift->rank; + }, ''), + 'gift_explain'=> $this->whenLoaded('gift', function () { + return $this->gift->explain; + }, ''), + 'activity_name' => $this->whenLoaded('gift.activity', function () { + return $this->gift->activity->name; + }, ''), + + 'consignee' => $this->consignee ?? '', + 'address' => $this->address ?? '', + 'phone' => $this->phone ?? '', + 'shipping_company' => $this->shipping_company ?? '', + 'shipping_number' => $this->shipping_number ?? '', + + 'state' => $this->state, + ]; + } + + public function with($request) + { + return ['code' => Response::HTTP_OK, 'message' => '']; + } +} \ No newline at end of file diff --git a/app/Models/ActivityGift.php b/app/Models/ActivityGift.php index ebfff84..bd55690 100644 --- a/app/Models/ActivityGift.php +++ b/app/Models/ActivityGift.php @@ -14,4 +14,9 @@ class ActivityGift extends Model { $q->orderBy('rank', 'asc'); } + + public function activity() + { + return $this->belongsTo(Activity::class, 'activity_id'); + } } diff --git a/app/Models/User.php b/app/Models/User.php index bbc6146..7b54395 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -39,4 +39,8 @@ class User extends Authenticatable ); } + public function gifts() + { + return $this->hasMany(UserGift::class, 'user_id'); + } } diff --git a/app/Models/UserGift.php b/app/Models/UserGift.php index 4804f3d..2311b8c 100644 --- a/app/Models/UserGift.php +++ b/app/Models/UserGift.php @@ -8,4 +8,14 @@ use Illuminate\Database\Eloquent\Model; class UserGift extends Model { use HasFactory; + + public function scopeSort($q) + { + $q->orderBy('created_at', 'desc'); + } + + public function gift() + { + return $this->belongsTo(ActivityGift::class, 'gift_id'); + } } diff --git a/app/Services/Api/UserService.php b/app/Services/Api/UserService.php index b347cd7..275e829 100644 --- a/app/Services/Api/UserService.php +++ b/app/Services/Api/UserService.php @@ -3,7 +3,10 @@ namespace App\Services\Api; use App\Models\User; +use App\Models\UserGift; +use Slowlyo\OwlAdmin\Admin; use Illuminate\Http\Response; +use Illuminate\Support\Facades\Storage; class UserService { @@ -62,4 +65,40 @@ class UserService return $res; } + // public function receiveGift(UserGift $userGift, $params) + // { + // $userGift->update([ + // 'consignee' => $params['consignee'], + // 'phone' => $params['phone'], + // 'address' => $params['address'], + // 'state' => 1 + // ]); + // } + + // protected function saveFile($path, $file = null) + // { + // if (gettype($file) == 'object') { + // //获取文件大小 + // if($size = $file->getSize() > 2*1024*1024){//大于2M + // return false; + // } + // $type = $file->getClientOriginalExtension(); + // if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { + // $file = Storage::disk(Admin::config('admin.upload.disk'))->putFile($path, $file); + // }else{ + // return false; + // } + // } else if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)) { + // $type = $result[2]; + // if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { + // $savePath = $path . '/' . uniqid() . '.' . $type; + // Storage::disk(Admin::config('admin.upload.disk'))->put($savePath, base64_decode(str_replace($result[1], '', $file))); + // $file = $savePath; + // }else{ + // return false; + // } + // } + // return $file; + // } + } \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index ff3d75a..96819dd 100644 --- a/routes/api.php +++ b/routes/api.php @@ -49,8 +49,11 @@ Route::group(['prefix' => 'miniprogram', 'namespace' => 'Api\Miniprogram'], func //竞猜记录 Route::get('user-activities', [App\Http\Controllers\Api\UserController::class, 'activityList']); //中奖记录 - //领奖 + Route::get('user-gifts', [App\Http\Controllers\Api\UserController::class, 'giftList']); //中奖记录详情; + Route::get('user-gifts/{user_gift}', [App\Http\Controllers\Api\UserController::class, 'userGift']); + //领奖 + Route::post('user-gifts/{user_gift}/receive', [App\Http\Controllers\Api\UserController::class, 'receiveGift']); }); }); });