puzzle / skills

Open source skill management web application
GNU Affero General Public License v3.0
64 stars 19 forks source link

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

Open RandomTannenbaum opened 5 months ago

RandomTannenbaum commented 5 months ago

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

RandomTannenbaum commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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:

RandomTannenbaum commented 4 months ago

Notes 29.07.2024

RandomTannenbaum commented 4 months ago

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 commented 4 months ago

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 commented 4 months ago

ToDo

RandomTannenbaum commented 4 months ago

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 commented 4 months ago

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= 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: