Files
api-extranetwork/app/Core/Service/PropertyAwardsCertificateService.php
ExtraNetwork e5c4b6aa13 first commit
2026-05-12 17:04:54 +03:00

532 lines
20 KiB
PHP

<?php
namespace App\Core\Service;
use App\Core\Repository\PropertyAwardsCertificate\PropertyAwardsCertificateRepository;
use App\Core\Repository\AwardsCertificateCategory\AwardsCertificateCategoryRepository;
use App\Core\Repository\Property\PropertyRepository;
use App\Core\Validator\PropertyAwardsCertificate\PropertyAwardsCertificateCreateValidator;
use App\Core\Validator\PropertyAwardsCertificate\PropertyAwardsCertificateUpdateValidator;
use App\Core\Validator\PropertyAwardsCertificate\PropertyAwardCertificateUploadValidator;
use App;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Config;
use Exception;
use App\Exceptions\ApiErrorException;
use Intervention\Image\Facades\Image;
class PropertyAwardsCertificateService
{
private $propertyAwardsCertificateRepository;
private $awardsCertificateCategoryRepository;
private $propertyAwardsCertificateCreateValidator;
private $propertyAwardsCertificateUpdateValidator ;
private $propertyAwardCertificateUploadValidator;
private $propertyRepository;
public function __construct(
PropertyAwardsCertificateRepository $propertyAwardsCertificateRepository,
PropertyAwardsCertificateCreateValidator $propertyAwardsCertificateCreateValidator,
PropertyAwardsCertificateUpdateValidator $propertyAwardsCertificateUpdateValidator,
PropertyAwardCertificateUploadValidator $propertyAwardCertificateUploadValidator,
PropertyRepository $propertyRepository,
AwardsCertificateCategoryRepository $awardsCertificateCategoryRepository
)
{
$this->propertyAwardsCertificateRepository = $propertyAwardsCertificateRepository;
$this->awardsCertificateCategoryRepository = $awardsCertificateCategoryRepository;
$this->propertyAwardsCertificateCreateValidator = $propertyAwardsCertificateCreateValidator ;
$this->propertyAwardsCertificateUpdateValidator = $propertyAwardsCertificateUpdateValidator;
$this->propertyAwardCertificateUploadValidator = $propertyAwardCertificateUploadValidator;
$this->propertyRepository = $propertyRepository ;
}
public function create($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$validationResult = $this->propertyAwardsCertificateCreateValidator->validate($params);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$filePath = null ;
$fileType = null ;
if($params['file']){
// upload new image ...
$uploadFile = $this->uploadCertificate($params);
if ($uploadFile['status'] != 'success') {
throw new Exception($uploadFile['message']);
}
$filePath = $uploadFile['data']['file_path'] ;
$fileType = $uploadFile['data']['file_type'] ;
}
$insertData = [
'property_id' => fillOnUndefined($params, 'property_id'),
'category_id' => fillOnUndefined($params, 'category_id'),
'language_code' => fillOnUndefined($params, 'language_code'),
'name' => fillOnUndefined($params, 'name'),
'date' => fillOnUndefined($params, 'date'),
'url' => fillOnUndefined($params, 'url'),
'file_path' => $filePath,
'file_type' => $fileType,
"status" => fillOnUndefined($params, "status", 1),
"created_by" => fillOnUndefined($params, "user_id"),
"updated_by" => fillOnUndefined($params, "user_id"),
"created_at" => time(),
"updated_at" => time(),
];
$createResult = $this->propertyAwardsCertificateRepository->create($insertData);
if ($createResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$userData = $createResult["data"];
$response = [
'status' => true,
'data' => $userData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function select($params= [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyAwardsCertificateRepository->findByCriteria($params, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function update($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$validationResult = $this->propertyAwardsCertificateUpdateValidator->validate($params);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$id = fillOnUndefined($params, 'award_certificate_id') ;
$filePath = null ;
$fileType = null ;
$deleteThisImage = null ;
$requestCriteria = [
'criteria' => [
// ['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'id', 'condition' => '=', 'value' => $params['award_certificate_id']],
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
],
'firstRow' => 1,
];
$columns = ['id', 'property_id', 'category_id', 'name', 'date', 'url', 'file_path', 'file_type', 'status'];
$awardCertificate = $this->propertyAwardsCertificateRepository->findByCriteria($requestCriteria,$columns);
if (!$awardCertificate) {
throw new Exception('api-unknown_error');
}
$fileUpdateData = [];
if($params['file']){
// upload new image ...
$uploadFile = $this->uploadCertificate($params);
if ($uploadFile['status'] != 'success') {
throw new Exception($uploadFile['message']);
}
$filePath = $uploadFile['data']['file_path'] ;
$fileType = $uploadFile['data']['file_type'] ;
// set delete old image+++++++
if($awardCertificate['file_path']){
$urlPath = '/property-photos/' . $awardCertificate['property_id'] . "/awards-certificates/";
$deleteThisImage = Config::get('app.fileSystemDriver') . $urlPath . $awardCertificate['file_path'];
}
$fileUpdateData = [
'file_path' => $filePath,
'file_type' => $fileType,
];
}
$updateData = [
'category_id' => fillOnUndefined($params, 'category_id'),
'language_code' => fillOnUndefined($params, 'language_code'),
'name' => fillOnUndefined($params, 'name'),
'date' => fillOnUndefined($params, 'date'),
'url' => fillOnUndefined($params, 'url'),
"updated_by" => fillOnUndefined($params, "user_id"),
"updated_at" => time(),
];
$updateData = array_merge($updateData, $fileUpdateData) ;
$updateResult = $this->propertyAwardsCertificateRepository->update($id, $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$updateData = $updateResult["data"];
if($deleteThisImage) {
if (File::exists($deleteThisImage)) {
File::delete($deleteThisImage);
}
}
$response = [
'status' => true,
'data' => $updateData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function getCategoryList($params= [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$requestCriteria = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']]
],
'firstRow' => 1
];
$columns = ['id', 'name', 'country'];
$property = $this->propertyRepository->findByCriteria($requestCriteria, $columns);
$requestCriteria = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'whereOr' => [
['field' => 'country_code', 'condition' => '=', 'value' => $property['country']],
['field' => 'country_code', 'condition' => '=', 'value' => null],
],
'orderBy' => [
["field" => "name", "value" => "ASC"],
]
];
$columns = ['id', 'name', 'language_key', 'country_code', 'logo', 'type', 'status'];
$data = $this->awardsCertificateCategoryRepository->findByCriteria($requestCriteria,$columns);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function listAwardsCertificates($params= [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$requestCriteria = [
'criteria' => [
// ['field' => 'status', 'condition' => '=', 'value' => 1]
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']]
],
'with' => ['awardsCertificateCategory']
];
$columns = ['id', 'property_id', 'category_id', 'name', 'language_code', 'date', 'url', 'file_path', 'file_type', 'status'];
$data = $this->propertyAwardsCertificateRepository->findByCriteria($requestCriteria,$columns);
$responseData = collect($data)->map(function ($value){
$return = $value ;
unset($return['awards_certificate_category']) ;
$image = null ;
if($value['file_path']){
$urlPath = '/property-photos/' . $value['property_id'] . "/awards-certificates/";
$image = Config::get('app.imageUrl') . $urlPath . $value['file_path'];
}
$return['file_path'] = $image ? $image : null ;
$category = [
'category_name' => $value['awards_certificate_category']['name'],
'category_language_key' => $value['awards_certificate_category']['language_key'],
'category_country_code' => $value['awards_certificate_category']['country_code'],
'category_logo' => $value['awards_certificate_category']['logo'],
'category_type' => $value['awards_certificate_category']['type'],
'category_status' => $value['awards_certificate_category']['status'],
];
return array_merge($return, $category) ;
})->values()->all() ;
array_multisort(
array_column($responseData, 'category_name'), SORT_ASC,
array_column($responseData, 'id'), SORT_DESC,
$responseData
);
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function uploadCertificate($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try
{
$fileParam = [] ;
$validateParams = [
'file' => $params['file']
];
$validationResult = $this->propertyAwardCertificateUploadValidator->validate($validateParams);
if ($validationResult->errors()->first()) {
throw new ApiErrorException($validationResult->errors()->all());
}
$filePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $params['property_id'] . "/awards-certificates/";
if (!File::exists($filePath)) {
File::makeDirectory($filePath, 0777, true);
}
$uploadedFile = $params['file'];
$fileExt = $uploadedFile->getClientOriginalExtension();
$fileName = time() . '_'. generateRandomString(10) . '.' . $fileExt;
$quality = 80 ;
if(strtolower($fileExt) == 'pdf'){
$move = $params['file']->move($filePath, $fileName);
if ($move) {
$fileParam =
[
'file_path' => $fileName,
'file_type' => 'PDF',
];
}
}else{
$uploadedOriginalImage = Image::make($uploadedFile);
$imageWidth = $uploadedOriginalImage->width() ;
$imageHeight = $uploadedOriginalImage->height();
if ($imageHeight > $imageWidth) {
if($imageHeight > 768){
$imageHRatio = $imageHeight / 768 ;
$imageResizedOriginalWidth = intval($imageWidth / $imageHRatio);
$image = $uploadedOriginalImage->fit($imageResizedOriginalWidth, 768)->save($filePath . $fileName , $quality) ;
}else{
$image = $uploadedOriginalImage->save($filePath . $fileName , $quality) ;
}
} else {
if($imageWidth > 1024) {
$imageWRatio = $imageWidth / 1024 ;
$imageResizedOriginalHeight = intval($imageHeight / $imageWRatio);
$image = $uploadedOriginalImage->fit(1024, $imageResizedOriginalHeight)->save($filePath . $fileName , $quality) ;
}else{
$image = $uploadedOriginalImage->save($filePath . $fileName , $quality) ;
}
}
$fileParam =
[
'file_path' => $fileName,
'file_type' => 'IMG',
];
$uploadedOriginalImage->destroy();
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $fileParam];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['data'] = '';
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['data'] = '';
$response['statusCode'] = 400;
}
return output($response);
}
public function deletePhotoAwardsCertificates($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$requestCriteria = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'id', 'condition' => '=', 'value' => $params['award_certificate_id']],
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
],
'firstRow' => 1,
];
$columns = ['id', 'property_id', 'category_id', 'name', 'date', 'url', 'file_path', 'file_type', 'status'];
$awardCertificate = $this->propertyAwardsCertificateRepository->findByCriteria($requestCriteria,$columns);
if (!$awardCertificate) {
throw new Exception('api-unknown_error');
}
$urlPath = '/property-photos/' . $awardCertificate['property_id'] . "/awards-certificates/";
$deleteThisImage = Config::get('app.fileSystemDriver') . $urlPath . $awardCertificate['file_path'];
if($deleteThisImage) {
if (File::exists($deleteThisImage)) {
File::delete($deleteThisImage);
}
}
$id = $awardCertificate['id'] ;
$updateData = [
'file_path' => null,
'file_type' => null,
"updated_by" => fillOnUndefined($params, "user_id"),
"updated_at" => time(),
];
$updateResult = $this->propertyAwardsCertificateRepository->update($id, $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$response = [
'status' => true,
'data' => null,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function updateStatus($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$updateId = fillOnUndefined($param, "award_certificate_id") ;
$placeRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($param, 'property_id')],
['field' => 'id', 'condition' => '=', 'value' => $updateId],
]
];
$propertyWebData = $this->propertyAwardsCertificateRepository->findByCriteria($placeRequest, ['id', 'name']);
if (!$propertyWebData) {
throw new Exception('api-unknown_error');
}
$updateData =
[
"status" => fillOnUndefined($param, "set_status", 0),
"updated_by" => fillOnUndefined($param, "user_id"),
"updated_at" => time(),
];
$updateResult = $this->propertyAwardsCertificateRepository->update($updateId, $updateData);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$response = [
'status' => true,
'data' => null,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
}