Day28 laravel todolist 建立使用者群组 下篇

Day28 laravel todolist 建立使用者群组 下篇

在上篇文章中,我们讲到如何邀请其他user进入群组,现在来实现踢人出群组的功能,其实这并不难,怎麽加进来就怎麽踢出去,我们在groups这张table新增user_id以及card_id,就等於加入,那踢出就是删除罢了。

将user踢出群组

#从卡片中删除使用者
    public function delete_user(Request $request, $cardId)
    {
        $userData = $request->userData;
        $user = $userData->username;
        $deleteUserId = $request->user_id;
        $card = $userData->ShowCards->find($cardId);
        if (!$card) {
            return response()->json(['status' => false, 'error' => 'card search not found'], 400);
        }
        $cardOwner = $card->create_user;
        $cardGroup = $card->ShowGroups;
        # 先判断使用者是否为卡片创立者
        if ($user  == $cardOwner) {
            $Lv = 1;
        } else {
            $Lv = 2;
        }
        $delete = $cardGroup->where('users_id', $deleteUserId)->first();
        if (!$delete) {
            return response()->json(['status' => false, 'error' => 'user search not found'], 400);
        }
        $deleteUser = Users::find($deleteUserId)->username;
        if ($deleteUser == $cardOwner && $Lv == 2) {
            return response()->json(['status' => false, 'error' => 'you can not delete card owner'], 400);
        }
        $delete->delete();
        #删除後若card拥有者不见了,替换下一位card拥有者
        $card = Card::find($cardId);
        $group = $card->ShowGroups;
        if ($deleteUser == $cardOwner) {
            if (isset($group[0])) {
                $nextOwner = $group->first()->ShowUsers->username;
                $card->update(['create_user' => $nextOwner]);
            } else {
                $card->delete();
            }
        }
        if ($card->ShowUsers->count() == 1) {
            $card->update(['private' => true]);
        }
        return response()->json(['status' => true,]);
    }

说明:

code看起来蛮长的,不过是因为有加上之前说的功能,要判断现在删的是谁。
这个功能我设计使用者需要输入user_id和card_id,判断要在哪张card删除谁。

  • 4~6
    取出userData中的username,取出使用者输入的user_id
  • 7~10
    用userData关联到他所有的card,用card_id找到那张card,若找不到则回传错误400
  • 11~12
    取出card的创立者,用card关联到该card的groups资料
  • 14~18
    判断使用者是否为该card的创立者,并做分级
  • 19~22
    在groups中用user_id找要删除的资料,若找不到则回传错误400
  • 23
    寻找要删的username
  • 24~26
    只有卡片创立者可以删自己,若要删的人是创立者,回传错误400
  • 27
    groups删除该笔资料

以下是删除後,假设创立者删了自己

  • 29~30
    重新搜寻到该card以及关联到groups
  • 31
    若被删除者是card创立者,进入判断式
  • 32~37
    若$group中有关连到资料,取出第一笔并关联到user资料的username,更改card的创立者为该user,若$group中没资料则直接删除card
  • 39~41
    若card的user只有一人,将card改为私有的(给前端判断用)
  • 42
    回传成功

以上是我的踢人功能的作法,这些if判断式完全是看你的需求,其实也可以做的很简单,例如只判断是否为card创立者,只有创立者才能用此功能,这样或许简单许多,就看团队讨论这功能细节是如何了,今天就到这边吧,Bye!


<<:  [DAY 30] Q&A 谘询系统 大结局

>>:  Day 28 Spark on kubernetes

[Day11]日期函数

这篇文章要介绍的是单列函数中的日期函数。 前面介绍的是单纯的日期单列函数,接下来列出一些简单的日期运...

每个专案的程序码都该这样开始

(今天这篇文章好鸡肋阿!) 比起决定要不要使用最新观念、最新套件,以下几件事情务必要注意: 1.实作...

【Day 27】迁移学习(Transfer Learning)(下)

昨天最後提到Target data和Source data都是labeled data的情况,今天我...

机器人/AGV/AMR安全标准

与国际接轨,免不了的需要共通性标准,即要符合最小有效沟通成本,也要可以将合作伙伴的利益最大化(传说中...

【没钱买ps,PyQt自己写】Day 10 - 以 QFileDialog 读取系统的档案、资料夹

看完这篇文章你会得到的成果图 前言 我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构...