diff --git a/database/factories/TeamFoldersInvitationFactory.php b/database/factories/TeamFolderInvitationFactory.php similarity index 82% rename from database/factories/TeamFoldersInvitationFactory.php rename to database/factories/TeamFolderInvitationFactory.php index 4132cd7a..0e585a62 100644 --- a/database/factories/TeamFoldersInvitationFactory.php +++ b/database/factories/TeamFolderInvitationFactory.php @@ -2,17 +2,17 @@ namespace Database\Factories; -use Domain\Teams\Models\TeamFoldersInvitation; +use Domain\Teams\Models\TeamFolderInvitation; use Illuminate\Database\Eloquent\Factories\Factory; -class TeamFoldersInvitationFactory extends Factory +class TeamFolderInvitationFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ - protected $model = TeamFoldersInvitation::class; + protected $model = TeamFolderInvitation::class; /** * Define the model's default state. diff --git a/database/migrations/2021_08_24_080638_create_team_folders_invitations_table.php b/database/migrations/2021_08_24_080638_create_team_folder_invitations_table.php similarity index 85% rename from database/migrations/2021_08_24_080638_create_team_folders_invitations_table.php rename to database/migrations/2021_08_24_080638_create_team_folder_invitations_table.php index ddc06c1b..07314721 100644 --- a/database/migrations/2021_08_24_080638_create_team_folders_invitations_table.php +++ b/database/migrations/2021_08_24_080638_create_team_folder_invitations_table.php @@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -class CreateTeamFoldersInvitationsTable extends Migration +class CreateTeamFolderInvitationsTable extends Migration { /** * Run the migrations. @@ -13,7 +13,7 @@ class CreateTeamFoldersInvitationsTable extends Migration */ public function up() { - Schema::create('team_folders_invitations', function (Blueprint $table) { + Schema::create('team_folder_invitations', function (Blueprint $table) { $table->uuid('id')->primary(); $table->uuid('folder_id'); $table->text('email'); diff --git a/src/Domain/Teams/Actions/InviteMembersIntoTeamFolderAction.php b/src/Domain/Teams/Actions/InviteMembersIntoTeamFolderAction.php index af4b1a59..fcf53988 100644 --- a/src/Domain/Teams/Actions/InviteMembersIntoTeamFolderAction.php +++ b/src/Domain/Teams/Actions/InviteMembersIntoTeamFolderAction.php @@ -4,7 +4,7 @@ namespace Domain\Teams\Actions; use Domain\Folders\Models\Folder; -use Domain\Teams\Models\TeamFoldersInvitation; +use Domain\Teams\Models\TeamFolderInvitation; use Domain\Teams\Notifications\InvitationIntoTeamFolder; use Illuminate\Support\Facades\Notification; @@ -18,7 +18,7 @@ class InviteMembersIntoTeamFolderAction ->each(function ($member) use ($folder) { // Create invitation - $invitation = TeamFoldersInvitation::create([ + $invitation = TeamFolderInvitation::create([ 'permission' => $member['permission'], 'email' => $member['email'], 'folder_id' => $folder->id, diff --git a/src/Domain/Teams/Controllers/InvitationsController.php b/src/Domain/Teams/Controllers/InvitationsController.php index 73931695..955960ae 100644 --- a/src/Domain/Teams/Controllers/InvitationsController.php +++ b/src/Domain/Teams/Controllers/InvitationsController.php @@ -4,14 +4,14 @@ namespace Domain\Teams\Controllers; use App\Http\Controllers\Controller; use App\Users\Models\User; -use Domain\Teams\Models\TeamFoldersInvitation; +use Domain\Teams\Models\TeamFolderInvitation; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; class InvitationsController extends Controller { public function update( - TeamFoldersInvitation $invitation + TeamFolderInvitation $invitation ): Response { $user = User::where('email', $invitation->email) ->firstOrFail(); @@ -31,7 +31,7 @@ class InvitationsController extends Controller } public function destroy( - TeamFoldersInvitation $invitation + TeamFolderInvitation $invitation ): Response { $invitation->update([ diff --git a/src/Domain/Teams/Controllers/TeamFoldersController.php b/src/Domain/Teams/Controllers/TeamFoldersController.php index 3203278a..de9fbc93 100644 --- a/src/Domain/Teams/Controllers/TeamFoldersController.php +++ b/src/Domain/Teams/Controllers/TeamFoldersController.php @@ -68,11 +68,14 @@ class TeamFoldersController extends Controller ->where('folder_id', $folder->id) ->pluck('user_id'); + // Get deleted members from request + // TODO: vymazat uzivatela z pozvankou $deletedMembers = $existingMembers ->filter(fn ($memberId) => ! in_array( $memberId, collect($request->input('members'))->pluck('id')->toArray() )); + // Get newly added members from request $newMembers = collect($request->input('members')) ->filter(fn ($member) => ! Str::isUuid($member['id'])); @@ -81,6 +84,7 @@ class TeamFoldersController extends Controller ($this->inviteMembers)($newMembers->toArray(), $folder); } + // Remove team members from team folder if ($deletedMembers->isNotEmpty()) { DB::table('team_folder_members') ->whereIn('user_id', $deletedMembers->toArray()) @@ -106,7 +110,9 @@ class TeamFoldersController extends Controller 'team_folder' => 0, ]); - // TODO: delete invitations + DB::table('team_folder_invitations') + ->where('folder_id', $folder->id) + ->delete(); DB::table('team_folder_members') ->where('folder_id', $folder->id) diff --git a/src/Domain/Teams/Models/TeamFoldersInvitation.php b/src/Domain/Teams/Models/TeamFolderInvitation.php similarity index 77% rename from src/Domain/Teams/Models/TeamFoldersInvitation.php rename to src/Domain/Teams/Models/TeamFolderInvitation.php index aec53e25..b7258c5d 100644 --- a/src/Domain/Teams/Models/TeamFoldersInvitation.php +++ b/src/Domain/Teams/Models/TeamFolderInvitation.php @@ -3,7 +3,7 @@ namespace Domain\Teams\Models; use Illuminate\Support\Str; use Illuminate\Database\Eloquent\Model; -use Database\Factories\TeamFoldersInvitationFactory; +use Database\Factories\TeamFolderInvitationFactory; use Illuminate\Database\Eloquent\Factories\HasFactory; /** @@ -15,7 +15,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; * @property string created_at * @property string updated_at */ -class TeamFoldersInvitation extends Model +class TeamFolderInvitation extends Model { use HasFactory; @@ -29,9 +29,9 @@ class TeamFoldersInvitation extends Model protected $keyType = 'string'; - protected static function newFactory(): TeamFoldersInvitationFactory + protected static function newFactory(): TeamFolderInvitationFactory { - return TeamFoldersInvitationFactory::new(); + return TeamFolderInvitationFactory::new(); } protected static function boot() diff --git a/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php b/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php index eec4b7df..e705ab65 100644 --- a/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php +++ b/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php @@ -5,7 +5,7 @@ use App\Users\Models\User; use Illuminate\Bus\Queueable; use Domain\Folders\Models\Folder; use Illuminate\Notifications\Notification; -use Domain\Teams\Models\TeamFoldersInvitation; +use Domain\Teams\Models\TeamFolderInvitation; use Illuminate\Notifications\Messages\MailMessage; class InvitationIntoTeamFolder extends Notification @@ -14,7 +14,7 @@ class InvitationIntoTeamFolder extends Notification public function __construct( public Folder $teamFolder, - public TeamFoldersInvitation $invitation, + public TeamFolderInvitation $invitation, ) { } diff --git a/tests/Domain/Teams/TeamsTest.php b/tests/Domain/Teams/TeamsTest.php index f493622e..21481c7d 100644 --- a/tests/Domain/Teams/TeamsTest.php +++ b/tests/Domain/Teams/TeamsTest.php @@ -4,7 +4,7 @@ namespace Tests\Domain\Teams; use Domain\Files\Models\File; use Domain\Folders\Models\Folder; -use Domain\Teams\Models\TeamFoldersInvitation; +use Domain\Teams\Models\TeamFolderInvitation; use Illuminate\Support\Facades\DB; use Notification; use Tests\TestCase; @@ -51,10 +51,10 @@ class TeamsTest extends TestCase 'name' => 'Company Project', 'team_folder' => 1, ]) - ->assertDatabaseHas('team_folders_invitations', [ + ->assertDatabaseHas('team_folder_invitations', [ 'email' => 'john@internal.com', ]) - ->assertDatabaseHas('team_folders_invitations', [ + ->assertDatabaseHas('team_folder_invitations', [ 'email' => 'jane@external.com', ]); @@ -114,7 +114,7 @@ class TeamsTest extends TestCase $folder = Folder::factory() ->create(); - $invitation = TeamFoldersInvitation::factory() + $invitation = TeamFolderInvitation::factory() ->create([ 'folder_id' => $folder->id, 'email' => $member->email, @@ -128,7 +128,7 @@ class TeamsTest extends TestCase ->assertNoContent(); $this - ->assertDatabaseHas('team_folders_invitations', [ + ->assertDatabaseHas('team_folder_invitations', [ 'folder_id' => $folder->id, 'status' => 'accepted', ]) @@ -152,7 +152,7 @@ class TeamsTest extends TestCase $folder = Folder::factory() ->create(); - $invitation = TeamFoldersInvitation::factory() + $invitation = TeamFolderInvitation::factory() ->create([ 'folder_id' => $folder->id, 'email' => $member->email, @@ -166,7 +166,7 @@ class TeamsTest extends TestCase ->assertNoContent(); $this - ->assertDatabaseHas('team_folders_invitations', [ + ->assertDatabaseHas('team_folder_invitations', [ 'folder_id' => $folder->id, 'status' => 'rejected', ]) @@ -233,7 +233,7 @@ class TeamsTest extends TestCase $this ->assertDatabaseCount('team_folder_members', 2) - ->assertDatabaseHas('team_folders_invitations', [ + ->assertDatabaseHas('team_folder_invitations', [ 'email' => 'new@member.com', 'permission' => 'can-view', ]); @@ -367,6 +367,13 @@ class TeamsTest extends TestCase 'team_folder' => 1, ]); + TeamFolderInvitation::factory() + ->create([ + 'folder_id' => $folder->id, + 'status' => 'pending', + 'permission' => 'can-edit', + ]); + DB::table('team_folder_members') ->insert([ [ @@ -386,7 +393,9 @@ class TeamsTest extends TestCase ->deleteJson("/api/teams/folders/{$folder->id}") ->assertNoContent(); - $this->assertDatabaseCount('team_folder_members', 0); + $this + ->assertDatabaseCount('team_folder_members', 0) + ->assertDatabaseCount('team_folder_invitations', 0); } /**