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

Update People when they are viewed | PuzzleTime Sync #7 #746

Open
3 of 4 tasks
RandomTannenbaum opened this issue Jul 2, 2024 · 9 comments · May be fixed by #749
Open
3 of 4 tasks

Update People when they are viewed | PuzzleTime Sync #7 #746

RandomTannenbaum opened this issue Jul 2, 2024 · 9 comments · May be fixed by #749
Assignees

Comments

@RandomTannenbaum
Copy link
Collaborator

RandomTannenbaum commented Jul 2, 2024

Introduction
When clicking on an employee that is displayed on the ptime-employee-dropdown it redirects to the detailed view of this employee. As soon as an employee is clicked a request for this employee is sent to the PTime API and the response data will be saved in the skills DB. Then the freshly fetched data is displayed on the profile of this specific person. This makes sure that the data is up to date at all times.

Creating a person
If a Person doesn't exist yet in the Skills DB, we want to create it. The dropdown will have /people/new?ptime_employee_id={ptime_employee_id} as link. When we navigate to this route, we first fetch this ptime_employee_id from the PTime API, to see if it exists and to get the data. If it doesn't exist, we do nothing. We also do nothing, if there already is a person with this ptime_employee_id in the skills DB. If it exists, we create a new person with the fetched data and set it's ptime_employee_id to the id of the fetched employee.

It would probably be beneficial to implement a loading bar while fetching data.

ToDo

  • A request is sent everytime a specific person is visited
  • The response is rendered correctly with good timing
  • Create new person if it doesn't exist yet
  • Loading bar if necessary
@RandomTannenbaum RandomTannenbaum self-assigned this Jul 3, 2024
@RandomTannenbaum
Copy link
Collaborator Author

Stand 03.07.2024
Ich habe im people controller begonnen die show und new Methoden so umzuschreiben, dass nun der Employee gefetched wird und die Daten upgedatet werden sollten. Es ist jedoch noch nicht ganz ausgereift.

@RandomTannenbaum
Copy link
Collaborator Author

Stand 04.07.2024
Das Updaten von Personendaten funktioniert jetzt einigermassen. Ausserdem habe ich die Logik dazu aus den Controllern entfernt und in eine Klasse ausgelagert. Auch das Erstellen von neuen Personen, wenn diese noch nicht existieren, sollte jetzt einigermassen funktionieren.

@RandomTannenbaum
Copy link
Collaborator Author

RandomTannenbaum commented Jul 5, 2024

Stand 05.07.2024
Ich habe mich heute vor allem auf Testing des features konzentriert, aber auch noch einige Bugs behoben. Das feature sollte auch funktionieren und einige Tests sind geschrieben.

Hinweise: Ich habe feature specs als auch domain specs geschrieben.

Was noch fehlt:

  • Soll ein error geraised werden, wenn in update_person_data die Person keine ptime_employee_id hat?
  • Einen Test schreiben, der überprüft ob default Personen von der new action erstellt wurden wirklich gelöscht werden, wenn die jeweilige ptime_employee_id auf der PuzzleTime API nicht gefunden wird.
  • Testen ob diese default Personen auch gelöscht werden, sollte das model invalide sein vor dem .save

@RandomTannenbaum
Copy link
Collaborator Author

Notes 29.07.2024

  • Rename update_person_data class in ptime namespace and methods in it -> Idea for class PersonEmployee.

@RandomTannenbaum
Copy link
Collaborator Author

Stand 29.07.2024
Ich habe heute die Logik so umgeschrieben, dass die Person nicht mehr zuerst als dummy angelegt und dann geupdated, sondern direkt mit den richtigen Daten erstellt wird. Ausserdem habe ich die Tests entsprechend der neuen Logik aufgeräumt.

@RandomTannenbaum
Copy link
Collaborator Author

Stand 30.07.2024
Heute habe ich meinen Code mit dem Code für das neue Dropdown gerebased. In diesem Code waren auch einige neue Testhelper vorhanden, mit denen ich meine Tests auch entsprechend umgeschrieben habe. Danach habe ich mich darum gekümmert, dass mein Teil des Codes auch ohne Time Anbindung funktioniert. Ich habe den Code der mit dem Time arbeitet in ein Module ausgelagert, welches nun durch einen Initializer conditionally included werden soll.

@RandomTannenbaum
Copy link
Collaborator Author

RandomTannenbaum commented Jul 31, 2024

ToDo

  • Move default languages to model
  • Rename ptime_connector initializer to ptime
  • Rename ptime_connection to person_controller and put it in the ptime namespace
  • Make the initializer work
  • Refactor update_person_data method by splitting it into multiple methods

@RandomTannenbaum
Copy link
Collaborator Author

Stand 31.07.2024
Heute hatten wir eine Besprechen mit @mtnstar und haben den vorläufigen Stand angeschaut. Basierend auf dem Feedback habe ich die Änderungen (oben bei ToDo ersichtlich) implementiert. Ausserdem habe ich den Initializer gefixt. So kann man nun über eine ENV Variable kontrollieren, ob die Methoden für die Time-Anbindungen verwendet werden oder nicht.

@RandomTannenbaum
Copy link
Collaborator Author

RandomTannenbaum commented Aug 2, 2024

Stand 02.08.2024
Der Branch ptime_mapper_script enthält sowohl das Skript um die IDs der Personen aus dem PuzzleSkills auf die IDs der Personen aus dem PuzzleTime zu mappen als auch die Funktionalität die aktuellen dropdown Daten direkt aus dem PuzzleTime zu beziehen.

Der verlinkte Branch dieses Tickets baut auf dem oben genannten Branch auf und fügt folgende Funktionen hinzu:

Wenn man auf eine Person navigiert, dann fetcht und updated der Controller die Daten von der PuzzleTime API bevor die Person dem Benutzer angezeigt wird. Wenn eine Person noch nicht existiert, dann kann diese über die Route `/people/new?ptime_employee_id=<ptime_employee_id> erstellt werden. Der Controller fetcht dann die Daten und erstellt daraus die entsprechende Person.

Über eine ENV-Variable namens PTIME_API_AVAILABLE kann entschieden werden, ob der Sync mit dem PuzzleTime verwendet werden soll.

Was noch fehlt:

  • Ein Test failed noch. Dieser muss noch gefixt werden.
  • Der "Profil anlegen" button muss aus dem UI entfernt werden, wenn das PuzzleTime sync verwendet wird.
  • Die "/new" route darf das form bzw. template nicht rendern, wenn das PuzzleTime sync verwendet wird.
  • Allgemeine Dokumentation mit Informationen über das PuzzleTime Sync zb. im README.

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 a pull request may close this issue.

1 participant