@startuml

' avoid problems with angled crows feet
skinparam linetype ortho

entity feed {
  *id : bigint
  --
  *feed_name : varchar(255)
  *type_name : varchar(255)
}

entity source {
  *id : bigint
  --
  *path : varchar(255) - unique
  *fk_feed_id : bigint
  *examined : boolean
  *forwarded : boolean
  *new_position : bigint
}

entity source_item {
  *id : bigint
  --
  *name : varchar(255)
  *fk_feed_id : bigint
  *byte_size : bigint
  *fk_source_id : bigint
  *fk_aggregate_id : bigint
  *new_position : bigint
}

entity source_entry {
  *id : bigint
  --
  *extension : varchar(255)
  *extension_type : int
  *byte_size : bigint
  *fk_source_item_id : bigint
}

entity aggregate {
  *id : bigint
  --
  *create_time_ms : bigint
  *fk_feed_id : bigint
  *byte_size : bigint
  *items : int
  *complete : boolean
  *new_position : bigint
}

entity forward_dest {
  *id : int
  --
  *name : varchar(255)
}

entity forward_source {
  *id : bigint
  --
  *update_time_ms : bigint
  *fk_forward_dest_id : int
  *fk_source_id : bigint
  *success : boolean
  *error : varchar(255)
  *tries : bigint
  *new_position : bigint
  *retry_position : bigint
}

entity forward_aggregate {
  *id : bigint
  --
  *update_time_ms : bigint
  *fk_forward_dest_id : int
  *fk_aggregate_id : bigint
  *success : boolean
  *error : varchar(255)
  *tries : bigint
  *new_position : bigint
  *retry_position : bigint
}

feed ||--|{ source
feed ||--|{ source_item
feed ||--|{ aggregate

source ||..o{ source_item
source_item ||--|{ source_entry
aggregate ||--|{ source_item
forward_source }o--|| forward_dest
forward_source }o..|| source
forward_aggregate }o--|| forward_dest
forward_aggregate }o--|| aggregate

@enduml