您将如何处理接口并使用它们进行数据模型中的连接,使用AWS放大器模型转换?
interface User @model {
id: ID
email: String
created: AWSTimestamp
}
type ActiveUser implements User {
id: ID
first: String
last: String
email: String
created: AWSTimestamp
}
type InvitedUser implements User {
id: ID
email: String
created: AWSTimestamp
invitedBy: String
}
type Team @model {
users: [User] @connection
}我的选择似乎是将@model放在类型上,但一旦运行separate api,就会在查询中得到单独的Dynamo表和查询。
变压器能支持这里记录的接口吗:https://docs.aws.amazon.com/appsync/latest/devguide/interfaces-and-unions.html
我还发现了一些支持票,但我想知道是否有什么东西支持这个功能。这是我找到的支持票:
发布于 2020-06-01 03:21:01
您只使用@connection将两个数据库连接在一起(这两个数据库必须由type而不是interface创建),所以如果您不想这样做,那么只需去掉@connection,团队数据库就可以让用户类型为User。我不完全是你想做的,但我会做这样的事情:
type User @model {
id: ID
first: String!
last: String!
email: String!
created: AWSTimestamp
isActive: boolean
invitedBy: String
team: Team @connection(name: "UserTeamLink")
}
type Team @model {
users: [User!] @connection(name: "UserTeamLink")
}在创建新用户时需要第一、最后和电子邮件字段的地方,您可以使用布尔值区分活动用户,当查询用户数据库时,它也会从团队数据库返回团队项(我猜您需要其他字段,如Team name等),所以当您创建一个Team对象时,您可以在teamUserId中传递一个team对象(下面没有显示,但在使用放大时创建),这将允许您将新创建的团队附加到现有的用户或用户组中。
发布于 2020-09-24 12:34:14
我认为您可以将公共字段保留在User中,并将额外的信息单独输入。不确定这是否是最佳实践,但它应该适用于这种情况。
enum UserType {
ACTIVE
INVITED
}
type User @model @key(name:"byTeam", fields:["teamID"]){
id: ID!
teamID: ID!
email: String
created: AWSTimestamp
type: UserType
activeUserInfo: ActiveUserInfo @connection(fields:["id"])
invitedUserInfo: InvitedUserInfo @connection(fields:["id"])
}
type ActiveUserInfo @key(fields:["userID"]){
userID: ID!
first: String
last: String
}
type InvitedUserInfo @key(fields:["userID"]){
userID: ID!
invitedBy: String
}
type Team @model {
id:ID!
users: [User!] @connection(keyName:"byTeam", fields:["id"])
}https://stackoverflow.com/questions/60770088
复制相似问题