清理项目配置文件,移除不再使用的.idea文件和更新文档中的Python版本要求

This commit is contained in:
2025-12-17 16:15:47 +08:00
parent 8ce34440d8
commit 35efbdf000
27 changed files with 123 additions and 221 deletions

View File

@@ -4,11 +4,11 @@
from typing import Iterable, List
from fastapi import HTTPException
from sqlmodel.ext.asyncio.session import AsyncSession
from model import Setting
from model import SettingResponse
from pkg import utils
async def fetch_settings(
@@ -25,7 +25,7 @@ async def fetch_settings(
if setting:
data.append(SettingResponse.model_validate(setting))
else:
raise HTTPException(404, detail="Setting not found")
utils.raise_not_found("Setting not found")
else:
settings: Iterable[Setting] | None = await Setting.get(session, fetch_mode="all")
if settings:
@@ -44,7 +44,7 @@ async def update_setting_value(
"""
setting = await Setting.get(session, Setting.name == name)
if not setting:
raise HTTPException(404, detail="Setting not found")
utils.raise_not_found("Setting not found")
setting.value = value
await Setting.save(session)

View File

@@ -5,15 +5,14 @@
from typing import List
from uuid import UUID
from fastapi import HTTPException
from fastapi import status
from loguru import logger
from sqlmodel.ext.asyncio.session import AsyncSession
from model import Item, ItemDataResponse, Setting, User
from model.item import ItemDataUpdateRequest, ItemTypeEnum
from pkg.sender import ServerChatBot, WeChatBot
from pkg.utils import raise_bad_request, raise_internal_error, raise_not_found
from starlette.status import HTTP_204_NO_CONTENT
from pkg import utils
async def list_items(
@@ -72,7 +71,7 @@ async def create_item(
await Item.add(session, Item.model_validate(request_dict))
except Exception as exc: # noqa: BLE001
logger.error(f"Failed to add item: {exc}")
raise HTTPException(status_code=500, detail=str(exc)) from exc
utils.raise_internal_error(str(exc))
async def update_item(
@@ -86,7 +85,7 @@ async def update_item(
"""
obj = await Item.get(session, (Item.id == item_id) & (Item.user_id == user.id))
if not obj:
raise_not_found("Item not found or access denied")
utils.raise_not_found("Item not found or access denied")
await obj.update(session, request, exclude_unset=True)
@@ -101,7 +100,7 @@ async def delete_item(
"""
obj = await Item.get(session, (Item.id == item_id) & (Item.user_id == user.id))
if not obj:
raise_not_found("Item not found or access denied")
utils.raise_not_found("Item not found or access denied")
await Item.delete(session, obj)
@@ -116,7 +115,7 @@ async def retrieve_object(
object_data = await Item.get(session, Item.id == item_id)
if not object_data:
raise_not_found("物品不存在或出现异常")
utils.raise_not_found("物品不存在或出现异常")
if object_data.status == "lost":
object_data.find_ip = client_host
@@ -136,12 +135,12 @@ async def notify_move_car(
item_data = await Item.get_exist_one(session=session, id=item_id)
if item_data.type != ItemTypeEnum.car:
raise_bad_request("Item is not car")
utils.raise_bad_request("Item is not car")
server_chan_key = await Setting.get(session, Setting.name == "server_chan_key")
wechat_bot_key = await Setting.get(session, Setting.name == "wechat_bot_key")
if not (server_chan_key.value or wechat_bot_key.value):
raise_internal_error("未配置Server酱无法发送挪车通知")
utils.raise_internal_error("未配置Server酱无法发送挪车通知")
title = "挪车通知 - Findreve"
description = (
@@ -161,4 +160,4 @@ async def notify_move_car(
version="v1",
)
return HTTP_204_NO_CONTENT
return status.HTTP_204_NO_CONTENT

View File

@@ -3,32 +3,25 @@
"""
from datetime import datetime, timedelta, timezone
from typing import Any
import JWT
import jwt
from loguru import logger
from sqlmodel.ext.asyncio.session import AsyncSession
from typing import Any
import jwt
from model import Setting, User
from model.response import TokenResponse
from pkg import Password
from pkg import Password, utils
import JWT
async def create_access_token(
session: AsyncSession,
data: dict[str, Any],
expires_delta: timedelta | None = None,
) -> str:
"""
创建访问令牌。
"""
to_encode = data.copy()
if expires_delta:
expire = datetime.now(timezone.utc) + expires_delta
else:
jwt_exp_setting = await Setting.get(session, Setting.name == "jwt_token_exp")
expire = datetime.now(timezone.utc) + timedelta(int(jwt_exp_setting.value))
jwt_exp_setting = await Setting.get(session, Setting.name == "jwt_token_exp")
expire = datetime.now(timezone.utc) + timedelta(int(jwt_exp_setting.value))
to_encode.update({"exp": expire})
encoded_jwt = jwt.encode(to_encode, key=await JWT.get_secret_key(), algorithm="HS256")
return encoded_jwt
@@ -38,19 +31,14 @@ async def authenticate_user(
session: AsyncSession,
username: str,
password: str,
) -> User | None:
) -> User:
"""
验证用户名和密码,返回认证后的用户。
"""
account = await User.get(session, User.email == username)
if not account:
logger.error("Account or password not set in settings.")
return None
if account.email != username or not Password.verify(account.password, password):
logger.error("Invalid username or password.")
return None
if not account or account.email != username or not Password.verify(account.password, password):
utils.raise_unauthorized("Account or password is incorrect")
return account
@@ -59,13 +47,11 @@ async def login_for_access_token(
session: AsyncSession,
username: str,
password: str,
) -> TokenResponse | None:
) -> TokenResponse:
"""
登录并生成访问令牌。
"""
user = await authenticate_user(session=session, username=username, password=password)
if not user:
return None
access_token = await create_access_token(
session=session,