feat: doc status & share status (#14426)

#### PR Dependency Tree


* **PR #14426** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Admin dashboard: view workspace analytics (storage, sync activity, top
shared links) with charts and configurable windows.
* Document analytics tab: see total/unique/guest views and trends over
selectable time windows.
* Last-accessed members: view who last accessed a document, with
pagination.
* Shared links analytics: browse and paginate all shared links with
view/unique/guest metrics and share URLs.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-02-13 01:01:29 +08:00
committed by GitHub
parent b46bf91575
commit b4be9118ad
44 changed files with 5701 additions and 86 deletions
+154
View File
@@ -30,6 +30,85 @@ input AddContextFileInput {
contextId: String!
}
type AdminAllSharedLink {
docId: String!
docUpdatedAt: DateTime
guestViews: SafeInt
lastAccessedAt: DateTime
lastUpdaterId: String
publishedAt: DateTime
shareUrl: String!
title: String
uniqueViews: SafeInt
views: SafeInt
workspaceId: String!
workspaceOwnerId: String
}
type AdminAllSharedLinkEdge {
cursor: String!
node: AdminAllSharedLink!
}
input AdminAllSharedLinksFilterInput {
analyticsWindowDays: Int = 28
includeTotal: Boolean = false
keyword: String
orderBy: AdminSharedLinksOrder = UpdatedAtDesc
updatedAfter: DateTime
workspaceId: String
}
type AdminDashboard {
blobStorageBytes: SafeInt!
blobStorageHistory: [AdminDashboardValueDayPoint!]!
copilotConversations: SafeInt!
generatedAt: DateTime!
storageWindow: TimeWindow!
syncActiveUsers: Int!
syncActiveUsersTimeline: [AdminDashboardMinutePoint!]!
syncWindow: TimeWindow!
topSharedLinks: [AdminSharedLinkTopItem!]!
topSharedLinksWindow: TimeWindow!
workspaceStorageBytes: SafeInt!
workspaceStorageHistory: [AdminDashboardValueDayPoint!]!
}
input AdminDashboardInput {
sharedLinkWindowDays: Int = 28
storageHistoryDays: Int = 30
syncHistoryHours: Int = 48
timezone: String = "UTC"
}
type AdminDashboardMinutePoint {
activeUsers: Int!
minute: DateTime!
}
type AdminDashboardValueDayPoint {
date: DateTime!
value: SafeInt!
}
type AdminSharedLinkTopItem {
docId: String!
guestViews: SafeInt!
lastAccessedAt: DateTime
publishedAt: DateTime
shareUrl: String!
title: String
uniqueViews: SafeInt!
views: SafeInt!
workspaceId: String!
}
enum AdminSharedLinksOrder {
PublishedAtDesc
UpdatedAtDesc
ViewsDesc
}
input AdminUpdateWorkspaceInput {
avatarKey: String
enableAi: Boolean
@@ -720,6 +799,17 @@ type DocHistoryType {
workspaceId: String!
}
type DocMemberLastAccess {
lastAccessedAt: DateTime!
lastDocId: String
user: PublicUserType!
}
type DocMemberLastAccessEdge {
cursor: String!
node: DocMemberLastAccess!
}
"""Doc mode"""
enum DocMode {
edgeless
@@ -731,6 +821,32 @@ type DocNotFoundDataType {
spaceId: String!
}
type DocPageAnalytics {
generatedAt: DateTime!
series: [DocPageAnalyticsPoint!]!
summary: DocPageAnalyticsSummary!
window: TimeWindow!
}
input DocPageAnalyticsInput {
timezone: String = "UTC"
windowDays: Int = 28
}
type DocPageAnalyticsPoint {
date: DateTime!
guestViews: SafeInt!
totalViews: SafeInt!
uniqueViews: SafeInt!
}
type DocPageAnalyticsSummary {
guestViews: SafeInt!
lastAccessedAt: DateTime
totalViews: SafeInt!
uniqueViews: SafeInt!
}
type DocPermissions {
Doc_Comments_Create: Boolean!
Doc_Comments_Delete: Boolean!
@@ -763,6 +879,8 @@ enum DocRole {
}
type DocType {
"""Doc page analytics in a time window"""
analytics(input: DocPageAnalyticsInput): DocPageAnalytics!
createdAt: DateTime
"""Doc create user"""
@@ -774,6 +892,9 @@ type DocType {
grantedUsersList(pagination: PaginationInput!): PaginatedGrantedDocUserType!
id: String!
"""Paginated last accessed members of the current doc"""
lastAccessedMembers(includeTotal: Boolean = false, pagination: PaginationInput!, query: String): PaginatedDocMemberLastAccess!
"""Doc last updated user"""
lastUpdatedBy: PublicUserType
lastUpdaterId: String
@@ -1677,6 +1798,13 @@ type PageInfo {
startCursor: String
}
type PaginatedAdminAllSharedLink {
analyticsWindow: TimeWindow!
edges: [AdminAllSharedLinkEdge!]!
pageInfo: PageInfo!
totalCount: Int
}
type PaginatedCommentChangeObjectType {
edges: [CommentChangeObjectTypeEdge!]!
pageInfo: PageInfo!
@@ -1701,6 +1829,12 @@ type PaginatedCopilotWorkspaceFileType {
totalCount: Int!
}
type PaginatedDocMemberLastAccess {
edges: [DocMemberLastAccessEdge!]!
pageInfo: PageInfo!
totalCount: Int
}
type PaginatedDocType {
edges: [DocTypeEdge!]!
pageInfo: PageInfo!
@@ -1762,6 +1896,12 @@ type PublicUserType {
}
type Query {
"""List all shared links across workspaces for admin panel"""
adminAllSharedLinks(filter: AdminAllSharedLinksFilterInput, pagination: PaginationInput!): PaginatedAdminAllSharedLink!
"""Get aggregated dashboard metrics for admin panel"""
adminDashboard(input: AdminDashboardInput): AdminDashboard!
"""Get workspace detail for admin"""
adminWorkspace(id: String!): AdminWorkspace
@@ -2207,6 +2347,20 @@ enum SubscriptionVariant {
Onetime
}
enum TimeBucket {
Day
Minute
}
type TimeWindow {
bucket: TimeBucket!
effectiveSize: Int!
from: DateTime!
requestedSize: Int!
timezone: String!
to: DateTime!
}
type TranscriptionItemType {
end: String!
speaker: String!