File manager - Edit - /var/www/html/homologBancodetalentos/app/Http/Services/TalentBank/CompanyService.php
Back
<?php namespace App\Http\Services\TalentBank; use App\Http\Resources\TalentBank\CompanyCollection; use App\Http\Services\BaseService; use App\Models\TalentBank\Company; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; class CompanyService extends BaseService { protected $model = Company::class; /** Caminho relativo ao disco {@see FilesystemAdapter::url} `public` (storage/app/public). */ public static string $publicUrl = 'talent_bank/company/'; /** @deprecated Use {@see self::$publicUrl} com Storage::disk('public'). */ public static string $uploadUrl = 'public/talent_bank/company/'; public static function logoPublicUrl(?string $filename): ?string { if (! is_string($filename) || trim($filename) === '') { return null; } return Storage::disk('public')->url(self::$publicUrl.ltrim($filename, '/')); } private static function logoStoragePath(string $filename): string { return self::$publicUrl.ltrim($filename, '/'); } public function index(Request $request) { $companies = $this->paginateRessource($request, CompanyCollection::class); return $companies->toArray(); } public function paginateRessource(Request $request, string $resourceClass): LengthAwarePaginator { if (! class_exists($resourceClass)) { throw new \Exception(__('crud.message.class_not_found')); } $perPage = is_null($request['perPage']) ? 10 : $request['perPage']; $page = is_null($request['page']) ? 1 : $request['page']; $offset = ($page - 1) * $perPage; $query = Company::query(); if ($request->filled('like')) { $parts = explode(',', $request->input('like'), 2); if (count($parts) === 2 && $parts[0] === 'corporate_name') { $query->where('corporate_name', 'like', '%'.$parts[1].'%'); } } if ($request->filled('sort')) { $sortParts = explode(',', $request->input('sort')); $query->orderBy($sortParts[0], ($sortParts[1] ?? 'asc') === 'desc' ? 'desc' : 'asc'); } $total = (clone $query)->count(); $result = (clone $query)->offset($offset)->limit($perPage)->get(); return new LengthAwarePaginator(new $resourceClass($result), $total, $perPage, $page); } public function store(Request $request): Company { $data = $this->companyAttributesFromRequest($request, isUpdate: false); if ($request->hasFile('logo')) { $file = $request->file('logo'); $cnpjKey = $data['cnpj'] ?? $request->input('cnpj'); $fileName = Str::of((string) $cnpjKey)->slug('-').'.'.$file->getClientOriginalExtension(); Storage::disk('public')->putFileAs( rtrim(self::$publicUrl, '/'), $file, $fileName, ['visibility' => 'public'] ); $data['logo'] = $fileName; } $cnpj = $data['cnpj'] ?? null; if ($cnpj === null || $cnpj === '') { $cnpj = preg_replace('/\D/', '', (string) $request->input('document', '')); } if ($cnpj === '') { throw new \InvalidArgumentException('CNPJ ausente: não foi possível gravar a empresa.'); } $data['cnpj'] = $cnpj; $existing = Company::query()->where('cnpj', $cnpj)->first(); if ($existing !== null) { if (! $request->hasFile('logo')) { unset($data['logo']); } $existing->fill($data); $existing->save(); return $existing->refresh(); } $newCompany = new Company(); $newCompany->fill($data); $newCompany->save(); return $newCompany->refresh(); } public function show(Company $company): Company { return $company; } public function update(Request $request, Company $company): Company { $data = $this->companyAttributesFromRequest($request, isUpdate: true); if ($request->hasFile('logo')) { $file = $request->file('logo'); $cnpjKey = $data['cnpj'] ?? $company->cnpj ?? $request->input('cnpj'); $fileName = Str::of((string) $cnpjKey)->slug('-').'.'.$file->getClientOriginalExtension(); if ($company->logo) { Storage::disk('public')->delete(self::logoStoragePath($company->logo)); } Storage::disk('public')->putFileAs( rtrim(self::$publicUrl, '/'), $file, $fileName, ['visibility' => 'public'] ); $data['logo'] = $fileName; } $company->fill($data); $company->save(); return $company; } /** * Only mass-assign fillable columns; never pass UploadedFile or unrelated POST keys into fill(). * * @return array<string, mixed> */ private function companyAttributesFromRequest(Request $request, bool $isUpdate): array { $fillable = array_values(array_diff((new Company())->getFillable(), ['logo'])); $data = $request->only($fillable); if (! $isUpdate) { $cnpj = $data['cnpj'] ?? null; if ($cnpj === null || $cnpj === '') { $doc = preg_replace('/\D/', '', (string) $request->input('document', '')); if (strlen($doc) === 14) { $data['cnpj'] = $doc; } } $corp = $data['corporate_name'] ?? null; if (($corp === null || $corp === '') && $request->filled('name')) { $data['corporate_name'] = $request->input('name'); } } if (array_key_exists('neighbourhood_id', $data)) { $raw = $data['neighbourhood_id']; $data['neighbourhood_id'] = ($raw === '' || $raw === null) ? null : (int) $raw; } if ($request->has('active')) { $data['active'] = $request->boolean('active'); } elseif (! $isUpdate) { $data['active'] = true; } foreach (['zip_code', 'telephone', 'cellphone'] as $field) { if (! isset($data[$field]) || ! is_string($data[$field])) { continue; } $trimmed = trim($data[$field]); if ($trimmed === '') { $data[$field] = null; continue; } $digits = preg_replace('/\D/', '', $trimmed); $data[$field] = $digits !== '' ? $digits : null; } return $data; } public function destroy(Company $company): bool { if ($company->logo) { Storage::disk('public')->delete(self::logoStoragePath($company->logo)); } foreach ($company->jobListings as $job) { $job->candidates()->sync([]); $job->delete(); } $company->delete(); return true; } public function getFromTalentBank(Request $request): LengthAwarePaginator { $perPage = is_null($request['perPage']) ? 10 : $request['perPage']; $page = is_null($request['page']) ? 1 : $request['page']; $offset = ($page - 1) * $perPage; $query = Company::query(); if ($request->filled('like')) { $parts = explode(',', $request->input('like'), 2); if (count($parts) === 2 && $parts[0] === 'corporate_name') { $query->where('corporate_name', 'like', '%'.$parts[1].'%'); } } if ($request->filled('sort')) { $sortParts = explode(',', $request->input('sort')); $query->orderBy($sortParts[0], ($sortParts[1] ?? 'asc') === 'desc' ? 'desc' : 'asc'); } $total = (clone $query)->count(); $result = (clone $query)->offset($offset)->limit($perPage)->get(); return new LengthAwarePaginator(new CompanyCollection($result), $total, $perPage, $page); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings