Skip to content

Instantly share code, notes, and snippets.

@romshark
Created June 23, 2020 14:23
Show Gist options
  • Save romshark/f9ca4e3ce3a96e2da124e3fe5adcba6d to your computer and use it in GitHub Desktop.
Save romshark/f9ca4e3ce3a96e2da124e3fe5adcba6d to your computer and use it in GitHub Desktop.
// Events
event UserCreated {
id *User
name String
passwordHash String
}
event UserDeactivated {
user *User
deactivatedBy *User
}
event UserNameChanged {
user *User
newName String
changedBy *User
}
event UserPasswordChanged {
user *User
newPasswordHash String
}
event BoardCreated {
id *Board
name String
createdBy *User
}
event BoardNameChanged {
board *Board
newName String
changedBy *User
}
event BoardArchived {
board *Board
archivedBy *User
}
event UserAddedToBoard {
user *User
board *Board
addedBy *User
}
event UserRemovedFromBoard {
user *User
board *Board
removedBy *User
}
event ColumnCreated {
id *Column
board *Board
name String
index Uint
createdBy *User
}
event ColumnMoved {
column *Column
newIndex Uint
movedBy *User
}
event ColumnTitleChanged {
column *Column
newName String
changedBy *User
}
event CardCreated {
id *Card
column *Column
title String?
createdBy *User
}
event CardTitleChanged {
id *Card
newTitle String
changedBy *User
}
event CardDescriptionChanged {
id *Card
newDescription String
changedBy *User
}
event CardMovedToColumn {
id *Card
column *Column
movedBy *User
}
event CardMovedWithinColumn {
id *Card
index Uint
movedBy *User
}
event CardArchived {
id *Card
archivedBy *User
}
event UserAssignedToCard {
user *User
card *Card
assignedBy *User
}
event UserUnassignedFromCard {
user *User
card *Card
unassignedBy *User
}
// Entities
entity User {
properties:
name String
passwordHash String
adminOf []*Board
memberOf []*Board
creation Time
states:
existing
deactivated
transitions:
|-> UserCreated => existing (name, passwordHash, creation)
existing -> UserNameChanged => existing (name)
existing -> UserPasswordChanged => existing (passwordHash)
existing -> BoardCreated => existing (adminOf)
existing -> UserAddedToBoard => existing (memberOf)
existing -> UserRemovedFromBoard => existing (memberOf)
existing -> UserDeactivated => deactivated
}
entity Board {
properties:
name String
admin *User
columns []*Column
members []*User
creation Time
states:
existing
archived
transitions:
|-> BoardCreated => existing (name, admin, creation)
existing -> BoardNameChanged => existing (name)
existing -> ColumnCreated => existing (columns)
existing -> ColumnMoved => existing (columns)
existing -> UserAddedToBoard => existing (members)
existing -> UserRemovedFromBoard => existing (members)
existing -> BoardArchived => archived
}
entity Column {
properties:
title String
board *Board
cards []*Card
creation Time
states:
existing
transitions:
|-> ColumnCreated => existing (title, board, creation)
existing -> ColumnTitleChanged => existing (title)
existing -> CardCreated => existing (cards)
existing -> CardMovedToColumn => existing (cards)
existing -> CardMovedWithinColumn => existing (cards)
}
entity Card {
properties:
title String?
description String?
author *User
assignees []*User
column *Column
creation Time
states:
existing
archived
transitions:
|-> CardCreated => existing (author, title, creation)
existing -> CardTitleChanged => existing (title)
existing -> CardDescriptionChanged => existing (description)
existing -> CardMovedToColumn => existing (column)
existing -> UserAssignedToCard => existing (assignees)
existing -> UserUnassignedFromCard => existing (assignees)
existing -> CardArchived => archived
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment