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

130 lines
3.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\UserManagement;
use App\Http\Controllers\Helpers\ResponseHelper;
use App\Http\Controllers\Helpers\Permissions\UserPermissions;
use App\Enums\UserActions;
use App\Models\User;
use App\Models\Market\Organization;
use Hypervel\Http\Request;
use Hypervel\Support\Facades\Auth;
use Hypervel\Support\Str;
class UserAdditionalDetailsController
{
public function getDetails(Request $request)
{
$user = Auth::user();
if (!$user) {
return ResponseHelper::returnUnauthorized();
}
return response()->json([
'success' => true,
'data' => [
'settings' => $user->settings,
'details' => $user->details,
]
]);
}
public function updateCooperatives(Request $request)
{
$user = Auth::user();
if (!$user) {
return ResponseHelper::returnUnauthorized();
}
$cooperativeHash = $request->input('cooperative_hash');
$action = $request->input('action', 'add'); // 'add' or 'remove'
if (!$cooperativeHash) {
return ResponseHelper::returnIncorrectDetails();
}
$settings = $user->settings ?? [];
$cooperatives = $settings['cooperatives'] ?? [];
if ($action === 'add') {
if (!in_array($cooperativeHash, $cooperatives)) {
$cooperatives[] = $cooperativeHash;
}
} else {
$cooperatives = array_values(array_filter($cooperatives, fn($h) => $h !== $cooperativeHash));
}
$settings['cooperatives'] = $cooperatives;
$user->settings = $settings;
if ($user->save()) {
return response()->json([
'success' => true,
'message' => 'Cooperatives updated successfully',
'data' => $cooperatives
]);
}
return ResponseHelper::returnError('Failed to update cooperatives');
}
public function getUserCooperatives(Request $request)
{
$userHash = $request->input('user_hash');
if ($userHash) {
$targetUser = User::where('hashkey', $userHash)->first();
if (!$targetUser) {
return ResponseHelper::returnError('User not found', 404);
}
// Authorization check
if (!UserPermissions::isActionPermitted($targetUser->acct_type, UserActions::ViewUserInfo)) {
return ResponseHelper::returnUnauthorized();
}
$user = $targetUser;
} else {
$user = Auth::user();
}
if (!$user) {
return ResponseHelper::returnUnauthorized();
}
$cooperativeHashes = $user->settings['cooperatives'] ?? [];
if (empty($cooperativeHashes)) {
return response()->json(['success' => true, 'data' => []]);
}
$cooperatives = Organization::whereIn('hashkey', $cooperativeHashes)->get();
return response()->json([
'success' => true,
'data' => $cooperatives
]);
}
public function searchUsersByCooperative(Request $request)
{
if (!UserPermissions::isActionPermitted(Auth::user()->acct_type, UserActions::ViewUserInfo)) {
return ResponseHelper::returnUnauthorized();
}
$cooperativeHash = $request->input('cooperative_hash');
if (!$cooperativeHash) {
return ResponseHelper::returnIncorrectDetails();
}
// Search in the JSON field 'settings' for cooperatives array containing the hash
$users = User::where('settings->cooperatives', 'like', '%' . $cooperativeHash . '%')->get();
return response()->json([
'success' => true,
'data' => $users
]);
}
}