iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
1
Software Development

後端新手 使用laravel 從零開始 到開出api系列 第 28

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!


上一篇
Day27 laravel todolist 建立使用者群組
下一篇
Day29 Postman 設定環境變數
系列文
後端新手 使用laravel 從零開始 到開出api30

尚未有邦友留言

立即登入留言