feat: 소프트 딜리트 기능 전면 구현 완료
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

## 주요 변경사항
- Company, Equipment, License, Warehouse Location 모든 화면에 소프트 딜리트 구현
- 관리자 권한으로 삭제된 데이터 조회 가능 (includeInactive 파라미터)
- 데이터 무결성 보장을 위한 논리 삭제 시스템 완성

## 기능 개선
- 각 리스트 컨트롤러에 toggleIncludeInactive() 메서드 추가
- UI에 "비활성 포함" 체크박스 추가 (관리자 전용)
- API 데이터소스에 includeInactive 파라미터 지원

## 문서 정리
- 불필요한 문서 파일 제거 및 재구성
- CLAUDE.md 프로젝트 상태 업데이트 (진행률 80%)
- 테스트 결과 문서화 (test20250812v01.md)

## UI 컴포넌트
- Equipment 화면 위젯 모듈화 (custom_dropdown_field, equipment_basic_info_section)
- 폼 유효성 검증 강화

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-08-12 20:02:54 +09:00
parent 1645182b38
commit e7860ae028
48 changed files with 2096 additions and 1242 deletions

View File

@@ -13,6 +13,8 @@ class CreateCompanyRequest with _$CreateCompanyRequest {
@JsonKey(name: 'contact_phone') required String contactPhone,
@JsonKey(name: 'contact_email') required String contactEmail,
@JsonKey(name: 'company_types') @Default([]) List<String> companyTypes,
@JsonKey(name: 'is_partner') @Default(false) bool isPartner,
@JsonKey(name: 'is_customer') @Default(true) bool isCustomer,
String? remark,
}) = _CreateCompanyRequest;

View File

@@ -32,6 +32,10 @@ mixin _$CreateCompanyRequest {
String get contactEmail => throw _privateConstructorUsedError;
@JsonKey(name: 'company_types')
List<String> get companyTypes => throw _privateConstructorUsedError;
@JsonKey(name: 'is_partner')
bool get isPartner => throw _privateConstructorUsedError;
@JsonKey(name: 'is_customer')
bool get isCustomer => throw _privateConstructorUsedError;
String? get remark => throw _privateConstructorUsedError;
/// Serializes this CreateCompanyRequest to a JSON map.
@@ -58,6 +62,8 @@ abstract class $CreateCompanyRequestCopyWith<$Res> {
@JsonKey(name: 'contact_phone') String contactPhone,
@JsonKey(name: 'contact_email') String contactEmail,
@JsonKey(name: 'company_types') List<String> companyTypes,
@JsonKey(name: 'is_partner') bool isPartner,
@JsonKey(name: 'is_customer') bool isCustomer,
String? remark});
}
@@ -84,6 +90,8 @@ class _$CreateCompanyRequestCopyWithImpl<$Res,
Object? contactPhone = null,
Object? contactEmail = null,
Object? companyTypes = null,
Object? isPartner = null,
Object? isCustomer = null,
Object? remark = freezed,
}) {
return _then(_value.copyWith(
@@ -115,6 +123,14 @@ class _$CreateCompanyRequestCopyWithImpl<$Res,
? _value.companyTypes
: companyTypes // ignore: cast_nullable_to_non_nullable
as List<String>,
isPartner: null == isPartner
? _value.isPartner
: isPartner // ignore: cast_nullable_to_non_nullable
as bool,
isCustomer: null == isCustomer
? _value.isCustomer
: isCustomer // ignore: cast_nullable_to_non_nullable
as bool,
remark: freezed == remark
? _value.remark
: remark // ignore: cast_nullable_to_non_nullable
@@ -139,6 +155,8 @@ abstract class _$$CreateCompanyRequestImplCopyWith<$Res>
@JsonKey(name: 'contact_phone') String contactPhone,
@JsonKey(name: 'contact_email') String contactEmail,
@JsonKey(name: 'company_types') List<String> companyTypes,
@JsonKey(name: 'is_partner') bool isPartner,
@JsonKey(name: 'is_customer') bool isCustomer,
String? remark});
}
@@ -162,6 +180,8 @@ class __$$CreateCompanyRequestImplCopyWithImpl<$Res>
Object? contactPhone = null,
Object? contactEmail = null,
Object? companyTypes = null,
Object? isPartner = null,
Object? isCustomer = null,
Object? remark = freezed,
}) {
return _then(_$CreateCompanyRequestImpl(
@@ -193,6 +213,14 @@ class __$$CreateCompanyRequestImplCopyWithImpl<$Res>
? _value._companyTypes
: companyTypes // ignore: cast_nullable_to_non_nullable
as List<String>,
isPartner: null == isPartner
? _value.isPartner
: isPartner // ignore: cast_nullable_to_non_nullable
as bool,
isCustomer: null == isCustomer
? _value.isCustomer
: isCustomer // ignore: cast_nullable_to_non_nullable
as bool,
remark: freezed == remark
? _value.remark
: remark // ignore: cast_nullable_to_non_nullable
@@ -213,6 +241,8 @@ class _$CreateCompanyRequestImpl implements _CreateCompanyRequest {
@JsonKey(name: 'contact_email') required this.contactEmail,
@JsonKey(name: 'company_types')
final List<String> companyTypes = const [],
@JsonKey(name: 'is_partner') this.isPartner = false,
@JsonKey(name: 'is_customer') this.isCustomer = true,
this.remark})
: _companyTypes = companyTypes;
@@ -244,12 +274,18 @@ class _$CreateCompanyRequestImpl implements _CreateCompanyRequest {
return EqualUnmodifiableListView(_companyTypes);
}
@override
@JsonKey(name: 'is_partner')
final bool isPartner;
@override
@JsonKey(name: 'is_customer')
final bool isCustomer;
@override
final String? remark;
@override
String toString() {
return 'CreateCompanyRequest(name: $name, address: $address, contactName: $contactName, contactPosition: $contactPosition, contactPhone: $contactPhone, contactEmail: $contactEmail, companyTypes: $companyTypes, remark: $remark)';
return 'CreateCompanyRequest(name: $name, address: $address, contactName: $contactName, contactPosition: $contactPosition, contactPhone: $contactPhone, contactEmail: $contactEmail, companyTypes: $companyTypes, isPartner: $isPartner, isCustomer: $isCustomer, remark: $remark)';
}
@override
@@ -269,6 +305,10 @@ class _$CreateCompanyRequestImpl implements _CreateCompanyRequest {
other.contactEmail == contactEmail) &&
const DeepCollectionEquality()
.equals(other._companyTypes, _companyTypes) &&
(identical(other.isPartner, isPartner) ||
other.isPartner == isPartner) &&
(identical(other.isCustomer, isCustomer) ||
other.isCustomer == isCustomer) &&
(identical(other.remark, remark) || other.remark == remark));
}
@@ -283,6 +323,8 @@ class _$CreateCompanyRequestImpl implements _CreateCompanyRequest {
contactPhone,
contactEmail,
const DeepCollectionEquality().hash(_companyTypes),
isPartner,
isCustomer,
remark);
/// Create a copy of CreateCompanyRequest
@@ -312,6 +354,8 @@ abstract class _CreateCompanyRequest implements CreateCompanyRequest {
@JsonKey(name: 'contact_phone') required final String contactPhone,
@JsonKey(name: 'contact_email') required final String contactEmail,
@JsonKey(name: 'company_types') final List<String> companyTypes,
@JsonKey(name: 'is_partner') final bool isPartner,
@JsonKey(name: 'is_customer') final bool isCustomer,
final String? remark}) = _$CreateCompanyRequestImpl;
factory _CreateCompanyRequest.fromJson(Map<String, dynamic> json) =
@@ -337,6 +381,12 @@ abstract class _CreateCompanyRequest implements CreateCompanyRequest {
@JsonKey(name: 'company_types')
List<String> get companyTypes;
@override
@JsonKey(name: 'is_partner')
bool get isPartner;
@override
@JsonKey(name: 'is_customer')
bool get isCustomer;
@override
String? get remark;
/// Create a copy of CreateCompanyRequest

View File

@@ -19,6 +19,8 @@ _$CreateCompanyRequestImpl _$$CreateCompanyRequestImplFromJson(
?.map((e) => e as String)
.toList() ??
const [],
isPartner: json['is_partner'] as bool? ?? false,
isCustomer: json['is_customer'] as bool? ?? true,
remark: json['remark'] as String?,
);
@@ -32,6 +34,8 @@ Map<String, dynamic> _$$CreateCompanyRequestImplToJson(
'contact_phone': instance.contactPhone,
'contact_email': instance.contactEmail,
'company_types': instance.companyTypes,
'is_partner': instance.isPartner,
'is_customer': instance.isCustomer,
'remark': instance.remark,
};