mirror of
https://github.com/standardebooks/web.git
synced 2025-07-09 16:20:27 -04:00
Clean up unused Tags, LocSubjects, and Collections
On `Ebook::Save()` and `Ebook::Delete()`, remove any unreferenced `Tag`, `LocSubject`, and `Collection` records. These are analogous to these lines in `Ebook::Create()`: ``` $this->CreateTags(); $this->CreateLocSubjects(); $this->CreateCollections(); ``` `EbookPlaceholder`s can't have `Tags` or `LocSubjects` at the moment, but other mistakes in production that are later corrected could leave unused `Tags` and `LocSubjects`. Context: https://github.com/standardebooks/web/pull/447#issuecomment-2555734692
This commit is contained in:
parent
88ed9639f5
commit
d6dd10be9c
4 changed files with 44 additions and 0 deletions
|
@ -99,6 +99,17 @@ class Collection{
|
||||||
', [], Collection::class);
|
', [], Collection::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes `Collection`s that no `Ebook`s are members of.
|
||||||
|
*/
|
||||||
|
public static function DeleteUnused(): void{
|
||||||
|
Db::Query('
|
||||||
|
DELETE
|
||||||
|
from Collections
|
||||||
|
where CollectionId not in
|
||||||
|
(select distinct CollectionId from CollectionEbooks)
|
||||||
|
');
|
||||||
|
}
|
||||||
|
|
||||||
// *******
|
// *******
|
||||||
// METHODS
|
// METHODS
|
||||||
|
|
|
@ -1984,6 +1984,10 @@ final class Ebook{
|
||||||
|
|
||||||
$this->RemoveEbookPlaceholder();
|
$this->RemoveEbookPlaceholder();
|
||||||
$this->AddEbookPlaceholder();
|
$this->AddEbookPlaceholder();
|
||||||
|
|
||||||
|
EbookTag::DeleteUnused();
|
||||||
|
LocSubject::DeleteUnused();
|
||||||
|
Collection::DeleteUnused();
|
||||||
}
|
}
|
||||||
catch(Exceptions\ValidationException $ex){
|
catch(Exceptions\ValidationException $ex){
|
||||||
$error = new Exceptions\InvalidEbookException();
|
$error = new Exceptions\InvalidEbookException();
|
||||||
|
@ -2176,6 +2180,10 @@ final class Ebook{
|
||||||
$this->RemoveTocEntries();
|
$this->RemoveTocEntries();
|
||||||
$this->RemoveEbookPlaceholder();
|
$this->RemoveEbookPlaceholder();
|
||||||
|
|
||||||
|
EbookTag::DeleteUnused();
|
||||||
|
LocSubject::DeleteUnused();
|
||||||
|
Collection::DeleteUnused();
|
||||||
|
|
||||||
foreach($this->Projects as $project){
|
foreach($this->Projects as $project){
|
||||||
$project->Delete();
|
$project->Delete();
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,4 +107,17 @@ class EbookTag extends Tag{
|
||||||
|
|
||||||
return $tags;
|
return $tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes `EbookTag`s that are not associated with any `Ebook`s.
|
||||||
|
*/
|
||||||
|
public static function DeleteUnused(): void{
|
||||||
|
Db::Query('
|
||||||
|
DELETE
|
||||||
|
from Tags
|
||||||
|
where Type = ?
|
||||||
|
and TagId not in
|
||||||
|
(select distinct TagId from EbookTags)
|
||||||
|
', [Enums\TagType::Ebook]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,4 +64,16 @@ class LocSubject{
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes `LocSubject`s that are not associated with any `Ebook`s.
|
||||||
|
*/
|
||||||
|
public static function DeleteUnused(): void{
|
||||||
|
Db::Query('
|
||||||
|
DELETE
|
||||||
|
from LocSubjects
|
||||||
|
where LocSubjectId not in
|
||||||
|
(select distinct LocSubjectId from EbookLocSubjects)
|
||||||
|
');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue