Files
BarangaySystem/app/Http/Controllers/UserCreateController.php
2026-06-06 18:43:00 +08:00

79 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Enums\UserTypes;
use App\Http\Controllers\Helpers\Permissions\UserPermissions;
use Hypervel\Http\Request;
use App\Models\User;
use App\Enums\UserActions;
use App\Traits\Roles;
use Hypervel\Support\Facades\Hash;
use Hypervel\Support\Facades\Validator;
class UserCreateController
{
public function createUser(UserTypes $acct_type, Request $request)
{
// Step 1: Check if the current authenticated user has the permission to create a user
$userType = auth()->user()->acct_type; // Assuming you're using the `acct_type` field for the current user's type
if (!UserPermissions::isActionPermitted($acct_type, UserActions::CreateUser)) {
return response()->json(['error' => 'Permission denied'], 403);
}
// Step 2: Validate incoming request data
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'mobile_number' => 'required|string|max:15',
'password' => 'required|string|min:8',
'username' => 'nullable|string|unique:users,username',
// Add any other validation rules needed
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
if ($acct_type instanceof UserTypes) {
$acct_type = $acct_type->value;
}
if (!is_string($acct_type) || !$acct_type) {
}
// Step 3: Create the new user
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
'mobile_number' => $request->input('mobile_number'),
'password' => Hash::make($request->input('password')),
'acct_type' => $acct_type,
'username' => $request->input('username'),
'created_by' => auth()->user()->id, // Currently authenticated user
// Add any other fields as needed
]);
// Step 4: Handle user-specific logic based on their `acct_type`
$this->handleUserTypeSpecificLogic($acct_type, $user);
return response()->json([
'message' => 'User created successfully',
'user' => $user
], 201);
}
}