179 lines
7.5 KiB
Go
179 lines
7.5 KiB
Go
package contract
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// OnlyOffice callback status codes
|
|
const (
|
|
OnlyOfficeStatusEditing = 1 // Document is being edited
|
|
OnlyOfficeStatusReady = 2 // Document is ready for saving
|
|
OnlyOfficeStatusSaveError = 3 // Document saving error occurred
|
|
OnlyOfficeStatusClosed = 4 // Document is closed with no changes
|
|
OnlyOfficeStatusForceSave = 6 // Document is being edited, but saved forcefully
|
|
OnlyOfficeStatusForceSaveError = 7 // Error during force save
|
|
)
|
|
|
|
// OnlyOfficeCallbackRequest represents the callback payload from OnlyOffice Document Server
|
|
type OnlyOfficeCallbackRequest struct {
|
|
Key string `json:"key"` // Document identifier
|
|
Status int `json:"status"` // Status code (1-7)
|
|
URL string `json:"url,omitempty"` // Document URL when status is 2 or 6
|
|
ChangesURL string `json:"changesurl,omitempty"` // URL to document changes
|
|
History *OnlyOfficeHistory `json:"history,omitempty"`
|
|
Users []string `json:"users,omitempty"` // Users currently editing
|
|
Actions []OnlyOfficeAction `json:"actions,omitempty"` // User actions
|
|
LastSave string `json:"lastsave,omitempty"` // Last save time
|
|
NotModified bool `json:"notmodified,omitempty"` // Document not modified flag
|
|
ForceSaveType int `json:"forcesavetype,omitempty"` // Force save type
|
|
UserData string `json:"userdata,omitempty"` // Custom user data
|
|
Token string `json:"token,omitempty"` // JWT token from OnlyOffice
|
|
}
|
|
|
|
// OnlyOfficeHistory represents document history information
|
|
type OnlyOfficeHistory struct {
|
|
ServerVersion string `json:"serverVersion"`
|
|
Changes []OnlyOfficeHistoryChange `json:"changes"`
|
|
}
|
|
|
|
// OnlyOfficeHistoryChange represents a single change in history
|
|
type OnlyOfficeHistoryChange struct {
|
|
User OnlyOfficeUser `json:"user"`
|
|
Created string `json:"created"`
|
|
}
|
|
|
|
// OnlyOfficeUser represents user information in OnlyOffice
|
|
type OnlyOfficeUser struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// OnlyOfficeAction represents user actions
|
|
type OnlyOfficeAction struct {
|
|
Type int `json:"type"` // Action type (0: user connected, 1: user disconnected)
|
|
UserID string `json:"userid"` // User identifier
|
|
User OnlyOfficeUser `json:"user"` // User information
|
|
}
|
|
|
|
// OnlyOfficeCallbackResponse is the required response format for OnlyOffice
|
|
type OnlyOfficeCallbackResponse struct {
|
|
Error int `json:"error"` // 0 = success, 1 = document key not found, 2 = callback URL error, 3 = internal server error
|
|
}
|
|
|
|
// OnlyOfficeDocument represents the document section of OnlyOffice config
|
|
type OnlyOfficeDocument struct {
|
|
FileType string `json:"fileType"` // Document file extension
|
|
Key string `json:"key"` // Unique document identifier
|
|
Title string `json:"title"` // Document title
|
|
URL string `json:"url"` // Document URL
|
|
Permissions *OnlyOfficePermissions `json:"permissions,omitempty"`
|
|
Info *OnlyOfficeDocumentInfo `json:"info,omitempty"`
|
|
}
|
|
|
|
// OnlyOfficeDocumentInfo represents additional document information
|
|
type OnlyOfficeDocumentInfo struct {
|
|
Owner string `json:"owner,omitempty"`
|
|
Uploaded string `json:"uploaded,omitempty"`
|
|
}
|
|
|
|
// OnlyOfficeConfigRequest represents the proper OnlyOffice configuration format
|
|
type OnlyOfficeConfigRequest struct {
|
|
Document *OnlyOfficeDocument `json:"document"`
|
|
DocumentType string `json:"documentType"` // text, spreadsheet, presentation
|
|
EditorConfig *OnlyOfficeEditorConfig `json:"editorConfig"`
|
|
Type string `json:"type,omitempty"` // desktop, mobile, embedded
|
|
Token string `json:"token,omitempty"` // JWT token for security
|
|
Width string `json:"width,omitempty"`
|
|
Height string `json:"height,omitempty"`
|
|
}
|
|
|
|
// OnlyOfficeUserConfig represents user configuration for OnlyOffice
|
|
type OnlyOfficeUserConfig struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// OnlyOfficePermissions represents document permissions
|
|
type OnlyOfficePermissions struct {
|
|
Comment bool `json:"comment"`
|
|
Download bool `json:"download"`
|
|
Edit bool `json:"edit"`
|
|
FillForms bool `json:"fillForms"`
|
|
ModifyContentControl bool `json:"modifyContentControl"`
|
|
ModifyFilter bool `json:"modifyFilter"`
|
|
Print bool `json:"print"`
|
|
Review bool `json:"review"`
|
|
}
|
|
|
|
// OnlyOfficeCustomization represents UI customization options
|
|
type OnlyOfficeCustomization struct {
|
|
Autosave bool `json:"autosave"`
|
|
Comments bool `json:"comments"`
|
|
CompactHeader bool `json:"compactHeader"`
|
|
CompactToolbar bool `json:"compactToolbar"`
|
|
ForceSave bool `json:"forcesave"`
|
|
ShowReviewChanges bool `json:"showReviewChanges"`
|
|
Zoom int `json:"zoom"`
|
|
}
|
|
|
|
// OnlyOfficeEditorConfig represents editor configuration
|
|
type OnlyOfficeEditorConfig struct {
|
|
CallbackURL string `json:"callbackUrl"`
|
|
Lang string `json:"lang"`
|
|
Mode string `json:"mode"` // edit, view
|
|
User *OnlyOfficeUserConfig `json:"user,omitempty"`
|
|
Customization *OnlyOfficeCustomization `json:"customization,omitempty"`
|
|
}
|
|
|
|
// Document session tracking for OnlyOffice
|
|
type DocumentSession struct {
|
|
ID uuid.UUID `json:"id"`
|
|
DocumentID uuid.UUID `json:"document_id"`
|
|
DocumentKey string `json:"document_key"` // OnlyOffice document key
|
|
UserID uuid.UUID `json:"user_id"`
|
|
Status int `json:"status"` // Current OnlyOffice status
|
|
IsLocked bool `json:"is_locked"` // Document lock status
|
|
LockedBy *uuid.UUID `json:"locked_by,omitempty"`
|
|
LockedAt *time.Time `json:"locked_at,omitempty"`
|
|
LastSavedAt *time.Time `json:"last_saved_at,omitempty"`
|
|
Version int `json:"version"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// DocumentVersion for tracking document versions
|
|
type DocumentVersion struct {
|
|
ID uuid.UUID `json:"id"`
|
|
DocumentID uuid.UUID `json:"document_id"`
|
|
Version int `json:"version"`
|
|
FileURL string `json:"file_url"`
|
|
FileSize int64 `json:"file_size"`
|
|
ChangesURL *string `json:"changes_url,omitempty"`
|
|
SavedBy uuid.UUID `json:"saved_by"`
|
|
SavedAt time.Time `json:"saved_at"`
|
|
IsActive bool `json:"is_active"`
|
|
Comments *string `json:"comments,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// GetEditorConfigRequest represents request to get OnlyOffice editor configuration
|
|
type GetEditorConfigRequest struct {
|
|
DocumentID uuid.UUID `json:"document_id"`
|
|
DocumentType string `json:"document_type"` // letter_attachment, outgoing_attachment, etc.
|
|
Mode string `json:"mode"` // edit, view
|
|
}
|
|
|
|
// GetEditorConfigResponse represents OnlyOffice editor configuration response
|
|
type GetEditorConfigResponse struct {
|
|
DocumentServerURL string `json:"document_server_url"`
|
|
Config *OnlyOfficeConfigRequest `json:"config"`
|
|
}
|
|
|
|
// OnlyOfficeConfigInfo represents the OnlyOffice configuration information
|
|
type OnlyOfficeConfigInfo struct {
|
|
URL string `json:"url"`
|
|
Token string `json:"token"`
|
|
}
|