完善接口

main
liutk 2024-05-19 22:03:28 +08:00
parent 3cfdae17e3
commit 74f018c37d
8 changed files with 191 additions and 31 deletions

View File

@ -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;
}
}

View File

@ -0,0 +1,50 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;
class ReceiveGiftRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'consignee'=> '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]]));
}
}

View File

@ -0,0 +1,49 @@
<?php
namespace App\Http\Resources\Api;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Response;
class UserGiftResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'gift_name'=>$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' => ''];
}
}

View File

@ -14,4 +14,9 @@ class ActivityGift extends Model
{
$q->orderBy('rank', 'asc');
}
public function activity()
{
return $this->belongsTo(Activity::class, 'activity_id');
}
}

View File

@ -39,4 +39,8 @@ class User extends Authenticatable
);
}
public function gifts()
{
return $this->hasMany(UserGift::class, 'user_id');
}
}

View File

@ -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');
}
}

View File

@ -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;
// }
}

View File

@ -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']);
});
});
});