Refactor frontend data models

This commit is contained in:
shamoon
2023-12-19 22:36:35 -08:00
parent 021189573b
commit 9a15843b3b
120 changed files with 640 additions and 706 deletions

View File

@@ -0,0 +1,43 @@
import { ObjectWithId } from './object-with-id'
export enum DocumentSource {
ConsumeFolder = 1,
ApiUpload = 2,
MailFetch = 3,
}
export interface ConsumptionTemplate extends ObjectWithId {
name: string
order: number
sources: DocumentSource[]
filter_filename: string
filter_path?: string
filter_mailrule?: number // MailRule.id
assign_title?: string
assign_tags?: number[] // Tag.id
assign_document_type?: number // DocumentType.id
assign_correspondent?: number // Correspondent.id
assign_storage_path?: number // StoragePath.id
assign_owner?: number // User.id
assign_view_users?: number[] // [User.id]
assign_view_groups?: number[] // [Group.id]
assign_change_users?: number[] // [User.id]
assign_change_groups?: number[] // [Group.id]
assign_custom_fields?: number[] // [CustomField.id]
}

View File

@@ -1,5 +1,5 @@
import { MatchingModel } from './matching-model'
export interface PaperlessCorrespondent extends MatchingModel {
export interface Correspondent extends MatchingModel {
last_correspondence?: string // Date
}

View File

@@ -0,0 +1,8 @@
import { ObjectWithId } from './object-with-id'
export interface CustomFieldInstance extends ObjectWithId {
document: number // Document
field: number // CustomField
created: Date
value?: any
}

View File

@@ -1,6 +1,6 @@
import { ObjectWithId } from './object-with-id'
export enum PaperlessCustomFieldDataType {
export enum CustomFieldDataType {
String = 'string',
Url = 'url',
Date = 'date',
@@ -13,41 +13,41 @@ export enum PaperlessCustomFieldDataType {
export const DATA_TYPE_LABELS = [
{
id: PaperlessCustomFieldDataType.Boolean,
id: CustomFieldDataType.Boolean,
name: $localize`Boolean`,
},
{
id: PaperlessCustomFieldDataType.Date,
id: CustomFieldDataType.Date,
name: $localize`Date`,
},
{
id: PaperlessCustomFieldDataType.Integer,
id: CustomFieldDataType.Integer,
name: $localize`Integer`,
},
{
id: PaperlessCustomFieldDataType.Float,
id: CustomFieldDataType.Float,
name: $localize`Number`,
},
{
id: PaperlessCustomFieldDataType.Monetary,
id: CustomFieldDataType.Monetary,
name: $localize`Monetary`,
},
{
id: PaperlessCustomFieldDataType.String,
id: CustomFieldDataType.String,
name: $localize`Text`,
},
{
id: PaperlessCustomFieldDataType.Url,
id: CustomFieldDataType.Url,
name: $localize`Url`,
},
{
id: PaperlessCustomFieldDataType.DocumentLink,
id: CustomFieldDataType.DocumentLink,
name: $localize`Document Link`,
},
]
export interface PaperlessCustomField extends ObjectWithId {
data_type: PaperlessCustomFieldDataType
export interface CustomField extends ObjectWithId {
data_type: CustomFieldDataType
name: string
created?: Date
}

View File

@@ -1,4 +1,4 @@
export interface PaperlessDocumentMetadata {
export interface DocumentMetadata {
original_checksum?: string
archived_checksum?: string

View File

@@ -0,0 +1,7 @@
import { ObjectWithId } from './object-with-id'
export interface DocumentNote extends ObjectWithId {
created?: Date
note?: string
user?: number // User
}

View File

@@ -1,4 +1,4 @@
export interface PaperlessDocumentSuggestions {
export interface DocumentSuggestions {
tags?: number[]
correspondents?: number[]

View File

@@ -0,0 +1,3 @@
import { MatchingModel } from './matching-model'
export interface DocumentType extends MatchingModel {}

View File

@@ -0,0 +1,66 @@
import { Correspondent } from './correspondent'
import { Tag } from './tag'
import { DocumentType } from './document-type'
import { Observable } from 'rxjs'
import { StoragePath } from './storage-path'
import { ObjectWithPermissions } from './object-with-permissions'
import { DocumentNote } from './document-note'
import { CustomFieldInstance } from './custom-field-instance'
export interface SearchHit {
score?: number
rank?: number
highlights?: string
note_highlights?: string
}
export interface Document extends ObjectWithPermissions {
correspondent$?: Observable<Correspondent>
correspondent?: number
document_type$?: Observable<DocumentType>
document_type?: number
storage_path$?: Observable<StoragePath>
storage_path?: number
title?: string
content?: string
tags$?: Observable<Tag[]>
tags?: number[]
checksum?: string
// UTC
created?: Date
// localized date
created_date?: Date
modified?: Date
added?: Date
original_file_name?: string
archived_file_name?: string
download_url?: string
thumbnail_url?: string
archive_serial_number?: number
notes?: DocumentNote[]
__search_hit__?: SearchHit
custom_fields?: CustomFieldInstance[]
}

View File

@@ -1,6 +1,6 @@
import { ObjectWithId } from './object-with-id'
export interface PaperlessGroup extends ObjectWithId {
export interface Group extends ObjectWithId {
name?: string
user_count?: number // not implemented yet

View File

@@ -6,7 +6,7 @@ export enum IMAPSecurity {
STARTTLS = 3,
}
export interface PaperlessMailAccount extends ObjectWithPermissions {
export interface MailAccount extends ObjectWithPermissions {
name: string
imap_server: string

View File

@@ -32,7 +32,7 @@ export enum MailMetadataCorrespondentOption {
FromCustom = 4,
}
export interface PaperlessMailRule extends ObjectWithPermissions {
export interface MailRule extends ObjectWithPermissions {
name: string
account: number // PaperlessMailAccount.id

View File

@@ -1,43 +0,0 @@
import { ObjectWithId } from './object-with-id'
export enum DocumentSource {
ConsumeFolder = 1,
ApiUpload = 2,
MailFetch = 3,
}
export interface PaperlessConsumptionTemplate extends ObjectWithId {
name: string
order: number
sources: DocumentSource[]
filter_filename: string
filter_path?: string
filter_mailrule?: number // PaperlessMailRule.id
assign_title?: string
assign_tags?: number[] // PaperlessTag.id
assign_document_type?: number // PaperlessDocumentType.id
assign_correspondent?: number // PaperlessCorrespondent.id
assign_storage_path?: number // PaperlessStoragePath.id
assign_owner?: number // PaperlessUser.id
assign_view_users?: number[] // [PaperlessUser.id]
assign_view_groups?: number[] // [PaperlessGroup.id]
assign_change_users?: number[] // [PaperlessUser.id]
assign_change_groups?: number[] // [PaperlessGroup.id]
assign_custom_fields?: number[] // [PaperlessCustomField.id]
}

View File

@@ -1,9 +0,0 @@
import { ObjectWithId } from './object-with-id'
import { PaperlessCustomField } from './paperless-custom-field'
export interface PaperlessCustomFieldInstance extends ObjectWithId {
document: number // PaperlessDocument
field: number // PaperlessCustomField
created: Date
value?: any
}

View File

@@ -1,7 +0,0 @@
import { ObjectWithId } from './object-with-id'
export interface PaperlessDocumentNote extends ObjectWithId {
created?: Date
note?: string
user?: number // PaperlessUser
}

View File

@@ -1,3 +0,0 @@
import { MatchingModel } from './matching-model'
export interface PaperlessDocumentType extends MatchingModel {}

View File

@@ -1,66 +0,0 @@
import { PaperlessCorrespondent } from './paperless-correspondent'
import { PaperlessTag } from './paperless-tag'
import { PaperlessDocumentType } from './paperless-document-type'
import { Observable } from 'rxjs'
import { PaperlessStoragePath } from './paperless-storage-path'
import { ObjectWithPermissions } from './object-with-permissions'
import { PaperlessDocumentNote } from './paperless-document-note'
import { PaperlessCustomFieldInstance } from './paperless-custom-field-instance'
export interface SearchHit {
score?: number
rank?: number
highlights?: string
note_highlights?: string
}
export interface PaperlessDocument extends ObjectWithPermissions {
correspondent$?: Observable<PaperlessCorrespondent>
correspondent?: number
document_type$?: Observable<PaperlessDocumentType>
document_type?: number
storage_path$?: Observable<PaperlessStoragePath>
storage_path?: number
title?: string
content?: string
tags$?: Observable<PaperlessTag[]>
tags?: number[]
checksum?: string
// UTC
created?: Date
// localized date
created_date?: Date
modified?: Date
added?: Date
original_file_name?: string
archived_file_name?: string
download_url?: string
thumbnail_url?: string
archive_serial_number?: number
notes?: PaperlessDocumentNote[]
__search_hit__?: SearchHit
custom_fields?: PaperlessCustomFieldInstance[]
}

View File

@@ -1,7 +1,7 @@
import { FilterRule } from './filter-rule'
import { ObjectWithPermissions } from './object-with-permissions'
export interface PaperlessSavedView extends ObjectWithPermissions {
export interface SavedView extends ObjectWithPermissions {
name?: string
show_on_dashboard?: boolean

View File

@@ -1,18 +1,18 @@
import { ObjectWithPermissions } from './object-with-permissions'
export enum PaperlessFileVersion {
export enum FileVersion {
Archive = 'archive',
Original = 'original',
}
export interface PaperlessShareLink extends ObjectWithPermissions {
export interface ShareLink extends ObjectWithPermissions {
created: string // Date
expiration?: string // Date
slug: string
document: number // PaperlessDocument
document: number // Document
file_version: string
}

View File

@@ -1,5 +1,5 @@
import { MatchingModel } from './matching-model'
export interface PaperlessStoragePath extends MatchingModel {
export interface StoragePath extends MatchingModel {
path?: string
}

View File

@@ -1,6 +1,6 @@
import { MatchingModel } from './matching-model'
export interface PaperlessTag extends MatchingModel {
export interface Tag extends MatchingModel {
color?: string
text_color?: string

View File

@@ -1,12 +1,12 @@
import { PaperlessUser } from './paperless-user'
import { User } from './user'
export interface PaperlessUiSettings {
user: PaperlessUser
export interface UiSettings {
user: User
settings: Object
permissions: string[]
}
export interface PaperlessUiSetting {
export interface UiSetting {
key: string
type: string
default: any
@@ -53,7 +53,7 @@ export const SETTINGS_KEYS = {
DEFAULT_PERMS_EDIT_GROUPS: 'general-settings:permissions:default-edit-groups',
}
export const SETTINGS: PaperlessUiSetting[] = [
export const SETTINGS: UiSetting[] = [
{
key: SETTINGS_KEYS.LANGUAGE,
type: 'string',

View File

@@ -1,6 +1,6 @@
import { ObjectWithId } from './object-with-id'
export interface PaperlessUser extends ObjectWithId {
export interface User extends ObjectWithId {
username?: string
first_name?: string
last_name?: string
@@ -8,7 +8,7 @@ export interface PaperlessUser extends ObjectWithId {
is_staff?: boolean
is_active?: boolean
is_superuser?: boolean
groups?: number[] // PaperlessGroup[]
groups?: number[] // Group[]
user_permissions?: string[]
inherited_permissions?: string[]
}