mirror of
https://github.com/joaovitoriasilva/endurain.git
synced 2026-01-10 08:17:59 -05:00
Add table activity_media and folder to store media
This commit is contained in:
@@ -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",
|
||||
)
|
||||
|
||||
0
backend/app/activities/activity_media/__init__.py
Normal file
0
backend/app/activities/activity_media/__init__.py
Normal file
32
backend/app/activities/activity_media/models.py
Normal file
32
backend/app/activities/activity_media/models.py
Normal 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")
|
||||
11
backend/app/activities/activity_media/schema.py
Normal file
11
backend/app/activities/activity_media/schema.py
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
0
backend/app/config/activity_media/__init__.py
Normal file
0
backend/app/config/activity_media/__init__.py
Normal file
Reference in New Issue
Block a user