feat: V/R 유지보수 시스템 전환 및 대시보드 테이블 형태 완성
Some checks failed
Flutter Test & Quality Check / Test on macos-latest (push) Has been cancelled
Flutter Test & Quality Check / Test on ubuntu-latest (push) Has been cancelled
Flutter Test & Quality Check / Build APK (push) Has been cancelled

- V/R 시스템 완전 전환: WARRANTY/CONTRACT/INSPECTION → V(방문)/R(원격)
- 유지보수 대시보드 카드 → StandardDataTable 테이블 형태 전환
- "조회중..." 문제 해결: 백엔드 직접 필드 사용 (equipment_model, company_name)
- MaintenanceDto 신규 필드 추가: company_id, company_name, equipment_serial, equipment_model
- preloadEquipmentData 비활성화로 불필요한 equipment-history API 호출 제거
- CO-STAR 프레임워크 적용 및 CLAUDE.md v3.0 업데이트
- Flutter Analyze ERROR: 0 유지, 100% shadcn_ui 컴플라이언스

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-09-05 14:33:20 +09:00
parent 2c20999025
commit 519e1883a3
46 changed files with 7804 additions and 1034 deletions

View File

@@ -14,6 +14,8 @@ class EquipmentDto with _$EquipmentDto {
@JsonKey(name: 'models_id') required int modelsId,
@JsonKey(name: 'model_name', includeToJson: false) String? modelName, // JOIN 필드 - 응답에서만 제공
@JsonKey(name: 'vendor_name', includeToJson: false) String? vendorName, // JOIN 필드 - 응답에서만 제공
@JsonKey(name: 'warehouses_id') int? warehousesId,
@JsonKey(name: 'warehouses_name', includeToJson: false) String? warehousesName, // JOIN 필드 - 응답에서만 제공
@JsonKey(name: 'serial_number') required String serialNumber,
String? barcode,
@JsonKey(name: 'purchased_at') DateTime? purchasedAt,

View File

@@ -34,6 +34,11 @@ mixin _$EquipmentDto {
@JsonKey(name: 'vendor_name', includeToJson: false)
String? get vendorName =>
throw _privateConstructorUsedError; // JOIN 필드 - 응답에서만 제공
@JsonKey(name: 'warehouses_id')
int? get warehousesId => throw _privateConstructorUsedError;
@JsonKey(name: 'warehouses_name', includeToJson: false)
String? get warehousesName =>
throw _privateConstructorUsedError; // JOIN 필드 - 응답에서만 제공
@JsonKey(name: 'serial_number')
String get serialNumber => throw _privateConstructorUsedError;
String? get barcode => throw _privateConstructorUsedError;
@@ -78,6 +83,9 @@ abstract class $EquipmentDtoCopyWith<$Res> {
@JsonKey(name: 'models_id') int modelsId,
@JsonKey(name: 'model_name', includeToJson: false) String? modelName,
@JsonKey(name: 'vendor_name', includeToJson: false) String? vendorName,
@JsonKey(name: 'warehouses_id') int? warehousesId,
@JsonKey(name: 'warehouses_name', includeToJson: false)
String? warehousesName,
@JsonKey(name: 'serial_number') String serialNumber,
String? barcode,
@JsonKey(name: 'purchased_at') DateTime? purchasedAt,
@@ -112,6 +120,8 @@ class _$EquipmentDtoCopyWithImpl<$Res, $Val extends EquipmentDto>
Object? modelsId = null,
Object? modelName = freezed,
Object? vendorName = freezed,
Object? warehousesId = freezed,
Object? warehousesName = freezed,
Object? serialNumber = null,
Object? barcode = freezed,
Object? purchasedAt = freezed,
@@ -149,6 +159,14 @@ class _$EquipmentDtoCopyWithImpl<$Res, $Val extends EquipmentDto>
? _value.vendorName
: vendorName // ignore: cast_nullable_to_non_nullable
as String?,
warehousesId: freezed == warehousesId
? _value.warehousesId
: warehousesId // ignore: cast_nullable_to_non_nullable
as int?,
warehousesName: freezed == warehousesName
? _value.warehousesName
: warehousesName // ignore: cast_nullable_to_non_nullable
as String?,
serialNumber: null == serialNumber
? _value.serialNumber
: serialNumber // ignore: cast_nullable_to_non_nullable
@@ -212,6 +230,9 @@ abstract class _$$EquipmentDtoImplCopyWith<$Res>
@JsonKey(name: 'models_id') int modelsId,
@JsonKey(name: 'model_name', includeToJson: false) String? modelName,
@JsonKey(name: 'vendor_name', includeToJson: false) String? vendorName,
@JsonKey(name: 'warehouses_id') int? warehousesId,
@JsonKey(name: 'warehouses_name', includeToJson: false)
String? warehousesName,
@JsonKey(name: 'serial_number') String serialNumber,
String? barcode,
@JsonKey(name: 'purchased_at') DateTime? purchasedAt,
@@ -244,6 +265,8 @@ class __$$EquipmentDtoImplCopyWithImpl<$Res>
Object? modelsId = null,
Object? modelName = freezed,
Object? vendorName = freezed,
Object? warehousesId = freezed,
Object? warehousesName = freezed,
Object? serialNumber = null,
Object? barcode = freezed,
Object? purchasedAt = freezed,
@@ -281,6 +304,14 @@ class __$$EquipmentDtoImplCopyWithImpl<$Res>
? _value.vendorName
: vendorName // ignore: cast_nullable_to_non_nullable
as String?,
warehousesId: freezed == warehousesId
? _value.warehousesId
: warehousesId // ignore: cast_nullable_to_non_nullable
as int?,
warehousesName: freezed == warehousesName
? _value.warehousesName
: warehousesName // ignore: cast_nullable_to_non_nullable
as String?,
serialNumber: null == serialNumber
? _value.serialNumber
: serialNumber // ignore: cast_nullable_to_non_nullable
@@ -339,6 +370,9 @@ class _$EquipmentDtoImpl extends _EquipmentDto {
@JsonKey(name: 'models_id') required this.modelsId,
@JsonKey(name: 'model_name', includeToJson: false) this.modelName,
@JsonKey(name: 'vendor_name', includeToJson: false) this.vendorName,
@JsonKey(name: 'warehouses_id') this.warehousesId,
@JsonKey(name: 'warehouses_name', includeToJson: false)
this.warehousesName,
@JsonKey(name: 'serial_number') required this.serialNumber,
this.barcode,
@JsonKey(name: 'purchased_at') this.purchasedAt,
@@ -374,6 +408,13 @@ class _$EquipmentDtoImpl extends _EquipmentDto {
@override
@JsonKey(name: 'vendor_name', includeToJson: false)
final String? vendorName;
// JOIN 필드 - 응답에서만 제공
@override
@JsonKey(name: 'warehouses_id')
final int? warehousesId;
@override
@JsonKey(name: 'warehouses_name', includeToJson: false)
final String? warehousesName;
// JOIN 필드 - 응답에서만 제공
@override
@JsonKey(name: 'serial_number')
@@ -409,7 +450,7 @@ class _$EquipmentDtoImpl extends _EquipmentDto {
@override
String toString() {
return 'EquipmentDto(id: $id, companiesId: $companiesId, companyName: $companyName, modelsId: $modelsId, modelName: $modelName, vendorName: $vendorName, serialNumber: $serialNumber, barcode: $barcode, purchasedAt: $purchasedAt, purchasePrice: $purchasePrice, warrantyNumber: $warrantyNumber, warrantyStartedAt: $warrantyStartedAt, warrantyEndedAt: $warrantyEndedAt, remark: $remark, isDeleted: $isDeleted, registeredAt: $registeredAt, updatedAt: $updatedAt)';
return 'EquipmentDto(id: $id, companiesId: $companiesId, companyName: $companyName, modelsId: $modelsId, modelName: $modelName, vendorName: $vendorName, warehousesId: $warehousesId, warehousesName: $warehousesName, serialNumber: $serialNumber, barcode: $barcode, purchasedAt: $purchasedAt, purchasePrice: $purchasePrice, warrantyNumber: $warrantyNumber, warrantyStartedAt: $warrantyStartedAt, warrantyEndedAt: $warrantyEndedAt, remark: $remark, isDeleted: $isDeleted, registeredAt: $registeredAt, updatedAt: $updatedAt)';
}
@override
@@ -428,6 +469,10 @@ class _$EquipmentDtoImpl extends _EquipmentDto {
other.modelName == modelName) &&
(identical(other.vendorName, vendorName) ||
other.vendorName == vendorName) &&
(identical(other.warehousesId, warehousesId) ||
other.warehousesId == warehousesId) &&
(identical(other.warehousesName, warehousesName) ||
other.warehousesName == warehousesName) &&
(identical(other.serialNumber, serialNumber) ||
other.serialNumber == serialNumber) &&
(identical(other.barcode, barcode) || other.barcode == barcode) &&
@@ -452,25 +497,28 @@ class _$EquipmentDtoImpl extends _EquipmentDto {
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(
runtimeType,
id,
companiesId,
companyName,
modelsId,
modelName,
vendorName,
serialNumber,
barcode,
purchasedAt,
purchasePrice,
warrantyNumber,
warrantyStartedAt,
warrantyEndedAt,
remark,
isDeleted,
registeredAt,
updatedAt);
int get hashCode => Object.hashAll([
runtimeType,
id,
companiesId,
companyName,
modelsId,
modelName,
vendorName,
warehousesId,
warehousesName,
serialNumber,
barcode,
purchasedAt,
purchasePrice,
warrantyNumber,
warrantyStartedAt,
warrantyEndedAt,
remark,
isDeleted,
registeredAt,
updatedAt
]);
/// Create a copy of EquipmentDto
/// with the given fields replaced by the non-null parameter values.
@@ -499,6 +547,9 @@ abstract class _EquipmentDto extends EquipmentDto {
final String? modelName,
@JsonKey(name: 'vendor_name', includeToJson: false)
final String? vendorName,
@JsonKey(name: 'warehouses_id') final int? warehousesId,
@JsonKey(name: 'warehouses_name', includeToJson: false)
final String? warehousesName,
@JsonKey(name: 'serial_number') required final String serialNumber,
final String? barcode,
@JsonKey(name: 'purchased_at') final DateTime? purchasedAt,
@@ -536,6 +587,12 @@ abstract class _EquipmentDto extends EquipmentDto {
@JsonKey(name: 'vendor_name', includeToJson: false)
String? get vendorName; // JOIN 필드 - 응답에서만 제공
@override
@JsonKey(name: 'warehouses_id')
int? get warehousesId;
@override
@JsonKey(name: 'warehouses_name', includeToJson: false)
String? get warehousesName; // JOIN 필드 - 응답에서만 제공
@override
@JsonKey(name: 'serial_number')
String get serialNumber;
@override

View File

@@ -14,6 +14,8 @@ _$EquipmentDtoImpl _$$EquipmentDtoImplFromJson(Map<String, dynamic> json) =>
modelsId: (json['models_id'] as num).toInt(),
modelName: json['model_name'] as String?,
vendorName: json['vendor_name'] as String?,
warehousesId: (json['warehouses_id'] as num?)?.toInt(),
warehousesName: json['warehouses_name'] as String?,
serialNumber: json['serial_number'] as String,
barcode: json['barcode'] as String?,
purchasedAt: json['purchased_at'] == null
@@ -38,6 +40,7 @@ Map<String, dynamic> _$$EquipmentDtoImplToJson(_$EquipmentDtoImpl instance) =>
'id': instance.id,
'companies_id': instance.companiesId,
'models_id': instance.modelsId,
'warehouses_id': instance.warehousesId,
'serial_number': instance.serialNumber,
'barcode': instance.barcode,
'purchased_at': instance.purchasedAt?.toIso8601String(),