feat: 增强环境配置与开发服务,支持局域网访问及币种管理

This commit is contained in:
2026-05-21 16:24:41 +08:00
parent 699d43fbd4
commit 7a6048de10
60 changed files with 1321 additions and 443 deletions

View File

@@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\Api\V1\Admin\Currency;
use App\Models\Currency;
use App\Support\ApiResponse;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use App\Services\Currency\CurrencyActivationService;
use App\Http\Requests\Admin\AdminCurrencyStoreRequest;
final class AdminCurrencyStoreController extends Controller
{
public function __invoke(
AdminCurrencyStoreRequest $request,
CurrencyActivationService $activationService,
): JsonResponse {
$data = $request->validated();
$enabled = (bool) ($data['is_enabled'] ?? true);
$bettable = $enabled && (bool) ($data['is_bettable'] ?? false);
$currency = DB::transaction(function () use ($data, $enabled, $bettable, $activationService): Currency {
$currency = Currency::query()->create([
'code' => $data['code'],
'name' => $data['name'],
'decimal_places' => (int) ($data['decimal_places'] ?? 2),
'is_enabled' => $enabled,
'is_bettable' => $bettable,
]);
$activationService->ensureBettableCurrencyReady($currency);
return $currency->fresh();
});
return ApiResponse::success($this->serializeCurrency($currency))->setStatusCode(201);
}
/** @return array<string, mixed> */
private function serializeCurrency(Currency $currency): array
{
return [
'id' => (int) $currency->id,
'code' => $currency->code,
'name' => $currency->name,
'decimal_places' => (int) $currency->decimal_places,
'is_enabled' => (bool) $currency->is_enabled,
'is_bettable' => (bool) $currency->is_bettable,
'created_at' => $currency->created_at?->toIso8601String(),
'updated_at' => $currency->updated_at?->toIso8601String(),
];
}
}