2017-10-02 1 views
0

J'essaie de nid fragments (non-récursivité ou expansion illimitée) dans ma requête graphql. Mais, soit le schéma graphql ne considère pas ma requête comme valide, soit la définition du fragment semble redondante. Ma structure de réponse désirée graphql est:Imbrication de fragments dans graphql

` 
{ 
    "data":{ 
     "availability":{ 
      "mon":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "tue":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "wed":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "thu":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "fri":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "sat":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "sun":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      } 
     } 
    } 
} 
` 

où la disponibilité est de type Disponibilité et mon, mar., etc. ont le même type jour

Approche 1: Ce n'est pas une syntaxe valide dans graphql . graphql jette l'erreur (ne permet pas l'imbrication de cette façon)

` 
fragment Hours on Day { 
    open 
    close 
    allday 
    closed 
} 

fragment DailyAvailability on Availability { 
    mon 
    tue 
    wed 
    thu 
    fri 
    sat 
    sun 
} 

query { 
    availability { 
     ... DailyAvailability { 
      ... Hours 
     } 
    } 
} 
` 

Approche 2: Cela fonctionne, mais il semble que je redondante dois répandre des heures chaque jour séparément.

` 
fragment Hours on Day { 
    open 
    close 
    allday 
    closed 
} 

fragment DailyAvailability on Availability { 
    mon {... Hours} 
    tue {... Hours} 
    wed {... Hours} 
    thu {... Hours} 
    fri {... Hours} 
    sat {... Hours} 
    sun {... Hours} 
} 

query { 
    availability { 
     ... DailyAvailability 
    } 
} 
` 

Veuillez suggérer s'il y a un moyen d'imbriquer des fragments comme je l'ai l'intention de faire dans ma première approche.

Répondre

0

Cela ressemble à ce que vous voulez utiliser les demandes de champ avec "alias". Votre schéma ressemblerait à quelque chose comme:

type QueryRoot { 
    availability: Availability 
} 

type Availability { 
    openingHours(forDay: WeekDay): Day 
} 

enum WeekDay { 
    mon 
    tue 
    wed 
    thu 
    fri 
    sat 
    sun 
} 

type Day { 
    open: String 
    close: String 
    allday: Boolean 
    closed: Boolean 
} 

Ensuite, cette requête vous donner ce que vous avez demandé:

query q { 
    availability { 
    mon: openingHours(forDay: mon) { ... DailyAvailability } 
    tue: openingHours(forDay: tue) { ... DailyAvailability } 
    wed: openingHours(forDay: wed) { ... DailyAvailability } 
    thu: openingHours(forDay: thu) { ... DailyAvailability } 
    fri: openingHours(forDay: fri) { ... DailyAvailability } 
    sat: openingHours(forDay: sat) { ... DailyAvailability } 
    sun: openingHours(forDay: sun) { ... DailyAvailability } 
    } 
} 
fragment DailyAvailability on Day { 
    open 
    close 
    allday 
    closed 
}