8
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
namespace app\api\controller;
|
||||
use app\model\FriendCircle;
|
||||
use Shopwwi\WebmanFilesystem\FilesystemFactory;
|
||||
use Shopwwi\WebmanFilesystem\Facade\Storage;
|
||||
use app\model\User as UserModel;
|
||||
@@ -33,17 +34,24 @@ class FriendCircleController extends BaseController{
|
||||
* @return void
|
||||
*/
|
||||
function info(Request $request): Response{
|
||||
$user = \support\Jwt::getUser();
|
||||
if (!$user) {
|
||||
return $this->fail('请先登录');
|
||||
}
|
||||
$res = $this->newcount($request);
|
||||
$response = $res->rawBody();
|
||||
$json = json_decode($response,true);
|
||||
$json['data']['settings'] = [
|
||||
'bg' => '',
|
||||
];
|
||||
$json['data']['last_unread_item'] = [
|
||||
'user_id' => '1',
|
||||
'avatar' => '',
|
||||
'nickname' => '',
|
||||
];
|
||||
$top_unread_items = FriendCircleModel::whereIn('id',$json['data']['unread_item_ids'])
|
||||
->with(['user' => function($query) {
|
||||
$query->field('id,nickname,avatar');
|
||||
}])
|
||||
->order('id', 'desc')
|
||||
->limit(0,3)
|
||||
->select();
|
||||
$json['data']['top_unread_items'] = $top_unread_items ?: [];
|
||||
$res->withBody(json_encode($json));
|
||||
return $res;
|
||||
}
|
||||
@@ -56,11 +64,14 @@ class FriendCircleController extends BaseController{
|
||||
*/
|
||||
function list(Request $request): Response
|
||||
{
|
||||
$current_user = \support\Jwt::getUser();
|
||||
$current_user_id = $current_user ? $current_user->id : 0;
|
||||
$page = (int)$request->get('page', 1);
|
||||
$limit = (int)$request->get('limit', 10);
|
||||
$user_id = $request->get('user_id', 0);
|
||||
|
||||
$query = FriendCircleModel::where('status', 1)
|
||||
->whereIn('user_id',$this->getFriendUserIds($current_user_id))
|
||||
->with(['user' => function($query) {
|
||||
$query->field('id,nickname,avatar');
|
||||
}])
|
||||
@@ -75,30 +86,33 @@ class FriendCircleController extends BaseController{
|
||||
'list_rows' => $limit,
|
||||
'page' => $page,
|
||||
]);
|
||||
cache('circle_last_read_id',$list[0]['id']);
|
||||
|
||||
$current_user = \support\Jwt::getUser();
|
||||
$current_user_id = $current_user ? $current_user->id : 0;
|
||||
|
||||
// 处理每条朋友圈数据
|
||||
$items = $list->items();
|
||||
$list->each(function($item) use ($current_user_id){
|
||||
// 获取点赞列表
|
||||
$likes = FriendCircleLikeModel::where('circle_id', $item->id)
|
||||
->with(['user' => function($query) {
|
||||
$query->field('id,nickname,avatar');
|
||||
}])
|
||||
->order('created_at', 'desc')
|
||||
$likes = Db::name('friend_circle')->alias('f')
|
||||
->join('user u','u.id=f.user_id')
|
||||
->where('f.id', $item->id)
|
||||
->field('f.*,u.avatar,u.nickname')
|
||||
->order('f.created_at', 'desc')
|
||||
->limit(20)
|
||||
->select();
|
||||
|
||||
$likes = $likes ? $likes->toArray() : [];
|
||||
// 检查当前用户是否已点赞
|
||||
$is_liked = false;
|
||||
if ($current_user_id > 0) {
|
||||
$is_liked = FriendCircleLikeModel::where('circle_id', $item->id)
|
||||
->where('user_id', $current_user_id)
|
||||
->count() > 0;
|
||||
$is_liked = null !== array_find($likes,function($item)use($current_user_id){
|
||||
return $item['user_id'] == $current_user_id;
|
||||
});
|
||||
// FriendCircleLikeModel::where('circle_id', $item->id)
|
||||
// ->where('user_id', $current_user_id)
|
||||
// ->count() > 0;
|
||||
}
|
||||
|
||||
|
||||
// 获取评论列表(最新10条)
|
||||
$comments = FriendCircleCommentModel::where('circle_id', $item->id)
|
||||
->where('status', 1)
|
||||
@@ -137,8 +151,8 @@ class FriendCircleController extends BaseController{
|
||||
|
||||
// 处理点赞用户头像
|
||||
foreach ($item->likes as $like) {
|
||||
if ($like->user && $like->user->avatar) {
|
||||
$like->user->avatar = cdnurl($like->user->avatar);
|
||||
if ($like->user) {
|
||||
$like->avatar = cdnurl($like->avatar);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,24 +183,19 @@ class FriendCircleController extends BaseController{
|
||||
return $this->fail('请先登录');
|
||||
}
|
||||
|
||||
$last_see = $request->post('last_see');
|
||||
if (empty($last_see)) {
|
||||
$last_see = cache('last_see_' . $user->id);
|
||||
}
|
||||
|
||||
if (empty($last_see)) {
|
||||
$last_see = time() - 86400; // 默认24小时前
|
||||
} else {
|
||||
// 保存最后查看时间
|
||||
cache('last_see_' . $user->id, $last_see);
|
||||
}
|
||||
|
||||
$circle_last_read_id = cache('circle_last_read_id') ?: 0;
|
||||
// 统计从上次查看时间到现在新增的朋友圈数量
|
||||
$count = FriendCircleModel::where('status', 1)
|
||||
->where('created_at', '>', $last_see)
|
||||
->count();
|
||||
$unread_item_ids = FriendCircleModel::where('status', 1)
|
||||
->whereIn('user_id',$this->getFriendUserIds($user->id))
|
||||
->where('id', '>', $circle_last_read_id)
|
||||
->order('id', 'desc')
|
||||
->column('id');
|
||||
|
||||
return $this->success('ok', ['count' => $count]);
|
||||
|
||||
return $this->success('ok', [
|
||||
'unread_count' => count($unread_item_ids),
|
||||
'unread_item_ids'=>$unread_item_ids
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -301,8 +310,12 @@ class FriendCircleController extends BaseController{
|
||||
->where('status', 1)
|
||||
->count();
|
||||
$circle->save();
|
||||
|
||||
return $this->success('评论成功', ['id' => $comment->id]);
|
||||
$comment->user = Db::name('user')->where('id',$comment->user_id)->find();
|
||||
$comment->replyUser=null;
|
||||
if($comment->reply_user_id){
|
||||
$comment->replyUser = Db::name('user')->where('id',$comment->reply_user_id)->find();
|
||||
}
|
||||
return $this->success('评论成功', $comment);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -354,4 +367,19 @@ class FriendCircleController extends BaseController{
|
||||
return $this->success('点赞成功', ['is_liked' => true]);
|
||||
}
|
||||
}
|
||||
protected function getFriendUserIds($user_id):array{
|
||||
if (!$user_id) {
|
||||
return [];
|
||||
}
|
||||
$result = cache('friend_id_list') ?: [];
|
||||
if(count($result) === 0){
|
||||
$res = request()->IM->friend->getFriendList($user_id.'');
|
||||
$friendsInfo = $res['friendsInfo'];
|
||||
foreach($friendsInfo as $k=>$v){
|
||||
array_push($result,$v['friendUser']['userID']);
|
||||
}
|
||||
cache('friend_id_list',$result,3600);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user