2017-06-28 1 views
2

Graphcoolを使用して製品のバックエンドを設計しようとしています。私たちはすでに製品のドメインモデルを持っています。GraphCoolドメインモデルデザイン - ModifiedBy属性で問題が発生する

私が直面している問題は、非相関の属性で@リレーション(あまりにも2通りの関係)を使用しなければならないことです。

私は私が次

# projectId: cj4dsyc7ur8cc0142s3hesy1r 
# version: 2 

type File implements Node { 
    contentType: String! 
    createdAt: DateTime! 
    id: ID! @isUnique 
    name: String! 
    secret: String! @isUnique 
    size: Int! 
    updatedAt: DateTime! 
    url: String! @isUnique 
} 

type User implements Node { 
    createdAt: DateTime! 
    email: String @isUnique 
    id: ID! @isUnique 
    password: String 
    updatedAt: DateTime! 
} 

type Record implements Node { 
    createdAt: DateTime! 
    id: ID! @isUnique 
    name: String! 
    description: String! 
    createdBy: User! @relation(name: "createdBy") 
    modifiedBy: User! @relation(name: "modifiedBy") 
} 
を行うことを余儀なく午前関係を追加しようとすると、私はその後、エラー

Errors 
createdBy: The relation field `createdBy` must specify a `@relation` directive: `@relation(name: "MyRelation")` 
modifiedBy: The relation field `modifiedBy` must specify a `@relation` directive: `@relation(name: "MyRelation")` 

を取得し、私は次のような場合、このために

# projectId: cj4dsyc7ur8cc0142s3hesy1r 
# version: 2 

type File implements Node { 
    contentType: String! 
    createdAt: DateTime! 
    id: ID! @isUnique 
    name: String! 
    secret: String! @isUnique 
    size: Int! 
    updatedAt: DateTime! 
    url: String! @isUnique 
} 

type User implements Node { 
    createdAt: DateTime! 
    email: String @isUnique 
    id: ID! @isUnique 
    password: String 
    updatedAt: DateTime! 
} 

type Record implements Node { 
    createdAt: DateTime! 
    id: ID! @isUnique 
    name: String! 
    description: String! 
    createdBy: User! 
    modifiedBy: User! 
} 

の設計を支援

次のエラーが発生する

Errors 
createdBy: A relation directive with a name must appear exactly 2 times. 
modifiedBy: A relation directive with a name must appear exactly 2 times. 

私はすべての非スカラー出力グラフクールが2ウェイ関係を構築すると考えています。しかし、modifiedByとcreatedBy(User)のユースケースを考えてみましょう。追加するすべてのエンティティに対してUserオブジェクトに関係を置くことはできません。

GraphCoolでこれを行う良い方法は何ですか?

また、GraphCoolではこの制限が課されているのはなぜですか?GraphQLではこの制限が指定されていません。

乾杯 のRohit Graphcoolを使用するための

答えて

3

感謝!

最初のものが最初です。あなたがタイプを接続したいとき、Graphcoolは双方向の関係を強制します。場合によっては、データを一方向にのみ照会することが前提であることが分かっているため、双方向の関係を作成する必要があります。

Graphcool Permission Systemでは、データの構造に基づいて許可ルールを簡潔に指定することができます。あなたのケースでは、投稿の作成者だけがレコードを削除することを許可するように指定することができます。

実際には、権限ルールを実装するときに逆の関係が必要になることがよくあります。双方向関係を強制することで、プログラミングモデル全体を理解しやすくなり、許可ルールを簡単に実装できるようになります。解決策は、次のようにユーザーの種類を拡張するだろうあなたのスキーマの

type User implements Node { 
    createdAt: DateTime! 
    email: String @isUnique 
    id: ID! @isUnique 
    password: String 
    updatedAt: DateTime! 
    createdRecords: [Record!]! @relation(name: "CreatedBy") 
    modifiedRecords: [Record!]! @relation(name: "UpdatedBy") 
} 

(その関係名は大文字で始める必要がありますのでご注意ください)

希望

:-)に役立ちます
関連する問題