export interface User { id: number email: string username: string displayName: string | null avatarUrl: string | null role: 'admin' | 'moderator' | 'user' isActive: boolean createdAt: string updatedAt: string } export interface Article { id: number slug: string title: string content: string | null excerpt: string | null coverImageUrl: string | null status: 'draft' | 'published' | 'archived' visibility: 'public' | 'unlisted' | 'private' viewCount: number publishedAt: string | null createdAt: string updatedAt: string author: Pick comments?: Comment[] reactions?: Reaction[] } export interface Comment { id: number articleId: number parentId: number | null content: string status: 'pending' | 'approved' | 'rejected' | 'suspicious' authorName: string | null authorEmail: string | null authorId: number | null createdAt: string updatedAt: string author?: User | null replies?: Comment[] } export interface Reaction { id: number articleId: number userId: number type: string createdAt: string } export interface ArticleVersion { id: number articleId: number content: string title: string version: number createdAt: string createdBy: Pick } export interface CommentAudit { id: number commentId: number action: string reason: string performedBy: string performedAt: string } export interface PaginationResponse { items: T[] total: number page: number limit: number totalPages: number } export interface AnalyticsSummary { totalArticles: number totalComments: number totalUsers: number totalViews: number dailyViews: { date: string; views: number }[] popularArticles: Article[] commentStats: { pending: number approved: number rejected: number suspicious: number } } export interface LoginCredentials { emailOrUsername: string password: string } export interface CreateArticleInput { title: string content: string excerpt?: string coverImageUrl?: string status: 'draft' | 'published' | 'archived' visibility: 'public' | 'unlisted' | 'private' } export interface UpdateArticleInput extends Partial { slug?: string } export interface CreateCommentInput { content: string parentId?: number } export interface ApiError { message: string code: string details?: Record }