<?php
declare(strict_types=1);
namespace App\System\Service;
use App\System\Mapper\SystemUploadFileMapper;
use Hyperf\DbConnection\Db;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpMessage\Upload\UploadedFile;
use Hyperf\Utils\Collection;
use Mine\Abstracts\AbstractService;
use Mine\Exception\NormalStatusException;
use Mine\MineUpload;
use Psr\EventDispatcher\EventDispatcherInterface;
class SystemUploadFileService extends AbstractService
{
public $config;
public $mapper;
public $mineUpload;
public function __construct(SystemUploadFileMapper $mapper, MineUpload $mineUpload)
{
$this->mapper = $mapper;
$this->mineUpload = $mineUpload;
}
public function upload(UploadedFile $uploadedFile, array $config = []): array
{
$data = $this->mineUpload->upload($uploadedFile, $config);
if ($this->save($data)) {
return $data;
} else {
return [];
}
}
public function createUploadDir(array $params): bool
{
$name = $params['name'];
if ($params['path'] ?? false) {
$name = $params['path'] . '/' . $name;
}
return $this->mineUpload->createUploadDir($name);
}
public function deleteUploadDir(array $params): bool
{
if (! $this->mapper->checkDirDbExists($params['name'])) {
return $this->mineUpload->getFileSystem()->deleteDir($params['name']);
}
throw new NormalStatusException(t('system.directory_no_delete'), 500);
}
public function getDirectory(string $path = '', bool $isChildren = false): array
{
return $this->mineUpload->getDirectory($path, $isChildren);
}
public function getAllFile(array $params = []): array
{
return $this->getArrayToPageList($params);
}
protected function handleArraySearch(Collection $collect, array $params): Collection
{
if ($params['name'] ?? false) {
$collect = $collect->filter(function ($row) use ($params) {
return \Mine\Helper\Str::contains($row['name'], $params['name']);
});
}
if ($params['label'] ?? false) {
$collect = $collect->filter(function ($row) use ($params) {
return \Mine\Helper\Str::contains($row['label'], $params['label']);
});
}
return $collect;
}
protected function getArrayData(array $params = []): array
{
$directory = $this->getDirectory($params['storage_path'] ?? '');
$params['select'] = [
'id',
'origin_name',
'object_name',
'mime_type',
'url',
'size_info',
'storage_path',
'created_at'
];
$params['select'] = implode(',', $params['select']);
return array_merge($directory, $this->getList($params));
}
public function saveNetworkImage(array $data): array
{
$data = $this->mineUpload->handleSaveNetworkImage($data);
if ($this->save($data)) {
return $data;
} else {
return [];
}
}
}