100 lines
2.2 KiB
Python
100 lines
2.2 KiB
Python
from pydantic import BaseModel
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
from app.models.ministry import MinistryRole
|
|
|
|
|
|
class MinistryBase(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
vision: Optional[str] = None
|
|
mission: Optional[str] = None
|
|
meeting_day: Optional[str] = None
|
|
meeting_time: Optional[str] = None
|
|
meeting_location: Optional[str] = None
|
|
|
|
|
|
class MinistryCreate(MinistryBase):
|
|
pass
|
|
|
|
|
|
class MinistryUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
description: Optional[str] = None
|
|
vision: Optional[str] = None
|
|
mission: Optional[str] = None
|
|
meeting_day: Optional[str] = None
|
|
meeting_time: Optional[str] = None
|
|
meeting_location: Optional[str] = None
|
|
|
|
|
|
class MinistryResponse(MinistryBase):
|
|
id: int
|
|
leader_id: int
|
|
is_active: bool
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
leader_name: Optional[str] = None
|
|
member_count: int = 0
|
|
is_member: bool = False
|
|
user_role: Optional[MinistryRole] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class MinistryMemberResponse(BaseModel):
|
|
id: int
|
|
ministry_id: int
|
|
user_id: int
|
|
role: MinistryRole
|
|
joined_at: datetime
|
|
is_active: bool
|
|
user_name: Optional[str] = None
|
|
ministry_name: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class MinistryActivityBase(BaseModel):
|
|
title: str
|
|
description: Optional[str] = None
|
|
activity_date: datetime
|
|
location: Optional[str] = None
|
|
|
|
|
|
class MinistryActivityCreate(MinistryActivityBase):
|
|
pass
|
|
|
|
|
|
class MinistryActivityResponse(MinistryActivityBase):
|
|
id: int
|
|
ministry_id: int
|
|
created_by: int
|
|
created_at: datetime
|
|
creator_name: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class MinistryJoinRequest(BaseModel):
|
|
message: Optional[str] = None
|
|
|
|
|
|
class MinistryRequestResponse(BaseModel):
|
|
id: int
|
|
ministry_id: int
|
|
user_id: int
|
|
message: Optional[str] = None
|
|
status: str
|
|
requested_at: datetime
|
|
responded_at: Optional[datetime] = None
|
|
responded_by: Optional[int] = None
|
|
user_name: Optional[str] = None
|
|
ministry_name: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|