package response import ( "time" articleCategoriesResponse "web-medols-be/app/module/article_categories/response" articleFilesResponse "web-medols-be/app/module/article_files/response" ) type ArticlesResponse struct { ID uint `json:"id"` Title string `json:"title"` Slug string `json:"slug"` Description string `json:"description"` HtmlDescription string `json:"htmlDescription"` CategoryId int `json:"categoryId"` CategoryName string `json:"categoryName"` TypeId int `json:"typeId"` Tags string `json:"tags"` ThumbnailUrl string `json:"thumbnailUrl"` PageUrl *string `json:"pageUrl"` CreatedById *uint `json:"createdById"` CreatedByName *string `json:"createdByName"` ShareCount *int `json:"shareCount"` ViewCount *int `json:"viewCount"` CommentCount *int `json:"commentCount"` AiArticleId *int `json:"aiArticleId"` OldId *uint `json:"oldId"` StatusId *int `json:"statusId"` IsBanner *bool `json:"isBanner"` IsPublish *bool `json:"isPublish"` PublishedAt *time.Time `json:"publishedAt"` IsActive *bool `json:"isActive"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` ArticleFiles []*articleFilesResponse.ArticleFilesResponse `json:"files"` ArticleCategories []*articleCategoriesResponse.ArticleCategoriesResponse `json:"categories"` } type ArticleSummaryStats struct { TotalToday int `json:"totalToday"` TotalThisWeek int `json:"totalThisWeek"` TotalAll int `json:"totalAll"` TotalViews int `json:"totalViews"` TotalShares int `json:"totalShares"` TotalComments int `json:"totalComments"` } type ArticlePerUserLevelStats struct { UserLevelID uint `json:"userLevelId"` UserLevelName string `json:"userLevelName"` TotalArticle int64 `json:"totalArticle"` } type ArticleMonthlyStats struct { Year int `json:"year"` Month int `json:"month"` View []int `json:"view"` Comment []int `json:"comment"` Share []int `json:"share"` } // ArticleApprovalStatusResponse represents the approval status of an article type ArticleApprovalStatusResponse struct { ArticleId uint `json:"article_id"` WorkflowId *uint `json:"workflow_id"` WorkflowName *string `json:"workflow_name"` CurrentStep int `json:"current_step"` TotalSteps int `json:"total_steps"` Status string `json:"status"` // "pending", "in_progress", "approved", "rejected", "revision_requested" CurrentApprover *string `json:"current_approver"` SubmittedAt *time.Time `json:"submitted_at"` LastActionAt *time.Time `json:"last_action_at"` Progress float64 `json:"progress"` // percentage complete CanApprove bool `json:"can_approve"` // whether current user can approve NextStep *string `json:"next_step"` } // ArticleApprovalQueueResponse represents an article in the approval queue type ArticleApprovalQueueResponse struct { ID uint `json:"id"` Title string `json:"title"` Slug string `json:"slug"` Description string `json:"description"` CategoryName string `json:"category_name"` AuthorName string `json:"author_name"` SubmittedAt time.Time `json:"submitted_at"` CurrentStep int `json:"current_step"` TotalSteps int `json:"total_steps"` Priority string `json:"priority"` // "low", "medium", "high", "urgent" DaysInQueue int `json:"days_in_queue"` WorkflowName string `json:"workflow_name"` CanApprove bool `json:"can_approve"` EstimatedTime string `json:"estimated_time"` // estimated time to complete approval } // ClientApprovalSettingsResponse represents client-level approval settings type ClientApprovalSettingsResponse struct { ClientId string `json:"client_id"` RequiresApproval bool `json:"requires_approval"` DefaultWorkflowId *uint `json:"default_workflow_id"` DefaultWorkflowName *string `json:"default_workflow_name"` AutoPublishArticles bool `json:"auto_publish_articles"` ApprovalExemptUsers []uint `json:"approval_exempt_users"` ApprovalExemptRoles []uint `json:"approval_exempt_roles"` ApprovalExemptCategories []uint `json:"approval_exempt_categories"` RequireApprovalFor []string `json:"require_approval_for"` SkipApprovalFor []string `json:"skip_approval_for"` IsActive bool `json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` }