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

Entity Relationship Diagram #5

Open
tertek opened this issue Dec 11, 2023 · 29 comments
Open

Entity Relationship Diagram #5

tertek opened this issue Dec 11, 2023 · 29 comments
Assignees

Comments

@tertek
Copy link
Contributor

tertek commented Dec 11, 2023

to do:

Attribute definieren und gemeinsam besprechen

@tertek
Copy link
Contributor Author

tertek commented Dec 11, 2023

Image

@edenst-TPH
Copy link
Collaborator

edenst-TPH commented Dec 14, 2023 via email

@tertek
Copy link
Contributor Author

tertek commented Dec 14, 2023

@edenst-TPH Soweit ich weiss, kann man da einfach reinklicken? Bist du im Editor?

@edenst-TPH
Copy link
Collaborator

gibt es ein draw.io source file vom ERD?

@tertek
Copy link
Contributor Author

tertek commented Dec 18, 2023

@edenst-TPH
Copy link
Collaborator

pdfapi-erd drawio

@tertek
Copy link
Contributor Author

tertek commented Dec 19, 2023

Danke für den Entwurf. Kannst du bitte auch die Source hinterlegen? Ich werde das durchgehen, und dann können wir das im neuen Jahr besprechen,was meinst du?

@edenst-TPH
Copy link
Collaborator

edenst-TPH commented Dec 21, 2023

https://github.com/Research-IT-Swiss-TPH/pdf-api/blob/master/docs/pdfapi-erd-edenst.drawio
ERD Source, in draw.io sieht man auch tooltips :-)

Gerne Besprechung im Januar, ich bin am 8. zurück

PS evtl draw.io-App für GitHub installieren ?
https://www.drawio.com/blog/single-repository-diagrams
https://github.com/jgraph/drawio-github

@tertek
Copy link
Contributor Author

tertek commented Jan 8, 2024

Hier ein kurzes Feedback (gerne besprechen wir das noch ausführlicher):

User: Wir benötigen kein User Management, dh. Password für den User, da erstmal kein Front-End bestehen wird.

Authentication: Wo wird der Authentication Token dh. API Key gespeichert? Eventuell macht es hier Sinn, die Tabelle für Priviliges und Token Storage zu separieren.

Document: Wie genau sind die caches gemeint? In welchem Fall wäre ein Datenbank-basierter Cache notwendig?

Zusatz: Logging der durchgeführten Aktionen per Token, evtl in einer Log Tabelle?

@edenst-TPH
Copy link
Collaborator

pdfapi-erd_7(1)

@edenst-TPH
Copy link
Collaborator

@edenst-TPH
Copy link
Collaborator

terteks Post vom 8.1.2024, mit kurzen Fragen / Bemerkungen von edenst

Hier ein kurzes Feedback (gerne besprechen wir das noch ausführlicher):
User: Wir benötigen kein User Management, dh. Password für den User, da
erstmal kein Front-End bestehen wird.

Wollen wir wissen wer einen Request schickt? Falls ja: Authentication per
Machine MAC / IP, geht das ohne User Management?
Oder nur Token Authentication, User unwichtig? Wie kommt der Token zum
User?
Erstmal kein Frontend: Wird die SW später interaktiv? zB User schickt
PDF-Form, zurück falls validiert die Feldliste und Info wie zB Adressen
übergeben werden können,

Authentication: Wo wird der Authentication Token dh. API Key gespeichert?
Eventuell macht es hier Sinn, die Tabelle für Priviliges und Token Storage
zu separieren.

Soll ein Token bestimmte Privileges haben? Dann ja, Token-Table (id,
expiration) & Privileges-Table (join Token on idToken), die Privileges
können dann zahlreich werden, künftig zB aufgefächert nach nach Job,
Projekt oä?

Document: Wie genau sind die caches gemeint? In welchem Fall wäre ein
Datenbank-basierter Cache notwendig?

Documents als Files gespeichert, das Document-Table in der DB entält
Verweise darauf.

  • Das zu prozessierende PDF-Form: damit es, bei mehreren Requests, nur
    einmal mitgegeben werden muss.
  • FDF-File, evtl: Einmal aus PDF-Form extrahieren & speichern, dann Loop
    durch Adressliste, foreach Record set Values in FDF then fill PDF from
    FDF? (Oder sowieso php-pdftk?)
  • Imagelist / extracted images ist momentan wohl kein Thema
  • Der Job wird evtl Resultate als Files speichern und Download-Links
    zurückgeben?
  • Garbage Collection!

Zusatz: Logging der durchgeführten Aktionen per Token, evtl in einer Log
Tabelle?

Was loggen? zB: idToken, datetime, idDocument, (Request Params?), Result
(Success | ErrMsg, count_processed ..)

@tertek
Copy link
Contributor Author

tertek commented Jan 15, 2024

skizze_Besprechung_pdf-api
Wie besprochen anbei die Skizze aus dem erfolgreichen Austausch von letzter Woche. Bitte entsprechend in das ERD überführen.
Bei Fragen können wir uns gerne nochmals absprechen.

@edenst-TPH
Copy link
Collaborator

edenst-TPH commented Jan 18, 2024

  • Ein User kann ja mehrere Tokens haben, richtig? Worauf beziehen sich die Rate_Limits (Anzahl Jobs / PDFs created per Std, Tag etc)? Falls auf Tokens, würde ich auch die Projects auf Tokens beziehen. Die Projects würde ich dann auf Users beziehen, wenn sich auch die Rate_Limits auf Users beziehen.
  • Ein Project kann mehrere Jobs umfassen, richtig? Ein Job bezeichnet eine Produktion "PDF-Form + Daten-Liste = individuelle PDFs", richtig? Dann würde ich die Documents auf Jobs beziehen, und Jobs auf die Projects.
  • Worauf bezieht sich die Blacklist, auf einen User oder einen Token?

@tertek
Copy link
Contributor Author

tertek commented Jan 18, 2024

Ein User kann ja mehrere Tokens haben, richtig? Worauf beziehen sich die Rate_Limits (Anzahl Jobs / PDFs created per Std, Tag etc)? Falls auf Tokens, würde ich auch die Projects auf Tokens beziehen. Die Projects würde ich dann auf Users beziehen, wenn sich auch die Rate_Limits auf Users beziehen.

Wir können es so machen:
Ein User hat maximal MAX_PROJECTS und MAX_JOBS pro Projekt. Mit einem validen Token pro User (mehrere über Zeit).

Ein Project kann mehrere Jobs umfassen, richtig? Ein Job bezeichnet eine Produktion "PDF-Form + Daten-Liste = individuelle PDFs", richtig? Dann würde ich die Documents auf Jobs beziehen, und Jobs auf die Projects.

Ein Projekt hat maximal MAX_JOBS (siehe oben). Ein Job ist die Durchführung eines PDF Fillings für einen Datensatz mit einer befüllten PDF (optional flattened) als Rückgabe bzw. Rückgabe ID die dann asynchron als Download zur Verfügung steht für eine gewisse Zeit.

Worauf bezieht sich die Blacklist, auf einen User oder einen Token?

Die Blacklist ist für IP Adressen. Am besten wir lesen uns beide noch etwas mehr in das Thema ein:
https://medium.com/@bijit211987/everything-you-need-to-know-about-rate-limiting-for-apis-f236d2adcfff

@tertek
Copy link
Contributor Author

tertek commented Jan 18, 2024

@edenst-TPH Hier noch eine kleine List von hilfreicher Middleware für Slim. Es gibt bereits eine Middleware für Rate Limiting.
https://github.com/slimphp/Slim/wiki/Middleware-for-Slim-Framework-v3.x

Achtung obiger Link ist für Slim v3.
Für Version 4 ist die Doku nicht ganz vollständig, aber zum Anfang der Recherche:
https://www.slimframework.com/docs/v4/concepts/middleware.html#finding-available-middleware

https://github.com/middlewares/awesome-psr15-middlewares

@edenst-TPH
Copy link
Collaborator

edenst-TPH commented Jan 19, 2024

pdfapi-erd_8(9) drawio

https://github.com/Research-IT-Swiss-TPH/pdf-api/blob/master/docs/pdfapi-erd_8(9).drawio

@tertek
Copy link
Contributor Author

tertek commented Mar 13, 2024

@edenst-TPH Ich habe einige Änderungen vorgenommen:

  • Vereinheitlichung der Namensgebung: var_name statt varName
  • Aufhebung der expliziten Bezeichnung von id per Tabelle (Wir nutzen cakephp/database worin für jede Tabelle automatisch id erzeugt wird, dh. wir müssen keine extra Namen vergeben. Bei Foreign Keys macht es nachwievor Sinn)
  • Namensänderung: User -> Customer
  • Namensänderung: Source -> Document
  • Namensänderung für alle tsdate", da das unnötige lange ist

Hier das aktuallisierte ERD:

https://github.com/Research-IT-Swiss-TPH/pdf-form-filling-api/blob/dev/docs/pff-api.drawio.png

@tertek
Copy link
Contributor Author

tertek commented Mar 18, 2024

@edenst-TPH Ich habe das ERD nochmals überarbeitet.

  • "Folders" statt "Projects"
  • separate Tabelle für "Limits" per "Token"
  • Abänderung der Beziehungen für effizientere Abfragen
  • temporäres Auslassen der Logs (fügen wir später eventuell noch hinzu)
  • Hinzufügen der "Versions" per "Document" worin die "field_list" als JSON existiert
  • Blacklist mit "id_token" als FK

Können wir gerne besprechen.

Image

@edenst-TPH
Copy link
Collaborator

@tertek
Copy link
Contributor Author

tertek commented Apr 25, 2024

separates table für language

As discussed, it would make sense to add a subset of languages, language codes, etc. as either static array somewhere in the domain or if it is really something to be managed later, we can add it as table.
For now I do not see it necessary to be a separate table.

@edenst-TPH
Copy link
Collaborator

simplified diagram without document/version is created - I had to store it in a separate branch, since dev is protected, made pull request.
I suggest to cut the relation from jobs to customers:
the job already refers to a customer, via FKs: job - document - folder - customer
the direct relation job - customer would be redundant / 'circular', or even mismatching

@tertek
Copy link
Contributor Author

tertek commented Apr 25, 2024

since dev is protected, made pull request

It is protected, but I can access it. Maybe I need to give you permission. There is no PR yet.

I suggest to cut the relation from jobs to customer

Yes, we can drop the relation from jobs to customers, I had added it as a shortcut, but maybe it is better as you say

@edenst-TPH
Copy link
Collaborator

edenst-TPH commented Apr 26, 2024

@tertek I adjusted the ERD as agreed:

  • dropped table Versions, added column field_list to table Documents
  • dropped direct relation from Jobs to Customers

pff-api-erd drawio

@edenst-TPH
Copy link
Collaborator

edenst-TPH commented Apr 30, 2024

  • timestamps created_at & updated_at are listed where they exist
  • timestamps generally end with _at, according to phinx / cake standard
  • new table OutputLog stores events related to Outputs
  • new field Documents.description

pff-api-erd drawio

@tertek
Copy link
Contributor Author

tertek commented May 27, 2024

@edenst-TPH Ich habe bei Jobs und Documents den zusätzlichen Index 'uuid' hinzugefügt. Der PK bleibt bei beiden 'id'. Dies vereinfacht das Seeding. Der Customer darf beim Zugriff auf die API die 'id' nicht sehen. Zu klären wäre noch, ob das Projekt auch eine uuid benötigt oder nicht.

@tertek
Copy link
Contributor Author

tertek commented May 30, 2024

@edenst-TPH We will be changing the "customers" table to "users" table, since we will have different user roles:

  • admin: Can access all routes, has no limits
  • internal: can access business routes, has soft limits
  • customer: can access business routes, has hard limits

Business Routes:

  • Frontend: user management, token management
  • API

@edenst-TPH
Copy link
Collaborator

edenst-TPH commented Jun 2, 2024

@tertek grepped for 'customer' in app/src, found some 'id_customer' in domain/folder and action/folder - should I fix them right away?

@tertek
Copy link
Contributor Author

tertek commented Jun 3, 2024

@edenst-TPH thanks for the report. I quickly fixed it.

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

No branches or pull requests

2 participants