added folder resource

This commit is contained in:
Peter Papp
2021-08-26 15:06:39 +02:00
parent bee7352b28
commit f5f2179145
9 changed files with 157 additions and 19 deletions

View File

@@ -48,7 +48,6 @@ class Folder extends Model
protected $appends = [
'items',
'trashed_items',
'type',
];
protected $casts = [
@@ -74,11 +73,6 @@ class Folder extends Model
return FolderFactory::new();
}
public function getTypeAttribute(): string
{
return 'folder';
}
/**
* Index folder
*/
@@ -122,17 +116,6 @@ class Folder extends Model
return $folders + $files;
}
/**
* Format created at date reformat
*/
public function getCreatedAtAttribute(): string
{
return format_date(
set_time_by_user_timezone($this->attributes['created_at']),
__t('time')
);
}
/**
* Format deleted at date reformat
*/

View File

@@ -0,0 +1,16 @@
<?php
namespace Domain\Folders\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class FolderCollection extends ResourceCollection
{
public $collects = FolderResource::class;
public function toArray($request): array
{
return [
'data' => $this->collection,
];
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace Domain\Folders\Resources;
use Domain\Teams\Resources\TeamInvitationsCollection;
use Domain\Teams\Resources\TeamMembersCollection;
use Illuminate\Http\Resources\Json\JsonResource;
class FolderResource extends JsonResource
{
public function toArray($request): array
{
return [
'data' => [
'id' => $this->id,
'type' => 'folder',
'attributes' => [
'name' => $this->name,
'color' => $this->color,
'emoji' => $this->emoji,
'isTeamFolder' => $this->team_folder,
'items' => $this->items,
'trashed_items' => $this->trashed_items,
'updated_at' => format_date(
set_time_by_user_timezone($this->updated_at), __t('time')
),
'created_at' => format_date(
set_time_by_user_timezone($this->created_at), __t('time')
),
],
'relationships' => [
$this->mergeWhen($this->teamMembers, fn () => [
'members' => new TeamMembersCollection($this->teamMembers),
]),
$this->mergeWhen($this->teamInvitations, fn () => [
'invitations' => new TeamInvitationsCollection($this->teamInvitations),
]),
$this->mergeWhen($this->shared, fn () => [
'shared' => [
'data' => [
'id' => $this->shared->id,
'type' => 'shared',
'attributes' => [
'expire_in' => $this->shared->expire_in,
'link' => $this->shared->link,
'permission' => $this->shared->permission,
'protected' => $this->shared->protected,
'token' => $this->shared->token,
],
],
],
]),
],
],
];
}
}

View File

@@ -5,8 +5,8 @@ use Illuminate\Http\Response;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Domain\Localization\Models\Language;
use Domain\Localization\Resources\LanguageResource;
use Domain\Localization\Resources\LanguageCollection;
use Domain\Teams\Resources\LanguageResource;
use Domain\Teams\Resources\LanguageCollection;
use Domain\Localization\Requests\CreateLanguageRequest;
use Domain\Localization\Requests\UpdateLanguageRequest;

View File

@@ -2,6 +2,7 @@
namespace Domain\Teams\Controllers;
use DB;
use Domain\Folders\Resources\FolderCollection;
use Domain\Teams\Requests\CreateTeamFolderRequest;
use Domain\Teams\Requests\UpdateTeamFolderMembersRequest;
use Illuminate\Contracts\Routing\ResponseFactory;
@@ -50,6 +51,8 @@ class TeamFoldersController extends Controller
->get();
}
return new FolderCollection($folders);
// Collect folders and files to single array
return [
'content' => collect([$folders, $files])->collapse(),

View File

@@ -0,0 +1,23 @@
<?php
namespace Domain\Teams\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class TeamInvitationResource extends JsonResource
{
public function toArray($request): array
{
return [
'data' => [
'id' => $this->id,
'type' => 'invitation',
'attributes' => [
'email' => $this->email,
'status' => $this->status,
'permission' => $this->permission,
],
],
];
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace Domain\Teams\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class TeamInvitationsCollection extends ResourceCollection
{
public $collects = TeamInvitationResource::class;
public function toArray($request): array
{
return [
'data' => $this->collection,
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Domain\Teams\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class TeamMemberResource extends JsonResource
{
public function toArray($request): array
{
return [
'data' => [
'id' => $this->id,
'type' => 'member',
'attributes' => [
'email' => $this->email,
'name' => $this->settings->name,
'avatar' => $this->settings->avatar,
'permission' => $this->pivot->permission,
],
],
];
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace Domain\Teams\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class TeamMembersCollection extends ResourceCollection
{
public $collects = TeamMemberResource::class;
public function toArray($request): array
{
return [
'data' => $this->collection,
];
}
}