Files
api-extranetwork/app/Http/Controllers/V1/PropertyPhotoController.php
ExtraNetwork e5c4b6aa13 first commit
2026-05-12 17:04:54 +03:00

382 lines
13 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\V1;
use App\Core\Service\PropertyService;
use App\Exceptions\ApiErrorException;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Core\Service\PropertyPhotoService\PropertyPhotoService;
use App\Core\Service\Google\GoogleVisionLabelService;
use Exception;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Config;
use App\Core\Service\PropertyConfigService;
use Illuminate\Support\Str;
use ZipArchive ;
class PropertyPhotoController extends Controller
{
private $request;
private $propertyPhotoService;
private $googleVisionLabelService;
private $propertyConfigService;
private $propertyService;
public function __construct
(
PropertyPhotoService $propertyPhotoService,
PropertyService $propertyService,
GoogleVisionLabelService $googleVisionLabelService,
PropertyConfigService $propertyConfigService
)
{
$this->propertyPhotoService = $propertyPhotoService;
$this->googleVisionLabelService = $googleVisionLabelService;
$this->propertyConfigService = $propertyConfigService;
$this->propertyService = $propertyService ;
}
public function getPropertyPhotos(Request $request)
{
$response = ['status' => false, 'statusCode' => 500 ,'message' => '', 'data' => null];
try
{
if ( is_null( $request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = json_decode($request->getContent(),1);
$params = current($params);
//TODO : Validation Yapılması gerekiyor.
$response = $this->propertyPhotoService->getPropertyPhotos($params);
}catch (ApiErrorException $e)
{
$response['message'] = $e->getMessage();
}catch (Exception $e)
{
$message = $e->getFile().' '.$e->getLine().' '.$e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function uploadPropertyPhoto(Request $request)
{
$response = ['status' => false, 'statusCode' => 500 ,'message' => '', 'data' => null];
try
{
if(!$request->hasFile('image'))
{
throw new ApiErrorException(lang('Photos not found'));
}
$propertyId = $request->input('property_id');
$photo = $request->file('image');
$param =
[
"property_id" => $propertyId,
"photo" => $photo,
];
$response = $this->propertyPhotoService->propertyPhotoUploadFilter($param);
$rateParams = [
'property_id' => $propertyId,
'user_id' => 1,
'property_rate_for' => 'Property.Photo.Upload',
];
$this->propertyConfigService->rateProperty($rateParams);
}catch (ApiErrorException $e)
{
$response['message'] = $e->getMessage();
}catch (Exception $e)
{
$message = $e->getFile().' '.$e->getLine().' '.$e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function setDefaultPhoto(Request $request)
{
$response = ['status' => false, 'statusCode' => 500 ,'message' => '', 'data' => null];
try
{
if ( is_null( $request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = json_decode($request->getContent(),1);
$params = current($params);
//TODO : Validation Yapılması gerekiyor.
$response = $this->propertyPhotoService->setDefaultPhoto($params);
}catch (ApiErrorException $e)
{
$response['message'] = $e->getMessage();
}catch (Exception $e)
{
$message = $e->getFile().' '.$e->getLine().' '.$e->getMessage();
$response['message'] = $e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function setPropertyPhotoOrder(Request $request)
{
$response = ['status' => false, 'statusCode' => 500 ,'message' => '', 'data' => null];
try
{
if ( is_null( $request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = json_decode($request->getContent(),1);
$params = current($params);
$requestParams = [
'locale' => fillOnUndefined($params, 'locale'),
'set_photo_order' => fillOnUndefined($params, 'set_photo_order'),
'property_id' => fillOnUndefined($params, 'property_id'),
'user_id' => $request->credentials->user_id,
];
//TODO : Validation Yapılması gerekiyor.
$response = $this->propertyPhotoService->setPhotoOrder($requestParams);
}catch (ApiErrorException $e)
{
$response['message'] = $e->getMessage();
}catch (Exception $e)
{
$message = $e->getFile().' '.$e->getLine().' '.$e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function publishPhotos(Request $request)
{
$response = ['status' => false, 'statusCode' => 500 ,'message' => '', 'data' => null];
try
{
if ( is_null( $request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = json_decode($request->getContent(),1);
$params = current($params);
//TODO : Validation Yapılması gerekiyor.
$response = $this->propertyPhotoService->publishPhotos($params);
}catch (ApiErrorException $e)
{
$response['message'] = $e->getMessage();
}catch (Exception $e)
{
$message = $e->getFile().' '.$e->getLine().' '.$e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function deletePropertyPhotos(Request $request)
{
$response = ['status' => false, 'statusCode' => 500 ,'message' => '', 'data' => null];
try
{
if ( is_null( $request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = json_decode($request->getContent(),1);
$params = current($params);
//TODO : Validation Yapılması gerekiyor.
$deletePhoto = $this->propertyPhotoService->deletePhotos($params);
if ($deletePhoto['status'] == false) {
throw new ApiErrorException($deletePhoto['message']);
}
$defaultPhotoCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_default', 'condition' => '=', 'value' => 1],
],
'firstRow' => 1
];
$propertyPhotoData = $this->propertyPhotoService->select($defaultPhotoCriteria, ['id']);
if ($propertyPhotoData['status'] == false) {
throw new ApiErrorException($propertyPhotoData['message']);
}
$defaultPhoto = isset($propertyPhotoData['data']['id']) ? $propertyPhotoData['data']['id'] : null ;
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ['default_photo' => $defaultPhoto] ];
}catch (ApiErrorException $e)
{
$response['message'] = $e->getMessage();
}catch (Exception $e)
{
$message = $e->getFile().' '.$e->getLine().' '.$e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function setPropertyPhotoCategory(Request $request)
{
$response = ['status' => false, 'statusCode' => 500 ,'message' => '', 'data' => null];
try
{
if ( is_null( $request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = json_decode($request->getContent(),1);
$params = current($params);
$requestParams = [
'locale' => fillOnUndefined($params, 'locale'),
'property_id' => fillOnUndefined($params, 'property_id'),
'user_id' => $request->credentials->user_id,
'set_photo_category' => fillOnUndefined($params, 'set_photo_category'),
];
//TODO : Validation Yapılması gerekiyor.
$response = $this->propertyPhotoService->setPhotoCategory($requestParams);
}catch (ApiErrorException $e)
{
$response['message'] = $e->getMessage();
}catch (Exception $e)
{
$message = $e->getFile().' '.$e->getLine().' '.$e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function downloadPropertyPhotos(Request $request)
{
$response = ['status' => false, 'statusCode' => 500, 'message' => '', 'data' => null];
try {
if (is_null($request->getContent())) {
throw new Exception('api-unknown_error');
}
$params = json_decode($request->getContent(), 1);
$params = current($params);
$responseData = null ;
$propertyId = $params['property_id'];
$getPhotosRequest = [
'property_id' => $propertyId
];
if(isset($params['custom']) && !empty($params['custom'])) {
$getPhotosRequest['custom'] = $params['custom'];
}
$response = $this->propertyPhotoService->getPropertyPhotos($getPhotosRequest);
if ($response['status'] != 'success') {
throw new Exception('api-unknown_error');
}
if (!$response['data']) {
throw new Exception('api-unknown_error');
}
$photos = $response['data'];
if ($photos) {
$public_dir = public_path();
$zipFileStoragePath = $public_dir . '/property-zip-files';
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $propertyId],
],
'firstRow' => true
];
$thisProperty = $this->propertyService->select($propertyRequest);
if ($thisProperty['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$hotelName = Str::slug($thisProperty['data']['name'], '_', 'en');
if (!File::exists($zipFileStoragePath)) {
File::makeDirectory($zipFileStoragePath, 0777, true);
}
$zipFileName = $hotelName . '_photos.zip';
$zip = new ZipArchive;
if(file_exists($zipFileStoragePath . '/' . $zipFileName)) {
unlink($zipFileStoragePath . '/' . $zipFileName);
}
if ($zip->open($zipFileStoragePath . '/' . $zipFileName, ZipArchive::CREATE) === TRUE) {
foreach ($photos as $photo) {
$photoUrlFilePath = Config::get('app.fileSystemDriver') . "/property-photos/{$photo['property_id']}" . "/{$photo['photo_name']}_medium.{$photo['file_ext']}";
$fileName = "{$photo['photo_name']}_medium.{$photo['file_ext']}";
if (file_exists($photoUrlFilePath)) {
$zip->addFile($photoUrlFilePath, $fileName);
}
}
$zip->close();
}
$responseData = Config::get('app.zipFilesUrl').$zipFileName;
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ['zipFile' => $responseData]];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . ' ' . $e->getLine() . ' ' . $e->getMessage();
Log::error($message);
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
}