invitation page implementation

This commit is contained in:
Čarodej
2021-10-25 17:14:27 +02:00
parent b45662942d
commit 524791f251
21 changed files with 616 additions and 57 deletions
@@ -22,6 +22,7 @@ class InviteMembersIntoTeamFolderAction
'permission' => $member['permission'],
'email' => $member['email'],
'parent_id' => $folder->id,
'inviter_id' => $folder->user_id,
]);
// Invite user
@@ -2,6 +2,7 @@
namespace Domain\Teams\Controllers;
use App\Users\Models\User;
use Domain\Teams\Resources\TeamInvitationResource;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
@@ -10,6 +11,15 @@ use Illuminate\Contracts\Routing\ResponseFactory;
class InvitationsController extends Controller
{
public function show(TeamFolderInvitation $invitation)
{
if ($invitation->status === 'accepted') {
abort(410);
}
return new TeamInvitationResource($invitation);
}
public function update(
TeamFolderInvitation $invitation
): ResponseFactory | Response {
@@ -1,6 +1,8 @@
<?php
namespace Domain\Teams\Models;
use App\Users\Models\User;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;
use Database\Factories\TeamFolderInvitationFactory;
@@ -34,6 +36,11 @@ class TeamFolderInvitation extends Model
return TeamFolderInvitationFactory::new();
}
public function inviter(): HasOne
{
return $this->hasOne(User::class, 'id', 'inviter_id');
}
protected static function boot()
{
parent::boot();
@@ -1,4 +1,5 @@
<?php
namespace Domain\Teams\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -9,14 +10,30 @@ class TeamInvitationResource extends JsonResource
{
return [
'data' => [
'id' => $this->id,
'type' => 'invitation',
'attributes' => [
'id' => $this->id,
'type' => 'invitation',
'attributes' => [
'parent_id' => $this->parent_id,
'email' => $this->email,
'color' => $this->color,
'status' => $this->status,
'permission' => $this->permission,
],
'relationships' => [
$this->mergeWhen($this->inviter, fn() => [
'inviter' => [
'data' => [
'type' => 'user',
'id' => $this->inviter->id,
'attributes' => [
'name' => $this->inviter->settings->name,
'avatar' => $this->inviter->settings->avatar,
'color' => $this->inviter->settings->color,
],
],
],
]),
],
],
];
}