Entity list:

    container
    creator
    file
    release
    work

## Cookbook

To create a new work:

    login/create account

    match/lookup on first work; check if update actually needed
    ? match/lookup on files

    new edit group (under account; wip)
    new edit (under group)

    match/lookup on all creators
    match/lookup on all refs
      TODO: match/lookup on files?
    match/lookup container

    new work_rev (linked to edit)
    new work_ident (linked to rev; not-live)
    contributor stubs/links
    new release_rev (linked to work_ident)
    new release_ident (linked to rev; not-live)
    contributor stubs/links
    ref stubs/links
    new file_rev
    new file_ident

    set edit group state to "review"

    set edit group state to "accepted"
    set all ident flags to "live"


To edit, eg, a contributor:

    new edit group (under account; wip)
    new edit (under group)

    create contributor_rev row (and relationship rows)

    set edit group state to "review"

    set edit group state to "accepted"
    point ident row to new rev


Accept edit group:

    for each entity type:
      for each edit:
        update entity ident state (activate, redirect, delete)
    append log/changelog row
    update edit group state


Bulk/Fase Import Crossref:

    lookup work by identifier; if exists done
    lookup journals by ISSN
    lookup authors by ORCID
    create new work
      => stub container and authors if we can't find them
    create new release
    submit edit group


Import Journals (same for authors):

    lookup journal by ISSN
    create new container
    submit edit group

## Entity Schema

Each entity type has tables:

    _rev
      core representation of a version of the entity

    _ident
      persistant, external identifier
      allows merging, unmerging, stable cross-entity references

    _edit
      represents change metadata for a single change to one ident
      needed because an edit alwasy changes ident, but might not change rev

Could someday also have:

    _log
      history of when edits were actually applied
      allows fast lookups of history of an entity (ident)
      unnecessary if we keep a log of edit group accepts?
      punt on this for now

## Entity States

    wip (not live; not redirect; has rev)
      activate
    active (live; not redirect; has rev)
      redirect
      delete
    redirect (live; redirect; rev or not)
      split
      delete
    deleted (live; not redirect; no rev)
      redirect
      activate

    "wip redirect" or "wip deleted" are invalid states

## Entity Endpoints/Actions

Actions could, in theory, be directed at any of:

    entities (ident)
    revision
    edit

A design decision to be made is how much to abstract away the distinction
between these three types (particularly the identifier/revision distinction).

Top-level entity actions (resulting in edits):

    create (new rev)
    redirect
    split
    update (new rev)
    delete

On existing entity edits (within a group):

    update
    delete

An edit group as a whole can be:

    create
    submit
    accept

Other per-entity endpoints:

    match (by field/context)
    lookup (by external persistent identifier)