Files
cjfx/backend/app/models.py
2026-03-20 22:59:54 +08:00

99 lines
2.1 KiB
Python

from __future__ import annotations
from typing import Literal
from pydantic import BaseModel, Field
Sentiment = Literal["看多", "看空", "中性"]
class Account(BaseModel):
id: str
name: str
description: str
class DailyInputAccountPayload(BaseModel):
account_id: str
links: list[str] = Field(default_factory=list)
class DailyInputUpsertPayload(BaseModel):
accounts: list[DailyInputAccountPayload] = Field(default_factory=list)
class DailyInputAccount(BaseModel):
account_id: str
account_name: str
links: list[str] = Field(default_factory=list)
class DailyInputDocument(BaseModel):
date: str
updated_at: str
accounts: list[DailyInputAccount] = Field(default_factory=list)
class OpinionArticle(BaseModel):
id: str
account_id: str
account_name: str
title: str
published_at: str
summary: str
source_url: str
sectors: list[str] = Field(default_factory=list)
sentiment: Sentiment
article_type: str
class ReportDocument(BaseModel):
date: str
generated_at: str
summary: str
focus_sectors: list[str] = Field(default_factory=list)
article_count: int
account_count: int
articles: list[OpinionArticle] = Field(default_factory=list)
class ReportListItem(BaseModel):
date: str
generated_at: str
summary: str
article_count: int
focus_sectors: list[str] = Field(default_factory=list)
class ClsNewsItem(BaseModel):
id: str
title: str
published_at: str
source: str
summary: str
reference_url: str
sectors: list[str] = Field(default_factory=list)
sentiment: Sentiment
class ClsNewsSummary(BaseModel):
overview: str
hot_topics: str
watch_list: list[str] = Field(default_factory=list)
class ClsSectorImpact(BaseModel):
sector: str
sentiment: Sentiment
reason: str
related_titles: list[str] = Field(default_factory=list)
class ClsNewsDocument(BaseModel):
date: str
updated_at: str
window_label: str
summary: ClsNewsSummary
sector_impacts: list[ClsSectorImpact] = Field(default_factory=list)
items: list[ClsNewsItem] = Field(default_factory=list)