fix(chat): support body and content fields in world and DM chat messages; feat(audio): add sound toggle switch and mute controls
checkpoint / checkpoint (push) Successful in 6m11s
checkpoint / checkpoint (push) Successful in 6m11s
This commit is contained in:
@@ -39,7 +39,7 @@ from datetime import datetime
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, status
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic import BaseModel, Field, computed_field, model_validator
|
||||
from sqlalchemy import and_, or_, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import joinedload
|
||||
@@ -68,9 +68,31 @@ _BODY_MAX_LEN = 4000
|
||||
|
||||
|
||||
class SendWorldMessageRequest(BaseModel):
|
||||
body: str = Field(..., min_length=1, max_length=_BODY_MAX_LEN)
|
||||
body: str | None = Field(default=None, max_length=_BODY_MAX_LEN)
|
||||
content: str | None = Field(default=None, max_length=_BODY_MAX_LEN)
|
||||
room_id: int | None = None
|
||||
|
||||
@model_validator(mode="before")
|
||||
@classmethod
|
||||
def resolve_body_or_content(cls, data: object) -> object:
|
||||
if isinstance(data, dict):
|
||||
if not data.get("body") and data.get("content"):
|
||||
data["body"] = data["content"]
|
||||
elif not data.get("content") and data.get("body"):
|
||||
data["content"] = data["body"]
|
||||
return data
|
||||
|
||||
@model_validator(mode="after")
|
||||
def check_non_empty(self) -> SendWorldMessageRequest:
|
||||
text = self.body or self.content
|
||||
if not text or len(text.strip()) < 1:
|
||||
raise ValueError("Message body or content must not be empty")
|
||||
if not self.body:
|
||||
self.body = text
|
||||
if not self.content:
|
||||
self.content = text
|
||||
return self
|
||||
|
||||
|
||||
class AuthorInfo(BaseModel):
|
||||
id: int | None
|
||||
@@ -92,6 +114,11 @@ class WorldMessageResponse(BaseModel):
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
@computed_field
|
||||
@property
|
||||
def content(self) -> str:
|
||||
return self.body
|
||||
|
||||
|
||||
class WorldMessageListResponse(BaseModel):
|
||||
messages: list[WorldMessageResponse]
|
||||
|
||||
Reference in New Issue
Block a user