NIM_E31222534/routes/api.php

172 lines
9.2 KiB
PHP

<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\AnakController;
use App\Http\Controllers\Api\PerkembanganAnakApiController;
use App\Http\Controllers\Api\JadwalApiController;
use App\Http\Controllers\Api\ImunisasiApiController;
use App\Http\Controllers\Api\VitaminApiController;
use App\Http\Controllers\Api\StuntingApiController;
use App\Http\Controllers\Api\ArtikelApiController;
use Carbon\Carbon;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/
// Rute publik
Route::post('/login', [AuthController::class, 'login']);
Route::post('/register', [AuthController::class, 'register']);
// Endpoint untuk testing (tidak memerlukan autentikasi)
if (app()->environment('local', 'development')) {
Route::post('/test-jadwal-complete/{id}', [ImunisasiApiController::class, 'completeJadwal']);
Route::post('/test-vitamin-complete/{id}', [VitaminApiController::class, 'completeJadwal']);
Route::post('/test-check-imunisasi-status/{id}', [JadwalApiController::class, 'checkImunisasiStatus']);
Route::post('/test-check-vitamin-status/{id}', [JadwalApiController::class, 'checkVitaminStatus']);
Route::post('/test-update-imunisasi-status/{id}', [JadwalApiController::class, 'updateImunisasiStatus']);
Route::post('/test-update-vitamin-status/{id}', [JadwalApiController::class, 'updateVitaminStatus']);
Route::post('/test-update-pemeriksaan-status/{id}', [JadwalApiController::class, 'updatePemeriksaanStatus']);
}
// Rute yang memerlukan autentikasi
Route::middleware('auth:sanctum')->group(function () {
// Info pengguna
Route::get('/user', [AuthController::class, 'user']);
Route::put('/user/{id}', [AuthController::class, 'update']);
Route::post('/logout', [AuthController::class, 'logout']);
// === Endpoint umum (web + mobile) ===
// Endpoint Anak CRUD
Route::apiResource('anak', AnakController::class);
Route::get('/anak/pengguna/nik/{nik}', [AnakController::class, 'findByPenggunaNik']);
Route::post('/anak/link-to-parent', [AnakController::class, 'linkToParent']);
// Endpoint Perkembangan Anak
Route::get('/perkembangan/anak/{anak_id}', [PerkembanganAnakApiController::class, 'getByAnakId']);
Route::get('/perkembangan/{id}', [PerkembanganAnakApiController::class, 'show']);
Route::post('/perkembangan', [PerkembanganAnakApiController::class, 'store']);
Route::put('/perkembangan/{id}', [PerkembanganAnakApiController::class, 'update']);
Route::delete('/perkembangan/{id}', [PerkembanganAnakApiController::class, 'destroy']);
// Endpoint Jadwal (Schedules)
Route::prefix('jadwal')->group(function () {
Route::get('/', [JadwalApiController::class, 'index']);
Route::get('/upcoming', [JadwalApiController::class, 'upcoming']);
Route::get('/upcoming/anak/{anakId}', [JadwalApiController::class, 'upcomingForChild']);
Route::get('/imunisasi/anak/{anakId}', [JadwalApiController::class, 'imunisasiForChild']);
Route::get('/vitamin/anak/{anakId}', [JadwalApiController::class, 'vitaminForChild']);
Route::get('/imunisasi/age-ranges', [JadwalApiController::class, 'imunisasiAgeRanges']);
Route::get('/vitamin/age-ranges', [JadwalApiController::class, 'vitaminAgeRanges']);
Route::get('/pemeriksaan', [JadwalApiController::class, 'pemeriksaan']);
Route::get('/imunisasi', [JadwalApiController::class, 'imunisasi']);
Route::get('/vitamin', [JadwalApiController::class, 'vitamin']);
Route::get('/riwayat/anak/{anakId}', [JadwalApiController::class, 'riwayatAnak']);
Route::get('/nearest/{anakId}', [JadwalApiController::class, 'nearestSchedule']);
});
Route::get('/jenis-imunisasi', [JadwalApiController::class, 'jenisImunisasi']);
Route::get('/jenis-vitamin', [JadwalApiController::class, 'jenisVitamin']);
// Endpoint Imunisasi
Route::prefix('imunisasi')->group(function () {
Route::get('/', [ImunisasiApiController::class, 'index']);
Route::get('/{id}', [ImunisasiApiController::class, 'show']);
Route::put('/{id}', [ImunisasiApiController::class, 'update']);
Route::get('/anak/{anakId}', [ImunisasiApiController::class, 'getByAnakId']);
Route::get('/jadwal/status', [ImunisasiApiController::class, 'checkImplementationStatus']);
Route::get('/jadwal/eligible-children/{jadwalId}', [ImunisasiApiController::class, 'getEligibleChildren']);
Route::post('/jadwal/confirm/{id}', [ImunisasiApiController::class, 'confirmImplementation']);
Route::post('/jadwal/complete/{id}', [ImunisasiApiController::class, 'completeJadwal']);
Route::get('/jadwal/anak/{anakId}', [ImunisasiApiController::class, 'getJadwalForAnak']);
Route::post('/create-from-jadwal', [ImunisasiApiController::class, 'createFromJadwal']);
});
// Endpoint Vitamin
Route::prefix('vitamin')->group(function () {
Route::get('/', [VitaminApiController::class, 'index']);
Route::get('/{id}', [VitaminApiController::class, 'show']);
Route::put('/{id}', [VitaminApiController::class, 'update']);
Route::get('/anak/{anakId}', [VitaminApiController::class, 'getByAnakId']);
Route::get('/jadwal/status', [VitaminApiController::class, 'checkImplementationStatus']);
Route::get('/jadwal/eligible-children/{jadwalId}', [VitaminApiController::class, 'getEligibleChildren']);
Route::post('/jadwal/confirm/{id}', [VitaminApiController::class, 'confirmImplementation']);
Route::post('/jadwal/complete/{id}', [VitaminApiController::class, 'completeJadwal']);
Route::get('/jadwal/anak/{anakId}', [VitaminApiController::class, 'getJadwalForAnak']);
Route::post('/create-from-jadwal', [VitaminApiController::class, 'createFromJadwal']);
});
// Endpoint Stunting
Route::prefix('stunting')->group(function () {
Route::get('/anak/{anak_id}', [StuntingApiController::class, 'getByAnakId']);
Route::get('/{id}', [StuntingApiController::class, 'show']);
Route::post('/', [StuntingApiController::class, 'store']);
Route::put('/{id}', [StuntingApiController::class, 'update']);
Route::delete('/{id}', [StuntingApiController::class, 'destroy']);
Route::post('/calculate', [StuntingApiController::class, 'calculateStatus']);
});
// Endpoint Artikel
Route::prefix('artikel')->group(function () {
Route::get('/', [ArtikelApiController::class, 'index']);
Route::get('/latest', [ArtikelApiController::class, 'latest']);
Route::get('/{id}', [ArtikelApiController::class, 'show']);
Route::post('/', [ArtikelApiController::class, 'store']);
Route::post('/{id}', [ArtikelApiController::class, 'update']);
Route::delete('/{id}', [ArtikelApiController::class, 'destroy']);
});
// === Endpoint khusus untuk aplikasi mobile ===
Route::prefix('mobile')->group(function () {
// Anak endpoints untuk mobile
Route::get('/anak/pengguna/{pengguna_id}', [AnakController::class, 'getAnakByPenggunaId']);
Route::get('/anak/{id}', [AnakController::class, 'show']);
// Perkembangan anak endpoints untuk mobile
Route::get('/perkembangan/anak/{anak_id}', [PerkembanganAnakApiController::class, 'getByAnakId']);
Route::get('/perkembangan/{id}', [PerkembanganAnakApiController::class, 'show']);
// Jadwal endpoints untuk mobile
Route::get('/jadwal/upcoming/anak/{anakId}', [JadwalApiController::class, 'upcomingForChild']);
Route::get('/jadwal/nearest/{anakId}', [JadwalApiController::class, 'nearestSchedule']);
// Imunisasi dan vitamin endpoints untuk mobile
Route::get('/imunisasi/anak/{anakId}', [ImunisasiApiController::class, 'getByAnakId']);
Route::get('/vitamin/anak/{anakId}', [VitaminApiController::class, 'getByAnakId']);
// Endpoint stunting jika ada
if (class_exists(StuntingApiController::class)) {
Route::get('/stunting/anak/{anak_id}', [StuntingApiController::class, 'getByAnakId']);
Route::get('/stunting/{id}', [StuntingApiController::class, 'show']);
Route::post('/stunting/calculate', [StuntingApiController::class, 'calculateStatus']);
}
// Endpoint artikel untuk mobile
Route::get('/artikel', [ArtikelApiController::class, 'index']);
Route::get('/artikel/latest', [ArtikelApiController::class, 'latest']);
Route::get('/artikel/{id}', [ArtikelApiController::class, 'show']);
});
});
// Endpoint untuk debugging (Hanya untuk development)
if (app()->environment('local')) {
Route::get('/debug/auth-check', function (Request $request) {
return response()->json([
'authenticated' => auth()->check(),
'user' => auth()->user(),
'token_valid' => $request->bearerToken() ? true : false,
]);
})->middleware('auth:sanctum');
// Debugging routes lainnya...
}