Coverage for modules\chat\schemas.py: 100%

69 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-05 09:25 +0800

1from typing import Optional, List 

2from pydantic import BaseModel, ConfigDict 

3from uuid import UUID 

4from datetime import datetime 

5 

6class ChannelMemberOut(BaseModel): 

7 user_id: UUID 

8 full_name: str 

9 avatar_url: Optional[str] = None 

10 role: str 

11 joined_at: datetime 

12 

13 model_config = ConfigDict(from_attributes=True) 

14 

15class LastMessagePreview(BaseModel): 

16 id: UUID 

17 sender_name: str 

18 content: str 

19 created_at: datetime 

20 

21 model_config = ConfigDict(from_attributes=True) 

22 

23class ChannelOut(BaseModel): 

24 id: UUID 

25 name: str 

26 topic: Optional[str] = None 

27 type: str 

28 created_by_id: Optional[UUID] = None 

29 unread_count: int = 0 

30 members_count: int = 0 

31 last_message: Optional[LastMessagePreview] = None 

32 created_at: datetime 

33 

34 model_config = ConfigDict(from_attributes=True) 

35 

36class ChannelCreateIn(BaseModel): 

37 name: str 

38 topic: Optional[str] = None 

39 type: Optional[str] = 'PUBLIC' 

40 member_ids: Optional[List[UUID]] = [] 

41 

42class MessageAttachmentIn(BaseModel): 

43 file_name: str 

44 file_size: int 

45 file_type: str 

46 file_url: str 

47 

48class MessageAttachmentOut(BaseModel): 

49 id: UUID 

50 file_name: str 

51 file_size: int 

52 file_type: str 

53 file_url: str 

54 

55 model_config = ConfigDict(from_attributes=True) 

56 

57class MessageReactionOut(BaseModel): 

58 emoji: str 

59 count: int 

60 users: List[dict] 

61 

62 model_config = ConfigDict(from_attributes=True) 

63 

64class MessageOut(BaseModel): 

65 id: UUID 

66 channel_id: UUID 

67 sender_id: UUID 

68 sender_name: str 

69 sender_avatar: Optional[str] = None 

70 content: str 

71 parent_id: Optional[UUID] = None 

72 attachments: List[MessageAttachmentOut] = [] 

73 reactions: List[MessageReactionOut] = [] 

74 is_pinned: bool = False 

75 is_edited: bool = False 

76 created_at: datetime 

77 updated_at: datetime 

78 

79 model_config = ConfigDict(from_attributes=True) 

80 

81class MessageSendIn(BaseModel): 

82 content: str 

83 parent_id: Optional[UUID] = None 

84 attachments: Optional[List[MessageAttachmentIn]] = []