feat: initialize aivideo project

This commit is contained in:
2026-04-17 18:33:05 +08:00
commit 14b18d67fe
162 changed files with 26251 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.models.entities import User
class UsersRepository:
def __init__(self, db: Session) -> None:
self.db = db
def get_by_id(self, user_id: int) -> User | None:
return self.db.scalar(select(User).where(User.id == user_id))
def get_by_username(self, username: str) -> User | None:
return self.db.scalar(select(User).where(User.username == username))

View File

@@ -0,0 +1,37 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.common.db.session import get_db
from app.common.responses.api_response import success_response
from app.common.security.deps import get_current_user
from app.models.entities import User
from app.modules.users.schema import UpdateProfileRequest
from app.modules.users.service import UsersService
router = APIRouter(prefix="/api/v1/profile", tags=["profile"])
@router.get("")
def get_profile(current_user: User = Depends(get_current_user)):
return success_response(
{
"publicId": current_user.public_id,
"username": current_user.username or "",
"nickname": current_user.nickname,
"avatarUrl": current_user.avatar_url,
"email": current_user.email or "",
"mobile": current_user.mobile or "",
}
)
@router.put("")
def update_profile(
payload: UpdateProfileRequest,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
data = UsersService(db).update_profile(current_user, payload)
return success_response(data)

View File

@@ -0,0 +1,8 @@
from pydantic import BaseModel, Field
class UpdateProfileRequest(BaseModel):
username: str | None = Field(default=None, min_length=3, max_length=32)
nickname: str | None = Field(default=None, min_length=1, max_length=32)
avatar_url: str | None = Field(default=None, max_length=500)

View File

@@ -0,0 +1,31 @@
from sqlalchemy.orm import Session
from app.common.errors.app_error import ConflictAppError
from app.models.entities import User
from app.modules.users.repository import UsersRepository
class UsersService:
def __init__(self, db: Session) -> None:
self.db = db
self.repository = UsersRepository(db)
def update_profile(self, user: User, payload) -> dict:
if payload.username and payload.username != user.username:
existing = self.repository.get_by_username(payload.username)
if existing and existing.id != user.id:
raise ConflictAppError("username already exists", code=10011)
user.username = payload.username
if payload.nickname is not None:
user.nickname = payload.nickname
if payload.avatar_url is not None:
user.avatar_url = payload.avatar_url
self.db.commit()
return {
"publicId": user.public_id,
"username": user.username or "",
"nickname": user.nickname,
"avatarUrl": user.avatar_url,
"email": user.email or "",
}