package store import ( "time" "github.com/jackc/pgx/v5/pgxpool" ) // Store provides database access via a connection pool. type Store struct { pool *pgxpool.Pool } // New creates a new Store with the given pgx pool. func New(pool *pgxpool.Pool) *Store { return &Store{pool: pool} } // User represents a user account. type User struct { ID int64 Username string DisplayName string PasswordHash string Avatar string CreatedAt time.Time } // Session represents a user session for refresh tokens. type Session struct { ID int64 UserID int64 RefreshHash string ExpiresAt time.Time CreatedAt time.Time RevokedAt *time.Time UserAgent string IP string } // Conversation represents a chat conversation. type Conversation struct { ID int64 Type string Name string Avatar string CreatedAt time.Time } // MemberInfo describes a conversation participant together with their profile. type MemberInfo struct { User User Role string JoinedAt time.Time } // ConversationSummary provides a conversation with its last message and unread count. type ConversationSummary struct { Conversation LastMessage *Message UnreadCount int64 } // Message represents a message sent within a conversation. type Message struct { ID int64 ConversationID int64 SenderID int64 Body string MediaID *int64 CreatedAt time.Time EditedAt *time.Time DeletedAt *time.Time } // Contact represents a contact relationship between users. type Contact struct { OwnerID int64 ContactID int64 CreatedAt time.Time }