feat: implement backend label print agent system for remote label rendering and job management
Build and Push Multi-Platform Images / build-and-push (push) Successful in 33s
Build and Push Multi-Platform Images / build-and-push (push) Successful in 33s
This commit is contained in:
1 parent
0c94e7b999
commit
80f862a0c0
15 files changed
+995
-15
No files matched your search
@@ -24,6 +24,7 @@ import {
|
||||
InboxPostprocessingAction,
|
||||
CorrespondentEmailMapping,
|
||||
UserSettings,
|
||||
LabelPrintJob,
|
||||
} from './entities';
|
||||
|
||||
const entities = [
|
||||
@@ -49,6 +50,7 @@ const entities = [
|
||||
InboxPostprocessingAction,
|
||||
CorrespondentEmailMapping,
|
||||
UserSettings,
|
||||
LabelPrintJob,
|
||||
];
|
||||
|
||||
@Module({
|
||||
|
||||
@@ -8,6 +8,17 @@ import {
|
||||
|
||||
export type BarcodeActionType = 'SEND_TO_PAPERLESS' | 'SEND_BY_EMAIL';
|
||||
|
||||
export interface LabelInputField {
|
||||
name: string;
|
||||
label: string;
|
||||
type: 'text' | 'number' | 'date';
|
||||
}
|
||||
|
||||
export type LabelElement =
|
||||
| { type: 'text'; content: string; x: number; y: number; fontSize: number; bold?: boolean; align?: 'left' | 'center' | 'right'; maxWidth?: number }
|
||||
| { type: 'qr'; content: string; x: number; y: number; sizeMm: number }
|
||||
| { type: 'line'; x1: number; y1: number; x2: number; y2: number; lineWidth?: number };
|
||||
|
||||
@Entity('barcode_templates')
|
||||
export class BarcodeTemplate {
|
||||
@PrimaryGeneratedColumn()
|
||||
@@ -28,6 +39,31 @@ export class BarcodeTemplate {
|
||||
@Column({ type: 'json' })
|
||||
Actions!: BarcodeActionType[];
|
||||
|
||||
// ── Label-Konfiguration ─────────────────────────────────────
|
||||
@Column({ type: 'boolean', default: false })
|
||||
LabelEnabled!: boolean;
|
||||
|
||||
@Column({ type: 'int', nullable: true })
|
||||
LabelWidthMm!: number | null;
|
||||
|
||||
@Column({ type: 'int', nullable: true })
|
||||
LabelHeightMm!: number | null;
|
||||
|
||||
@Column({ type: 'json', nullable: true })
|
||||
LabelInputFields!: LabelInputField[] | null;
|
||||
|
||||
@Column({ type: 'varchar', length: 1000, nullable: true })
|
||||
LabelGetUrl!: string | null;
|
||||
|
||||
@Column({ type: 'varchar', length: 1000, nullable: true })
|
||||
LabelPrintedUrl!: string | null;
|
||||
|
||||
@Column({ type: 'varchar', length: 1000, nullable: true })
|
||||
LabelReleaseUrl!: string | null;
|
||||
|
||||
@Column({ type: 'json', nullable: true })
|
||||
LabelLayout!: LabelElement[] | null;
|
||||
|
||||
@CreateDateColumn()
|
||||
CreatedAt!: Date;
|
||||
|
||||
|
||||
@@ -20,3 +20,4 @@ export { InboxDocument } from './inbox-document.entity';
|
||||
export { InboxPostprocessingAction } from './inbox-postprocessing-action.entity';
|
||||
export { CorrespondentEmailMapping } from './correspondent-email-mapping.entity';
|
||||
export { UserSettings } from './user-settings.entity';
|
||||
export { LabelPrintJob } from './label-print-job.entity';
|
||||
@@ -0,0 +1,51 @@
|
||||
import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
} from 'typeorm';
|
||||
|
||||
@Entity('label_print_jobs')
|
||||
export class LabelPrintJob {
|
||||
@PrimaryGeneratedColumn()
|
||||
Id!: number;
|
||||
|
||||
@Column({ type: 'varchar', length: 20, default: 'pending' })
|
||||
Status!: 'pending' | 'printed' | 'error';
|
||||
|
||||
@Column({ type: 'mediumblob', nullable: true })
|
||||
LabelImageData!: Buffer | null;
|
||||
|
||||
@Column({ type: 'int' })
|
||||
LabelWidthMm!: number;
|
||||
|
||||
@Column({ type: 'int' })
|
||||
LabelHeightMm!: number;
|
||||
|
||||
@Column({ type: 'int', nullable: true })
|
||||
BarcodeTemplateId!: number | null;
|
||||
|
||||
@Column({ type: 'json', nullable: true })
|
||||
LabelVariables!: Record<string, string> | null;
|
||||
|
||||
@Column({ type: 'datetime', nullable: true })
|
||||
LockedAt!: Date | null;
|
||||
|
||||
@Column({ type: 'varchar', length: 255, nullable: true })
|
||||
LockedByAgent!: string | null;
|
||||
|
||||
@Column({ type: 'datetime', nullable: true })
|
||||
PrintedAt!: Date | null;
|
||||
|
||||
@Column({ type: 'varchar', length: 255, nullable: true })
|
||||
PrintedByAgent!: string | null;
|
||||
|
||||
@Column({ type: 'varchar', length: 255, nullable: true })
|
||||
PrinterName!: string | null;
|
||||
|
||||
@Column({ type: 'text', nullable: true })
|
||||
ErrorMessage!: string | null;
|
||||
|
||||
@CreateDateColumn()
|
||||
CreatedAt!: Date;
|
||||
}
|
||||
Reference in new issue
Block a user