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
......@@ -3,6 +3,15 @@ info:
title: Competition Admin API
description: Competition Admin API
version: 0.1.0
tags:
- name: config
description: 'Subscription configuration operations'
- name: subscription
description: 'Subscription operations'
- name: phases
description: 'Phase operations'
- name: exams
description: 'Exam operations'
paths:
/competifiers:
get:
......@@ -307,7 +316,9 @@ paths:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/JsonPatch'
type: array
items:
$ref: '#/components/schemas/JsonPatch'
required: true
responses:
'200':
......@@ -1069,673 +1080,102 @@ paths:
type: integer
components:
schemas:
FormAnswer:
title: Root Type for FormAnswer
description: The root of the FormAnswer type's schema.
required:
- field
- value
type: object
properties:
field:
format: int32
type: integer
value:
type: string
id:
format: int32
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:
format: int32
type: integer
answers:
type: array
items:
$ref: '#/components/schemas/FormAnswer'
id:
format: int32
type: integer
type:
format: int32
type: integer
SoloSubscription:
allOf:
- $ref: '#/components/schemas/Subscription'
- type: object
properties:
participant:
$ref: '#/components/schemas/FormSection'
TeamSubscription:
allOf:
- $ref: '#/components/schemas/Subscription'
- type: object
properties:
team:
$ref: '#/components/schemas/FormSection'
members:
$ref: '#/components/schemas/FormSection'
leader:
$ref: '#/components/schemas/FormSection'
Subscription:
required:
- status
- timestamp
- type
type: object
properties:
timestamp:
format: int64
type: integer
status:
format: int32
description: '{WAITING_REVIEW, ACCEPTED, REJECTED}'
type: integer
id:
format: int32
type: integer
type:
format: int32
description: '{TEAM, SOLO}'
type: integer
discriminator:
propertyName: type
mapping:
'0': '#/components/schemas/TeamSubscription'
'1': '#/components/schemas/SoloSubscription'
JsonPatch:
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
FormTemplate:
required:
- fields
- type
properties:
type:
format: int32
type: integer
fields:
type: array
items:
$ref: '#/components/schemas/FormField'
id:
format: int32
type: integer
FormField:
required:
- label
- required
- type
- unique
properties:
label:
type: string
type:
format: int32
type: integer
unique:
type: boolean
required:
type: boolean
id:
format: int32
type: integer
SubscriptionRule:
required:
- type
- status
properties:
type:
format: int32
description: '{SOLO, TEAM}'
type: integer
status:
format: int32
description: '{PREP, OPEN, CLOSED}'
type: integer
id:
format: int32
type: integer
minMembers:
type: integer
maxMembers:
type: integer
Competition:
required:
- subscriptionConf
- name
- id
properties:
name:
type: string
id:
format: int32
type: integer
subscriptionConf:
$ref: '#/components/schemas/SubscriptionRule'
Phase:
required:
- label
- type
- status
properties:
label:
type: string
order:
type: integer
type:
format: int32
type: integer
status:
format: int32
type: integer
id:
format: int32
type: integer
events:
type: array
items:
$ref: '#/components/schemas/PhaseEvent'
participations:
type: array
items:
$ref: '#/components/schemas/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: '#/components/schemas/Rank'
phase:
$ref: '#/components/schemas/Phase'
BestRanked:
required:
- tieBreakCriterias
- number
allOf:
- $ref: '#/components/schemas/ClassificationRule'
- type: object
properties:
number:
type: integer
tieBreakCriterias:
type: array
items:
$ref: '#/components/schemas/TieBreakCriteria'
MinimumPerformance:
required:
- cutOffMark
allOf:
- $ref: '#/components/schemas/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': '#/components/schemas/BestRanked'
'1': '#/components/schemas/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
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
$ref: './schemas/Assessment.yaml/#/ScheduledEvent'
Assessment:
required:
- status
- type
- oid
- resultAvailable
- answerKeyAvailable
- locationType
- exam
- schedule
properties:
status:
description: '[PREP, SUBMISSION, EVALUATION]'
type: integer
type:
description: '[VIRTUAL, HANDMADE]'
type: integer
schedule:
$ref: '#/components/schemas/ScheduledEvent'
location:
description: Why the fuck is this a string?
type: string
exam:
$ref: '#/components/schemas/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: '#/components/schemas/VirtualAssessment'
1: '#/components/schemas/HandmadeAssessment'
$ref: './schemas/Assessment.yaml/#/Assessment'
VirtualAssessment:
required:
- enforceSequence
allOf:
- $ref: '#/components/schemas/Assessment'
- type: object
properties:
enforceSequence:
type: boolean
description:
Boolean indicating if the assessment must be done in order
$ref: './schemas/Assessment.yaml/#/VirtualAssessment'
HandmadeAssessment:
required:
- submitterType
allOf:
- $ref: '#/components/schemas/Assessment'
- type: object
properties:
submitterType:
type: integer
description: '[ADMIN, ADMIN_OR_COMPETIFIER]'
$ref: './schemas/Assessment.yaml/#/HandmadeAssessment'
AssessmentEvent:
$ref: './schemas/Assessment.yaml/#/AssessmentEvent'
QuestionGroup:
required:
- oid
- label
- weight
properties:
oid:
type: integer
label:
type: string
weight:
format: float
type: number
$ref: './schemas/Exam.yaml/#/QuestionGroup'
QuestionStatement:
required:
- oid
- content
properties:
oid:
type: integer
content:
type: string
$ref: './schemas/Exam.yaml/#/QuestionStatement'
Question:
required:
- type
- oid
- group
- order
- weight
- status
properties:
type:
description: Inheritance type identifcation
type: integer
statement:
$ref: '#/components/schemas/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: '#/components/schemas/SubjectiveQuestion'
1: '#/components/schemas/ObjectiveQuestion'
$ref: './schemas/Exam.yaml/#/Question'
SubjectiveQuestion:
allOf:
- $ref: '#/components/schemas/Question'
- type: object
properties:
answerKey:
format: string
type: string
$ref: './schemas/Exam.yaml/#/SubjectiveQuestion'
ObjectiveQuestion:
allOf:
- $ref: '#/components/schemas/Question'
- type: object
properties:
alternatives:
type: array
items:
$ref: '#/components/schemas/Alternative'
answerKey:
type: integer
$ref: './schemas/Exam.yaml/#/ObjectiveQuestion'
ExamCover:
required:
- content
- oid
properties:
content:
type: string
oid:
type: integer
$ref: './schemas/Exam.yaml/#/ExamCover'
Exam:
required:
- type
- title
- groups
- questions
- oid
properties:
type:
description: '{SUBJECTIVE, OBJECTIVE}'
type: integer
title:
type: string
cover:
$ref: '#/components/schemas/ExamCover'
groups:
type: array
items:
$ref: '#/components/schemas/QuestionGroup'
questions:
type: array
items:
oneOf:
- $ref: '#/components/schemas/SubjectiveQuestion'
- $ref: '#/components/schemas/ObjectiveQuestion'
oid:
description: Object identifier
type: integer
$ref: './schemas/Exam.yaml/#/Exam'
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
$ref: './schemas/Exam.yaml/#/Alternative'
ExamQuestionComplaint:
$ref: './schemas/Exam.yaml/#/ExamQuestionComplaint'
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:
oneOf:
- $ref: '#/components/schemas/SoloCompetifier'
- $ref: '#/components/schemas/TeamCompetifier'
discriminator:
propertyName: type
$ref: './schemas/Submission.yaml/#/AssessmentSubmission'
HandmadeAssessmentSubmission:
allOf:
- $ref: '#/components/schemas/AssessmentSubmission'
- type: object
properties:
loadUri:
type: string
$ref: './schemas/Submission.yaml/#/HandmadeAssessmentSubmission'
VirtualAssessmentSubmission:
allOf:
- $ref: '#/components/schemas/AssessmentSubmission'
- type: object
properties:
startedAt:
type: string
format: date-time
finishedAt:
type: string
format: date-time
answers:
type: array
items:
$ref: '#/components/schemas/Answer'
$ref: './schemas/Submission.yaml/#/VirtualAssessmentSubmission'
Answer:
properties:
type:
type: integer
freeText:
type: string
choice:
type: integer
question:
type: integer
$ref: './schemas/Submission.yaml/#/Answer'
AssessmentSubmissionEvaluation:
properties:
timestamp:
type: integer
grades:
type: array
items:
$ref: '#/components/schemas/AnswerGrade'
$ref: './schemas/Submission.yaml/#/AssessmentSubmissionEvaluation'
AnswerGrade:
properties:
grade:
format: float
type: number
question:
$ref: '#/components/schemas/Question'
CompetifierEvent:
required:
- timestamp
- descr
- type
properties:
timestamp:
type: integer
format: int64
descr:
type: string
type:
description: ''
type: integer
enum:
- 0
- 1
discriminator:
propertyName: type
$ref: './schemas/Submission.yaml/#/AnswerGrade'
VirtualAssessmentSubmissionDraft:
$ref: './schemas/Submission.yaml/#/VirtualAssessmentSubmissionDraft'
Competifier:
properties:
tags:
type: array
items:
$ref: '#/components/schemas/Tag'
type:
description: '[SOLO, TEAM]'
type: integer
enum:
- 0
- 1
events:
type: array
items:
$ref: '#/components/schemas/CompetifierEvent'
discriminator:
propertyName: type
$ref: './schemas/Competifier.yaml/#/Competifier'
SoloCompetifier:
allOf:
- $ref: '#/components/schemas/Competifier'
- type: object
properties:
firstName:
type: string
lastName:
type: string
$ref: './schemas/Competifier.yaml/#/SoloCompetifier'
TeamCompetifier:
allOf:
- $ref: '#/components/schemas/Competifier'
- type: object
properties:
name:
type: string
leader:
$ref: '#/components/schemas/Participant'
participants:
type: array
items:
$ref: '#/components/schemas/Participant'
$ref: './schemas/Competifier.yaml/#/TeamCompetifier'
CompetifierEvent:
$ref: './schemas/Competifier.yaml/#/CompetifierEvent'
Tag:
properties:
label:
type: string
value:
type: string
$ref: './schemas/Competifier.yaml/#/Tag'
Participant:
properties:
firstName:
type: string
lastName:
type: string
tags:
type: array
items:
$ref: '#/components/schemas/Tag'
$ref: './schemas/Competifier.yaml/#/Participant'
Message:
$ref: './schemas/Competifier.yaml/#/Message'
JsonPatch:
$ref: './schemas/JsonPatch.yaml'
Competition:
$ref: './schemas/Phase.yaml/#/Competition'
Phase:
$ref: './schemas/Phase.yaml/#/Phase'
PhaseEvent:
$ref: './schemas/Phase.yaml/#/PhaseEvent'
PhaseParticipation:
$ref: './schemas/Phase.yaml/#/PhaseParticipation'
BestRanked:
$ref: './schemas/Phase.yaml/#/BestRanked'
MinimumPerformance:
$ref: './schemas/Phase.yaml/#/MinimumPerformance'
ClassificationRule:
$ref: './schemas/Phase.yaml/#/ClassificationRule'
EvaluationRule:
$ref: './schemas/Phase.yaml/#/EvaluationRule'
TieBreakCriteria:
$ref: './schemas/Phase.yaml/#/TieBreakCriteria'
Ranking:
required:
- timestamp
- evaluationRule
properties:
timestamp:
type: integer
format: int64
qualified:
type: array
items:
$ref: '#/components/schemas/Rank'
evaluationRule:
$ref: '#/components/schemas/EvaluationRule'
positions:
type: array
items:
$ref: '#/components/schemas/Rank'
$ref: './schemas/Phase.yaml/#/Ranking'
Rank:
required:
- position
- grade
- status
properties:
position:
type: integer
grade:
type: number
status:
description: '[QUALIFIED, DISQUALIFIED]'
type: integer
assessmentEvaluations:
type: array
items:
$ref: '#/components/schemas/AssessmentSubmissionEvaluation'
tags:
- name: config
description: ''
- name: subscription
description: ''
- name: phases
description: ''
- name: exams
description: ''
- name: site
description: ''
$ref: './schemas/Phase.yaml/#/Rank'
SubscriptionRule:
$ref: './schemas/Subscription.yaml/#/SubscriptionRule'
Subscription:
$ref: './schemas/Subscription.yaml/#/Subscription'
SoloSubscription:
$ref: './schemas/Subscription.yaml/#/SoloSubscription'
TeamSubscription:
$ref: './schemas/Subscription.yaml/#/TeamSubscription'
FormTemplate:
$ref: './schemas/Subscription.yaml/#/FormTemplate'
FormField:
$ref: './schemas/Subscription.yaml/#/FormField'
FormAnswer:
$ref: './schemas/Subscription.yaml/#/FormAnswer'
FormSection:
$ref: './schemas/Subscription.yaml/#/FormSection'
......@@ -503,401 +503,100 @@ paths:
components:
schemas:
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
$ref: './schemas/Assessment.yaml/#/ScheduledEvent'
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: '#/components/schemas/ScheduledEvent'
location:
description: Why the fuck is this a string?
type: string
exam:
$ref: '#/components/schemas/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: '#/components/schemas/VirtualAssessment'
1: '#/components/schemas/HandmadeAssessment'
$ref: './schemas/Assessment.yaml/#/Assessment'
VirtualAssessment:
required:
- enforceSequence
allOf:
- $ref: '#/components/schemas/Assessment'
- type: object
properties:
enforceSequence:
type: boolean
description:
Boolean indicating if the assessment must be done in order
$ref: './schemas/Assessment.yaml/#/VirtualAssessment'
HandmadeAssessment:
required:
- submitterType
allOf:
- $ref: '#/components/schemas/Assessment'
- type: object
properties:
submitterType:
type: integer
description: '[ADMIN, ADMIN_OR_COMPETIFIER]'
$ref: './schemas/Assessment.yaml/#/HandmadeAssessment'
AssessmentEvent:
$ref: './schemas/Assessment.yaml/#/AssessmentEvent'
QuestionGroup:
required:
- oid
- label
- weight
properties:
oid:
type: integer
label:
type: string
weight:
format: float
type: number
$ref: './schemas/Exam.yaml/#/QuestionGroup'
QuestionStatement:
required:
- oid
- content
properties:
oid:
type: integer
content:
type: string
$ref: './schemas/Exam.yaml/#/QuestionStatement'
Question:
required:
- type
- oid
- group
- order
- weight
- status
properties:
type:
description: Inheritance type identifcation
type: integer
statement:
$ref: '#/components/schemas/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: '#/components/schemas/SubjectiveQuestion'
1: '#/components/schemas/ObjectiveQuestion'
$ref: './schemas/Exam.yaml/#/Question'
SubjectiveQuestion:
allOf:
- $ref: '#/components/schemas/Question'
- type: object
properties:
answerKey:
format: string
type: string
$ref: './schemas/Exam.yaml/#/SubjectiveQuestion'
ObjectiveQuestion:
allOf:
- $ref: '#/components/schemas/Question'
- type: object
properties:
alternatives:
type: array
items:
$ref: '#/components/schemas/Alternative'
answerKey:
type: integer
$ref: './schemas/Exam.yaml/#/ObjectiveQuestion'
ExamCover:
required:
- content
- oid
properties:
content:
type: string
oid:
type: integer
$ref: './schemas/Exam.yaml/#/ExamCover'
Exam:
required:
- type
- title
- groups
- questions
- oid
properties:
type:
description: '{SUBJECTIVE, OBJECTIVE}'
type: integer
title:
type: string
cover:
$ref: '#/components/schemas/ExamCover'
groups:
type: array
items:
$ref: '#/components/schemas/QuestionGroup'
questions:
type: array
items:
oneOf:
- $ref: '#/components/schemas/SubjectiveQuestion'
- $ref: '#/components/schemas/ObjectiveQuestion'
oid:
description: Object identifier
type: integer
$ref: './schemas/Exam.yaml/#/Exam'
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
$ref: './schemas/Exam.yaml/#/Alternative'
ExamQuestionComplaint:
$ref: './schemas/Exam.yaml/#/ExamQuestionComplaint'
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:
oneOf:
- $ref: '#/components/schemas/SoloCompetifier'
- $ref: '#/components/schemas/TeamCompetifier'
discriminator:
propertyName: type
$ref: './schemas/Submission.yaml/#/AssessmentSubmission'
HandmadeAssessmentSubmission:
allOf:
- $ref: '#/components/schemas/AssessmentSubmission'
- type: object
properties:
loadUri:
type: string
$ref: './schemas/Submission.yaml/#/HandmadeAssessmentSubmission'
VirtualAssessmentSubmission:
allOf:
- $ref: '#/components/schemas/AssessmentSubmission'
- type: object
properties:
startedAt:
type: string
format: date-time
finishedAt:
type: string
format: date-time
answers:
type: array
items:
$ref: '#/components/schemas/Answer'
$ref: './schemas/Submission.yaml/#/VirtualAssessmentSubmission'
Answer:
properties:
type:
type: integer
freeText:
type: string
choice:
type: integer
question:
type: integer
$ref: './schemas/Submission.yaml/#/Answer'
AssessmentSubmissionEvaluation:
properties:
timestamp:
type: integer
grades:
type: array
items:
$ref: '#/components/schemas/AnswerGrade'
$ref: './schemas/Submission.yaml/#/AssessmentSubmissionEvaluation'
AnswerGrade:
properties:
grade:
format: float
type: number
question:
$ref: '#/components/schemas/Question'
$ref: './schemas/Submission.yaml/#/AnswerGrade'
VirtualAssessmentSubmissionDraft:
$ref: './schemas/Submission.yaml/#/VirtualAssessmentSubmissionDraft'
Competifier:
properties:
tags:
type: array
items:
$ref: '#/components/schemas/Tag'
type:
description: '[SOLO, TEAM]'
type: integer
enum:
- 0
- 1
discriminator:
propertyName: type
$ref: './schemas/Competifier.yaml/#/Competifier'
SoloCompetifier:
allOf:
- $ref: '#/components/schemas/Competifier'
- type: object
properties:
firstName:
type: string
lastName:
type: string
$ref: './schemas/Competifier.yaml/#/SoloCompetifier'
TeamCompetifier:
allOf:
- $ref: '#/components/schemas/Competifier'
- type: object
properties:
name:
type: string
leader:
$ref: '#/components/schemas/Participant'
participants:
type: array
items:
$ref: '#/components/schemas/Participant'
$ref: './schemas/Competifier.yaml/#/TeamCompetifier'
CompetifierEvent:
$ref: './schemas/Competifier.yaml/#/CompetifierEvent'
Tag:
properties:
label:
type: string
value:
type: string
$ref: './schemas/Competifier.yaml/#/Tag'
Participant:
properties:
firstName:
type: string
lastName:
type: string
tags:
type: array
items:
$ref: '#/components/schemas/Tag'
JsonPatch:
title: Root Type for JsonPatch
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
VirtualAssessmentSubmissionDraft:
properties:
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
content:
type: string
assessment:
format: int32
type: integer
$ref: './schemas/Competifier.yaml/#/Participant'
Message:
properties:
timestamp:
format: date-time
type: string
title:
type: string
body:
type: string
read:
type: boolean
ExamQuestionComplaint:
properties:
timestamp:
format: date-time
type: string
text:
type: string
question:
$ref: '#/components/schemas/Question'
$ref: './schemas/Competifier.yaml/#/Message'
JsonPatch:
$ref: './schemas/JsonPatch.yaml'
Competition:
properties:
name:
type: string
description:
type: string
$ref: './schemas/Phase.yaml/#/Competition'
Phase:
properties:
type:
description: '{CLASSIFICATORY, FINAL}'
type: integer
enum:
- 0
- 1
status:
description: '{PREP, ONGOING, EVALUATION, CLOSED}'
type: integer
assessment:
$ref: '#/components/schemas/Assessment'
$ref: './schemas/Phase.yaml/#/Phase'
PhaseEvent:
$ref: './schemas/Phase.yaml/#/PhaseEvent'
PhaseParticipation:
$ref: './schemas/Phase.yaml/#/PhaseParticipation'
BestRanked:
$ref: './schemas/Phase.yaml/#/BestRanked'
MinimumPerformance:
$ref: './schemas/Phase.yaml/#/MinimumPerformance'
ClassificationRule:
$ref: './schemas/Phase.yaml/#/ClassificationRule'
EvaluationRule:
$ref: './schemas/Phase.yaml/#/EvaluationRule'
TieBreakCriteria:
$ref: './schemas/Phase.yaml/#/TieBreakCriteria'
Ranking:
$ref: './schemas/Phase.yaml/#/Ranking'
Rank:
$ref: './schemas/Phase.yaml/#/Rank'
SubscriptionRule:
$ref: './schemas/Subscription.yaml/#/SubscriptionRule'
Subscription:
$ref: './schemas/Subscription.yaml/#/Subscription'
SoloSubscription:
$ref: './schemas/Subscription.yaml/#/SoloSubscription'
TeamSubscription:
$ref: './schemas/Subscription.yaml/#/TeamSubscription'
FormTemplate:
$ref: './schemas/Subscription.yaml/#/FormTemplate'
FormField:
$ref: './schemas/Subscription.yaml/#/FormField'
FormAnswer:
$ref: './schemas/Subscription.yaml/#/FormAnswer'
FormSection:
$ref: './schemas/Subscription.yaml/#/FormSection'
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
......@@ -11324,7 +11324,7 @@
},
"visibility": "public",
"navigable": false,
"aggregation": "none",
"aggregation": "composite",
"multiplicity": "1",
"isReadOnly": false,
"isOrdered": false,
......@@ -66141,7 +66141,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66166,7 +66166,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;1",
"showShadow": true,
......@@ -66192,7 +66192,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66218,7 +66218,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66238,7 +66238,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66284,7 +66284,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66313,7 +66313,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66334,7 +66334,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66358,7 +66358,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66382,7 +66382,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66406,7 +66406,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -66422,7 +66422,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ff8056",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -67585,7 +67585,7 @@
"containerExtending": false,
"left": 421,
"top": 327,
"width": 115,
"width": 108,
"height": 13,
"autoResize": false,
"underline": false,
......@@ -67657,7 +67657,7 @@
"containerExtending": false,
"left": 416,
"top": 320,
"width": 125,
"width": 118,
"height": 25,
"autoResize": false,
"stereotypeLabel": {
......@@ -67682,6 +67682,37 @@
"model": {
"$ref": "AAAAAAFjIjRYomFvs+g="
},
"subViews": [
{
"_type": "UMLAttributeView",
"_id": "AAAAAAFjOpb6QL2t16g=",
"_parent": {
"$ref": "AAAAAAFjIjRYoF/rXmA="
},
"model": {
"$ref": "AAAAAAFjOpb6Cb2nDUI="
},
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
"containerChangeable": false,
"containerExtending": false,
"left": 421,
"top": 350,
"width": 108,
"height": 13,
"autoResize": false,
"underline": false,
"text": "+requestReview",
"horizontalAlignment": 0,
"verticalAlignment": 5,
"wordWrap": false
}
],
"visible": true,
"enabled": true,
"lineColor": "#000000",
......@@ -67693,8 +67724,8 @@
"containerExtending": false,
"left": 416,
"top": 345,
"width": 125,
"height": 10,
"width": 118,
"height": 23,
"autoResize": false
},
{
......@@ -67716,8 +67747,8 @@
"containerChangeable": false,
"containerExtending": false,
"left": 416,
"top": 355,
"width": 125,
"top": 368,
"width": 118,
"height": 10,
"autoResize": false
},
......@@ -67781,8 +67812,8 @@
"containerExtending": false,
"left": 416,
"top": 320,
"width": 125,
"height": 73,
"width": 118,
"height": 58,
"autoResize": false,
"stereotypeDisplay": "label",
"showVisibility": true,
......@@ -72874,7 +72905,7 @@
"showShadow": true,
"containerChangeable": false,
"containerExtending": false,
"left": 565,
"left": 558,
"top": 307,
"width": 0,
"height": 13,
......@@ -72908,7 +72939,7 @@
"showShadow": true,
"containerChangeable": false,
"containerExtending": false,
"left": 568,
"left": 561,
"top": 293,
"width": 0,
"height": 13,
......@@ -72942,7 +72973,7 @@
"showShadow": true,
"containerChangeable": false,
"containerExtending": false,
"left": 559,
"left": 552,
"top": 331,
"width": 22,
"height": 13,
......@@ -73128,7 +73159,7 @@
"$ref": "AAAAAAFjIjRYoF/vx2o="
},
"lineStyle": 0,
"points": "540:328;680:328;680:166;816:166",
"points": "533:328;680:328;680:166;816:166",
"stereotypeDisplay": "label",
"showVisibility": true,
"showProperty": true,
......@@ -73197,7 +73228,7 @@
"containerChangeable": false,
"containerExtending": false,
"left": 852,
"top": 361,
"top": 335,
"width": 0,
"height": 13,
"autoResize": false,
......@@ -73231,7 +73262,7 @@
"containerChangeable": false,
"containerExtending": false,
"left": 837,
"top": 361,
"top": 335,
"width": 0,
"height": 13,
"autoResize": false,
......@@ -73265,7 +73296,7 @@
"containerChangeable": false,
"containerExtending": false,
"left": 882,
"top": 362,
"top": 336,
"width": 0,
"height": 13,
"autoResize": false,
......@@ -73298,8 +73329,8 @@
"showShadow": true,
"containerChangeable": false,
"containerExtending": false,
"left": 565,
"top": 347,
"left": 558,
"top": 321,
"width": 0,
"height": 13,
"autoResize": false,
......@@ -73332,8 +73363,8 @@
"showShadow": true,
"containerChangeable": false,
"containerExtending": false,
"left": 568,
"top": 333,
"left": 561,
"top": 307,
"width": 0,
"height": 13,
"autoResize": false,
......@@ -73366,8 +73397,8 @@
"showShadow": true,
"containerChangeable": false,
"containerExtending": false,
"left": 550,
"top": 380,
"left": 543,
"top": 354,
"width": 22,
"height": 13,
"autoResize": false,
......@@ -73552,7 +73583,7 @@
"$ref": "AAAAAAFjIjRYoF/vx2o="
},
"lineStyle": 0,
"points": "540:368;867:368;867:188",
"points": "533:342;867:342;867:188",
"stereotypeDisplay": "label",
"showVisibility": true,
"showProperty": true,
......@@ -73721,7 +73752,7 @@
"$ref": "AAAAAAFjIjRYoGAcfN8="
},
"lineStyle": 0,
"points": "432:488;432:448;496:448;496:392",
"points": "432:488;432:448;496:448;496:377",
"stereotypeDisplay": "label",
"showVisibility": true,
"showProperty": true,
......@@ -73864,7 +73895,7 @@
"$ref": "AAAAAAFjIjRYoGASWe8="
},
"lineStyle": 0,
"points": "568:488;568:448;496:448;496:392",
"points": "568:488;568:448;496:448;496:377",
"stereotypeDisplay": "label",
"showVisibility": true,
"showProperty": true,
......@@ -79134,7 +79165,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79159,7 +79190,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;1",
"showShadow": true,
......@@ -79185,7 +79216,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79211,7 +79242,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79231,7 +79262,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79277,7 +79308,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79306,7 +79337,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79327,7 +79358,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79351,7 +79382,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79375,7 +79406,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79399,7 +79430,7 @@
"visible": false,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -79415,7 +79446,7 @@
"visible": true,
"enabled": true,
"lineColor": "#000000",
"fillColor": "#a1ecdf",
"fillColor": "#ffadd6",
"fontColor": "#000000",
"font": "Arial;13;0",
"showShadow": true,
......@@ -80987,6 +81018,25 @@
}
],
"visibility": "public",
"attributes": [
{
"_type": "UMLAttribute",
"_id": "AAAAAAFjOpb6Cb2nDUI=",
"_parent": {
"$ref": "AAAAAAFjIjRYomFvs+g="
},
"name": "requestReview",
"visibility": "public",
"isStatic": false,
"isLeaf": false,
"isReadOnly": false,
"isOrdered": false,
"isUnique": false,
"isDerived": false,
"aggregation": "none",
"isID": false
}
],
"isAbstract": false,
"isFinalSpecialization": false,
"isLeaf": false,
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