mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-09 20:50:20 +08:00
Merge pull request #228 from NyaDoo/fix/config-timezone-and-key-dialog
fix: APP_TIMEZONE 循环导入 & 独立密钥额度编辑空白
This commit is contained in:
@@ -207,9 +207,9 @@
|
||||
@update:model-value="(v) => form.initial_balance_usd = parseNumberInput(v, { allowFloat: true, min: 0.01 })"
|
||||
/>
|
||||
<span
|
||||
v-else-if="form.unlimited_balance"
|
||||
v-else
|
||||
class="flex h-10 w-full items-center rounded-lg border bg-background px-3 text-sm text-muted-foreground opacity-60"
|
||||
>无限制</span>
|
||||
>{{ form.unlimited_balance ? '无限制' : '按钱包余额限制' }}</span>
|
||||
</div>
|
||||
<Switch
|
||||
:model-value="form.unlimited_balance ?? false"
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Any, Literal
|
||||
from zoneinfo import ZoneInfo
|
||||
@@ -18,6 +17,7 @@ from sqlalchemy.orm import Session
|
||||
from src.api.base.admin_adapter import AdminApiAdapter
|
||||
from src.api.base.context import ApiRequestContext
|
||||
from src.api.base.pipeline import ApiRequestPipeline
|
||||
from src.config import config
|
||||
from src.core.exceptions import InvalidRequestException, NotFoundException
|
||||
from src.core.logger import logger
|
||||
from src.database import get_db, get_db_context
|
||||
@@ -27,8 +27,7 @@ from src.services.user.apikey import ApiKeyService
|
||||
from src.services.user.bulk_cleanup import pre_clean_api_key
|
||||
from src.services.wallet import WalletService
|
||||
|
||||
# 应用时区配置,默认为 Asia/Shanghai
|
||||
APP_TIMEZONE = ZoneInfo(os.getenv("APP_TIMEZONE", "Asia/Shanghai"))
|
||||
APP_TIMEZONE = ZoneInfo(config.app_timezone)
|
||||
|
||||
|
||||
def parse_expiry_date(date_str: str | None) -> datetime | None:
|
||||
|
||||
@@ -647,12 +647,12 @@ class UserDashboardStatsAdapter(DashboardAdapter):
|
||||
async def handle(self, context: ApiRequestContext) -> Any: # type: ignore[override]
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from src.services.system.stats_aggregator import APP_TIMEZONE
|
||||
from src.config import config
|
||||
|
||||
db = context.db
|
||||
user = context.user
|
||||
# 使用业务时区计算日期,确保与用户感知的"今天"一致
|
||||
app_tz = ZoneInfo(APP_TIMEZONE)
|
||||
app_tz = ZoneInfo(config.app_timezone)
|
||||
now_local = datetime.now(app_tz)
|
||||
today_local = now_local.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# 转换为 UTC 用于数据库查询
|
||||
@@ -1159,9 +1159,9 @@ class DashboardDailyStatsAdapter(DashboardAdapter):
|
||||
# 使用业务时区计算日期,确保每日统计与业务日期一致
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from src.services.system.stats_aggregator import APP_TIMEZONE
|
||||
from src.config import config
|
||||
|
||||
app_tz = ZoneInfo(APP_TIMEZONE)
|
||||
app_tz = ZoneInfo(config.app_timezone)
|
||||
now_local = datetime.now(app_tz)
|
||||
today_local = now_local.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# 转换为 UTC 用于数据库查询
|
||||
|
||||
@@ -87,6 +87,9 @@ class Config:
|
||||
# 注意: allow_credentials=True 时不能使用 allow_origins=["*"]
|
||||
self.cors_allow_credentials = os.getenv("CORS_ALLOW_CREDENTIALS", "true").lower() == "true"
|
||||
|
||||
# 应用时区配置(用于定时任务、账单日期等业务逻辑)
|
||||
self.app_timezone = os.getenv("APP_TIMEZONE", "Asia/Shanghai")
|
||||
|
||||
# 管理员账户配置(用于初始化)
|
||||
self.admin_email = os.getenv("ADMIN_EMAIL", "admin@localhost")
|
||||
self.admin_username = os.getenv("ADMIN_USERNAME", "admin")
|
||||
|
||||
@@ -11,7 +11,7 @@ from src.services.system.maintenance_scheduler import (
|
||||
MaintenanceScheduler,
|
||||
get_maintenance_scheduler,
|
||||
)
|
||||
from src.services.system.scheduler import APP_TIMEZONE, TaskScheduler, get_scheduler
|
||||
from src.services.system.scheduler import TaskScheduler, get_scheduler
|
||||
from src.services.system.sync_stats import SyncStatsService
|
||||
|
||||
__all__ = [
|
||||
@@ -23,5 +23,4 @@ __all__ = [
|
||||
"SyncStatsService",
|
||||
"TaskScheduler",
|
||||
"get_scheduler",
|
||||
"APP_TIMEZONE",
|
||||
]
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from datetime import datetime
|
||||
from typing import Any, Callable
|
||||
|
||||
@@ -17,10 +16,11 @@ from apscheduler.triggers.cron import CronTrigger
|
||||
from apscheduler.triggers.date import DateTrigger
|
||||
from apscheduler.triggers.interval import IntervalTrigger
|
||||
|
||||
from src.config import config
|
||||
from src.core.logger import logger
|
||||
|
||||
# 应用时区配置,默认为 Asia/Shanghai
|
||||
APP_TIMEZONE = os.getenv("APP_TIMEZONE", "Asia/Shanghai")
|
||||
# 统一从 config 读取,不再重复 os.getenv
|
||||
APP_TIMEZONE = config.app_timezone
|
||||
|
||||
|
||||
class TaskScheduler:
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import uuid
|
||||
from dataclasses import dataclass
|
||||
from datetime import date, datetime, time, timedelta, timezone
|
||||
@@ -16,6 +15,7 @@ from sqlalchemy import Date, Float, and_, case, cast, func, text
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from src.config import config
|
||||
from src.core.logger import logger
|
||||
from src.models.database import (
|
||||
ApiKey,
|
||||
@@ -36,8 +36,7 @@ from src.models.database import (
|
||||
from src.models.database import User as DBUser
|
||||
from src.services.system.time_range import TimeRangeParams, split_time_range_for_hourly
|
||||
|
||||
# App timezone (legacy defaults for dashboard)
|
||||
APP_TIMEZONE = os.getenv("APP_TIMEZONE", "Asia/Shanghai")
|
||||
APP_TIMEZONE = config.app_timezone
|
||||
MIN_PERCENTILE_SAMPLES = 10
|
||||
|
||||
|
||||
|
||||
@@ -8,10 +8,12 @@ from zoneinfo import ZoneInfo
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from src.config import config
|
||||
from src.core.logger import logger
|
||||
from src.models.database import Usage, WalletDailyUsageLedger
|
||||
from src.services.billing.precision import to_money_decimal
|
||||
from src.services.system.scheduler import APP_TIMEZONE
|
||||
|
||||
APP_TIMEZONE = config.app_timezone
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
|
||||
Reference in New Issue
Block a user