Closed FabianWilms closed 8 years ago
So müsste eine Response vom Backend ausschauen.
{
"type": "line",
" xLabel": "...",
" yLabel": "...",
"data": {
"labels": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
"datasets": [
{
"label": "Lufthansa",
"data": [28, 48, 40, 19, 86, 27, 90]
},
{
"label": "Ryan Air",
"data": [65, 59, 80, 81, 56, 55, 40]
}
]
}
}
Der type ist optional, das wäre der typ des Graphen (
line
/bar
)
So wird es definitiv nicht aussehen XD
Dann muss aber möglichst früh feststehen wie es aus schaut, weil alles was davon abweicht eine Anpassung in der GUI bedeutet
Wie gesagt, mache ich das heute fertig.
Habe den Issuetext nochmal angepasst, da die Axenbeschriftung fur die Daten mitgeliefert werden muss.
Um GUI Elemente sollte sich die GUI kümmern. Axenbeschriftungen sollten meiner Meinung nach nicht vom Backend kommen.
Ich merk schon, dass ihr es euch gerne einfach machen wollt XD
Am besten kommen vom Backend gleich die HTML Komponente fertig konvertiert und wer weiß was noch
Ich wollte euch Routen zurück liefern, die durch den übergebenen Filter gefiltert wurden und nach dem Wert für x sortiert sind. Und solange der Filter nicht geändert wird, kann der y Wert und der TimeStep angepasst werden, ohne neue Daten holen zu müssen. Und man könnte auch mehrere Werte für y gemeinsam anzeigen. So war es bisher von mir gedacht.
Shitstorm.start()
OK, meine Meinung ist wenn man schon die ganzen Einstellungen hat kann man auch alles direkt vorbereiten. Dann wäre es für uns in der GUI ziemlich klar getrennt (ändern sich die momentanen settings ist ein request nötig).
So Dinge wie Farben und Positionen werden natürlich von der GUI übernommen :)
Findest du dass denn eher ein Aufwand- oder Design Problem das so zu machen?
Hauptsächlich Design Problem. Man merkt schon daran, dass Labels vom Backend geliefert werden sollen, dass sich hier das Backend komplett und speziell nach dieser GUI ausrichtet. Und das ist aus meiner Sicht kein gutes Design. Ich weiß, dass wir nur eine GUI haben, aber deshalb sollte man eine gewisse Form waren. Sonst hätten wir uns diese ganze Mikroservice Geschichte sparen können.
@FabianHoltkoetter @peter-mueller Seit ihr noch in der Uni? Wir können auch gerne persönlich diskutieren, damit es schneller geht. Ich bin noch in R1.012
Ne sry bin schon daheim. Wenn du nur filtern möchtest ist ja nicht nur die Response umstritten sondern auch der Endpunkt, weil dann ja nicht ein volles settings Objekt benötigt wird.
Vllt klären wir das einfach morgen nach EC?
Dass der Endpunkt das Setting Objekt erwartet, war ja auch eine GUI Idee und ich bin euch da ja entgegengekommen. 😄
Es war sicher nicht die Idee uns die Arbeit zu erleichtern. Wenn dir das zu viel ist hätte ich den Endpunkt auch implementieren können und fänd es auch immer noch sinnvoll. Hier meine Gründe warum ich die Generierung der Graph-Daten im Backend sinnvoll fand:
X- und ylabels haben natürlich im Backend nichts verloren, da gebe ich dir recht. Aber das aufarbeiten der Daten finde ich insgesamt sinnvoll. Wie gesagt, muss von mir aus nicht sein dass du es machst wenn es dir zu viel ist, aber ansonsten würde ich das dann gerne im nächsten spring an gehen.
Wie oben bereits gesagt, habe ich kein Problem mit dem Aufwand. Auch noch mal Allgemein zu eurem Aufwand. Ich finde es sehr schade, dass ihr nun schon zum zweiten Mal etwas in der GUI implementiert und eine gewisse Schnittstelle im Backend voraussetzt ohne mich mit einzubeziehen. So sollte Kommunikation in einem Team definitiv nicht laufen. Schnittstellen müssen immer vorher festgelegt werden. Dann müssten wir diese Diskussion nicht schon wieder kurz vorher führen. Und an deiner Argumentation merke ich, dass ihr mich falsch versteht. Gegen das Aufbereiten der Daten im Backend habe ich nie etwas gesagt, nur nicht in der Form, wie es ob steht. Hier mal ein etwas angepasster Vorschlag:
{
"key1": [ data1, data2, ..., dataN],
"key2": [ data1, data2, ..., dataN]
}
Die Keys entsprechen allen möglichen Werten je nach ausgewähltem qualitativem Wert und die Daten entsprechen dem quantitativen Werten im entsprechend gewähltem Zeitraum und TimeStep sowie um den Filter reduziert.
Qualitativ: Airline
Quantitativ PassangerCount
From: Jan 2015
To: Mar 2015
TimeStep: Month
{
"Lufthansa": [ 50, 100, 75],
"AirBerlin": [ 25, 80, 200]
}
Qualitativ: Time
Quantitativ Delay
From: 01 Jan 2015
To: 03 Jan 2015
TimeStep: Day
{
"01-01-2015": [ 25 ],
"02-01-2015": [ 30 ],
"03-01-2015": [ 5 ]
}
Find ich cool den Vorschlag :+1: muss Peter nur noch bestätigen, der ist der graph-mensch
Das ist ja quasi mein Vorschlag, nur die datasets minified.
Die Labels müssen aber mM nach trotzdem mit dabei sein ( oben monday, tuesday... hier jetzt Jan 2015, Feb 2015)
Auch die axis Beschriftung sollte dabei sein, ist ja nur ein copy aus dem request.
Der Vorschlag war ja eine Adaption deiner Version, gekürzt um alles was das Backend nichts angeht.
Hier noch eine Grafik :smile: warum mir die labels wichtig sind. Ich finde man schickt von backend Seite aus logisch eine Tabelle, und die sollte nicht nur Äpfel und Birnen beinhalten.
@FabianHoltkoetter Wie siehst du das?
Die einzelnen Daten aber reichen ja schon gut aus um viel am Donnerstag zu zeigen. Bis wann wird das ca. gehen (also zumindest mit einem Beispielsettings request)?
Implementiert ist es schon. Muss es noch testen und eventuell Fehler beheben. Wann genau kann ich nicht sagen, da es ja an den Fehlern hängt. XD Heute im laufe des Tages sollte es stehen.
Zur Argumentation: Deine Grafik unterstützt nicht unbedingt deine Argumentation. Wenn ich eine Freunde Verwaltung mit Spring Data baue und einen Get auf die Freunde von einem User mache, dann schicke ich auch nicht den User nochmal zurück. Man bekommt die Antwort auf den Request den man gemacht hat und was für ein Request das war, weiß hoffentlich der Client noch und muss nicht vom Backend daran erinnert werden.
Oder noch besser ich mache eine Anfrage über eine findBy Methode. Dann kommen auch nicht die Parameter der FindBy Methode zurück.
Da ist es ja auch URL encoded. Beim erstellen einer Entität kann es auch Sinn machen die gesamte erstellte Entität zurückzuliefern.
Das zurückliefen der Entität beim Erstellen brauchst du ja wegen der OID. Obwohl auch hier Spring Data teilweise nur einen Response zurück liefert mit der location im Header.
Ich verstehe das Problem aktuell nicht. (Oder nicht mehr :p) Mit Renés Lösung werden doch aktuell dann immer die passenden labels für die Daten als key mitgeliefert OÖ. Also time -> 2015-05-04 Airline -> Lufthansa Destination -> los Angeles etc
Er will auch Labels für die einzelnen Daten in der Datenliste der einzelnen Keys und Axen Beschriftung.
Der Timestep ist doch nur relevant wenn man auf der x-achse auch die Zeit betrachtet. Somit ist natürlich auch renes eines Beispiel mit qualitative: airline
"falsch" weil da nur ein wert geliefert werden würde
In dem Fall hätten wir für jeden Key immer nur einen Wert, egal was der qualitative Wert ist. Dann hätte ich das falsch verstanden. Ich dachte, dass die Quantitativen Werte anhand vom Timestep auch nochmal aufgeteilt werden sollen.
Mach auch Sinn und würde das ganze schön vereinfachen. 😄 Aber ich bin mir mit der Anforderung da nicht sicher.
Je mehr ich darüber nachdenke, desto besser finde ich das. Dann ist der Timestep nur interessant bei dem qualitativen Wert "Time". Und Peter hat auch keine Verwirrung mehr in der Liste, da eh nur ein Wert da steht XD
Vielleicht war das mein problem warum ich euer Problem nicht gesehen habe?^^ Bei Timestep DAY, MONTH und YEAR aber beachten: Bei DAY soll dann Montag bis Freitag nur da stehen, bei MONTH Januar bis Dezember und nur bei Jahr soll dann wirklich das jeweilige Jahr da stehen. Also nicht bei DAY etwa alle Tage des angegebenen Zeitraums. Ich hoffe die Formulierung macht sinn xD
Vielleicht ein Beispiel:
Time from: 01.01.2015 Time to: 01.03.2015 Qualitative: Time Quantitative: whatever Timestep: DAY
Montag: 2
Dienstag: 2,
Mittwoch 5,
Donnerstag: 2,
Freitag: 9,
Samstag: 6,
Sonntag: 3
Gut das du es sagst, da ich mir da noch unsicher war.
Machen wir das jetzt so? Ist Peter damit auch einverstanden?
{
"key1": dataInteger,
"key2": dataInteger
}
Qualitativ: Airline
Quantitativ PassangerCount
From: Jan 2015
To: Mar 2015
{
"Lufthansa": 200,
"AirBerlin": 25
}
Qualitativ: Time
Quantitativ Delay
From: 01 Jan 2015
To: 03 Jan 2015
TimeStep: Day
{
"Monday": 25 ,
"Tuesday": 30 ,
"Thursday": 5
}
Qualitativ: Time
Quantitativ FlightCount
From: 01 Jan 2014
To: 01 Jan 2016
TimeStep: Year
{
"2014": 200 ,
"2015": 500 ,
"2016": 20
}
Ok ich hab es glaub anderst verstanden. Zwar nicht 100% aber ich dachte immer Time ist extra bzw bewirken die Selektoren immer einen multi-line graph z.B. beispiel 1:
labels: ["Jan 15", "Feb 15", "Mar 15"] \ (Timestep Month) { lufthansa: [1,2,3], ryanair: [0,1,0] }
So hatte ich es auch erst verstanden. Tja, dass ist jetzt die Frage, wie wir es machen.
Das liegt bei euch was euch leichter fällt für diesen sprint. "Falsch verstanden" funktioniert immer.
Ich wäre für deine Version.
Dann ist aber das mit Graph anzeigen recht billig in der GUI.
Ist doch gut XD
Done
Es wird ein Endpunkt benötigt, der ein Settings-Objekt als Parameter übergibt und anhand der Parameter die verlangten Daten zurückliefert. Vom Backend muss der angegebene Zeitraum und alle angegebenen Filter beachtet werden. Außerdem müssen Timesteps und die Axenbeschriftung beachtet werden. Wenn keine Filter angegeben werden, müssen dementsprechend die Summen der gesammelten Daten berechnet werden.