feat(stream): implement stream processing service with routes for managing streaming URLs; add support for concurrent processing and metadata extraction
This commit is contained in:
@@ -4,7 +4,7 @@ from datetime import datetime
|
||||
from typing import TYPE_CHECKING, Optional
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from sqlalchemy import DateTime, ForeignKey, Integer, String, Text
|
||||
from sqlalchemy import DateTime, ForeignKey, Integer, String, Text, UniqueConstraint
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
||||
from app.database import db
|
||||
@@ -33,6 +33,7 @@ class Stream(db.Model):
|
||||
status: Mapped[str] = mapped_column(
|
||||
String(50), nullable=False, default="pending"
|
||||
)
|
||||
error: Mapped[str | None] = mapped_column(Text, nullable=True)
|
||||
created_at: Mapped[datetime] = mapped_column(
|
||||
DateTime,
|
||||
default=lambda: datetime.now(tz=ZoneInfo("UTC")),
|
||||
@@ -48,6 +49,13 @@ class Stream(db.Model):
|
||||
# Relationships
|
||||
sound: Mapped["Sound"] = relationship("Sound", back_populates="streams")
|
||||
|
||||
# Constraints
|
||||
__table_args__ = (
|
||||
UniqueConstraint(
|
||||
"service", "service_id", name="unique_service_stream"
|
||||
),
|
||||
)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
"""String representation of the stream."""
|
||||
return f"<Stream(id={self.id}, service='{self.service}', service_id='{self.service_id}', sound_id={self.sound_id})>"
|
||||
@@ -66,6 +74,7 @@ class Stream(db.Model):
|
||||
"album": self.album,
|
||||
"genre": self.genre,
|
||||
"status": self.status,
|
||||
"error": self.error,
|
||||
"created_at": (
|
||||
self.created_at.isoformat() if self.created_at else None
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user