guessing-miniprogram/app/Http/Controllers/Api/UserController.php

166 lines
5.5 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use Cache;
use Carbon\Carbon;
use Slowlyo\OwlAdmin\Admin;
use Overtrue\LaravelWeChat\EasyWeChat;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
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
{
protected string $serviceName = UserService::class;
public function bindPhone(CodeRequest $request)
{
$user = $request->user();
if($user->phone){
return $this->error('您已绑定手机号,请勿重复绑定');
}
$code = $request->input('code');
$app = EasyWeChat::miniApp();
try {
$response = $app->getClient()->postJson('wxa/business/getuserphonenumber', [
'code' => $code
]);
}catch (\Throwable $th) {
return $this->error($th->getMessage());
}
if (Arr::get($response, 'errcode')) {
return $this->error(Arr::get($response, 'errmsg'));
}
$phone = Arr::get($response['phone_info'], 'phoneNumber');
// $phone = '17784326301';
$res = $this->service->bindPhone($user, $phone);
if($res['status']){
return $this->success(null, '绑定成功');
}else{
return $this->error($res['message']);
}
}
public function activityList(Request $request)
{
$userActivities = UserActivity::with(['activity' => function($q) {
$q->show();
}])
->where(['user_id'=>$request->user()->id])
->orderBy('created_at', 'desc')
->simplePaginate($request->query('per_page', 20));
return $this->success(['activities' => UserActivityResource::collection($userActivities)->resolve()]);
}
public function giftList(Request $request)
{
$userGifts = $request->user()->gifts()->with(['gift', 'activity'])->sort()
->simplePaginate($request->query('per_page', 20));
return $this->success(['gifts' => UserGiftResource::collection($userGifts)->resolve()]);
}
public function userGift(UserGift $userGift, Request $request)
{
$userGift->load(['gift', 'activity']);
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();
$nickName = $request->input('nick_name');
$avatar = $request->input('avatar');
//处理头像;
$avatarName = substr( $avatar , strrpos($avatar , '/')+1);
$filePath = 'avatars/'.$avatarName;
$file = file_get_contents($avatar);
Storage::disk(Admin::config('admin.upload.disk'))->put($filePath, $file);
$avatar = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath);
$user->update([
'avatar' => $avatar,
'nick_name' => $nickName
]);
return $this->success(null, '修改成功');
}
/**
* 执行资源上传
*/
public function uploadResource(Request $request)
{
$path = $request->input('path', 'uploads') . '/temporary/' . date('Y-m-d');
$result = [];
// file 文件
$files = $request->file();
if($files){
foreach ($files as $key => $fileData) {
$item = null;
if (is_array($fileData)) {
foreach ($fileData as $file) {
if($_save_res = $this->service->saveFile($path, $file)){
$file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($_save_res);
}else{
$file_path = '';
}
$item[] = $file_path;
}
} else {
if($save_res = $this->service->saveFile($path, $fileData)){
$file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($save_res);
}else{
$file_path = '';
}
$item = $file_path;
}
$result[$key] = $item;
}
}else{
$data = $request->except(['path']);
foreach ($data as $key => $files) {
$item = null;
if (is_array($files)) {
// $_stop = 0;
foreach ($files as $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->service->saveFile($path, $files));
}
$result[$key] = $item;
}
}
return $this->json($result);
}
}