👀 回顾我们的设计
让我们从我们的设计团队提供的轨道页面模型开始。在这里,我们需要显示有关轨道的更多信息,而不是主页上的卡片中包含的信息。
除了我们卡片中已经有的内容外,轨道还需要:
- 描述
- 观看次数
- 包含在该轨道中的模块列表
对于每个模块,我们想要:
- 标题
- 长度
✍️ 更新架构
让我们打开schema.js
文件在 server/src
文件夹中。
我们将从更新 Track
类型开始。我们将添加 description
(它是 String
) 和 numberOfViews
(一个整数, Int
)。哦,别忘了给我们的 字段 添加好的注释!
在我们的架构的 Track
类型中添加以下 字段:
"The track's complete description, can be in Markdown format"description: String"The number of times a track has been viewed"numberOfViews: Int
接下来,我们应该如何处理轨道的模块呢?
从商业的角度来看,假设模块应该是一个独立的类型是合理的:一个轨道可能包含任意数量的模块,而一个模块可能属于多个轨道。所以,我们将创建一个独立的 Module
类型。
模块有一个 id
,它是必需的。它还有一个 title
,它是一个必需的 String
,还有一个 length
,它是一个 Int
。我们将为这个类型及其 字段 添加注释。
将以下内容添加到我们架构的 typeDefs
中:
"A Module is a single unit of teaching. Multiple Modules compose a Track"type Module {id: ID!"The Module's title"title: String!"The Module's length in minutes"length: Int}
Module
类型的理由?现在我们有了 Module
类型,让我们回到我们的 Track
类型。
我们知道 Track
可以拥有多个模块,所以让我们添加一个 字段 到 Track
中,名为 modules
,它返回一个 Module
对象数组。这个数组不能为 null,所以我们在末尾添加一个感叹号,数组中的条目也不能为 null,所以我们在 Module
之后添加另一个感叹号。
将以下 字段 添加到我们架构的 Track
类型中:
"The track's complete array of Modules"modules: [Module!]!
missions: [Mission!]
,以下哪个陈述是正确的很好,我们根据客户的需求更新了类型。我们完成了架构定义吗?还没有!目前,我们只有一个 tracksForHome
查询,它一次性返回所有轨道。
在下节课中,我们将更新我们的架构,使用 参数 来检索特定轨道。
分享您关于本课的疑问和评论
您的反馈有助于我们改进!如果您卡住或感到困惑,请告诉我们,我们将帮助您。所有评论都是公开的,必须遵循 Apollo 行为准则。请注意,已解决或处理过的评论可能会被删除。
您需要一个 GitHub 帐户才能在下面发布。没有帐户? 请在我们的奥德赛论坛中发布。