feat(invite): 添加邀请码功能模块

This commit is contained in:
qzl
2026-04-07 18:43:49 +08:00
parent b22673ce49
commit c121c1092f
4 changed files with 962 additions and 1 deletions
+41 -1
View File
@@ -1,11 +1,51 @@
from __future__ import annotations
from datetime import datetime
from typing import ClassVar
from uuid import UUID
from pydantic import BaseModel, ConfigDict
from pydantic import BaseModel, ConfigDict, Field
from schemas.enums import InviteCodeStatus
class InviteCodeRewardConfig(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(extra="allow")
pass
class InviteCodeBase(BaseModel):
code: str = Field(
...,
min_length=6,
max_length=6,
pattern=r"^[ABCDEFGHJKMNPQRSTUVWXYZ23456789]{6}$",
)
status: InviteCodeStatus = InviteCodeStatus.ACTIVE
used_count: int = Field(default=0, ge=0)
max_uses: int | None = Field(default=None, ge=1)
expires_at: datetime | None = None
reward_config: InviteCodeRewardConfig = Field(
default_factory=InviteCodeRewardConfig
)
class InviteCodeCreate(InviteCodeBase):
owner_id: UUID | None = None
class InviteCodeUpdate(BaseModel):
status: InviteCodeStatus | None = None
max_uses: int | None = Field(default=None, ge=1)
expires_at: datetime | None = None
reward_config: InviteCodeRewardConfig | None = None
class InviteCodeRead(InviteCodeBase):
model_config: ClassVar[ConfigDict] = ConfigDict(from_attributes=True)
id: UUID
owner_id: UUID | None
created_at: datetime
updated_at: datetime