私の Prisma Data Model では、次のような基本的な User タイプから始めました。
type User {
name: String!
email: String! @unique
password: String!
}
現在、ユーザーは、候補者として、または雇用主に関連付けられたユーザーとして、2 つの役割を持つことができます。候補者の場合、ユーザーには一連のアプリケーションと一連の資格も必要です。雇用者に関連付けられている場合は、アクセス レベルと雇用者への参照が必要です。
まず、GraphQL データ モデリングで基本型を拡張する方法はありますか? もしそうなら、どうすればそれを行うことができますか?
そうでない場合は、3 つの異なる方法が使用されていることがわかります。それぞれのアプローチの長所と短所を知りたいです。
- と の2 つの別個の型が
CandidateUser
ありEmployerUser
、それぞれにフィールドname
、email
、 がありpassword
ます。このアプローチには 2 つの問題があります。@unique
タグ onemail
は信頼性が低く、フィールドが両方のタイプで一意であることを確認するためにカスタム検証を作成する必要があります。また、メールを受け取ってユーザーの対応するデータを取得する単一のログイン関数を持つことは、もはや簡単ではありません。両方のテーブルでルックアップを行う必要があります。
このような:
type CandidateUser {
name: String!
email: String! @unique
password: String!
applications: [Application!]!
qualifications: [Qualification!]!
}
type EmployerUser{
name: String!
email: String! @unique
password: String!
employer: Employer!
accessRight: AccessRight!
}
ここでも 2 つの別個の型ですが、 が
RootUser
含まれておりname
、、 、および があり、それぞれが への 1 対 1 の参照を持っています。これにより、電子メール フィールドにタグが強制されますが、ルックアップは依然として自明ではありません。email
password
CandidateUser
EmployerUser
RootUser
@unique
type RootUser{ name: String! email: String! @unique password: String! } type CandidateUser { rootUser: RootUser! applications: [Application!]! qualifications: [Qualification!]! } type EmployerUser{ rootUser: RootUser! employer: Employer! accessRight: AccessRight! }
User
オプションのパラメーターとして、EmployerUser および CandidateUser 内のフィールドを持つように拡張します。これは非常に単純なアプローチですが、必要なフィールドを強制するカスタム処理が必要になります (たとえば、候補者にはそのフィールドが存在しないため、雇用主を必須としてマークすることはできません)。type User{ name: String! email: String! @unique password: String! applications: [Application!]! qualifications: [Qualification!]! employer: Employer accessRight: AccessRight }
これを解決するためのより良い方法があるかどうかを本当に聞きたいです。私はまだGraphQLにかなり慣れておらず、そもそも最高のデータモデラーではありませんが、正しい方向への微調整を大いに感謝します:)
また、リストした 3 つ以外に選択肢がない場合、どれが最も理にかなっていますか?