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

255 lines
9.2 KiB
PHP

<?php
namespace App\Core\Service;
use App\Core\Repository\PropertyRoomPhotoMapping\PropertyRoomPhotoMappingRepository;
use App\Core\Validator\PropertyRoom\PropertyRoomPhotoMappingAddValidator;
use App\Core\Service\LanguageService ;
use App\Core\Service\ApplicationCacheService ;
use App;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Config;
use Exception;
use App\Exceptions\ApiErrorException;
class PropertyRoomPhotoMappingService
{
private $languageService;
private $propertyRoomPhotoMappingRepository;
private $applicationCacheService ;
private $propertyRoomPhotoMappingAddValidator;
public function __construct(
PropertyRoomPhotoMappingRepository $propertyRoomPhotoMappingRepository,
LanguageService $languageService,
PropertyRoomPhotoMappingAddValidator $propertyRoomPhotoMappingAddValidator,
ApplicationCacheService $applicationCacheService
)
{
$this->languageService = $languageService;
$this->propertyRoomPhotoMappingRepository = $propertyRoomPhotoMappingRepository;
$this->applicationCacheService = $applicationCacheService;
$this->propertyRoomPhotoMappingAddValidator = $propertyRoomPhotoMappingAddValidator;
}
public function create($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$insertData =
[
"status" => fillOnUndefined($param, "status", 0),
"created_by" => fillOnUndefined($param, "created_by"),
"updated_by" => fillOnUndefined($param, "updated_by"),
"created_at" => time(),
"updated_at" => time(),
];
$userCreateResult = $this->propertyRoomPhotoMappingRepository->create($insertData);
if ($userCreateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$userData = $userCreateResult["data"]->toArray();
$response['status'] = 1;
$response['data'] = $userData;
} catch (ApiErrorException $e) {
$response['status'] = 0;
$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($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyRoomPhotoMappingRepository->findByCriteria($param, $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 deleteById($param){
$userCreateResult = $this->propertyRoomPhotoMappingRepository->delete();
}
public function updatePropertyRoomPhotoMapping($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try
{
$validationResult = $this->propertyRoomPhotoMappingAddValidator->validate($params);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$addPropertyRoomPhotoMapping = [];
$addPhotoList = collect($params['property_room_photo'])
->where('is_selected' ,'=', true);
$addPhotoIds = $addPhotoList->keyBy("id")->keys()->toArray();
$removePhotoList = collect($params['property_room_photo'])
->where('is_selected' ,'=', false);
$removePhotoIds = $removePhotoList->keyBy("id")->keys()->toArray();
$checkPropertyMappingRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'room_id', 'condition' => '=', 'value' => $params['room_id']],
],
"whereIn" => [
["field" => "photo_id", "value" => $addPhotoIds]
]
];
$checkPropertyMappingResponse = $this->select($checkPropertyMappingRequest,['id', 'property_id', 'photo_id']);
if($checkPropertyMappingResponse['status'] != 'success'){
throw new ApiErrorException(lang('Mapping data not loaded'));
}
$checkPropertyMappingCollect = collect($checkPropertyMappingResponse['data']);
foreach ($addPhotoList->toArray() as $key => $param)
{
if(
!$checkPropertyMappingCollect->where('property_id', '=', $params['property_id'])
->where('photo_id', '=', $param['id'])
->first()
){
$addPropertyRoomPhotoMapping[] =
[
'property_id' => $params['property_id'],
'room_id' => $params['room_id'],
'photo_id' => fillOnUndefined($param, 'id'),
'created_by' => $params['user_id'],
'updated_by' => $params['user_id'],
];
}
}
$response = $this->propertyRoomPhotoMappingRepository->createAll($addPropertyRoomPhotoMapping);
if($removePhotoIds){
$findCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'room_id', 'condition' => '=', 'value' => $params['room_id']],
],
"whereIn" =>
[
["field" => "photo_id", "value" => $removePhotoIds]
]
];
$deletePropertyRoomPhotoMapping = $this->propertyRoomPhotoMappingRepository->findByCriteria($findCriteria);
$deleteThisIds = [];
foreach ($deletePropertyRoomPhotoMapping as $deleteThisItem){
$deleteThisIds[] = $deleteThisItem['id'];
}
if($deleteThisIds){
$this->propertyRoomPhotoMappingRepository->deleteById($deleteThisIds);
}
}
if ($response['status'] != 'success') {
throw new ApiErrorException(lang('Data is not added')) ;
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => null];
} 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 destroy($params){
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$deleteCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'photo_id', 'condition' => '=', 'value' => $params['photo_id']],
]
];
$deleteData = $this->propertyRoomPhotoMappingRepository->findByCriteria($deleteCriteria, ['id']);
$deleteData = $deleteData ? $deleteData : [] ;
if($deleteData){
$deleteIds = array_column($deleteData, 'id') ;
$destroyResult = $this->propertyRoomPhotoMappingRepository->destroy($deleteIds);
if ($destroyResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
}
$response = [
'status' => true,
'data' => null
];
} 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);
}
}