Skip to content

Instantly share code, notes, and snippets.

@vporoshok
Created April 20, 2020 12:27
Show Gist options
  • Save vporoshok/d99c84a3f1e2405b2434bfbc6ab897cf to your computer and use it in GitHub Desktop.
Save vporoshok/d99c84a3f1e2405b2434bfbc6ab897cf to your computer and use it in GitHub Desktop.
package model
import (
"time"
uuid "github.com/satori/go.uuid"
)
// EventKind тип события
//
//go:generate enumer -json -transform=snake -type=EventKind -trimprefix=EventKind -output=events_kind_string.go $GOFILE
type EventKind int8
// Типы событий
const (
EventKindTaskCreated EventKind = iota
EventKindTaskInProgress
EventKindTaskReassigned
EventKindTaskOverdue
EventKindTaskDone
EventKindTaskCanceled
)
// Event общие поля любого события системы
type Event struct {
Kind EventKind `json:"kind"` // Тип события вида "task_created"
Region string `json:"region"` // Код региона вида "03"
DepartmentID string `json:"departmentId"` // Внутренний идентификатор ведомства
Timestamp time.Time `json:"timestamp"` // Время события
}
// TaskEvent события, связанные с пользовательскими задачами
type TaskEvent struct {
Event
TaskID uuid.UUID `json:"taskId"` // Идентификатор задачи
}
// TaskCreated — создания задачи
type TaskCreated struct {
TaskEvent
TemplateName string `json:"templateName"` // Название шаблона (совпадает с названием услуги)
InstanceID uuid.UUID `json:"instanceId"` // Идентификатор экземпляра процесса
ClaimID string `json:"claimId"` // Идентификатор заявления
TaskName string `json:"taskName"` // Название задачи
DueDate time.Time `json:"dueDate"` // Срок исполнения задачи
PerformerGroups []uuid.UUID `json:"performerGroups"` // Идентификаторы групп исполнителей
PerformerGroupNames []string `json:"performerGroupNames"` // Названия групп исполнителей ()
Performers []uuid.UUID `json:"performers"` // Идентификаторы исполнителей
PerformerNames []string `json:"performerNames"` // ФИО исполнителей
}
// TaskInProgress — задача взята в работу
type TaskInProgress struct {
TaskEvent
Performer uuid.UUID `json:"performer"` // Идентификатор пользователя, взявшего задачу в работу
PerformerName string `json:"performerName"` // ФИО пользователя, взявшего задачу в работу
}
// TaskReassigned — задача переназначена
type TaskReassigned struct {
TaskEvent
Performer uuid.UUID `json:"performer"` // Идентификатор пользователя, на которого переназначена задача
PerformerName string `json:"performerName"` // ФИО пользователя, на которого переназначена задача
ReassignedBy uuid.UUID `json:"reassignedBy"` // Идентификатор пользователя, переназначившего задачу
ReassignedByName string `json:"reassignedByName"` // ФИО пользователя, переназначившего задачу
}
// TaskOverdue — задача просрочена
type TaskOverdue struct {
TaskEvent
}
// TaskDone — задача выполнена
type TaskDone struct {
TaskEvent
Performer uuid.UUID `json:"performer"` // Идентификатор пользователя, выполнившего задачу
PerformerName string `json:"performerName"` // ФИО пользователя, выполнившего задачу
}
// TaskCanceledReason причина отмены задачи
//
//go:generate enumer -json -transform=snake -type=TaskCanceledReason -trimprefix=TaskCanceledReason -output=events_task_canceled_reason_string.go $GOFILE
type TaskCanceledReason int8
const (
// TaskCanceledReasonEscalation — эскалация при просрочке
TaskCanceledReasonEscalation TaskCanceledReason = iota
// TaskCanceledReasonInterrupt — процесс прерван пользователем
TaskCanceledReasonInterrupt
// TaskCanceledReasonCondition — выполнены условия перехода для задачи множественного исполнения
TaskCanceledReasonCondition
// TaskCanceledReasonError — процесс завершился с ошибкой
TaskCanceledReasonError
)
// TaskCanceled — задача отменена
type TaskCanceled struct {
TaskEvent
Reason TaskCanceledReason `json:"reason"` // Причина отмены задачи
InterruptedBy *uuid.UUID `json:"interruptedBy,omitempty"` // Идентификатор прервавшего ползователя
InterruptedByName *string `json:"interruptedByName,omitempty"` // ФИО прервавшего ползователя
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment