Commit 3ef06011 authored by bernardosunderhus's avatar bernardosunderhus

Modulariza os arquivos de declaração de esquemas das API's

parent 2a1a6c45
**/node_modules/
**/package.json
**/yarn.lock
This diff is collapsed.
This diff is collapsed.
interface Persistent {
oid: number
}
export enum QuestionType {
SUBJECTIVE,
OBJECTIVE
}
export enum ExamQuestionStatus {
ACTIVE,
CANCELED
}
export enum ExamType {
SUBJECTIVE_ONLY,
OBJECTIVE_ONLY,
MIXED
}
export enum ExamDeploymentStatus {}
export enum ExamDeploymentType {
ONLINE,
ON_SITE
}
export interface QuestionCategory extends Persistent {
label: string
questions: Question[] | number[]
}
export interface QuestionAlternative extends Persistent {
order: number
statement: string
}
export interface Question extends Persistent {
type: QuestionType
statement: string
categories: QuestionCategory[] | number[]
}
export interface SubjectiveQuestion extends Question {
answerKey: string
}
export interface ObjectiveQuestion extends Question {
answerKey: QuestionAlternative | number
alternatives: QuestionAlternative[] | number[]
}
export interface ExamQuestionGroup extends Persistent {
label: string
weight: number
}
export interface ExamQuestion extends Persistent {
question: Question | number
order: number
weight: number
status: ExamQuestionStatus
}
export interface Exam extends Persistent {
cover: string
date: string
label: string
questions: ExamQuestion[] | number[]
groups: ExamQuestionGroup[] | number[]
type: ExamType
}
export interface ExamDeployment extends Persistent {
date: string
status: ExamDeploymentStatus
type: ExamDeploymentType
exam: Exam | number
}
export interface OnlineExamDeployment extends ExamDeployment {
enforceSequence: boolean
}
export interface OnSiteExamDeployment extends ExamDeployment {
local: string
}
ScheduledEvent:
required:
- oid
- startsAt
- endsAt
properties:
oid:
description: The object identification
type: integer
startsAt:
format: date-time
description: The time of the begining of the assessment
type: string
endsAt:
format: date-time
description: The time of the ending of the assessment
type: string
Assessment:
required:
- status
- type
- oid
- resultAvailable
- answerKeyAvailable
- locationType
- schedule
properties:
status:
description: '[PREP, SUBMISSION, EVALUATION]'
type: integer
type:
description: '[VIRTUAL, HANDMADE]'
type: integer
schedule:
$ref: '#/ScheduledEvent'
location:
description: Why the fuck is this a string?
type: string
exam:
$ref: '/schemas/Exam.yaml/#/Exam'
oid:
description: Object identifier
type: integer
locationType:
type: integer
description: '[ONLINE, ON_SITE]'
resultAvailable:
description:
Boolean indicating if the result is already avialable to exhibition
type: boolean
answerKeyAvailable:
description:
Boolean indicating if the answerKey is already available to exhibition
type: boolean
discriminator:
propertyName: type
mapping:
0: '#/VirtualAssessment'
1: '#/HandmadeAssessment'
VirtualAssessment:
required:
- enforceSequence
allOf:
- $ref: '#/Assessment'
- type: object
properties:
enforceSequence:
type: boolean
description:
Boolean indicating if the assessment must be done in order
HandmadeAssessment:
required:
- submitterType
allOf:
- $ref: '#/Assessment'
- type: object
properties:
submitterType:
type: integer
description: '[ADMIN, ADMIN_OR_COMPETIFIER]'
AssessmentEvent:
properties:
timestamp:
type: string
desc:
type: string
Competifier:
properties:
tags:
type: array
items:
$ref: '#/Tag'
type:
description: '[SOLO, TEAM]'
type: integer
enum:
- 0
- 1
events:
type: array
items:
$ref: '#/CompetifierEvent'
discriminator:
propertyName: type
SoloCompetifier:
allOf:
- $ref: '#/Competifier'
- type: object
properties:
firstName:
type: string
lastName:
type: string
TeamCompetifier:
allOf:
- $ref: '#/Competifier'
- type: object
properties:
name:
type: string
leader:
$ref: '#/Participant'
participants:
type: array
items:
$ref: '#/Participant'
Tag:
properties:
label:
type: string
value:
type: string
Participant:
properties:
firstName:
type: string
lastName:
type: string
tags:
type: array
items:
$ref: '#/Tag'
Message:
properties:
timestamp:
format: date-time
type: string
title:
type: string
body:
type: string
read:
type: boolean
CompetifierEvent:
required:
- timestamp
- descr
- type
properties:
timestamp:
type: integer
descr:
type: string
type:
type: integer
enum:
- 0
- 1
QuestionGroup:
required:
- oid
- label
- weight
properties:
oid:
type: integer
label:
type: string
weight:
format: float
type: number
QuestionStatement:
required:
- oid
- content
properties:
oid:
type: integer
content:
type: string
Question:
required:
- type
- oid
- group
- order
- weight
- status
properties:
type:
description: Inheritance type identifcation
type: integer
statement:
$ref: '#/QuestionStatement'
oid:
description: object identifier of this Question
type: integer
group:
description: Group for which this given Question belongs in this Exam
type: integer
order:
description: Position of this Question in this Exam
type: integer
weight:
format: float
description: Weight associated with this Question
type: number
status:
description: '{ACTIVE, CANCELED}'
type: integer
discriminator:
propertyName: type
mapping:
0: '#/SubjectiveQuestion'
1: '#/ObjectiveQuestion'
SubjectiveQuestion:
allOf:
- $ref: '#/Question'
- type: object
properties:
answerKey:
format: string
type: string
ObjectiveQuestion:
allOf:
- $ref: '#/Question'
- type: object
properties:
alternatives:
type: array
items:
$ref: '#/Alternative'
answerKey:
type: integer
ExamCover:
required:
- content
- oid
properties:
content:
type: string
oid:
type: integer
Exam:
required:
- type
- title
- groups
- questions
- oid
properties:
type:
description: '{SUBJECTIVE, OBJECTIVE}'
type: integer
title:
type: string
cover:
$ref: '#/ExamCover'
groups:
type: array
items:
$ref: '#/QuestionGroup'
questions:
type: array
items:
oneOf:
- $ref: '#/SubjectiveQuestion'
- $ref: '#/ObjectiveQuestion'
oid:
description: Object identifier
type: integer
Alternative:
required:
- order
- statement
- oid
properties:
order:
title: order
description: position of this alternative to it's question
type: integer
statement:
description: the alternative statement
type: string
oid:
description: Object identifier
type: integer
ExamQuestionComplaint:
properties:
timestamp:
format: date-time
type: string
text:
type: string
question:
$ref: '#/Question'
description: The root of the JsonPatch type's schema.
required:
- op
- path
type: object
properties:
op:
description: >-
The PATCH operation to be performed. Available operations: "add",
"remove", "move", "copy", "replace", "test"
type: string
path:
description: The target location in the JSON
type: string
value:
description: The new value to be added or to replace the old value at the target
from:
description: The source to be copied/moved
type: string
Competition:
required:
- subscriptionConf
- name
- oid
properties:
name:
type: string
oid:
format: int32
type: integer
subscriptionConf:
$ref: '#/SubscriptionRule'
Phase:
required:
- label
- type
- status
properties:
label:
type: string
order:
type: integer
type:
format: int32
type: integer
status:
format: int32
type: integer
oid:
format: int32
type: integer
events:
type: array
items:
$ref: '#/PhaseEvent'
participations:
type: array
items:
$ref: '#/PhaseParticipation'
PhaseEvent:
required:
- type
- timestamp
- descr
properties:
timestamp:
type: integer
format: int64
descr:
type: string
type:
format: int32
description: '{PHASE_CREATED, PHASE_STARTED, EVALUATION_FORMULA_UPDATED, RANKING_EVALUATED, PHASE_CLOSED}'
type: integer
PhaseParticipation:
properties:
rank:
$ref: '#/Rank'
phase:
$ref: '#/Phase'
BestRanked:
required:
- tieBreakCriterias
- number
allOf:
- $ref: '#/ClassificationRule'
- type: object
properties:
number:
type: integer
tieBreakCriterias:
type: array
items:
$ref: '#/TieBreakCriteria'
MinimumPerformance:
required:
- cutOffMark
allOf:
- $ref: '#/ClassificationRule'
- type: object
properties:
cutOffMark:
type: number
ClassificationRule:
required:
- type
properties:
oid:
format: int32
type: integer
type:
format: int32
description: '{BEST_RANKED, MINIMUM_PERFORMANCE}'
type: integer
discriminator:
propertyName: type
mapping:
'0': '#/BestRanked'
'1': '#/MinimumPerformance'
EvaluationRule:
required:
- expression
properties:
oid:
format: int32
type: integer
expression:
type: string
TieBreakCriteria:
required:
- type
properties:
oid:
format: int32
type: integer
type:
format: int32
type: integer
Ranking:
required:
- timestamp
- evaluationRule
properties:
timestamp:
type: integer
format: int64
qualified:
type: array
items:
$ref: '#/Rank'
evaluationRule:
$ref: '#/EvaluationRule'
positions:
type: array
items:
$ref: '#/Rank'
Rank:
required:
- position
- grade
- status
properties:
position:
type: integer
grade:
type: number
status:
description: '[QUALIFIED, DISQUALIFIED]'
type: integer
assessmentEvaluations:
type: array
items:
$ref: '#/AssessmentSubmissionEvaluation'
AssessmentSubmission:
properties:
assessment:
description: The oid assessment that this submission refers to
type: integer
type:
description: '{VIRTUAL, HANDMADE}'
type: integer
lastUpdate:
format: date-time
description: Last time this submission was modified
type: string
competifier:
type: integer
description: The oid of the competifier that this submission refers to
discriminator:
propertyName: type
HandmadeAssessmentSubmission:
allOf:
- $ref: '#/AssessmentSubmission'
- type: object
properties:
loadUri:
type: string
VirtualAssessmentSubmission:
allOf:
- $ref: '#/AssessmentSubmission'
- type: object
properties:
startedAt:
type: string
format: date-time
finishedAt:
type: string
format: date-time
answers:
type: array
items:
$ref: '#/Answer'
Answer:
properties:
type:
type: integer
freeText:
type: string
choice:
type: integer
question:
type: integer
AssessmentSubmissionEvaluation:
properties:
timestamp:
type: integer
grades:
type: array
items:
$ref: '#/AnswerGrade'
AnswerGrade:
properties:
grade:
format: float
type: number
question:
type: integer
VirtualAssessmentSubmissionDraft:
properties:
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
content:
type: string
assessment:
format: int32
type: integer
SubscriptionRule:
required:
- type
- status
properties:
type:
description: '{SOLO, TEAM}'
type: integer
status:
description: '{PREP, OPEN, CLOSED}'
type: integer
oid:
type: integer
minMembers:
type: integer
maxMembers:
type: integer
Subscription:
required:
- status
- timestamp
- type
type: object
properties:
timestamp:
type: integer
status:
description: '{WAITING_REVIEW, ACCEPTED, REJECTED}'
type: integer
oid:
type: integer
type:
description: '{TEAM, SOLO}'
type: integer
discriminator:
propertyName: type
mapping:
'0': '#/TeamSubscription'
'1': '#/SoloSubscription'
SoloSubscription:
allOf:
- $ref: '#/Subscription'
- type: object
properties:
participant:
$ref: '#/FormSection'
TeamSubscription:
allOf:
- $ref: '#/Subscription'
- type: object
properties:
team:
$ref: '#/FormSection'
members:
$ref: '#/FormSection'
leader:
$ref: '#/FormSection'
FormTemplate:
required:
- fields
- type
properties:
type:
type: integer
fields:
type: array
items:
$ref: '#/FormField'
oid:
type: integer
FormField:
required:
- label
- required
- type
- unique
properties:
label:
type: string
type:
type: integer
unique:
type: boolean
required:
type: boolean
oid:
type: integer
FormAnswer:
title: Root Type for FormAnswer
description: The root of the FormAnswer type's schema.
required:
- field
- value
type: object
properties:
field:
type: integer
value:
type: string
oid:
type: integer
FormSection:
title: Root Type for FormSection
description: The root of the FormSection type's schema.
required:
- answers
- template
- type
type: object
properties:
template:
type: integer
answers:
type: array
items:
$ref: '#/FormAnswer'
oid:
type: integer
type:
type: integer
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment