Add table activity_media and folder to store media

This commit is contained in:
João Vitória Silva
2025-07-16 12:46:25 +01:00
parent df2e95a7f4
commit 091e0f3ca2
7 changed files with 78 additions and 0 deletions

View File

@@ -236,3 +236,10 @@ class Activity(Base):
back_populates="activity",
cascade="all, delete-orphan",
)
# Establish a one-to-many relationship with 'activity_media'
activity_media = relationship(
"ActivityMedia",
back_populates="activity",
cascade="all, delete-orphan",
)

View File

@@ -0,0 +1,32 @@
from sqlalchemy import (
Column,
Integer,
ForeignKey,
String,
DECIMAL,
DateTime,
)
from sqlalchemy.orm import relationship
from core.database import Base
class ActivityMedia(Base):
__tablename__ = "activity_media"
id = Column(Integer, primary_key=True, autoincrement=True)
activity_id = Column(
Integer,
ForeignKey("activities.id", ondelete="CASCADE"),
nullable=False,
index=True,
comment="Activity ID that the activity lap belongs",
)
media_path = Column(String(length=250), nullable=True, comment="Media path")
media_type = Column(
Integer,
nullable=False,
comment="Media type (1 - photo)",
)
# Define a relationship to the Activity model
activity = relationship("Activity", back_populates="activity_media")

View File

@@ -0,0 +1,11 @@
from pydantic import BaseModel
class ActivityMedia(BaseModel):
id: int | None = None
activity_id: int
media_path: str
media_type: int
class Config:
orm_mode = True

View File

@@ -9,6 +9,7 @@ from alembic import context
import activities.activity.models
import activities.activity_exercise_titles.models
import activities.activity_laps.models
import activities.activity_media.models
import activities.activity_sets.models
import activities.activity_streams.models
import activities.activity_workout_steps.models

View File

@@ -291,11 +291,38 @@ def upgrade() -> None:
["id"],
ondelete="SET NULL",
)
# Create activity_media table
op.create_table(
"activity_media",
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
sa.Column(
"activity_id",
sa.Integer(),
nullable=False,
comment="Activity ID that the activity lap belongs",
),
sa.Column(
"media_path", sa.String(length=250), nullable=True, comment="Media path"
),
sa.Column(
"media_type", sa.Integer(), nullable=False, comment="Media type (1 - photo)"
),
sa.ForeignKeyConstraint(["activity_id"], ["activities.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
)
op.create_index(
op.f("ix_activity_media_activity_id"),
"activity_media",
["activity_id"],
unique=False,
)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f("ix_activity_media_activity_id"), table_name="activity_media")
op.drop_table("activity_media")
op.drop_constraint(None, "users_default_gear", type_="foreignkey")
op.drop_index(
op.f("ix_users_default_gear_windsurf_gear_id"), table_name="users_default_gear"