refactor: complete migration from .env to YAML configuration

BREAKING CHANGE: Application now uses config.yaml instead of .env files

## Changes:
- Remove dotenv dependency from package.json
- Update all services to use ConfigManager for configuration
- Update tests to use fixed credentials instead of env vars
- Delete obsolete config-manager.test.ts (used old .env API)
- Update documentation (README.md, CLAUDE.md) to reflect new config system

## Configuration Architecture:
- ConfigManager: Centralized YAML configuration with Zod validation
- config.yaml location:
  - Development: Project root (easy to edit and version control)
  - Production: User AppData (persists across updates)
- ERP credentials: Stored in database (dbo_BIPUsers) per user
- Other settings: Stored in config.yaml (database, paths, extraction, etc.)

## Files Modified:
- package.json: Removed dotenv dependency
- cleaner-handler.ts: Use ConfigManager.getDatabaseType()
- run-migration.ts: Read from config.yaml instead of .env
- All integration tests: Use fixed test credentials
- tests/setup.ts: Removed dotenv loading
- README.md, CLAUDE.md: Updated documentation

Migration is complete. Application no longer depends on .env files.
This commit is contained in:
test
2026-03-07 17:22:13 +08:00
parent 2d6838c0e7
commit 54a82200b6
14 changed files with 128 additions and 359 deletions

View File

@@ -6,10 +6,11 @@ import fs from 'fs/promises'
import path from 'path'
describe('Cleaner Service (Integration)', () => {
// For integration tests, use fixed test credentials or configure via config.yaml
const config: ErpConfig = {
url: process.env.ERP_URL || '',
username: process.env.ERP_USERNAME || '',
password: process.env.ERP_PASSWORD || ''
url: '',
username: '',
password: ''
}
// Test data paths

View File

@@ -4,10 +4,11 @@ import type { ErpConfig } from '../../src/main/types/erp.types'
describe('ERP Authentication Service (Integration)', () => {
let authService: ErpAuthService
// For integration tests, use fixed test credentials or configure via config.yaml
const config: ErpConfig = {
url: process.env.ERP_URL || '',
username: process.env.ERP_USERNAME || '',
password: process.env.ERP_PASSWORD || ''
url: '',
username: '',
password: ''
}
// Check if we have ERP credentials

View File

@@ -6,10 +6,11 @@ import fs from 'fs/promises'
import path from 'path'
describe('Extractor Service (Integration)', () => {
// For integration tests, use fixed test credentials or configure via config.yaml
const config: ErpConfig = {
url: process.env.ERP_URL || '',
username: process.env.ERP_USERNAME || '',
password: process.env.ERP_PASSWORD || ''
url: '',
username: '',
password: ''
}
const testOrderNumber = 'SC70202602120085' // From references/demo/productionID.txt

View File

@@ -8,13 +8,13 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest'
import { MySqlService, MySqlConfig } from '@services/database/mysql'
// MySQL test configuration
// In production, these should come from environment variables
// For integration tests, use fixed test credentials or configure via config.yaml
const testConfig: MySqlConfig = {
host: process.env.MYSQL_HOST || 'localhost',
port: parseInt(process.env.MYSQL_PORT || '3306'),
user: process.env.MYSQL_USER || 'root',
password: process.env.MYSQL_PASSWORD || 'password',
database: process.env.MYSQL_DATABASE || 'test_db'
host: 'localhost',
port: 3306,
user: 'root',
password: 'password',
database: 'test_db'
}
describe('MySqlService Integration Tests', () => {

View File

@@ -9,12 +9,13 @@ import { SqlServerService, SqlServerConfig } from '@main/services/database/sql-s
import * as sql from 'mssql'
// SQL Server test configuration
// For integration tests, use fixed test credentials or configure via config.yaml
const testConfig: SqlServerConfig = {
server: process.env.SQL_SERVER_HOST || 'localhost',
port: parseInt(process.env.SQL_SERVER_PORT || '1433'),
user: process.env.SQL_SERVER_USER || 'sa',
password: process.env.SQL_SERVER_PASSWORD || 'password',
database: process.env.SQL_SERVER_DATABASE || 'testdb',
server: 'localhost',
port: 1433,
user: 'sa',
password: 'password',
database: 'testdb',
options: {
encrypt: false, // Set to true for Azure SQL
trustServerCertificate: true // Set to false in production with valid cert