Files
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

151 lines
5.1 KiB
PHP

<?php
namespace App\Services\Regulacao;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Regulacao\Upload;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
class UploadService extends Service
{
public static function store()
{
$request = request()->all();
DB::transaction(function () use ($request) {
if ($request['multiple'] == 'true') {
self::saveMultiple($request);
} else {
self::saveUpload($request);
}
});
return self::show($request);
}
public static function saveUpload($request)
{
if(!empty($request['upload'])){
foreach ($request['upload'] as $file) {
$upload = new Upload();
$solicitacaoId = $request['solicitacao_id'];
$arquivo = request()->get('nome_arquivo');
$arquivo = $request['upload'][0];
$extensao = $arquivo->getClientOriginalExtension();
$nomeCompletoReal = $arquivo->getClientOriginalName();
$nomeCompletoRealSemExtensao = pathinfo($nomeCompletoReal, PATHINFO_FILENAME);
$nomeArquivo = $file->hashName();
$upload->solicitacao_id = $solicitacaoId;
$upload->usuario_id = self::getCurrentLotacao()->usuario_id;
$upload->extensao_arquivo = strtoupper($extensao);
$upload->arquivo = $nomeArquivo;
$upload->nome_arquivo_real = strtoupper($nomeCompletoRealSemExtensao);
$upload->save();
$pasta = storage_path('app' . DIRECTORY_SEPARATOR . 'regulacao' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . app('config')->get('database.default'));
$file->move($pasta, $nomeArquivo);
}
}
}
public static function saveMultiple($request, $solicitacaoId = null)
{
if (!empty($request['upload'])) {
foreach ($request['upload'] as $file) {
$upload = new Upload();
$solicitacaoId = $request['solicitacao_id'] ?? $solicitacaoId;
$nomeCompletoReal = $file->getClientOriginalName();
$extensao = $file->getClientOriginalExtension();
$nomeCompletoRealSemExtensao = pathinfo($nomeCompletoReal, PATHINFO_FILENAME);
$nomeArquivo = $file->hashName();
$upload->solicitacao_id = $solicitacaoId;
$upload->usuario_id = self::getCurrentLotacao()->usuario_id;
$upload->extensao_arquivo = strtoupper($extensao);
$upload->arquivo = $nomeArquivo;
$upload->nome_arquivo_real = strtoupper($nomeCompletoRealSemExtensao);
$upload->save();
$pasta = storage_path('app' . DIRECTORY_SEPARATOR . 'regulacao' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . app('config')->get('database.default'));
$file->move($pasta, $nomeArquivo);
}
}
}
public static function show($request = null)
{
if ($request == null) {
$request = request()->all();
}
return Upload::where('solicitacao_id', $request['solicitacao_id'])
->orderBy('arquivo', 'ASC')
->get()
->map(function($query) {
return [
'id' => $query->id ?? null,
'usuario' => Lotacao::withTrashed()->findOrFail($query->created_lotacao_id)->usuario->cidadao->nome ?? null,
'data' => (new Carbon($query->created_at))->format('d/m/Y') ?? null,
'arquivo' => $query->nome_arquivo_real.'.'.strtolower($query->extensao_arquivo) ?? null,
];
});
}
public static function destroy($id)
{
$upload = Upload::findOrFail($id);
if(Storage::exists('regulacao' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $upload->arquivo)){
Storage::delete('regulacao' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $upload->arquivo);
}
Upload::findOrFail($id)->delete();
}
public static function download($id)
{
$upload = Upload::findOrFail($id);
return [
'nome' => $upload->arquivo,
'arquivo' => Storage::path('regulacao' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $upload->arquivo),
];
}
public static function view($id)
{
$upload = Upload::findOrFail($id);
$path = Storage::path('regulacao' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $upload->arquivo);
$mimeType = mime_content_type($path);
return [
'path' => $path,
'mimeType' => $mimeType,
];
}
}