first init

This commit is contained in:
ISMAIL MASSERAN
2026-06-08 11:37:14 +08:00
commit 94ecbe5887
1058 changed files with 87732 additions and 0 deletions
@@ -0,0 +1,62 @@
<?php
namespace Modules\Auth\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Modules\Auth\Entities\User;
use Modules\Auth\Services\AuthSessionService;
use Modules\Auth\Services\EmailVerificationOtpService;
class EmailVerificationController extends Controller
{
public function __construct(
protected EmailVerificationOtpService $otpService,
protected AuthSessionService $authSession
) {}
public function verify(Request $request): JsonResponse
{
$validated = $request->validate([
'email' => ['required', 'string', 'email'],
'otp' => ['required', 'string', 'digits:6'],
]);
$user = User::where('email', $validated['email'])->first();
if (! $user) {
return response()->json([
'success' => false,
'message' => 'Kod OTP tidak sah.',
], 422);
}
$this->otpService->verify($user, $validated['otp']);
$user->refresh();
return $this->authSession->createAuthResponse(
$user,
'E-mel anda telah berjaya disahkan. Akaun anda sedang menunggu pengaktifan daripada pentadbir sistem.'
);
}
public function resend(Request $request): JsonResponse
{
$validated = $request->validate([
'email' => ['required', 'string', 'email'],
]);
$user = User::where('email', $validated['email'])->first();
if ($user && ! $user->hasVerifiedEmail()) {
$this->otpService->send($user);
}
return response()->json([
'success' => true,
'message' => 'Jika e-mel wujud dan belum disahkan, kod OTP baharu telah dihantar.',
]);
}
}
@@ -0,0 +1,66 @@
<?php
namespace Modules\Auth\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Services\ActiveRoleService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Modules\Auth\Transformers\UserResource;
class SessionController extends Controller
{
/**
* Current authenticated user with active role metadata.
*/
public function currentUser(Request $request): JsonResponse
{
$user = $request->user();
if (! $user) {
return response()->json([
'success' => false,
'message' => 'Unauthenticated',
], 401);
}
$user->load(['roles.permissions']);
return response()->json([
'success' => true,
'data' => new UserResource($user),
...ActiveRoleService::sessionMeta($user),
]);
}
/**
* Switch active role for the current session token.
*/
public function switchRole(Request $request): JsonResponse
{
$validated = $request->validate([
'role_id' => ['required', 'uuid', 'exists:roles,id'],
]);
$user = $request->user();
$user->load(['roles.permissions']);
$role = ActiveRoleService::switchRole($user, $validated['role_id']);
if (! $role) {
return response()->json([
'success' => false,
'message' => 'Peranan tidak ditetapkan untuk pengguna ini.',
], 403);
}
return response()->json([
'success' => true,
'message' => 'Peranan aktif dikemas kini.',
'data' => new UserResource($user),
'active_role' => ActiveRoleService::formatRole($role),
'can_switch_role' => $user->roles->count() > 1,
'redirect_path' => ActiveRoleService::redirectPathForRole($role),
]);
}
}