ldc-com-app-bo/app/Http/Controllers/API/SyncController.php
2023-08-29 11:39:46 +02:00

245 lines
7.8 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\Contacts\DestroyContactsRequest;
use App\Http\Requests\Api\Contacts\UpsertContactsRequest;
use App\Http\Resources\AppUserResource;
use App\Http\Resources\ContactResource;
use App\Http\Resources\DirectoryResource;
use App\Http\Resources\DocumentResource;
use App\Http\Resources\FormularyResource;
use App\Mail\SendFlyer;
use App\Mail\SendFlyerFailed;
use App\Models\AppUser;
use App\Models\Contact;
use App\Models\Directory;
use App\Models\Document;
use App\Models\Formulary;
use App\Models\Setting;
use Google\Cloud\Vision\V1\ImageAnnotatorClient;
use GuzzleHttp\Exception\ClientException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\URL;
class SyncController extends Controller
{
/**
* @param \Illuminate\Http\Request $request
* @return \App\Http\Resources\AppUserCollection
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
public function getUsers(Request $request)
{
return AppUserResource::collection(AppUser::where('status', 1)->get());
}
// *** --- START CONTACTS ---
/**
* Get Contacts
*
* @param \App\Models\AppUser $app_user
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function getContacts(AppUser $app_user)
{
return ContactResource::collection(
Contact::query()->whereHas('appUser', function (Builder $q) use ($app_user) {
$q->where('id', $app_user->id);
})->get()
);
}
/**
* Upsert contacts
*
* @param \App\Http\Requests\Api\Contacts\UpsertContactsRequest $request
* @param \App\Models\AppUser $app_user
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function upsertContact(UpsertContactsRequest $request, AppUser $app_user)
{
$contactQuery = Contact::query()->whereHas('appUser', function (Builder $q) use ($app_user) {
$q->where('id', $app_user->id);
});
\collect($request->contacts)->each(function (array $contact) use ($contactQuery) {
Arr::set($contact, 'data', Arr::get($contact, 'dataParsed'));
/** @var \App\Models\Contact */
$model = $contactQuery->where('id', Arr::get($contact, 'id'))->firstOrNew();
$model->fill($contact);
$model->saveOrFail();
});
// * HTTP 200 is ok.
return \response()->json();
}
/**
* Destroy contacts
*
* @param \App\Http\Requests\Api\Contacts\DestroyContactsRequest $request
* @param \App\Models\AppUser $app_user
* @return \Illuminate\Http\Resources\Json
*/
public function destroyContacts(DestroyContactsRequest $request, AppUser $app_user)
{
Contact::query()->whereIn('id', $request->contactUuidList)
->whereHas('appUser', function (Builder $q) use ($app_user) {
$q->where('id', $app_user->id);
})->delete();
// * HTTP 200 is ok.
return \response()->json();
}
// *** --- END CONTACTS ---
/**
* @param \Illuminate\Http\Request $request
* @return \App\Http\Resources\DirectoriesCollection
*/
public function getDirectories(Request $request)
{
return DirectoryResource::collection(Directory::all());
}
/**
* @param \Illuminate\Http\Request $request
* @return \App\Http\Resources\DocumentsCollection
*/
public function getDocuments(Request $request)
{
return DocumentResource::collection(Document::where('status', 1)->get());
}
/**
* @param \Illuminate\Http\Request $request
* @return array
*/
public function getVersion(Request $request)
{
$app_uuid = $request->app_uuid;
$app_version = $request->app_version;
$version = Setting::select('value AS version')->where('key', 'version')->first();
$ShowIsActive = Setting::select('value AS ShowIsActive')->where('key', 'ShowIsActive')->first();
try {
$client = new \GuzzleHttp\Client();
$response = $client->request(
'GET',
'https://store.ldc.fr/api/get-version?token=@P$oi6or!bL2-r%3C&app_uuid=' . $app_uuid
);
$body = $response->getBody();
$storeVersion = json_decode($body)->version;
} catch (ClientException $e) {
$storeVersion = $app_version;
}
if ($storeVersion > $app_version) {
$newApp = true;
} else {
$newApp = false;
}
return ['version' => $version->version, 'ShowIsActive' => $ShowIsActive->ShowIsActive, 'newApp' => $newApp];
}
/**
* @return \App\Http\Resources\ContactsCollection
*/
public function getFormularies()
{
return FormularyResource::collection(Formulary::all());
}
/**
* @param \Illuminate\Http\Request $request
* @return string
*/
public function sendFlyer(Request $request)
{
$email = $request->emails['email'];
$subject = $request->emails['subject'];
$message = $request->emails['message'];
$app_user_id = $request->emails['app_user_id'];
$docs = $request->emails['documents'];
$user = AppUser::find($app_user_id);
$attach = [];
$filesName = [];
$noExists = [];
foreach ($docs as $doc) {
$exists = Storage::disk('public')->exists('docs/' . $doc['uuid'] . '.' . $doc['type']);
if ($exists) {
array_push($attach, URL::temporarySignedRoute(
'bo.docs.download',
now()->addDays(30),
['uuid' => $doc['uuid']]
));
array_push($filesName, $doc['title']);
} else {
array_push($noExists, $doc['title']);
}
}
if (count($noExists) === 0) {
$message = new SendFlyer([
'body' => $message,
'from' => $user->email,
'fromName' => $user->firstname . ' ' . $user->lastname,
'subject' => '[' . config('app.BRAND') . '] - ' . $subject,
'attach' => $attach,
'filesName' => $filesName,
]);
Mail::to($email)
->cc($user->email)
->queue($message);
} else {
$message = new SendFlyerFailed([
'email' => $email,
'message' => $message,
'subject' => $subject,
'filesName' => $filesName,
'noExists' => $noExists
]);
Mail::to($user->email)
->queue($message);
} //end if
return 'OK';
}
/**
* @param \Illuminate\Http\Request $request
* @return void
*/
public function processOcr(Request $request)
{
// Instantiates a client.
$imageAnnotator = new ImageAnnotatorClient([
'credentials' => public_path() . '/credentials.json'
]);
// The name of the image file to annotate.
$fileName = 'test.jpg';
// Prepare the image to be annotated.
$image = file_get_contents(public_path() . "/" . $fileName);
// Performs label detection on the image file.
$response = $imageAnnotator->textDetection($image);
$labels = $response->getTextAnnotations();
foreach ($labels as $label) {
echo $label->getDescription() . "<br>";
}
}
}