로고조성현

Everynews Organizational Schema

erDiagram
    %% Auth Core
    users ||--o{ accounts : has
    users ||--o{ sessions : maintains
    users ||--o{ passkeys : has
    users ||--o{ verifications : requests

    %% Organization Structure
    organizations ||--o{ members : contains
    organizations ||--o{ invitations : manages
    users ||--o{ members : belongs_to
    users ||--o{ invitations : creates

    %% News System
    organizations ||--o{ news : owns
    organizations ||--o{ channels : owns
    organizations ||--o{ apikeys : configures
    news ||--o{ schedules : has
    news ||--o{ stories : tracks
    news ||--o{ channels : uses

    users {
        text id PK
        string name
        string email UK
        boolean emailVerified
        string image
        string role
        boolean banned
        string banReason
        timestamp banExpires
        timestamp createdAt
        timestamp updatedAt
    }

    sessions {
        text id PK
        text userId FK
        string token UK
        timestamp expiresAt
        text ipAddress
        text userAgent
        text impersonatedBy
        text activeOrganizationId
        timestamp createdAt
        timestamp updatedAt
    }

    accounts {
        text id PK
        text userId FK
        string accountId
        string providerId
        text accessToken
        text refreshToken
        text idToken
        timestamp tokenExpiresAt
        text scope
        text password
        timestamp createdAt
        timestamp updatedAt
    }

    verifications {
        text id PK
        string identifier
        string value
        timestamp expiresAt
        timestamp createdAt
        timestamp updatedAt
    }

    passkeys {
        text id PK
        text userId FK
        string name
        text publicKey
        text credentialID
        integer counter
        string deviceType
        boolean backedUp
        string transports
        timestamp createdAt
    }

    organizations {
        text id PK
        string name
        string slug UK
        string logo
        text metadata
        timestamp createdAt
    }

    members {
        text id PK
        text organizationId FK
        text userId FK
        string role
        timestamp createdAt
    }

    invitations {
        text id PK
        text organizationId FK
        text inviterId FK
        string email
        string role
        string status
        timestamp expiresAt
        timestamp createdAt
    }

    apikeys {
        text id PK
        text organizationId FK
        string name
        string prefix
        string key
        integer refillInterval
        integer refillAmount
        boolean enabled
        boolean rateLimitEnabled
        integer rateLimitMax
        integer requestCount
        integer remaining
        text permissions
        text metadata
        timestamp lastRequest
        timestamp expiresAt
        timestamp createdAt
        timestamp updatedAt
    }

    news {
        text id PK
        text organizationId FK
        string name
        json searchQuery
        json relevanceSettings
        json waitSettings
        boolean isActive
        timestamp lastRun
        timestamp lastSent
        timestamp nextRun
        timestamp createdAt
        timestamp updatedAt
    }

    schedules {
        text id PK
        text newsId FK
        string cronExpr
        boolean isActive
        timestamp lastSuccess
        timestamp lastFailure
        json errorDetails
        timestamp createdAt
        timestamp updatedAt
    }

    stories {
        text id PK
        text newsId FK
        string title
        string url UK
        text snippet
        float relevanceScore
        boolean wasDelivered
        timestamp foundAt
        timestamp createdAt
    }

    channels {
        text id PK
        text organizationId FK
        string type
        json config
        boolean isActive
        timestamp createdAt
        timestamp updatedAt
    }