iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
1
Software Development

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

Day27 laravel todolist 建立使用者群組

Day27 laravel todolist 建立使用者群組

上篇我們講解忘記密碼功能後,使用者系統就建立的差不多了,不過我認為,難得已經可以辨別各個使用者了,能不能讓各個使用者之間有些互動?

所以我當時設計table時,將user及card設計為多對多,這表示一個user有多張card,而同時一張card也可能會有多個user擁有,實現多人編輯同一張card的功能。

我的需求大概是這樣的

  1. card創立者可以邀請其他user共同編輯這張card
  2. 可以將有編輯權限的user踢出
  3. 不能踢出card創立者,除了card創立者自己踢自己
  4. 當創立者踢出自己,card所有者將會歸下一位user所有
  5. 若是card只剩自己擁有,而自己退出的情況,card將會刪除
  6. 除了card創立者,其餘人等皆不能刪除卡片

以上就是我設想的群組功能,按照慣例我會先做最基本的功能,將邀請及踢出的功能做出,再想辦法實現那些if else的情況。

邀請使用者進入群組

以上是我專案設計的table,在之前的文章中有提過,我在作card的CRUD之前會先用user去關聯,因此我想到,如果我要邀請那個user那我只要在groups這張表上面加上user_id和card_id不就可以了嗎?

因此這是我的邀請功能

    #新增user 進來群組
    public function store(Request $request, $cardId)
    {
        $userData = $request->userData;
        $card = $userData->ShowCards->find($cardId);
        if (!$card) {
            return response()->json(['status' => false, 'error' => 'card search not found'], 400);
        }
        $userEmail = $request->email;
        $addUser = Users::where('email', $userEmail)->first();
        if (!$addUser) {
            return response()->json(['status' => false, 'error' => 'user search not found'], 400);
        }
        $userId = $addUser->id;
        $group = $card->ShowGroups->where('users_id', $userId)->first();
        if (isset($group)) {
            return response()->json(['status' => false, 'error' => 'user is already in card'], 400);
        }

        $create = Groups::create(['users_id' => $userId, 'card_id' => $cardId,]);
        $card->update(['private' => false]);
        return response()->json(['status' => true, 'group_data' => $create]);
    }

說明:
這個功能我會需要使用者輸入被邀請者的email,還有想要邀他進哪一張card的card id。

  • 4~8
    先判別使用者是誰,關聯他所有的card,使用find()尋找該card,若找不到則是card id輸入錯誤,回報錯誤400。
  • 9~13
    用email尋找被邀請者的user資料,若找不到則回傳錯誤400。
  • 14~18
    找到被邀請者的資料後取出user的id,使用card關聯到groups資料再使用where()尋找該user,若是找到了,則是該user已經在群組中了,回傳錯誤400。
  • 20
    將被邀請者加入groups這張表,表示他已有權限編輯該card
  • 21
    邀請後將card改為公有(這功能只是讓前端好分類而已)
  • 22
    回傳成功

以上便是我的群組功能的想法,不知道還有沒有漏洞?我慣例會將最基本的create功能做好後,再將各個漏洞補起來,最基本的就是檢查使用者輸入的東西是否正確,再依需求設定其他if。順帶一提這只是最基本的功能,如果群組中還要分級,那可能groups中還要加上一個判斷Lv的column,不過我想v現在先做出最基本的功能就好,之後再看要不要進行擴充,以上,Bye!


上一篇
Day26 laravel mail 登入系統 忘記密碼
下一篇
Day28 laravel todolist 建立使用者群組 下篇
系列文
後端新手 使用laravel 從零開始 到開出api30

尚未有邦友留言

立即登入留言