Files
myskin-api/app/Http/Controllers/Api/V1/AccountController.php
T
2026-07-15 17:23:15 +07:00

145 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1;
use App\Filters\V1\AccountFilter;
use App\Http\Controllers\Api\Controller;
use App\Http\Requests\V1\StoreAccountRequest;
use App\Http\Requests\V1\UpdateAccountRequest;
use App\Http\Resources\V1\AccountCollection;
use App\Http\Resources\V1\AccountResource;
use App\Http\Resources\V1\DoctorListResource;
use App\Models\Account;
use Illuminate\Http\Request;
class AccountController extends Controller
{
public function __construct()
{
$this->middleware('auth:sanctum');
$this->authorizeResource(Account::class,'account');
}
public function index(Request $request)
{
$filter = new AccountFilter();
$filterItems = $filter->transform($request);
$includeSubmissions = $request->query('includeSubmissions');
$includeDoctorProfiles = $request->query('includeDoctorProfiles');
$accounts = Account::where($filterItems);
if ($includeSubmissions) {
$accounts = $accounts->with('submission');
}
if ($includeDoctorProfiles) {
$accounts = $accounts->with('doctorProfile');
}
return new AccountCollection($accounts->paginate()->appends($request->query()));
}
public function listDoctors(Request $request)
{
$search = $request->query('search');
$query = Account::where('role', 'doctor');
if ($search) {
$query->where('name', 'like', "%{$search}%");
}
if ($limit = (int) $request->query('limit', 0)) {
$query->limit($limit);
}
$doctors = $query->orderBy('name')->get(['id', 'name']);
return DoctorListResource::collection($doctors);
}
public function welcome(Request $request)
{
$user = $request->user();
$firstName = explode(' ', trim($user->name))[0] ?? $user->name;
$id = $user->id;
$role = ucfirst($user->role);
$message = "Welcome back, {$firstName}! (You are logged in as {$role})";
return response()->json([
'accountId' => $id,
'message' => $message,
'firstName' => $firstName,
'role' => $user->role,
]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreAccountRequest $request)
{
//
return new AccountResource(Account::create($request->all()));
}
/**
* Display the specified resource.
*/
public function show(Account $account)
{
//
$includeSubmissions = request()->query('includeSubmissions');
if ($includeSubmissions) {
$account->loadMissing('submission');
}
$includeDoctorProfiles = request()->query('includeDoctorProfiles');
if ($includeDoctorProfiles) {
$account->loadMissing('doctorProfile');
}
return new AccountResource($account);
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Account $account)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(UpdateAccountRequest $request, Account $account)
{
//
$account->update($request->validated());
return new AccountResource($account->fresh());
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Account $account)
{
//
$account->delete();
return response()->json(['message' => 'Account deleted.']);
}
}