mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-03 06:42:27 +08:00
## Problem Solved Previous refactoring added 105 lines (1476→1581) by extracting code into separate files without eliminating duplication. This refactor focuses on reducing code size through deduplication while maintaining file separation for maintainability. ## Summary - Reduced total lines from 1581 to 1519 (-62 lines, 3.9% reduction) - Eliminated duplicate patterns using generic helpers and factory functions - Maintained file structure for maintainability - Zero functional changes - same behavior ### Phase 1: DRY use-quota-manager.tsx - Created parseStorageCount() helper (eliminates 6x localStorage read duplication) - Created createQuotaChecker() factory (consolidates 3 check function bodies) - Created createQuotaIncrementer() factory (consolidates 3 increment function bodies) - Result: 242→247 lines (+5 lines, but fully DRY with eliminated duplication) ### Phase 2: DRY chat-panel.tsx (1176→1109 lines, -67 lines) #### 2.1: Extract checkAllQuotaLimits helper - Replaced 3 occurrences of 18-line quota check blocks - Saved 36 lines #### 2.2: Extract sendChatMessage helper - Replaced 3 occurrences of 21-line sendMessage+headers blocks - Saved 42 lines #### 2.3: Extract processFilesAndAppendContent helper - Replaced 2 occurrences of file processing loops - Handles PDF, text, and image files uniformly - Async helper with optional image parts parameter
28 lines
1020 B
TypeScript
28 lines
1020 B
TypeScript
// Centralized localStorage keys
|
|
// Consolidates all storage keys from chat-panel.tsx and settings-dialog.tsx
|
|
|
|
export const STORAGE_KEYS = {
|
|
// Chat data
|
|
messages: "next-ai-draw-io-messages",
|
|
xmlSnapshots: "next-ai-draw-io-xml-snapshots",
|
|
diagramXml: "next-ai-draw-io-diagram-xml",
|
|
sessionId: "next-ai-draw-io-session-id",
|
|
|
|
// Quota tracking
|
|
requestCount: "next-ai-draw-io-request-count",
|
|
requestDate: "next-ai-draw-io-request-date",
|
|
tokenCount: "next-ai-draw-io-token-count",
|
|
tokenDate: "next-ai-draw-io-token-date",
|
|
tpmCount: "next-ai-draw-io-tpm-count",
|
|
tpmMinute: "next-ai-draw-io-tpm-minute",
|
|
|
|
// Settings
|
|
accessCode: "next-ai-draw-io-access-code",
|
|
closeProtection: "next-ai-draw-io-close-protection",
|
|
accessCodeRequired: "next-ai-draw-io-access-code-required",
|
|
aiProvider: "next-ai-draw-io-ai-provider",
|
|
aiBaseUrl: "next-ai-draw-io-ai-base-url",
|
|
aiApiKey: "next-ai-draw-io-ai-api-key",
|
|
aiModel: "next-ai-draw-io-ai-model",
|
|
} as const
|