it_convert_folder_into_team_folder

This commit is contained in:
Peter Papp
2021-08-24 14:05:32 +02:00
parent 60f0f3c329
commit 80a86bbddd
5 changed files with 119 additions and 31 deletions

View File

@@ -0,0 +1,32 @@
<?php
namespace Domain\Teams\Actions;
use Domain\Folders\Models\Folder;
use Domain\Teams\Models\TeamFoldersInvitation;
use Domain\Teams\Notifications\InvitationIntoTeamFolder;
use Illuminate\Support\Facades\Notification;
class InviteMembersIntoTeamFolderAction
{
public function __invoke(
array $members,
Folder $folder,
): void {
collect($members)
->each(function ($member) use ($folder) {
// Create invitation
$invitation = TeamFoldersInvitation::create([
'permission' => $member['permission'],
'email' => $member['email'],
'folder_id' => $folder->id,
]);
// Invite user
Notification::route('mail', $member['email'])
->notify(new InvitationIntoTeamFolder($folder, $invitation));
});
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace Domain\Teams\Controllers;
use App\Http\Controllers\Controller;
use Domain\Folders\Models\Folder;
use Domain\Teams\Actions\InviteMembersIntoTeamFolderAction;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class ConvertFolderIntoTeamFolderController extends Controller
{
public function __construct(
public InviteMembersIntoTeamFolderAction $inviteMembers,
) {}
public function __invoke(
Request $request,
Folder $folder
): Response {
$folder->update(['team_folder' => 1]);
// Invite team members
($this->inviteMembers)($request->input('members'), $folder);
return response($folder, 201);
}
}

View File

@@ -2,42 +2,33 @@
namespace Domain\Teams\Controllers;
use Domain\Teams\Actions\InviteMembersIntoTeamFolderAction;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
use Domain\Teams\DTO\CreateTeamFolderData;
use Illuminate\Support\Facades\Notification;
use Domain\Teams\Models\TeamFoldersInvitation;
use Domain\Teams\Notifications\InvitationIntoTeamFolder;
class TeamFoldersController extends Controller
{
public function store(Request $request): Response
{
public function __construct(
public InviteMembersIntoTeamFolderAction $inviteMembers,
) {}
public function store(
Request $request,
): Response {
$data = CreateTeamFolderData::fromRequest($request);
$teamFolder = Folder::create([
$folder = Folder::create([
'user_id' => $request->user()->id,
'name' => $data->name,
'team_folder' => 1,
]);
collect($data->members)
->each(function ($member) use ($teamFolder) {
// Invite team members
($this->inviteMembers)($data->members, $folder);
// Create invitation
$invitation = TeamFoldersInvitation::create([
'permission' => $member['permission'],
'email' => $member['email'],
'folder_id' => $teamFolder->id,
]);
// Invite user
Notification::route('mail', $member['email'])
->notify(new InvitationIntoTeamFolder($teamFolder, $invitation));
});
return response($teamFolder, 201);
return response($folder, 201);
}
}