Skip to content

Soft-delete rekordów publikacji i autorów (Ciagle/Zwarte/Doktorat/Habilitacja/Patent + Autor) #303

@mpasternak

Description

@mpasternak

Problem

Obecnie 5 typów rekordów publikacji — Wydawnictwo_Ciagle,
Wydawnictwo_Zwarte, Praca_Doktorska, Praca_Habilitacyjna, Patent
— kasuje się fizycznie (DELETE). Skutki:

  • bezpowrotna utrata danych (brak „kosza", brak undo),
  • kaskadowe usunięcie powiązań autor↔rekord (*_Autor),
  • brak śladu audytowego.

Cel

Wprowadzić soft-delete: zamiast usuwać wiersz, ustawiamy znacznik
deleted_at. Rekord znika z widoku publicznego / ewaluacji / API, ale
dane (w tym powiązania *_Autor) zostają i można je przywrócić.

Kluczowe ustalenia (z rozpoznania)

  • Choke-point = trigger bpp_refresh_cache(): większość systemu czyta
    przez materializowany Rekord. Wystarczy nauczyć trigger traktować
    deleted_at IS NOT NULL jak DELETE → konsumenci Rekord/Cache_*
    czyszczą się jednym ruchem.
  • django-soft-delete jest już w repo (precedens: zglos_publikacje).
    Domyślny manager ukrywa usunięte → ekspozycja (API/dashboard/autocomplete)
    czysta „za darmo"; miejsca import/dedup/PBN muszą jawnie użyć
    global_objects (inaczej duplikaty przy re-imporcie).
  • Kaskada/auto-undelete pakietu wymaga, by dzieci były SoftDeleteModel
    (strict=True) → rekomendacja: Projekt A (override delete(), dzieci
    *_Autor nietknięte, cache/trigger odtwarza je przy restore).

Status

ODŁOŻONE — na razie. Spec wykonalności jest gotowy (~2–3 tyg.
nakładu), ale nie wchodzi teraz w realizację (priorytety: DSpace,
powiązania autorów). Issue dla śladu; start od triggera + rozstrzygnięcia
otwartych decyzji.

Pełna analiza: docs/superpowers/specs/2026-06-03-soft-delete-publikacje.md
(PR z samym specem towarzyszy temu issue).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions