api resource refactoring part 3

This commit is contained in:
Peter Papp
2021-08-27 11:01:44 +02:00
parent 174f2a2c1f
commit d299183ecd
16 changed files with 101 additions and 91 deletions

View File

@@ -12,7 +12,7 @@
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js?id=004c11df35e63517608d",
"/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=0e511f0ceaac7257bf25",
"/chunks/admin~chunks/platform~chunks/settings.js": "/chunks/admin~chunks/platform~chunks/settings.js?id=f3bc2f8030f1dd06472a",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=8a92b1d0d66e0dc8fb71",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=99b4e9845e03f9d2e8ed",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=5f8d3e698c1fd5b9b5a5",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=055d17c4463d3ef30218",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=fd6936cca8f3b8b4de9a",
@@ -204,8 +204,8 @@
"/js/main.eed73e10bc48ddd70f77.hot-update.js": "/js/main.eed73e10bc48ddd70f77.hot-update.js",
"/js/main.06f03f5764345d4a21ae.hot-update.js": "/js/main.06f03f5764345d4a21ae.hot-update.js",
"/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~0919ded8.js": "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~0919ded8.js?id=e08424c8b2e29269c282",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js?id=52a5d33ca4b4749dd679",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js?id=5e36dcf07975aa1955fb",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js?id=4746e578131ec5449693",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js?id=fc74f2c33b38bd414bca",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~860e9aef.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~860e9aef.js?id=285952e7d81a73c1b366",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~9b5759a9.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~9b5759a9.js?id=eb26643e072aa1f2b4b5",
"/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks/trash.js": "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks/trash.js?id=854ed8a5f3a883f6d4c5",
@@ -275,5 +275,15 @@
"/js/main.ab10910fe063d675001a.hot-update.js": "/js/main.ab10910fe063d675001a.hot-update.js",
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/trash.67dbc41f14111befc449.hot-update.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/trash.67dbc41f14111befc449.hot-update.js",
"/js/main.742b35a7325a1164ece6.hot-update.js": "/js/main.742b35a7325a1164ece6.hot-update.js",
"/js/main.c17fbc0fc4ce44a45291.hot-update.js": "/js/main.c17fbc0fc4ce44a45291.hot-update.js"
"/js/main.c17fbc0fc4ce44a45291.hot-update.js": "/js/main.c17fbc0fc4ce44a45291.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.7ecca405e896e99c7399.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.7ecca405e896e99c7399.hot-update.js",
"/js/main.aacf02735be6683380cb.hot-update.js": "/js/main.aacf02735be6683380cb.hot-update.js",
"/js/main.7aadf25c13d1dd531752.hot-update.js": "/js/main.7aadf25c13d1dd531752.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.c0c029c2523ca0cf38fb.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.c0c029c2523ca0cf38fb.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.027c39918be3318827b9.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.027c39918be3318827b9.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.64becd27fa67df342538.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.64becd27fa67df342538.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0712655bd72af19a44db.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0712655bd72af19a44db.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0d0a3ec768afdd56172b.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0d0a3ec768afdd56172b.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.79e795629c63b8c2bd6f.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.79e795629c63b8c2bd6f.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.805e066dbc352fc4f11f.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.805e066dbc352fc4f11f.hot-update.js"
}

View File

@@ -161,7 +161,7 @@ export default {
events.$emit('mobile-context-menu:show', this.item)
},
dragEnter() {
if (this.item.type !== 'folder') return
if (this.item.data.type !== 'folder') return
this.area = true
},
@@ -226,7 +226,7 @@ export default {
this.$router.push({name: 'Public', params: {token: this.$route.params.token, id: this.item.data.id}})
} else if (route === 'Trash') {
this.$router.push({name: 'Trash', params: {id: this.item.data.id}})
} else if (route === 'Files') {
} else if (['Files', 'MySharedItems'].includes(route)) {
this.$router.push({name: 'Files', params: {id: this.item.data.id}})
} else if (route === 'TeamFolders') {
this.$router.push({name: 'TeamFolders', params: {id: this.item.data.id}})
@@ -269,7 +269,7 @@ export default {
this.$router.push({name: 'Public', params: {token: this.$route.params.token, id: this.item.data.id}})
} else if (route === 'Trash') {
this.$router.push({name: 'Trash', params: {id: this.item.data.id}})
} else if (route === 'Files') {
} else if (['Files', 'MySharedItems'].includes(route)) {
this.$router.push({name: 'Files', params: {id: this.item.data.id}})
} else if (route === 'TeamFolders') {
this.$router.push({name: 'TeamFolders', params: {id: this.item.data.id}})

View File

@@ -29,7 +29,7 @@
},
computed: {
isDeleted() {
return this.item.data.attributes.deleted_at ? true : false
return this.item.data.attributes.deleted_at
},
emoji() {
// Return emoji if is changed from rename popup

View File

@@ -22,7 +22,7 @@
<div v-if="isEmptyQuery" class="spotlight-results">
<!--Show results-->
<div v-if="results.length !== 0" v-for="(item, i) in results" :key="item.id" class="result-item">
<div v-if="results.length !== 0" v-for="(item, i) in results" :key="item.data.id" class="result-item">
<FileItemList
:item="item"
class="file-item"
@@ -105,17 +105,17 @@ export default {
let file = this.results[this.index]
// Show folder
if (file.type === 'folder') {
this.$router.push({name: 'Files', params: {id: this.results[this.index].id}})
if (file.data.type === 'folder') {
this.$router.push({name: 'Files', params: {id: this.results[this.index].data.id}})
} else {
// Show file
if (['video', 'audio', 'image'].includes(file.type) || file.mimetype === 'pdf'){
if (['video', 'audio', 'image'].includes(file.data.type) || file.data.attributes.mimetype === 'pdf'){
this.$store.commit('ADD_TO_FAST_PREVIEW', this.results[this.index])
events.$emit('file-preview:show')
} else {
this.$downloadFile(file.file_url, file.name + '.' + file.mimetype)
this.$downloadFile(file.data.attributes.file_url, file.data.attributes.name + '.' + file.data.attributes.mimetype)
}
}
@@ -138,7 +138,7 @@ export default {
let route = undefined
if (this.$store.getters.sharedDetail) {
let permission = this.$store.getters.sharedDetail.is_protected
let permission = this.$store.getters.sharedDetail.data.attributes.protected
? 'private'
: 'public'
@@ -153,7 +153,13 @@ export default {
params: {query: value}
})
.then(response => {
this.results = response.data
let files = response.data.files.data
let folders = response.data.folders.data
console.log(files);
this.results = folders.concat(files)
})
.catch(() => this.$isSomethingWrong())
.finally(() => this.isLoading = false)

View File

@@ -81,7 +81,7 @@ const actions = {
axios
.get(getters.api + '/browse/latest')
.then(response => {
commit('LOADING_STATE', {loading: false, data: response.data})
commit('LOADING_STATE', {loading: false, data: response.data.files.data})
commit('SET_CURRENT_FOLDER', undefined)
events.$emit('scrollTop')
@@ -94,7 +94,11 @@ const actions = {
axios
.get(getters.api + '/browse/share' + getters.sorting.URI)
.then(response => {
commit('LOADING_STATE', {loading: false, data: response.data})
let folders = response.data.folders.data
let files = response.data.files.data
commit('LOADING_STATE', {loading: false, data: folders.concat(files)})
commit('SET_CURRENT_FOLDER', undefined)
events.$emit('scrollTop')
@@ -107,7 +111,11 @@ const actions = {
axios
.get(`${getters.api}/browse/trash/${id}/${getters.sorting.URI}`)
.then(response => {
commit('LOADING_STATE', {loading: false, data: response.data.content})
let folders = response.data.folders.data
let files = response.data.files.data
commit('LOADING_STATE', {loading: false, data: folders.concat(files)})
commit('SET_CURRENT_FOLDER', response.data.folder)
events.$emit('scrollTop')

View File

@@ -1,4 +1,5 @@
<?php
namespace App\Users\Models;
use ByteUnits\Metric;
@@ -95,7 +96,7 @@ class User extends Authenticatable implements MustVerifyEmail
{
$is_storage_limit = get_settings('storage_limitation') ?? 1;
if (! $is_storage_limit) {
if (!$is_storage_limit) {
return [
'used' => $this->usedCapacity,
'used_formatted' => Metric::bytes($this->usedCapacity)->format(),
@@ -103,7 +104,7 @@ class User extends Authenticatable implements MustVerifyEmail
}
return [
'used' => (float) get_storage_fill_percentage($this->usedCapacity, $this->settings->storage_capacity),
'used' => (float)get_storage_fill_percentage($this->usedCapacity, $this->settings->storage_capacity),
'used_formatted' => get_storage_fill_percentage($this->usedCapacity, $this->settings->storage_capacity) . '%',
'capacity' => $this->settings->storage_capacity,
'capacity_formatted' => format_gigabytes($this->settings->storage_capacity),
@@ -116,7 +117,7 @@ class User extends Authenticatable implements MustVerifyEmail
public function getUsedCapacityAttribute(): int
{
return $this->filesWithTrashed
->map(fn ($item) => $item->getRawOriginal())->sum('filesize');
->map(fn($item) => $item->getRawOriginal())->sum('filesize');
}
/**
@@ -165,7 +166,10 @@ class User extends Authenticatable implements MustVerifyEmail
public function latestUploads(): HasMany
{
return $this->hasMany(File::class)
->with(['parent:id,name'])
->with([
'parent:id,name',
'shared:token,id,item_id,permission,is_protected,expire_in',
])
->take(40);
}

View File

@@ -2,12 +2,12 @@
namespace Domain\Browsing\Controllers;
use App\Users\Models\User;
use Illuminate\Support\Collection;
use Domain\Files\Resources\FilesCollection;
use Illuminate\Support\Facades\Auth;
class BrowseLatestFilesController
{
public function __invoke(): Collection
public function __invoke(): array
{
$user = User::with([
'latestUploads' => fn ($query) => $query->sortable(['created_at' => 'desc']),
@@ -15,6 +15,9 @@ class BrowseLatestFilesController
->where('id', Auth::id())
->first();
return $user->latestUploads;
return [
'files' => new FilesCollection($user->latestUploads),
'root' => null,
];
}
}

View File

@@ -2,14 +2,15 @@
namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
class BrowseSharedItemsController
{
public function __invoke(): Collection
public function __invoke(): array
{
$user_id = Auth::id();
@@ -36,7 +37,10 @@ class BrowseSharedItemsController
->get();
// Collect folders and files to single array
return collect([$folders, $files])
->collapse();
return [
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
'root' => null,
];
}
}

View File

@@ -2,7 +2,10 @@
namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Models\Folder;
use Domain\Folders\Resources\FolderCollection;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Support\Facades\Auth;
class BrowseTrashContentController
@@ -60,8 +63,9 @@ class BrowseTrashContentController
// Collect folders and files to single array
return [
'content' => collect([$folders, $files_trashed])->collapse(),
'folder' => $requestedFolder,
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files_trashed),
'root' => $requestedFolder,
];
}
}

View File

@@ -2,8 +2,9 @@
namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Collection;
use Domain\Folders\Resources\FolderCollection;
use Illuminate\Support\Facades\Auth;
use Domain\Items\Requests\SearchRequest;
@@ -11,7 +12,7 @@ class SearchFilesAndFoldersController
{
public function __invoke(
SearchRequest $request
): Collection {
): array {
$user_id = Auth::id();
$query = remove_accents(
@@ -19,17 +20,18 @@ class SearchFilesAndFoldersController
);
// Search files id db
$searched_files = File::search($query)
$files = File::search($query)
->where('user_id', $user_id)
->get();
$searched_folders = Folder::search($query)
$folders = Folder::search($query)
->where('user_id', $user_id)
->get();
// Collect folders and files to single array
return collect([$searched_folders, $searched_files])
->collapse()
->take(10);
return [
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
];
}
}

View File

@@ -2,10 +2,13 @@
namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Domain\Sharing\Actions\VerifyAccessToItemAction;
use Illuminate\Http\Resources\Json\ResourceCollection;
/**
* Browse shared folder
@@ -44,10 +47,10 @@ class VisitorBrowseFolderController
// Set thumbnail links for public files
$files->map(fn ($file) => $file->setPublicUrl($shared->token));
// Collect folders and files to single array
return [
'content' => collect([$folders, $files])->collapse(),
'folder' => $requestedFolder,
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
'root' => $requestedFolder,
];
}
}

View File

@@ -1,12 +1,13 @@
<?php
namespace Domain\Browsing\Controllers;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection;
use Illuminate\Support\Arr;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Collection;
use App\Http\Controllers\Controller;
use Domain\Sharing\Actions\ProtectShareRecordAction;
@@ -23,7 +24,7 @@ class VisitorSearchFilesAndFoldersController extends Controller
public function __invoke(
Request $request,
Share $shared,
): Collection {
): array {
// Check ability to access protected share record
($this->protectShareRecord)($shared);
@@ -64,8 +65,9 @@ class VisitorSearchFilesAndFoldersController extends Controller
});
// Collect folders and files to single array
return collect([$folders, $files])
->collapse()
->take(10);
return [
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
];
}
}

View File

@@ -84,32 +84,6 @@ class File extends Model
$this->public_access = $token;
}
/**
* Format created at date
*/
public function getCreatedAtAttribute(): string
{
return format_date(
set_time_by_user_timezone($this->attributes['created_at']),
__t('time')
);
}
/**
* Format deleted at date reformat
*/
public function getDeletedAtAttribute(): string | null
{
if (! $this->attributes['deleted_at']) {
return null;
}
return format_date(
set_time_by_user_timezone($this->attributes['deleted_at']),
__t('time')
);
}
/**
* Format fileSize
*/

View File

@@ -29,12 +29,15 @@ class FileResource extends JsonResource
'thumbnail' => $this->thumbnail,
'metadata' => $this->metadata,
'folder_id' => $this->folder_id,
'updated_at' => format_date(
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
'deleted_at' => $this->deleted_at,
/*'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->shared, fn() => [

View File

@@ -116,21 +116,6 @@ class Folder extends Model
return $folders + $files;
}
/**
* Format deleted at date reformat
*/
public function getDeletedAtAttribute(): string | null
{
if (! $this->attributes['deleted_at']) {
return null;
}
return format_date(
set_time_by_user_timezone($this->attributes['deleted_at']),
__t('time')
);
}
/**
* Get parent
*/

View File

@@ -24,12 +24,14 @@ class FolderResource extends JsonResource
'isTeamFolder' => $this->team_folder,
'items' => $this->items,
'trashed_items' => $this->trashed_items,
'updated_at' => format_date(
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
/*'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() => [