Giant Update
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Customer;
|
||||
|
||||
use App\Http\Controllers\ApiController;
|
||||
use App\Http\Requests\Customer\ActivateCustomerRequest;
|
||||
use App\Http\Requests\Customer\IndexCustomerRequest;
|
||||
use App\Http\Requests\Customer\StoreCustomerRequest;
|
||||
use App\Http\Requests\Customer\UpdateCustomerRequest;
|
||||
use App\Http\Resources\Customer\CustomerResource;
|
||||
use App\Services\Customer\CustomerService;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CustomerController extends ApiController
|
||||
{
|
||||
public function __construct(protected CustomerService $service) {}
|
||||
|
||||
public function index(IndexCustomerRequest $request)
|
||||
{
|
||||
return $this->successPaginated(
|
||||
$this->service->list($this->scope($request), $request->validated(), $request->user(), $this->tenantId($request)),
|
||||
CustomerResource::class,
|
||||
'Daftar customer berhasil diambil'
|
||||
);
|
||||
}
|
||||
|
||||
public function options(Request $request)
|
||||
{
|
||||
return $this->success(
|
||||
$this->service->options($request->user(), $this->tenantId($request)),
|
||||
'Pilihan relasi customer berhasil diambil'
|
||||
);
|
||||
}
|
||||
|
||||
public function store(StoreCustomerRequest $request)
|
||||
{
|
||||
return $this->created(
|
||||
new CustomerResource($this->service->create($request->validated(), $request->user(), $this->tenantId($request))),
|
||||
'Customer berhasil didaftarkan'
|
||||
);
|
||||
}
|
||||
|
||||
public function show(Request $request, int $id)
|
||||
{
|
||||
$customer = $this->service->find($id, $this->scope($request) === 'trash');
|
||||
$this->authorizeTenant($request, $customer->tenant_id);
|
||||
|
||||
return $this->success(new CustomerResource($customer), 'Detail customer berhasil diambil');
|
||||
}
|
||||
|
||||
public function update(UpdateCustomerRequest $request, int $id)
|
||||
{
|
||||
$customer = $this->service->find($id);
|
||||
$this->authorizeTenant($request, $customer->tenant_id);
|
||||
|
||||
return $this->updated(
|
||||
new CustomerResource($this->service->update($customer, $request->validated(), $request->user())),
|
||||
'Data customer berhasil diperbarui'
|
||||
);
|
||||
}
|
||||
|
||||
public function activate(ActivateCustomerRequest $request, int $id)
|
||||
{
|
||||
$customer = $this->service->find($id);
|
||||
$this->authorizeTenant($request, $customer->tenant_id);
|
||||
|
||||
return $this->updated(new CustomerResource($this->service->activate($customer, $request->validated())), 'Customer berhasil diaktifkan');
|
||||
}
|
||||
|
||||
public function deactivate(Request $request, int $id)
|
||||
{
|
||||
$customer = $this->service->find($id);
|
||||
$this->authorizeTenant($request, $customer->tenant_id);
|
||||
|
||||
return $this->updated(new CustomerResource($this->service->deactivate($customer)), 'Customer berhasil dinonaktifkan');
|
||||
}
|
||||
|
||||
public function destroy(Request $request, int $id)
|
||||
{
|
||||
$customer = $this->service->find($id);
|
||||
$this->authorizeTenant($request, $customer->tenant_id);
|
||||
$this->service->trash($customer);
|
||||
|
||||
return $this->deleted('Customer dipindahkan ke Sampah');
|
||||
}
|
||||
|
||||
public function restore(Request $request, int $id)
|
||||
{
|
||||
$customer = $this->service->find($id, true);
|
||||
$this->authorizeTenant($request, $customer->tenant_id);
|
||||
|
||||
return $this->updated(new CustomerResource($this->service->restore($customer)), 'Customer berhasil dipulihkan');
|
||||
}
|
||||
|
||||
public function forceDelete(Request $request, int $id)
|
||||
{
|
||||
$customer = $this->service->find($id, true);
|
||||
$this->authorizeTenant($request, $customer->tenant_id);
|
||||
$this->service->forceDelete($customer);
|
||||
|
||||
return $this->deleted('Customer dihapus permanen');
|
||||
}
|
||||
|
||||
private function scope(Request $request): string
|
||||
{
|
||||
return $request->route()->defaults['customer_scope'] ?? 'orders';
|
||||
}
|
||||
|
||||
private function tenantId(Request $request): ?int
|
||||
{
|
||||
return $request->attributes->get('tenant_id');
|
||||
}
|
||||
|
||||
private function authorizeTenant(Request $request, int $tenantId): void
|
||||
{
|
||||
abort_unless($request->user()->isMasterAdmin() || $tenantId === $this->tenantId($request), 403);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user