Files
xiaoxia-saas/packages/ports/video_share_repository.py
xiaoxia 833c604fd7
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 32s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 38s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 58s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Successful in 1m4s
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Successful in 1m0s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 1m12s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 1m51s
CI/CD Pipeline / Build Staging API Image (push) Failing after 2m6s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 2m10s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (push) Has been skipped
CI/CD Pipeline / Unit Tests (push) Successful in 2m39s
feat(video-share): 视频分享后端 - 密码保护/有效期/浏览下载计数 (#737)
2026-07-23 09:38:21 +08:00

63 lines
1.7 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""视频分享 Repository 端口."""
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import List, Optional
from packages.domain.video_share import VideoShare
class VideoShareRepositoryPort(ABC):
"""视频分享 Repository 接口."""
@abstractmethod
def create(self, share: VideoShare) -> VideoShare:
"""创建分享记录."""
...
@abstractmethod
def get_by_token(self, token: str) -> Optional[VideoShare]:
"""通过分享token获取分享记录."""
...
@abstractmethod
def get_by_id(self, share_id: str, user_id: str) -> Optional[VideoShare]:
"""通过ID获取分享记录(带用户校验)."""
...
@abstractmethod
def list_by_video(self, video_id: str, user_id: str) -> List[VideoShare]:
"""列出某个视频的所有分享记录."""
...
@abstractmethod
def list_by_user(self, user_id: str, skip: int = 0, limit: int = 20) -> List[VideoShare]:
"""列出用户创建的所有分享记录."""
...
@abstractmethod
def count_by_user(self, user_id: str) -> int:
"""统计用户创建的分享数量."""
...
@abstractmethod
def update(self, share: VideoShare) -> VideoShare:
"""更新分享记录."""
...
@abstractmethod
def delete(self, share_id: str, user_id: str) -> bool:
"""删除分享记录(软删除:is_active=False."""
...
@abstractmethod
def increment_view(self, share_id: str) -> None:
"""浏览次数+1."""
...
@abstractmethod
def increment_download(self, share_id: str) -> None:
"""下载次数+1."""
...