1
0

Giant Update

This commit is contained in:
Wian Drs
2026-07-31 13:57:11 +07:00
parent f68d967c8b
commit b0d08211ec
112 changed files with 6674 additions and 3 deletions
@@ -0,0 +1,61 @@
<?php
namespace App\Http\Controllers\Billing;
use App\Http\Controllers\ApiController;
use App\Http\Requests\Billing\IndexBillingRequest;
use App\Http\Requests\Billing\StoreBillingProfileRequest;
use App\Http\Requests\Billing\UpdateBillingProfileRequest;
use App\Http\Resources\Billing\BillingProfileResource;
use App\Services\Billing\BillingProfileService;
use Illuminate\Http\Request;
class BillingProfileController extends ApiController
{
public function __construct(protected BillingProfileService $service) {}
public function index(IndexBillingRequest $request)
{
return $this->successPaginated($this->service->list($request->validated(), $request->user(), $this->tenantId($request)), BillingProfileResource::class, 'Daftar profile tagihan berhasil diambil');
}
public function store(StoreBillingProfileRequest $request)
{
return $this->created(new BillingProfileResource($this->service->create($request->validated(), $request->user(), $this->tenantId($request))), 'Profile tagihan berhasil dibuat');
}
public function show(Request $request, int $id)
{
$profile = $this->service->find($id);
$this->authorizeTenant($request, $profile->tenant_id);
return $this->success(new BillingProfileResource($profile), 'Detail profile tagihan berhasil diambil');
}
public function update(UpdateBillingProfileRequest $request, int $id)
{
$profile = $this->service->find($id);
$this->authorizeTenant($request, $profile->tenant_id);
return $this->updated(new BillingProfileResource($this->service->update($profile, $request->validated(), $request->user())), 'Profile tagihan berhasil diperbarui');
}
public function destroy(Request $request, int $id)
{
$profile = $this->service->find($id);
$this->authorizeTenant($request, $profile->tenant_id);
$this->service->delete($profile);
return $this->deleted('Profile tagihan berhasil dihapus');
}
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);
}
}
@@ -0,0 +1,79 @@
<?php
namespace App\Http\Controllers\Billing;
use App\Http\Controllers\ApiController;
use App\Http\Requests\Billing\IndexBillingRequest;
use App\Http\Requests\Billing\PayInvoiceRequest;
use App\Http\Requests\Billing\StoreInvoiceRequest;
use App\Http\Requests\Billing\UpdateInvoiceRequest;
use App\Http\Resources\Billing\InvoiceResource;
use App\Services\Billing\InvoiceService;
use Illuminate\Http\Request;
class InvoiceController extends ApiController
{
public function __construct(protected InvoiceService $service) {}
public function index(IndexBillingRequest $request)
{
return $this->successPaginated($this->service->list($this->scope($request), $request->validated(), $request->user(), $this->tenantId($request)), InvoiceResource::class, 'Daftar tagihan berhasil diambil');
}
public function options(Request $request)
{
return $this->success($this->service->options($request->user(), $this->tenantId($request)), 'Pilihan tagihan berhasil diambil');
}
public function store(StoreInvoiceRequest $request)
{
return $this->created(new InvoiceResource($this->service->create($request->validated(), $request->user(), $this->tenantId($request))), 'Tagihan berhasil dibuat');
}
public function show(Request $request, int $id)
{
$invoice = $this->service->find($id);
$this->authorizeTenant($request, $invoice->tenant_id);
return $this->success(new InvoiceResource($invoice), 'Detail tagihan berhasil diambil');
}
public function update(UpdateInvoiceRequest $request, int $id)
{
$invoice = $this->service->find($id);
$this->authorizeTenant($request, $invoice->tenant_id);
return $this->updated(new InvoiceResource($this->service->update($invoice, $request->validated(), $request->user())), 'Tagihan berhasil diperbarui');
}
public function pay(PayInvoiceRequest $request, int $id)
{
$invoice = $this->service->find($id);
$this->authorizeTenant($request, $invoice->tenant_id);
return $this->updated(new InvoiceResource($this->service->pay($invoice, $request->validated(), $request->user())), 'Pembayaran manual berhasil dicatat');
}
public function cancel(Request $request, int $id)
{
$invoice = $this->service->find($id);
$this->authorizeTenant($request, $invoice->tenant_id);
return $this->updated(new InvoiceResource($this->service->cancel($invoice, $request->user())), 'Tagihan berhasil dibatalkan');
}
private function scope(Request $request): string
{
return $request->route()->defaults['invoice_scope'] ?? 'running';
}
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);
}
}