mirror of
https://github.com/velocitatem/cvfs.git
synced 2026-05-31 08:43:37 +00:00
fix: cascade public assets on version deletion
This commit is contained in:
@@ -56,6 +56,12 @@ class CvVersion(Base, IdentifierMixin, TimestampMixin):
|
|||||||
submissions: Mapped[list["Submission"]] = relationship(
|
submissions: Mapped[list["Submission"]] = relationship(
|
||||||
"Submission", back_populates="version"
|
"Submission", back_populates="version"
|
||||||
)
|
)
|
||||||
|
public_assets: Mapped[list["PublicAsset"]] = relationship(
|
||||||
|
"PublicAsset",
|
||||||
|
back_populates="version",
|
||||||
|
cascade="all, delete-orphan",
|
||||||
|
passive_deletes=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CvPatch(Base, IdentifierMixin, TimestampMixin):
|
class CvPatch(Base, IdentifierMixin, TimestampMixin):
|
||||||
@@ -126,7 +132,7 @@ class PublicAsset(Base, IdentifierMixin, TimestampMixin):
|
|||||||
ForeignKey("submissions.id", ondelete="SET NULL"), nullable=True
|
ForeignKey("submissions.id", ondelete="SET NULL"), nullable=True
|
||||||
)
|
)
|
||||||
version_id: Mapped[str | None] = mapped_column(
|
version_id: Mapped[str | None] = mapped_column(
|
||||||
ForeignKey("cv_versions.id"), nullable=True
|
ForeignKey("cv_versions.id", ondelete="CASCADE"), nullable=True
|
||||||
)
|
)
|
||||||
slug: Mapped[str] = mapped_column(String(160), unique=True, index=True)
|
slug: Mapped[str] = mapped_column(String(160), unique=True, index=True)
|
||||||
artifact_key: Mapped[str] = mapped_column(String(512))
|
artifact_key: Mapped[str] = mapped_column(String(512))
|
||||||
@@ -138,9 +144,14 @@ class PublicAsset(Base, IdentifierMixin, TimestampMixin):
|
|||||||
submission: Mapped[Submission | None] = relationship(
|
submission: Mapped[Submission | None] = relationship(
|
||||||
"Submission", back_populates="public_asset"
|
"Submission", back_populates="public_asset"
|
||||||
)
|
)
|
||||||
version: Mapped[CvVersion | None] = relationship("CvVersion")
|
version: Mapped[CvVersion | None] = relationship(
|
||||||
|
"CvVersion", back_populates="public_assets"
|
||||||
|
)
|
||||||
views: Mapped[list["PublicAssetView"]] = relationship(
|
views: Mapped[list["PublicAssetView"]] = relationship(
|
||||||
"PublicAssetView", back_populates="public_asset", cascade="all, delete-orphan", passive_deletes=True,
|
"PublicAssetView",
|
||||||
|
back_populates="public_asset",
|
||||||
|
cascade="all, delete-orphan",
|
||||||
|
passive_deletes=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -156,7 +167,9 @@ class PublicAssetView(Base, IdentifierMixin):
|
|||||||
user_agent: Mapped[str | None] = mapped_column(String(512), nullable=True)
|
user_agent: Mapped[str | None] = mapped_column(String(512), nullable=True)
|
||||||
ip_hash: Mapped[str | None] = mapped_column(String(64), nullable=True)
|
ip_hash: Mapped[str | None] = mapped_column(String(64), nullable=True)
|
||||||
|
|
||||||
public_asset: Mapped[PublicAsset] = relationship("PublicAsset", back_populates="views")
|
public_asset: Mapped[PublicAsset] = relationship(
|
||||||
|
"PublicAsset", back_populates="views"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AiSuggestion(Base, IdentifierMixin, TimestampMixin):
|
class AiSuggestion(Base, IdentifierMixin, TimestampMixin):
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from fastapi import UploadFile
|
from fastapi import UploadFile
|
||||||
from sqlalchemy import select
|
from sqlalchemy import delete, select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.orm import selectinload
|
from sqlalchemy.orm import selectinload
|
||||||
|
|
||||||
from dlib.cv import parse_docx_bytes
|
from dlib.cv import parse_docx_bytes
|
||||||
|
|
||||||
from app.models import CvDocument, CvVersion
|
from app.models import CvDocument, CvVersion, PublicAsset
|
||||||
from app.services.storage import persist_upload
|
from app.services.storage import persist_upload
|
||||||
|
|
||||||
|
|
||||||
@@ -78,6 +78,11 @@ async def delete_document(
|
|||||||
doc = await get_document(session, owner_id, document_id)
|
doc = await get_document(session, owner_id, document_id)
|
||||||
if not doc:
|
if not doc:
|
||||||
return False
|
return False
|
||||||
|
version_ids = [version.id for version in doc.versions]
|
||||||
|
if version_ids:
|
||||||
|
await session.execute(
|
||||||
|
delete(PublicAsset).where(PublicAsset.version_id.in_(version_ids))
|
||||||
|
)
|
||||||
await session.delete(doc)
|
await session.delete(doc)
|
||||||
await session.commit()
|
await session.commit()
|
||||||
return True
|
return True
|
||||||
|
|||||||
Reference in New Issue
Block a user