backup: 사용하지 않는 파일 삭제 전 복구 지점

- 전체 371개 파일 중 82개 미사용 파일 식별
- Phase 1: 33개 파일 삭제 예정 (100% 안전)
- Phase 2: 30개 파일 삭제 검토 예정
- Phase 3: 19개 파일 수동 검토 예정

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-09-02 19:51:40 +09:00
parent 650cd4be55
commit c419f8f458
149 changed files with 12934 additions and 3644 deletions

View File

@@ -2,12 +2,14 @@ import 'package:flutter/material.dart';
import 'package:injectable/injectable.dart';
import '../../../data/models/equipment/equipment_dto.dart';
import '../../../data/models/company/company_dto.dart';
import '../../../data/models/model_dto.dart';
import '../../../data/models/model/model_dto.dart';
import '../../../data/models/vendor_dto.dart';
import '../../../domain/usecases/equipment/create_equipment_usecase.dart';
import '../../../domain/usecases/equipment/update_equipment_usecase.dart';
import '../../../domain/usecases/equipment/get_equipment_detail_usecase.dart';
import '../../../domain/usecases/company/get_companies_usecase.dart';
import '../../../domain/usecases/model_usecase.dart';
import '../../../domain/usecases/models/get_models_usecase.dart';
import '../../../domain/usecases/vendor_usecase.dart';
import '../../../core/errors/failures.dart';
/// 장비 폼 컨트롤러 (생성/수정)
@@ -18,19 +20,22 @@ class EquipmentFormController extends ChangeNotifier {
final UpdateEquipmentUseCase _updateEquipmentUseCase;
final GetEquipmentDetailUseCase _getEquipmentDetailUseCase;
final GetCompaniesUseCase _getCompaniesUseCase;
final ModelUseCase _modelUseCase;
final GetModelsUseCase _getModelsUseCase;
final VendorUseCase _vendorUseCase;
EquipmentFormController(
this._createEquipmentUseCase,
this._updateEquipmentUseCase,
this._getEquipmentDetailUseCase,
this._getCompaniesUseCase,
this._modelUseCase,
this._getModelsUseCase,
this._vendorUseCase,
);
// 상태 관리
bool _isLoading = false;
bool _isLoadingCompanies = false;
bool _isLoadingVendors = false;
bool _isLoadingModels = false;
bool _isSaving = false;
String? _error;
@@ -41,11 +46,13 @@ class EquipmentFormController extends ChangeNotifier {
// 드롭다운 데이터
List<CompanyDto> _companies = [];
List<VendorDto> _vendors = [];
List<ModelDto> _models = [];
List<ModelDto> _filteredModels = [];
// 선택된 값
int? _selectedCompanyId;
int? _selectedVendorId;
int? _selectedModelId;
// 폼 컨트롤러들
@@ -57,12 +64,13 @@ class EquipmentFormController extends ChangeNotifier {
// 날짜 필드들
DateTime? _purchasedAt;
DateTime _warrantyStartedAt = DateTime.now();
DateTime _warrantyEndedAt = DateTime.now().add(const Duration(days: 365));
DateTime _warrantyStartedAt = DateTime.now().toUtc();
DateTime _warrantyEndedAt = DateTime.now().toUtc().add(const Duration(days: 365));
// Getters
bool get isLoading => _isLoading;
bool get isLoadingCompanies => _isLoadingCompanies;
bool get isLoadingVendors => _isLoadingVendors;
bool get isLoadingModels => _isLoadingModels;
bool get isSaving => _isSaving;
String? get error => _error;
@@ -70,9 +78,11 @@ class EquipmentFormController extends ChangeNotifier {
bool get isEditMode => _equipmentId != null;
List<CompanyDto> get companies => _companies;
List<VendorDto> get vendors => _vendors;
List<ModelDto> get filteredModels => _filteredModels;
int? get selectedCompanyId => _selectedCompanyId;
int? get selectedVendorId => _selectedVendorId;
int? get selectedModelId => _selectedModelId;
DateTime? get purchasedAt => _purchasedAt;
@@ -105,10 +115,11 @@ class EquipmentFormController extends ChangeNotifier {
}
}
/// 초기 데이터 로드 (회사, 모델)
/// 초기 데이터 로드 (회사, 제조사, 모델)
Future<void> _loadInitialData() async {
await Future.wait([
_loadCompanies(),
_loadVendors(),
_loadModels(),
]);
}
@@ -142,14 +153,41 @@ class EquipmentFormController extends ChangeNotifier {
}
}
/// 제조사 목록 로드
Future<void> _loadVendors() async {
_isLoadingVendors = true;
notifyListeners();
try {
final vendorResponse = await _vendorUseCase.getVendors(limit: 1000); // 모든 제조사 가져오기
_vendors = (vendorResponse.items as List)
.whereType<VendorDto>()
.where((vendor) => vendor.isActive)
.toList()
..sort((a, b) => a.name.compareTo(b.name));
} catch (e) {
_error = '제조사 목록을 불러오는데 실패했습니다: $e';
} finally {
_isLoadingVendors = false;
notifyListeners();
}
}
/// 모델 목록 로드
Future<void> _loadModels() async {
_isLoadingModels = true;
notifyListeners();
try {
_models = await _modelUseCase.getModels();
_filteredModels = _models;
const params = GetModelsParams(page: 1, perPage: 1000);
final result = await _getModelsUseCase(params);
result.fold(
(failure) => throw Exception(failure.message),
(modelResponse) {
_models = modelResponse.items;
_filteredModels = _models;
},
);
} catch (e) {
_error = '모델 목록을 불러오는데 실패했습니다: $e';
} finally {
@@ -184,9 +222,9 @@ class EquipmentFormController extends ChangeNotifier {
warrantyNumberController.text = equipment.warrantyNumber;
remarkController.text = equipment.remark ?? '';
_purchasedAt = equipment.purchasedAt;
_warrantyStartedAt = equipment.warrantyStartedAt;
_warrantyEndedAt = equipment.warrantyEndedAt;
_purchasedAt = equipment.purchasedAt?.toUtc(); // ✅ UTC 타임존으로 변환
_warrantyStartedAt = equipment.warrantyStartedAt.toUtc(); // ✅ UTC 타임존으로 변환
_warrantyEndedAt = equipment.warrantyEndedAt.toUtc(); // ✅ UTC 타임존으로 변환
// 선택된 회사에 따라 모델 필터링
_filterModelsByCompany(_selectedCompanyId);
@@ -197,8 +235,14 @@ class EquipmentFormController extends ChangeNotifier {
/// 회사 선택
void selectCompany(int? companyId) {
_selectedCompanyId = companyId;
notifyListeners();
}
/// 제조사 선택 (제조사별 모델 필터링 활성화)
void selectVendor(int? vendorId) {
_selectedVendorId = vendorId;
_selectedModelId = null; // 모델 선택 초기화
_filterModelsByCompany(companyId);
_filterModelsByVendor(vendorId); // 실제 제조사별 필터링 실행
notifyListeners();
}
@@ -208,13 +252,23 @@ class EquipmentFormController extends ChangeNotifier {
notifyListeners();
}
/// 사별 모델 필터링
/// 제조사별 모델 필터링 (실제 구현)
void _filterModelsByVendor(int? vendorId) {
if (vendorId == null) {
_filteredModels = _models;
} else {
// vendorsId 기준으로 실제 필터링 구현
_filteredModels = _models.where((model) => model.vendorsId == vendorId).toList();
}
notifyListeners();
}
/// 레거시 호환성을 위한 Company 기반 필터링 (현재는 전체 모델 표시)
void _filterModelsByCompany(int? companyId) {
if (companyId == null) {
_filteredModels = _models;
} else {
// 실제로는 vendor로 필터링해야 하지만,
// 현재 구조에서는 모든 모델을 보여주고 사용자가 선택하도록 함
// 회사별 모델 필터링은 현재 구조에서는 불가능 (모든 모델 표시)
_filteredModels = _models;
}
notifyListeners();
@@ -222,13 +276,13 @@ class EquipmentFormController extends ChangeNotifier {
/// 구매일 선택
void setPurchasedAt(DateTime? date) {
_purchasedAt = date;
_purchasedAt = date?.toUtc(); // ✅ UTC 타임존으로 변환
notifyListeners();
}
/// 워런티 시작일 선택
void setWarrantyStartedAt(DateTime date) {
_warrantyStartedAt = date;
_warrantyStartedAt = date.toUtc(); // ✅ UTC 타임존으로 변환
// 시작일이 종료일보다 늦으면 종료일을 1년 후로 설정
if (_warrantyStartedAt.isAfter(_warrantyEndedAt)) {
_warrantyEndedAt = _warrantyStartedAt.add(const Duration(days: 365));
@@ -238,7 +292,7 @@ class EquipmentFormController extends ChangeNotifier {
/// 워런티 종료일 선택
void setWarrantyEndedAt(DateTime date) {
_warrantyEndedAt = date;
_warrantyEndedAt = date.toUtc(); // ✅ UTC 타임존으로 변환
notifyListeners();
}
@@ -298,17 +352,17 @@ class EquipmentFormController extends ChangeNotifier {
/// 장비 생성
Future<bool> _createEquipment() async {
final request = EquipmentRequestDto(
companiesId: _selectedCompanyId!,
modelsId: _selectedModelId!,
companiesId: _selectedCompanyId, // 백엔드: Option<i32> - null 허용
modelsId: _selectedModelId, // 백엔드: Option<i32> - null 허용
serialNumber: serialNumberController.text.trim(),
barcode: barcodeController.text.trim().isNotEmpty
? barcodeController.text.trim()
: null,
purchasedAt: _purchasedAt,
purchasedAt: (_purchasedAt ?? DateTime.now()).toUtc(), // 백엔드: 필수 필드 - 기본값 제공
purchasePrice: int.tryParse(purchasePriceController.text) ?? 0,
warrantyNumber: warrantyNumberController.text.trim(),
warrantyStartedAt: _warrantyStartedAt,
warrantyEndedAt: _warrantyEndedAt,
warrantyStartedAt: _warrantyStartedAt.toUtc(), // ✅ UTC 타임존으로 변환
warrantyEndedAt: _warrantyEndedAt.toUtc(), // ✅ UTC 타임존으로 변환
remark: remarkController.text.trim().isNotEmpty
? remarkController.text.trim()
: null,
@@ -337,11 +391,11 @@ class EquipmentFormController extends ChangeNotifier {
barcode: barcodeController.text.trim().isNotEmpty
? barcodeController.text.trim()
: null,
purchasedAt: _purchasedAt,
purchasedAt: _purchasedAt?.toUtc(), // ✅ UTC 타임존으로 변환
purchasePrice: int.tryParse(purchasePriceController.text) ?? 0,
warrantyNumber: warrantyNumberController.text.trim(),
warrantyStartedAt: _warrantyStartedAt,
warrantyEndedAt: _warrantyEndedAt,
warrantyStartedAt: _warrantyStartedAt.toUtc(), // ✅ UTC 타임존으로 변환
warrantyEndedAt: _warrantyEndedAt.toUtc(), // ✅ UTC 타임존으로 변환
remark: remarkController.text.trim().isNotEmpty
? remarkController.text.trim()
: null,
@@ -376,8 +430,8 @@ class EquipmentFormController extends ChangeNotifier {
remarkController.clear();
_purchasedAt = null;
_warrantyStartedAt = DateTime.now();
_warrantyEndedAt = DateTime.now().add(const Duration(days: 365));
_warrantyStartedAt = DateTime.now().toUtc(); // ✅ UTC 타임존으로 변환
_warrantyEndedAt = DateTime.now().toUtc().add(const Duration(days: 365)); // ✅ UTC 타임존으로 변환
_error = null;
}