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

GraphQL Schema #7

Closed
slemke opened this issue May 29, 2018 · 12 comments
Closed

GraphQL Schema #7

slemke opened this issue May 29, 2018 · 12 comments
Assignees
Labels
graphql Issues related to GraphQL

Comments

@slemke
Copy link
Contributor

slemke commented May 29, 2018

Das GraphQL Schema hat aktuell noch einige Schwächen, welche es für eine erste Version zu korrigieren gilt. Aktuelle Probleme sind die Folgenden:

@slemke slemke added the graphql Issues related to GraphQL label May 29, 2018
@slemke slemke added this to the Tech-Demo Tag milestone May 29, 2018
@slemke slemke modified the milestones: Techdemo, Beenden der Konzeptdefinitionen May 29, 2018
@fdaugs
Copy link

fdaugs commented May 29, 2018

Ich dachte die Evulationsmethoden wären über die Implements sauber modelliert?! Dementsprechend gäbe es garkeine Evaluationsmethoden mehr.

@ddubbert
Copy link

Das Problem ist, dass man keine Interfaces als Input-Types nutzen kann. Somit müsste man für jeden Typen eine eigene Mutation bereitstellen. Das bringt uns aber nichts, wenn wir z.B. in einem Vote alle Antworten gleichzeitig übermitteln wollen. Somit müssten wir jede Antwort einzeln übermitteln lassen oder einen Input-Type mit vielen "Nullable's" machen wo jeweils nur ein wert und ggf. der Typ mit angegeben wird.

@fdaugs
Copy link

fdaugs commented May 29, 2018

Somit müssten wir jede Antwort einzeln übermitteln lassen oder einen Input-Type mit vielen "Nullable's" machen wo jeweils nur ein wert und ggf. der Typ mit angegeben wird.

Ja das ist wohl das kleinste übel. Auch wenn man dann die Valideirung wieder per business logic machen müsste. Dann würde ich aber die Antworten nicht genauer im Shaema spezifizieren, sonder die dann einfach als Object übergeben.

mutation(survey:"1000","answers:[{value:1},{ranking:["c","a","b"]}]")

Das Problem haben wir ja eh eigentlich nur, weil wir das ranking mit dabei haben. Ansonsten bestünde jede Antwort ja eh nur aus einem Wert,

@ddubbert
Copy link

Liegt nicht nur am Ranking. Die Antworten haben jeweils nen anderen Typen den sie benötigen wenn das mit den Interfaces so bleibt (codes = String, value = Float etc.). Und in Input-Types kann man ja keine verschiedenen Typen pro Key angeben und auch keine Objekte (nur andere Input-Types). Also wirst du da nichts machen können wie:
mutation("answers:[{value:1},{value:"Code"},{ranking:["c","a","b"]}]") etc.

@fdaugs
Copy link

fdaugs commented May 30, 2018

Aber könnten für diesen Fall einen scalar Type definieren.

In most GraphQL service implementations, there is also a way to specify custom scalar types. For example, we could define a Date type:

scalar Date

Then it's up to our implementation to define how that type should be serialized, deserialized, and validated. For example, you could specify that the Date type should always be serialized into an integer timestamp, and your client should know to expect that format for any date fields.

Also z.B. ein Any.

@slemke
Copy link
Contributor Author

slemke commented May 30, 2018

Folgende Änderungen für das GraphQL Schema:

  • Jede Question hat einen eigenen Input und Mutation
  • Für Answer gibts einen allgemeinen Input mit Nullable's
  • Userrechte werden nicht in GraphQL modelliert, da sie als ein internes Flag dargestellt werden

@ddubbert
Copy link

ddubbert commented Jun 9, 2018

Ich habe eine neue Version des Schemas hochgeladen in dem alle Veränderungen der Architektur eingepflegt sind. Bei Unstimmigkeiten / Verbesserungsvorschlägen oder Fragen bitte bescheid geben.

@slemke
Copy link
Contributor Author

slemke commented Jun 13, 2018

Kommentar von Fabian: #24

  • password bei user fehlt in database schema
  • UserCreatePayload funktioniert nicht "out of the box -> Warum geau soll da ein token returned werden? Das ist doch für den admin oder? Ansonsten eher login.
  • Ich habe _id in id umbenannt, da sonst nicht automatisch vergeben + keine unterschiedlichen Feldnamen zwischen database und api schema möglich
  • Ähnlich mit createtAt und updatetAt -> Das muss überall gleich heißen, sonst fehler...
  • Da sind noch viele inkonsistenzen wie bspw. creationDate?!

@fdaugs
Copy link

fdaugs commented Jun 17, 2018

Ich schließe das jetzt hier, da die meisten Probleme je behoben sind. Bei weiteren Problemen bitte ein neues Issue öffnen.

@fdaugs fdaugs closed this as completed Jun 17, 2018
@slemke
Copy link
Contributor Author

slemke commented Jun 18, 2018

Aktuell hat das Schema noch ein paar Schwächen:

  • Like- und LikeDislikeQuestion
    • Als Rückgabetyp erhält man ImagePayload (like/dislikeicon), was einen Zwischenschritt über die Eigenschaft data notwendig macht
  • ChoiceQuestion
    • Was für Werte darf die Eigenschaft Code haben?
    • Unterschied zwischen items und choices (Ähnliche Frage beim Regulator)?
  • Images verfügen über creationDate und lastUpdate, was überflüssig ist
    • Hier sollten einige Parameter Nullable sein, damit wir diese bei der Rückgabe der Like / Dislike icons auslassen können

@slemke slemke reopened this Jun 18, 2018
@tolja
Copy link

tolja commented Jun 18, 2018

Bei "code" ist der Wert doch erstmal egal weil es ein String ist. Haben wir so gemacht damit der Code verschiedene Werte annehmen kann (z.B. 1 oder A usw.). Unterschied zwischen items und choices sehe ich auch erstmal nicht.

@slemke
Copy link
Contributor Author

slemke commented Jun 18, 2018

Im Schema steht folgendes:

""" Defines a question of type Like """
type LikeQuestion implements Question {

    """ Default Like-Icon """
    likeIcon : ImagePayload!
}
""" Defines the Payload for Image Data """
type ImagePayload {

    """ Defines the image data """
    data : ImageData!

    """ The URL an image can be downloaded from """
    url : String!
}

Daraus wird dann:

{
  /* question stuff */
  likeIcon: {
    data : { 
      // image daten
    },
    url: {
      // url
    }
  } 
}

Schöner wäre:

{
  /* question stuff */
  likeIcon: {
    // image daten
  } 
}

@slemke slemke closed this as completed Jun 20, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
graphql Issues related to GraphQL
Projects
None yet
Development

No branches or pull requests

4 participants