Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DocumentFinder auf Doctrine-DBAL umstellen #244

Draft
wants to merge 11 commits into
base: doctrine
Choose a base branch
from
Draft

Conversation

haogatyp
Copy link
Contributor

PR for #129

@j3nsch j3nsch changed the base branch from master to doctrine February 10, 2022 15:56
Copy link
Member

@j3nsch j3nsch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vielen Dank! Ich denke wir müssen über ein paar Punkt noch einmal nachdenken, damit sich der DocumentFinder wie erwartet verhält. Evtl. müssen wir auch das Interface bzw. seine Dokumentation noch erweitern.

}

/**
* @return int[]
*/
public function getIds()
{
return $this->finder->ids();
$this->select->select("d.id");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warum Double-Quotes? Bitte nur bei Bedarf.

@@ -104,7 +144,15 @@ public function setOrder($criteria, $ascending = true)
*/
public function setDocumentIds($documentIds)
{
$this->finder->setIdSubset($documentIds);
// Hotfix: If $subset is empty, return empty set.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nein, ich denke nicht. Warum diesen "Hotfix"? Ein leeres Array ist offensichtlich ein Fehler, ein falscher Parameter und sollte entsprechend behandelt werden, ansonsten verstecken wir hier Probleme.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gibt es einen Test der dieses Verhalten erfordert? Wenn es irgendwo Code gibt der versucht Dokumente ein einer leeren Menge von möglichen Dokumenten zu finden, dann stimmt was nicht mit diesem Code.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Den Hotfix habe ich entfernt. Einen Test der diesen erfordert konnte ich nicht entdecken.

@@ -145,7 +198,9 @@ public function setServerState($serverState)
*/
public function setBelongsToBibliography($partOfBibliography = true)
{
$this->finder->setBelongsToBibliography($partOfBibliography);
$this->select->andWhere('d.belongs_to_bibliography = :setBelongsToBibliography_partOfBibliography')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Das sind sehr lange Parameternamen. Dadurch, dass der Funktionsname mit drin steckt, kann man die Parameter beim Debugging vielleicht leichter zuordnen. Das finde ich gut. Der Rest ist, zumindest manchmal, ein wenig redundant. Hier würde ich den Namen zu setBelongsToBibliographyParam ändern. Meinetwegen auch mit Unterstrich. Der kürzere Name liest sich einfacher.

Klar wenn in einer Funktion mehr als ein Parameter verwendet wird, sollte der Name noch weiter differenziert werden.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also setDocumentIdRange_start und _end machen z.B. Sinn und können so bleiben oder z.B. in setDocumentIdRangeStart oder setDocumentIdRangeParamStart umgewandelt werden. Einheitlichkeit ist schön und wichtig, aber weit davon entfernt unser wichtigstes Problem hier zu sein. So etwas wie setCollectionId_collectionId ist einfach unnötig und sollte in setCollectionIdParam umgewandelt werden. Danke!

$subSelect = $queryBuilder->select('i.id')
->from('document_identifiers', 'i')
->where('i.document_id = d.id')
->andWhere('type = :setIdentifierExists_name');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Das Problem, dass ich hier sehe ist, dass es sinnvoll sein kann die Funktion zweimal aufzurufen. Das hat in der alten Implementation funktioniert. Ein Dokument müsste dann Identifier für beide Namen haben. In der neuen Implementation wird in beiden Fällen der gleiche Parameter-Name verwendet, so dass das vermutlich hier nicht mehr funktionieren würde.

Ich nehme an für diese Nutzung gibt es keine Tests. Diese sollten ergänzt werden. Da es in der Vergangenheit einfach "automatisch" funktioniert hat, hat sich vermutlich niemand weiter Gedanken über Tests gemacht.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wie könnte man das machen? Vielleicht mit einem Counter, so dass an den Parameternamen noch eine Nummer dran gehängt wird? Oder hat eine Lösung, bei der mit jedem Aufruf die zusätzlichen Bedingungen in einem Array erfasst werden und das Query-Objekt erst am Ende beim Aufruf von getYYYY gebaut wird, mehr Vorteile?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Es gibt jetzt eine Funktion die mittels Counter eindeutige Parameter-Namen erzeugt. Einen exemplarischen Test für die Funkrion setIdentifierValue habe ich hinzugefügt.

*/
public function testCountOnEmptyDb()
{
$finder = new DefaultDocumentFinder();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verschiebe das mal bitte ins Setup, damit wir die Instanzierung nur an einer Stelle haben. Spricht etwas dagegen?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vielleicht macht auch eine createDocumentFinder Funktion Sinn, damit man innerhalb eines Tests mehrere Finder verwenden kann.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Da einige Tests auch mehrere Finder verwenden habe ich eine Create-Funktion angelegt.

*/
public function testIdsByState()
{
// $this->markTestSkipped('TODO DOCTRINE DBAL Issue #129');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skipped ja/nein?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kein skip, habe ich entfernt.

/**
* Extended functionality: Grouping
*/
public function testGroupedDocumentTypes()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Funktion ist heißt jetzt getDocumentTypes.

$this->assertTrue(in_array($doc3->getId(), $resultDocIds), 'Expected Document-ID in result set');
}

public function testSetFilesVisibleInOai()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Funktion heißt jetzt setHasFilesVisibleInOai.


public function testFindDocumentsForXMetaDissPlus()
{
$this->markTestSkipped('TODO DOCTRINE DBAL Issue #129');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was ist das Problem hier?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hier müssen ebenfalls neue Funktionen verwendet werden: setServerState und setDocumentType anstelle von
setServerStateInList und setTypeInList.

*/
public function testFindDocumentsWithExpiredEmbargoDateForUpdatingServerDateModified()
{
$this->markTestSkipped('TODO DOCTRINE DBAL Issue #129: Function setEmbargoDateBeforeNotModifiedAfter() is no part of the DocumentFinderInterface');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Die Funktion wurde aufgeteilt bzw. jetzt müssen setEmbargoDateBefore und setNotModifiedAfterEmbargoDate verwendet werden. Der Test sollte dahingehend umgebaut werden, so dass die Idee, die Funktionalität weiterhin getestet wird.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In den betroffen Tests habe ich jetzt die neuen Funktionen verwendet.


$today = date('Y-m-d', time());

$doc = new Document();
Copy link
Member

@j3nsch j3nsch Feb 16, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bitte auf Document::new() umstellen.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Habe ich umgestellt.

@j3nsch j3nsch marked this pull request as draft June 30, 2022 13:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants