cho.sh
Project Heimdall Table Structure

Project Heimdall Table Structure

230711 Version

erDiagram
    User ||--o{ UserCredential : "HAS"
    User ||--o{ Subscription : "SUBSCRIBES"
    User ||--o{ Newsletter : "CREATES"
    Subscription ||--o{ Newsletter : "SUBSCRIBED_TO"
    Newsletter ||--o{ Summary : "HAS"

    User {
        int id
        string name
        string timezone
        string handle
        string email
        string webAuthnChallenge
        string hashedPassword
        string salt
        string resetToken
        datetime resetTokenExpiresAt
        datetime createdAt
        datetime updatedAt
        boolean deleted
    }

    UserCredential {
        string id
        int userId
        byte publicKey
        string transports
        bigint counter
        boolean deleted
    }

    Newsletter {
        int id
        string handle
        string name
        string keyword
        string region
        int userId
        datetime createdAt
        datetime updatedAt
        boolean deleted
    }

    Subscription {
        int id
        int userId
        int curatedNewsletterId
        int newsletterId
        string frequency
        string time
        string length
        string locale
        boolean active
        datetime createdAt
        datetime updatedAt
        boolean deleted
    }

    Summary {
        int id
        string title
        string origin
        string originBody
        string originSummary
        string originLocale
        string commentLink
        string commentBody
        string commentSummary
        string commentLocale
        string downloadMethod
        int retryCount
        datetime createdAt
        datetime updatedAt
        boolean deleted
    }

[[230618]] Version
erDiagram
  User }o--o{ Subscription : ""
  User ||--o{ CustomNewsletter : ""
  User }o--o{ CuratedNewsletter : ""
  CustomNewsletter ||--o{ Subscription : ""
  CuratedNewsletter ||--o{ Subscription : ""
  CustomNewsletter ||--o{ Content : ""
  CuratedNewsletter ||--o{ Content : ""
  Content ||--o{ ContentLinkSummary : ""
  Content ||--o{ Outbox : ""
  Outbox }o--|| Subscription : ""
  ContentLinkSummary }o--o{ LinkSummary : ""
  User {
    int id PK
    string Username
    string Password
    string Email
    string DisplayName
    boolean IsActive
    boolean EmailVerified
    string Timezone
    datetime CreatedAt
    datetime UpdatedAt
  }
  CuratedNewsletter {
    int id PK
    int UserId FK
    string PublicNewsletterHandle
    string NewsletterName
    string Description
    datetime CreatedAt
    datetime UpdatedAt
  }
  CustomNewsletter {
    int id PK
    int UserId FK
    string PublicNewsletterHandle
    string Keyword
    string TargetRegion
    boolean Active
    datetime CreatedAt
    datetime UpdatedAt
  }
  Subscription {
    int id PK
    int UserId FK
    int CuratedNewsletterId FK
    int CustomNewsletterId FK
    string Frequency
    string Time
    string Length
    string Locale
    boolean Active
    datetime CreatedAt
    datetime UpdatedAt
  }
  Content {
    int id PK
    int CuratedNewsletterId FK
    int CustomNewsletterId FK
    string MarkdownContent
    string Locale
    datetime CreatedAt
    datetime UpdatedAt
  }
  ContentLinkSummary {
    int id PK
    int ContentId FK
    int LinkSummaryId FK
    int Order
    datetime CreatedAt
    datetime UpdatedAt
  }
  Outbox {
    int id PK
    int ContentId FK
    int SubscriptionId FK
    string Status
    string ErrorMessage
    datetime CreatedAt
    datetime UpdatedAt
  }
  LinkSummary {
    int id PK
    string LinkUrl
    string Title
    string LinkSummary
    string Locale
    datetime CreatedAt
    datetime UpdatedAt
  }