refactor:拆分 API 路由与请求校验,统一 final 类和代码风格
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AdminRole;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
/** GET /api/v1/admin/admin-user-permission-catalog */
|
||||
final class AdminPermissionCatalogController extends Controller
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Models\AdminUser;
|
||||
use App\Services\AuditLogger;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\AuditLogger;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
|
||||
/** DELETE /api/v1/admin/admin-users/{admin_user} */
|
||||
final class AdminUserDestroyController extends Controller
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AdminUser;
|
||||
use App\Support\AdminApiList;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Support\AdminApiList;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
|
||||
/** GET /api/v1/admin/admin-users */
|
||||
final class AdminUserIndexController extends Controller
|
||||
|
||||
@@ -2,27 +2,20 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AdminUser;
|
||||
use App\Support\AdminPermissionBridge;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminPermissionBridge;
|
||||
use App\Http\Requests\Admin\AdminUserPermissionSyncRequest;
|
||||
|
||||
/** PUT /api/v1/admin/admin-users/{admin_user}/permissions */
|
||||
final class AdminUserPermissionSyncController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request, AdminUser $admin_user): JsonResponse
|
||||
public function __invoke(AdminUserPermissionSyncRequest $request, AdminUser $admin_user): JsonResponse
|
||||
{
|
||||
/** @var array{permission_slugs:list<string>} $data */
|
||||
$data = validator($request->all(), [
|
||||
'permission_slugs' => ['required', 'array'],
|
||||
'permission_slugs.*' => ['string', 'max:128', 'distinct', Rule::in(AdminPermissionBridge::allLegacySlugs())],
|
||||
])->validate();
|
||||
|
||||
$slugs = array_values(array_unique($data['permission_slugs']));
|
||||
$slugs = array_values(array_unique($request->validated('permissions')));
|
||||
$siteId = AdminUser::defaultAdminSiteId();
|
||||
|
||||
$codes = [];
|
||||
|
||||
@@ -2,25 +2,18 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AdminUser;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\AdminUserRoleSyncRequest;
|
||||
|
||||
/** PUT /api/v1/admin/admin-users/{admin_user}/roles */
|
||||
final class AdminUserRoleSyncController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request, AdminUser $admin_user): JsonResponse
|
||||
public function __invoke(AdminUserRoleSyncRequest $request, AdminUser $admin_user): JsonResponse
|
||||
{
|
||||
/** @var array{role_slugs:list<string>} $data */
|
||||
$data = validator($request->all(), [
|
||||
'role_slugs' => ['required', 'array'],
|
||||
'role_slugs.*' => ['string', 'max:64', 'distinct', Rule::exists('admin_roles', 'slug')],
|
||||
])->validate();
|
||||
|
||||
$slugs = array_values(array_unique($data['role_slugs']));
|
||||
$slugs = array_values(array_unique($request->validated('role_slugs')));
|
||||
$admin_user->syncRoleSlugsForDefaultSite($slugs);
|
||||
|
||||
$admin_user->load('roles');
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AdminUser;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
|
||||
/** GET /api/v1/admin/admin-users/{admin_user} */
|
||||
final class AdminUserShowController extends Controller
|
||||
|
||||
@@ -2,55 +2,40 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AdminUser;
|
||||
use App\Services\AuditLogger;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Services\AuditLogger;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use App\Http\Requests\Admin\AdminUserStoreRequest;
|
||||
|
||||
/** POST /api/v1/admin/admin-users */
|
||||
/**
|
||||
* 管理员用户创建。
|
||||
*
|
||||
* POST /api/v1/admin/admin-users
|
||||
*/
|
||||
final class AdminUserStoreController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request): JsonResponse
|
||||
public function __invoke(AdminUserStoreRequest $request): JsonResponse
|
||||
{
|
||||
/** @var AdminUser $actor */
|
||||
$actor = $request->lotteryAdmin();
|
||||
|
||||
$payload = $request->all();
|
||||
if (isset($payload['username']) && is_string($payload['username'])) {
|
||||
$payload['username'] = Str::lower(trim($payload['username']));
|
||||
}
|
||||
if (array_key_exists('email', $payload) && $payload['email'] === '') {
|
||||
$payload['email'] = null;
|
||||
}
|
||||
|
||||
$data = validator($payload, [
|
||||
'username' => ['required', 'string', 'min:2', 'max:64', 'regex:/^[a-zA-Z0-9._-]+$/u', 'unique:admin_users,username'],
|
||||
'nickname' => ['required', 'string', 'max:128'],
|
||||
'email' => ['nullable', 'string', 'email', 'max:255'],
|
||||
'password' => ['required', 'string', 'min:8', 'max:256'],
|
||||
'status' => ['sometimes', 'integer', 'in:0,1'],
|
||||
'role_slugs' => ['required', 'array', 'min:1'],
|
||||
'role_slugs.*' => ['string', 'max:64', 'distinct', 'exists:admin_roles,slug'],
|
||||
])->validate();
|
||||
|
||||
$email = is_string($data['email'] ?? null) && trim($data['email']) !== ''
|
||||
? trim($data['email'])
|
||||
$email = is_string($request->validated('email'))
|
||||
? trim($request->validated('email'))
|
||||
: null;
|
||||
|
||||
$roleSlugs = array_values(array_unique($data['role_slugs']));
|
||||
$roleSlugs = array_values(array_unique($request->validated('role_slugs')));
|
||||
|
||||
$user = DB::transaction(function () use ($data, $email, $roleSlugs): AdminUser {
|
||||
$user = DB::transaction(function () use ($request, $email, $roleSlugs): AdminUser {
|
||||
$created = AdminUser::query()->create([
|
||||
'username' => $data['username'],
|
||||
'name' => $data['nickname'],
|
||||
'username' => $request->validated('username'),
|
||||
'name' => $request->validated('nickname'),
|
||||
'email' => $email,
|
||||
'password' => $data['password'],
|
||||
'status' => array_key_exists('status', $data) ? (int) $data['status'] : 0,
|
||||
'password' => $request->validated('password'),
|
||||
'status' => $request->validated('status', 0),
|
||||
]);
|
||||
$created->syncRoleSlugsForDefaultSite($roleSlugs);
|
||||
|
||||
|
||||
@@ -2,19 +2,18 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\User;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AdminUser;
|
||||
use App\Services\AuditLogger;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Services\AuditLogger;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use App\Http\Requests\Admin\AdminUserUpdateRequest;
|
||||
|
||||
/** PUT /api/v1/admin/admin-users/{admin_user} */
|
||||
final class AdminUserUpdateController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request, AdminUser $admin_user): JsonResponse
|
||||
public function __invoke(AdminUserUpdateRequest $request, AdminUser $admin_user): JsonResponse
|
||||
{
|
||||
/** @var AdminUser $actor */
|
||||
$actor = $request->lotteryAdmin();
|
||||
@@ -22,18 +21,7 @@ final class AdminUserUpdateController extends Controller
|
||||
$admin_user->load('roles');
|
||||
$before = AdminUserApiPresenter::listItem($admin_user);
|
||||
|
||||
$payload = $request->all();
|
||||
if (array_key_exists('email', $payload) && $payload['email'] === '') {
|
||||
$payload['email'] = null;
|
||||
}
|
||||
|
||||
/** @var array{nickname?:string,email?:?string,password?:?string,status?:int} $data */
|
||||
$data = validator($payload, [
|
||||
'nickname' => ['sometimes', 'string', 'max:128'],
|
||||
'email' => ['sometimes', 'nullable', 'string', 'email', 'max:255', Rule::unique('admin_users', 'email')->ignore($admin_user->id)],
|
||||
'password' => ['sometimes', 'nullable', 'string', 'min:8', 'max:256'],
|
||||
'status' => ['sometimes', 'integer', Rule::in([0, 1])],
|
||||
])->validate();
|
||||
$data = $request->validated();
|
||||
|
||||
$updates = [];
|
||||
if (array_key_exists('nickname', $data)) {
|
||||
|
||||
Reference in New Issue
Block a user