如何解决动物群查询语言关系
我想使用 FQL 编写我的 graphql 后端,但我无法处理创建和连接到 FQL
我的后端 NodeJS 代码:
async createNew(data) {
const query = q.Create(
q.Collection('comments'),{ data }
)
const result: values.Document<Comment> = await this.client.query(query);
result.data._id = result.ref.id;
return result.data;
}
我在我的 GraphQL 游乐场中运行这段代码
createComment(data: {
user: {
create: {
username: "1"
password: "1"
email: "1"
gender: MALE
birthday: "2021-01-01"
country: "1"
}
}
creationDate: "2021-05-04T17:07:00Z"
content: "hello"
likes: 1
ballot: {
connect: 296290209590411781
}
}) {
user {
username
}
ballot {
title
}
}
我希望这段代码会创建一个新用户并将投票与此评论联系起来,但我在 FaunaDB 评论集合中得到了这个可悲的结果:
我写了下一个代码来为我做这件事,但我确信这是一个描述的反模式here
async createNew(data) {
if(data.user) {
let id;
if(data.user.create) {
const user = await this.userService.createNew(data.user.create);
id = user._id;
}
data.user = q.Ref(
q.Collection('users'),id ?? data.user.connect
);
}
const query = q.Create(
q.Collection('comments'),{ data }
)
const result: values.Document<Comment> = await this.client.query(query);
result.data._id = result.ref.id;
return result.data;
}
上面的代码演示了为用户创建和连接,我想这段代码对于每个关系都会非常详尽。我想在一个查询中编写所有 FQL,但我真的不知道如何实现它
我只添加了带有 Comment - User 关系的 schema,Ballot 也有类似的逻辑。简而言之,我的架构:用户有选票,选票有评论,评论有父选票和用户
我的动物群架构:
type User @collection(name: "users") {
username: String!
email: String!
password: String!
birthday: Date!
gender: Gender!
country: String!
createdBallots: [Ballot!]! @relation
}
enum Gender {
MALE
FEMALE
OTHER
}
type Comment @collection(name: "comments") {
user: User!
creationDate: Time!
content: String!
likes: Int!
ballot: Ballot!
}
我正在尝试使用生成的 GraphQL 架构:
scalar Date
scalar Time
scalar Long
type Comment {
_id: ID!
likes: Int!
content: String!
creationDate: Time!
user: User!
ballot: Ballot!
_ts: Long!
}
type User {
birthday: Date!
email: String!
username: String!
_id: ID!
country: String!
createdBallots(
_size: Int
_cursor: String
): BallotPage!
gender: Gender!
password: String!
_ts: Long!
}
enum Gender {
MALE
FEMALE
OTHER
}
type Mutation {
createComment(data: CommentInput!): Comment!
createuser(data: UserInput!): User!
}
input CommentInput {
user: CommentUserRelation
creationDate: Time!
content: String!
likes: Int!
ballot: CommentBallotRelation
}
input CommentUserRelation {
create: UserInput
connect: ID
}
input UserInput {
username: String!
email: String!
password: String!
birthday: Date!
gender: Gender!
country: String!
createdBallots: UserCreatedBallotsRelation
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。