@startuml



package "Persistence" #LightBlue
{
    class Persistence
    {
        #sqlite3*: dbNode
        #sqlite3*: dbPubs
        #sqlite3*: dbFeeds
        +persisteneInit()
        +persistenceFinish()
    }
    class dbNode
    {
        #sqlite3*: dbNode
        -const char*: nodeDBName
        +int: insertNode()
        +int: readNode()
    }

    class node
    {
        -unsigned: char
        -unsigned: char
        -char: nodeType
    }

    dbNode o-down->node

    enum nodeType
    {
        NODE_REGULAR
        NODE_PUB
    }

    node *-down-> nodeType

    class dbPubs
    {
        #sqlite3: dbPubs
        +int: insertInvite()
        +int: readInvite()

    }

    class dbFeeds
    {
        #sqlite3: dbFeeds
        +int: insertPubsAff()
        +int: readPubsAff()
        +int: insertFeedMsg()
        +const char* feedTableName()

    }

    enum InviteStatus
    {
        INVITE_CREATED
        INVITE_GRANTED
        INVITE_DENIED_PUBLIC_MSG
        INVITE_RECEIVED
        INVITE_NOT_SENT
        INVITE_SENT
        INVITE_DENIED_INVALID_CODE
        +const char*: getStrInviteStatus()
    }

    enum "Persistence Method Returns" as persistReturns
    {

        PERSISTENCE_OK
        PERSISTENCE_ERR_GENERAL
        PERSISTENCE_ERR_OPEN
        PERSISTENCE_ERR_CLOSE
        PERSISTENCE_ERR_BEGIN
        PERSISTENCE_ERR_CREATE_TABLE
        PERSISTENCE_ERR_INSERT
        PERSISTENCE_ERR_READ
        PERSISTENCE_ERR_UPDATE
        PERSISTENCE_ERR_DELETE
        PERSISTENCE_ERR_COMMIT
        PERSISTENCE_NO_ROWS
        const char*: getMessageReturns()
    }

    enum "dbNode Method Returns" as dbNodeReturns
    {
        DBNODE_INVAVLID_KEY
        DBNODE_EMPTY_KEY,
        DBNODE_KEY_SIZE
    }

    Persistence *-down->dbPubs
    Persistence *-down->dbNode
    Persistence *-down->dbFeeds
    Persistence *-down-> persistReturns

    persistReturns *-down->dbNodeReturns

    dbPubs *-down-> InviteStatus


    @enduml