图片标注任务类型,发布者为每个作业上传图片,提出数个问题,由承接者对图片进行文字标注来回答。
任务和作业本身的多态性是建立在task.data
和assignment.data
这两个无schema的数据上的。
团片标注任务task.data
主要包含了以下几个字段:
- question {string} 问题
- choiceAmount {number} 问题的选项数量
- choices {string[]} 问题的各个选项
- progress {number} 当前的委派进度,每创建一个作业加一
- images {string[]} 解压后的数据的文件名,在dir下
- submitMultipleTimes {boolean} 可选设置,是否允许一个人参与多次,默认false
- signupMultipleTimes {boolean} 可选设置,是否允许一个人被拒后再次报名,默认false
- noSignup {boolean} 可选设置,是否自动完成报名的步骤(即无需报名),默认false
- submitAutoPass {boolean} 可选设置,是否自动审批任务(即任务提交即接受),默认false
- dir {string} 内部使用,这是
uploads
目录下属于该工程的文件夹。 - signedUsers {string[]} 内部使用,对于非noSignup,这是报名了的用户的列表
- blockedUsers {string[]} 内部使用,对于非noSignup且非signupMultipleTimes,这是封禁用户的列表
- exported {boolean} 内部使用,项目是否导出
而assignment.data
主要包含了以下几个字段,而assignment.valid
对于非signup类任务,表示能否继续猜:
- signup {boolean} 表示这是一个用于注册的任务
- answer {string[]} 对于非signup类任务,这是对图片的标注结果(每张图可能有多个题目,故有多个标注答案)
- Source:
- Source:
Methods
(inner) assignmentDataToPlainObject(assignment, auth) → {object}
将assignment.data
转换为对象发送给对应可见性的人。这个函数会在createAssignment、
getAssignmentData或者getAssignmentData返回undefined的时候默认调用。
理论上,调用者是订阅者或者发布者。
对本任务而言,只有作业是一个非报名作业才返回数据,如下:
- sequence {number} 题号
- finished {boolean} 是否完成
- answer {number} 答案
- image {string} 图片名,在task.data.dir下
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
|
auth |
object
|
Returns:
- Type:
-
object
(inner) assignmentDataToPlainObject(assignment, auth) → {object}
将assignment.data
转换为对象发送给对应可见性的人。这个函数会在createAssignment、
getAssignmentData或者getAssignmentData返回undefined的时候默认调用。
理论上,调用者是订阅者或者发布者。
对本任务而言,只有作业是一个非报名作业才返回数据,如下:
- guessTimes {number} 猜测次数
- finished {boolean} 是否完成
- answer {boolean} 答案(完成之后才返回)
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
|
auth |
object
|
Returns:
- Type:
-
object
(async, inner) assignmentStatusChanged(assignment, params, global) → {Promise.<void>}
这个函数是作业状态更改的钩子,确保作业的状态发生更改,可能的更改包括订阅者从编辑到提交,同时作业必须为valid, 以及发布者从提交到接受或拒绝。assignment会被保存。
本任务主要是处理自动pass和验证通过的逻辑的。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
|
params |
||
global |
Returns:
- Type:
-
Promise.<void>
(async, inner) assignmentStatusChanged(assignment, params, global) → {Promise.<void>}
这个函数是作业状态更改的钩子,确保作业的状态发生更改,可能的更改包括订阅者从编辑到提交,同时作业必须为valid, 以及发布者从提交到接受或拒绝。assignment会被保存。
本任务主要是处理自动pass和验证通过的逻辑的。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
|
params |
||
global |
Returns:
- Type:
-
Promise.<void>
(async, inner) createAssignment(task, assignment, params, global) → {Promise.<void>}
创建任务,这里已经确保提交者为订阅者,且任务处于PUBLISHED
状态。原则上,这个过程结束后,
应当设置好valid
、status
、summary
、data
的字段。如果该函数缺省,则会创建一个
不valid、编辑状态、无summary
和data
字段的任务。assignment会被保存。
如果这个函数没有返回值,则依据情况调用assignmentDataToPlainObject。 如果有返回值则会作为响应。
对于本任务而言,主要确认创建的是一个报名作业还是图片标注作业。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
任务对象 |
assignment |
object
|
作业对象 |
params |
object
|
请求的数据
|
global |
object
|
Returns:
- Type:
-
Promise.<void>
(async, inner) createAssignment(task, assignment, params, global) → {Promise.<void>}
创建任务,这里已经确保提交者为订阅者,且任务处于PUBLISHED
状态。原则上,这个过程结束后,
应当设置好valid
、status
、summary
、data
的字段。如果该函数缺省,则会创建一个
不valid、编辑状态、无summary
和data
字段的任务。assignment会被保存。
如果这个函数没有返回值,则依据情况调用assignmentDataToPlainObject。 如果有返回值则会作为响应。
对于本任务而言,主要确认创建的是一个报名作业还是真正的猜数字作业。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
任务对象 |
assignment |
object
|
作业对象 |
params |
object
|
请求的数据
|
global |
object
|
Returns:
- Type:
-
Promise.<void>
(async, inner) getAssignmentData(assignment, params, global) → {Promise.<void>}
获取作业的数据。这里已经确保要么提交者为作业的订阅者或发布者。如果这个函数没有返回值, 则会依据情况调用assignmentDataToPlainObject。如果有返回值则会作为响应。
对于本任务,就采用默认的assignmentDataToPlainObject。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
任务对象 |
params |
object
|
|
global |
object
|
Returns:
- Type:
-
Promise.<void>
(async, inner) getAssignmentData(assignment, params, global) → {Promise.<void>}
获取作业的数据。这里已经确保要么提交者为作业的订阅者或发布者。如果这个函数没有返回值, 则会依据情况调用assignmentDataToPlainObject。如果有返回值则会作为响应。
对于本任务,就采用默认的assignmentDataToPlainObject。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
任务对象 |
params |
object
|
|
global |
object
|
Returns:
- Type:
-
Promise.<void>
(async, inner) getTaskData(task, params, global) → {Promise.<(object|void)>}
获取任务的数据。这里已经确保要么提交者为任务的发布者,要么提交者为订阅者且任务处于PUBLISHED
状态
如果这个函数没有返回值,则会依据情况调用postTaskDataSchema。如果有返回值则会作为响应。
对于本任务,如果不是发布者,就采用默认的调用taskDataToPlainObject。如果是订阅者且PUBLISHED
,
还会返回在userStatus
内返回以下几个字段:
- signed:用户是否已经注册,对于noSignup的任务而言,这永远为真
- blocked:用户是否被拒绝参加改任务,对于noSignup或signupMultipleTimes的任务而言,这永远为假
- signing:对于非signed用户而言,这个属性表示用户是否正在报名
- created:对于任务非submitMultipleTimes且用户signed,表示是否已经创建了一个作业
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
任务对象 |
params |
object
|
|
global |
object
|
Returns:
- Type:
-
Promise.<(object|void)>
(async, inner) getTaskData(task, params, global) → {Promise.<(object|void)>}
获取任务的数据。这里已经确保要么提交者为任务的发布者,要么提交者为订阅者且任务处于PUBLISHED
状态
如果这个函数没有返回值,则会依据情况调用postTaskDataSchema。如果有返回值则会作为响应。
对于本任务,如果不是发布者,就采用默认的调用taskDataToPlainObject。如果是订阅者且PUBLISHED
,
还会返回在userStatus
内返回以下几个字段:
- signed:用户是否已经注册,对于noSignup的任务而言,这永远为真
- blocked:用户是否被拒绝参加改任务,对于noSignup或signupMultipleTimes的任务而言,这永远为假
- signing:对于非signed用户而言,这个属性表示用户是否正在报名
- created:对于任务非submitMultipleTimes且用户signed,表示是否已经创建了一个作业
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
任务对象 |
params |
object
|
|
global |
object
|
Returns:
- Type:
-
Promise.<(object|void)>
(async, inner) postAssignmentData(assignment, params, global) → {Promise.<object>}
提交作业的数据,这里已经确保提交者为作业的订阅者,且作业处于EDITING
状态。但该作业可能已经
提交过数据,因而应当清除以前的数据。原则上,这个过程结束后,应当重置作业的summary
、
valid
和data
状态。原则上,该过程如果没有返回错误码,valid
应当为true。
如果这个函数没有返回值,则会依据情况调用assignmentDataToPlainObject。如果有返回值则会作为响应。
对于本任务的作业而言,情况略有不同,这是有状态的,不可逆的故而不清除数据。主要上传的数据是猜的答案。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
任务对象 |
params |
object
|
请求的数据
|
global |
object
|
Returns:
- Type:
-
Promise.<object>
(async, inner) postAssignmentData(assignment, params, global) → {Promise.<object>}
提交作业的数据,这里已经确保提交者为作业的订阅者,且作业处于EDITING
状态。但该作业可能已经
提交过数据,因而应当清除以前的数据。原则上,这个过程结束后,应当重置作业的summary
、
valid
和data
状态。原则上,该过程如果没有返回错误码,valid
应当为true。
如果这个函数没有返回值,则会依据情况调用assignmentDataToPlainObject。如果有返回值则会作为响应。
对于本任务的作业而言,情况略有不同,这是有状态的,不可逆的故而不清除数据。主要上传的数据是猜的答案。 返回的数据还会包含一个额外的字段:
- compare {number} -1:偏小,0:猜对,1:偏大
- Source:
Parameters:
Name | Type | Description |
---|---|---|
assignment |
object
|
任务对象 |
params |
object
|
请求的数据
|
global |
object
|
Returns:
- Type:
-
Promise.<object>
(async, inner) postAssignmentDataMiddleware(ctx, next) → {Promise.<void>}
这是postAssignmentData AJAX请求执行之前的中间件。通常这里用以处理文件上传的multipart请求。 缺省情况下直接调用postAssignmentData。
对于本任务的作业而言,没有文件上传。不做任何处理。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
ctx |
object
|
|
next |
function
|
Returns:
- Type:
-
Promise.<void>
(async, inner) postAssignmentDataMiddleware(ctx, next) → {Promise.<void>}
这是postAssignmentData AJAX请求执行之前的中间件。通常这里用以处理文件上传的multipart请求。 缺省情况下直接调用postAssignmentData。
对于本任务的作业而言,没有文件上传。不做任何处理。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
ctx |
object
|
|
next |
function
|
Returns:
- Type:
-
Promise.<void>
(async, inner) postTaskData(task, params, global) → {Promise.<void>}
提交任务的数据,这里已经确保提交者为任务的发布者,且任务处于EDITING
状态。但该任务可能已经
提交过数据,因而应当清除以前的数据。原则上,这个过程结束后,应当重置任务的total
、remain
、
valid
和data
状态。原则上,该过程如果没有返回错误码,valid
应当为true。
如果这个函数没有返回值,则会依据情况调用taskDataToPlainObject。如果有返回值则会作为响应。
对于本任务而言,主要上传的数据是一些设置选项以及图片。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
任务对象 |
params |
object
|
请求的数据
|
global |
object
|
Returns:
- Type:
-
Promise.<void>
(async, inner) postTaskData(task, params, global) → {Promise.<void>}
提交任务的数据,这里已经确保提交者为任务的发布者,且任务处于EDITING
状态。但该任务可能已经
提交过数据,因而应当清除以前的数据。原则上,这个过程结束后,应当重置任务的total
、remain
、
valid
和data
状态。原则上,该过程如果没有返回错误码,valid
应当为true。
如果这个函数没有返回值,则会依据情况调用taskDataToPlainObject。如果有返回值则会作为响应。
对于本任务而言,主要上传的数据是一些设置选项。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
任务对象 |
params |
object
|
请求的数据
|
global |
object
|
Returns:
- Type:
-
Promise.<void>
(async, inner) postTaskDataMiddleware(ctx, next) → {Promise.<void>}
这是postTaskData AJAX请求执行之前的中间件。通常这里用以处理文件上传的multipart请求。缺省 情况下直接调用postTaskData。
对于本任务而言,没有文件上传。不做任何处理。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
ctx |
object
|
|
next |
function
|
Returns:
- Type:
-
Promise.<void>
(async, inner) postTaskDataMiddleware(ctx, next) → {Promise.<void>}
这是postTaskData AJAX请求执行之前的中间件。通常这里用以处理文件上传的multipart请求。缺省 情况下直接调用postTaskData。 此任务中将上传的压缩包解压至该项目文件夹下。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
ctx |
object
|
|
next |
function
|
Returns:
- Type:
-
Promise.<void>
(inner) taskDataToPlainObject(task, auth) → {object}
将task.data
转换为对象发送给对应可见性的人。这个函数会在postTaskData或者getTaskData返回
undefined的时候默认调用。理论上,调用者要么是任务发布者,要么是订阅者
对本任务而言,而exportedResult
只有任务拥有者能获得。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
|
auth |
object
|
Returns:
- Type:
-
object
(inner) taskDataToPlainObject(task, auth) → {object}
将task.data
转换为对象发送给对应可见性的人。这个函数会在postTaskData或者getTaskData返回
undefined的时候默认调用。理论上,调用者要么是任务发布者,要么是订阅者
对本任务而言,而exportedResult
只有任务拥有者能获得。
- Source:
Parameters:
Name | Type | Description |
---|---|---|
task |
object
|
|
auth |
object
|
Returns:
- Type:
-
object