Coverage for src/cstlcore/newsletter/models.py: 100%

18 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2026-02-19 12:46 +0000

1import uuid 

2from datetime import datetime 

3 

4from pydantic import BaseModel 

5from sqlmodel import TIMESTAMP, Column, Field, SQLModel, text 

6 

7 

8class NewsletterSubscribedBase(SQLModel): 

9 email: str = Field(index=True, nullable=False, unique=True) 

10 

11 

12class NewsletterSubscribed(NewsletterSubscribedBase, table=True): 

13 id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) 

14 created_at: datetime | None = Field( 

15 default=None, 

16 sa_column=Column( 

17 TIMESTAMP(timezone=True), 

18 nullable=False, 

19 server_default=text("CURRENT_TIMESTAMP"), 

20 ), 

21 ) 

22 

23 

24class NewsletterSubscribedPublic(NewsletterSubscribedBase): 

25 id: uuid.UUID 

26 created_at: datetime 

27 

28 

29class NewsletterSubscribedCreate(SQLModel): 

30 email: str 

31 

32 

33class NewsletterForm(BaseModel): 

34 admin_token: str # Admin token for authentication 

35 title: str 

36 content: str