接口迁移
用户接口
type User{
shortDesc: String
createdJudges: [JudgeConnection]
createdRunners: [RunnerConnection]
createdGroups: [GroupConnection]
groups: [GroupMembershipConnection]
joinedGroups: [MemberConnection]
exerciseStatuses: ExerciseStatusConnection
exerciseStatusesByLang: [ExerciseStatusesByLang]
exerciseStatusesByExercise: ExerciseStatusesByExerciseConnection
codingExerciseStatuses: [CodingExerciseStatus]
sessionsByExercisePack: UserSessionsByExercisePackConnection
hasPermission: Boolean!
}
搜索用户:
query{
userSearch(){
totalCount
pageInfo
edges
nodes
}
}
题目接口
type CodingExercise{
allowList: [UserOrGroup!]!
exerciseStatuses: CodingExerciseStatusConnection!
viewerStatus: CodingExerciseViewerStatus!
defaultRunner: [LangRunner!]!
defaultRunnerOptions: [LangOptions!]!
judge: [LangJudge!]!
judgeOptions: [LangOptions!]!
exclusivePackId: String
codingExerciseStatuses: [CodingExerciseStatus!]!
supportedLanguages: [Language!]
packs: ExercisePackConnection!
}
type LangRunner{
lang: Language
runner {
id: ID!
name: String!
...etc.
}
}
type LangOptions {
lang: Language
options {
key: String!
value: String!
}
}
type LangJudge {
lang: Language
judge {
id: ID!
name: String!
...etc.
}
}
type CodingExerciseViewerStatus{
exerciseStatuses: ExerciseStatusConnection!
attempted: Boolean!
passed: Boolean!
totalCount: Int
passedCount: Int
lastScoreRate: Float
exerciseStatusesByLang: [ExerciseStatusesByLang!]!
}
提交接口
type Submission{
score: Float
totalScore: Float
}
群组接口
type Group{
shortDesc: String
description:{
url: String!
content: String!
}
content:{
url String!
content String!
}
requiredFields: [String!]!
viewerInGroup: Boolean!
members: GroupMemberConnection
resources: GroupResourceConnection!
}
type GroupConnection{
totalCount: Int!
viewerJoinedCount: Int
pageInfo: PageInfo!
edges: [GroupEdge!]!
nodes: [Group!]!
}
mutation:
mutation{
createGroup(data){
id
name
shortDesc
description
content
requiredFields
public
createdAt
updatedAt
owner
viewerInGroup
members
resources
}
updateGroup(id, data){
...
}
joinGroup(groupId, key, groupProfile){
...
}
leaveGroup(groupId){
...
}
groupDeleteUsers(groupId: ______, userIds: ______){
...
}
}
测试数据接口
type TestData{
explanation:{
url String!
content String!
}
attemptDist: [Distribution!]
userDist: [Distribution!]
}
题包接口
type ExercisePack{
allowList: [UserOrGroup!]!
exclusive: Boolean!
codingExercise: CodingExercise
codingExercises: ExercisePackCodingExerciseConnection
exercisePackSessions: ExercisePackSessionConnection!
viewerStatus: ExercisePackViewerStatus
}
type ExercisePackConnection{
totalCount: Int!
viewerAttemptedCount: Int
viewerPassedCount: Int
pageInfo: PageInfo!
edges: [ExercisePackEdge!]!
nodes: [ExercisePack!]!
}
题包会话接口
exerciseStatuses: ExercisePackCodingExerciseConnection
exerciseStatusesByExercise: [ExerciseStatusesByExercise!]!
codingExercises: ExercisePackCodingExerciseConnection
其它mutation
url
mutation{
shareUrl(id, grant, expiresIn){
key
node
}
revokeUrl(key){
id
}
}
修改密码
passwordChange: User!
create runner/judge
mutation{
createRunner(data){
id
name
spec
createdAt
updatedAt
supportedLanguages
availableOptions
}
createJudge(data){
...
}
}