고객사 목록 쿼리스트링 연동 및 공통 JSON 파서 도입

This commit is contained in:
JiWoong Sul
2025-09-25 20:13:46 +09:00
parent 8a6ad1e81b
commit 900990c46b
27 changed files with 1458 additions and 176 deletions

View File

@@ -9,6 +9,8 @@ enum CustomerTypeFilter { all, partner, general }
enum CustomerStatusFilter { all, activeOnly, inactiveOnly }
class CustomerController extends ChangeNotifier {
static const int defaultPageSize = 20;
CustomerController({required CustomerRepository repository})
: _repository = repository;
@@ -20,6 +22,7 @@ class CustomerController extends ChangeNotifier {
String _query = '';
CustomerTypeFilter _typeFilter = CustomerTypeFilter.all;
CustomerStatusFilter _statusFilter = CustomerStatusFilter.all;
int _pageSize = defaultPageSize;
String? _errorMessage;
PaginatedResult<Customer>? get result => _result;
@@ -28,6 +31,7 @@ class CustomerController extends ChangeNotifier {
String get query => _query;
CustomerTypeFilter get typeFilter => _typeFilter;
CustomerStatusFilter get statusFilter => _statusFilter;
int get pageSize => _pageSize;
String? get errorMessage => _errorMessage;
Future<void> fetch({int page = 1}) async {
@@ -60,13 +64,16 @@ class CustomerController extends ChangeNotifier {
final response = await _repository.list(
page: page,
pageSize: _result?.pageSize ?? 20,
pageSize: _pageSize,
query: _query.isEmpty ? null : _query,
isPartner: isPartner,
isGeneral: isGeneral,
isActive: isActive,
);
_result = response;
if (response.pageSize > 0 && response.pageSize != _pageSize) {
_pageSize = response.pageSize;
}
} catch (e) {
_errorMessage = e.toString();
} finally {
@@ -76,20 +83,37 @@ class CustomerController extends ChangeNotifier {
}
void updateQuery(String value) {
if (_query == value) {
return;
}
_query = value;
notifyListeners();
}
void updateTypeFilter(CustomerTypeFilter filter) {
if (_typeFilter == filter) {
return;
}
_typeFilter = filter;
notifyListeners();
}
void updateStatusFilter(CustomerStatusFilter filter) {
if (_statusFilter == filter) {
return;
}
_statusFilter = filter;
notifyListeners();
}
void updatePageSize(int size) {
if (size <= 0 || _pageSize == size) {
return;
}
_pageSize = size;
notifyListeners();
}
Future<Customer?> create(CustomerInput input) async {
_setSubmitting(true);
try {