Initial commit: Daily News App

企業內部新聞彙整與分析系統
- 自動新聞抓取 (Digitimes, 經濟日報, 工商時報)
- AI 智慧摘要 (OpenAI/Claude/Ollama)
- 群組管理與訂閱通知
- 已清理 Python 快取檔案

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
donald
2025-12-03 23:53:24 +08:00
commit db0f0bbfe7
50 changed files with 11883 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
"""
訂閱管理 API 端點
"""
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from pydantic import BaseModel
from typing import Optional
from app.db.session import get_db
from app.models import User, Group, Subscription
from app.api.v1.endpoints.auth import get_current_user
router = APIRouter()
class SubscriptionResponse(BaseModel):
group_id: int
group_name: str
category: str
email_notify: bool
class Config:
from_attributes = True
class SubscriptionItem(BaseModel):
group_id: int
subscribed: bool
email_notify: Optional[bool] = True
class SubscriptionUpdateRequest(BaseModel):
subscriptions: list[SubscriptionItem]
@router.get("", response_model=list[SubscriptionResponse])
def get_my_subscriptions(
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
"""取得我的訂閱列表"""
subs = db.query(Subscription).filter(Subscription.user_id == current_user.id).all()
result = []
for s in subs:
group = db.query(Group).filter(Group.id == s.group_id).first()
if group:
result.append(SubscriptionResponse(
group_id=group.id,
group_name=group.name,
category=group.category.value,
email_notify=s.email_notify
))
return result
@router.put("")
def update_subscriptions(
request: SubscriptionUpdateRequest,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
"""批次更新訂閱"""
for item in request.subscriptions:
# 檢查群組是否存在
group = db.query(Group).filter(Group.id == item.group_id, Group.is_active == True).first()
if not group:
continue
existing = db.query(Subscription).filter(
Subscription.user_id == current_user.id,
Subscription.group_id == item.group_id
).first()
if item.subscribed:
if existing:
existing.email_notify = item.email_notify
else:
sub = Subscription(
user_id=current_user.id,
group_id=item.group_id,
email_notify=item.email_notify
)
db.add(sub)
else:
if existing:
db.delete(existing)
db.commit()
return {"message": "訂閱更新成功"}