ManagementSystem/BACKEND/Modules/Admin/app/Http/Controllers/ClientController.php

190 lines
5.4 KiB
PHP
Executable File

<?php
namespace Modules\Admin\app\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\Client;
use App\Traits\HasFilterRequest;
use App\Traits\HasOrderByRequest;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use JsonException;
use Modules\Admin\app\Http\Requests\ClientRequest;
class ClientController extends Controller
{
use HasOrderByRequest;
use HasFilterRequest;
public function __construct()
{
// module check model exist and table
if (!class_exists(Client::class)) {
throw new JsonException("user table not exist");
}
;
}
public function get(Request $request)
{
$client = new Client;
// Order by
$this->orderByRequest($client, $request);
// Filter
$this->filterRequest(
builder: $client,
request: $request,
filterKeys: [
'name' => self::F_TEXT,
'phone' => self::F_TEXT,
'email' => self::F_TEXT,
'company' => self::F_TEXT,
'status' => self::F_BOOLEAN,
'subscribe' => self::F_BOOLEAN,
]
);
$responseData = array_merge(
$client->paginate($request->get('per_page'))->toArray(),
['status' => true]
);
return response()->json($responseData);
}
public function create(ClientRequest $request)
{
$payload = $request->all();
$client = new Client;
$client->name = $request->get('name');
$client->password = bcrypt($request->get('password', Client::DEFAULT_PASSWORD));
$client->email = $request->get('email', '');
$client->email_verified_at = now();
$client->phone = $request->get('phone', '');
$client->country_code = $request->get('country_code', 'AU');
$client->company = $request->get('company', '');
$client->save();
if ($request->hasFile('avatar')) {
$file = $request->file('avatar');
$filename = $client->id . '.' . $file->getClientOriginalExtension();
$path = Client::PATH_AVATAR . "/$filename";
Storage::disk('public')->put($path, $file->get());
$client->avatar = $path;
$client->save();
}
return response()->json([
'data' => $client,
'status' => true
]);
}
public function update(ClientRequest $request)
{
$id = $request->get('id');
$client = Client::find($id);
if ($request->has('name')) {
$client->name = $request->get('name');
}
if ($request->has('password') && !empty($request->get('password'))) {
$client->password = bcrypt($request->get('password'));
}
if ($request->has('email')) {
$client->email = $request->get('email');
}
if ($request->has('phone')) {
$client->phone = $request->get('phone');
}
if ($request->has('company')) {
$client->company = $request->get('company');
}
if ($request->has('country_code')) {
$client->country_code = $request->get('country_code');
}
if ($request->has('status')) {
$client->status = ($request->get('status') == 'true' || $request->get('status') == '1') ? 1 : 0;
}
$client->save();
if ($request->hasFile('avatar')) {
$file = $request->file('avatar');
$filename = $client->id . '.' . $file->getClientOriginalExtension();
$path = Client::PATH_AVATAR . "/$filename";
$avatarOld = Storage::disk('public')->exists($client->avatar);
if ($avatarOld) {
Storage::disk('public')->delete($client->avatar);
}
Storage::disk('public')->put($path, $file->get());
$client->update([
'avatar' => $path
]);
}
return response()->json([
'data' => $client,
'status' => true
]);
}
public function delete(ClientRequest $request)
{
$id = $request->get('id');
Client::destroy($id);
return response()->json([
'status' => true
]);
}
// Delete multiple clients
public function deletes(ClientRequest $request)
{
$clients = $request->get('clients');
$ids = collect($clients)->pluck('id');
Client::whereIn('id', $ids)->delete();
return response()->json([
'data' => $ids,
'status' => true
]);
}
// Update multiple clients
public function updates(ClientRequest $request)
{
$clients = $request->get('clients');
$ids = collect($clients)->pluck('id');
foreach ($clients as $ClientRequest) {
// convert to object|array to array
$ClientRequest = collect($ClientRequest)->toArray();
// handle array
$client = Client::find($ClientRequest['id']);
if ($client) {
// exclude id field
unset($client['id']);
$client->update($ClientRequest);
}
}
return response()->json([
'data' => Client::whereIn('id', $ids)->get(),
'status' => true
]);
}
}