feat: 결재·마스터 실연동 업데이트
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:superport_v2/core/common/models/paginated_result.dart';
|
||||
import 'package:superport_v2/core/network/failure.dart';
|
||||
|
||||
import '../../../../../core/permissions/permission_manager.dart';
|
||||
import '../../application/permission_synchronizer.dart';
|
||||
import '../../../group/domain/entities/group.dart';
|
||||
import '../../../group/domain/repositories/group_repository.dart';
|
||||
import '../../../menu/domain/entities/menu.dart';
|
||||
@@ -20,13 +23,16 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
required GroupPermissionRepository permissionRepository,
|
||||
required GroupRepository groupRepository,
|
||||
required MenuRepository menuRepository,
|
||||
PermissionManager? permissionManager,
|
||||
}) : _permissionRepository = permissionRepository,
|
||||
_groupRepository = groupRepository,
|
||||
_menuRepository = menuRepository;
|
||||
_menuRepository = menuRepository,
|
||||
_permissionManager = permissionManager;
|
||||
|
||||
final GroupPermissionRepository _permissionRepository;
|
||||
final GroupRepository _groupRepository;
|
||||
final MenuRepository _menuRepository;
|
||||
final PermissionManager? _permissionManager;
|
||||
|
||||
PaginatedResult<GroupPermission>? _result;
|
||||
bool _isLoading = false;
|
||||
@@ -63,8 +69,9 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
_groups
|
||||
..clear()
|
||||
..addAll(response.items);
|
||||
} catch (e) {
|
||||
_errorMessage = e.toString();
|
||||
} catch (error) {
|
||||
final failure = Failure.from(error);
|
||||
_errorMessage = failure.describe();
|
||||
} finally {
|
||||
_isLoadingGroups = false;
|
||||
notifyListeners();
|
||||
@@ -84,8 +91,9 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
_menus
|
||||
..clear()
|
||||
..addAll(response.items);
|
||||
} catch (e) {
|
||||
_errorMessage = e.toString();
|
||||
} catch (error) {
|
||||
final failure = Failure.from(error);
|
||||
_errorMessage = failure.describe();
|
||||
} finally {
|
||||
_isLoadingMenus = false;
|
||||
notifyListeners();
|
||||
@@ -112,8 +120,9 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
includeDeleted: _includeDeleted,
|
||||
);
|
||||
_result = response;
|
||||
} catch (e) {
|
||||
_errorMessage = e.toString();
|
||||
} catch (error) {
|
||||
final failure = Failure.from(error);
|
||||
_errorMessage = failure.describe();
|
||||
} finally {
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
@@ -150,9 +159,11 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
try {
|
||||
final created = await _permissionRepository.create(input);
|
||||
await fetch(page: 1);
|
||||
await _syncPermissionsForGroup(input.groupId);
|
||||
return created;
|
||||
} catch (e) {
|
||||
_errorMessage = e.toString();
|
||||
} catch (error) {
|
||||
final failure = Failure.from(error);
|
||||
_errorMessage = failure.describe();
|
||||
notifyListeners();
|
||||
return null;
|
||||
} finally {
|
||||
@@ -166,9 +177,11 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
try {
|
||||
final updated = await _permissionRepository.update(id, input);
|
||||
await fetch(page: _result?.page ?? 1);
|
||||
await _syncPermissionsForGroup(input.groupId);
|
||||
return updated;
|
||||
} catch (e) {
|
||||
_errorMessage = e.toString();
|
||||
} catch (error) {
|
||||
final failure = Failure.from(error);
|
||||
_errorMessage = failure.describe();
|
||||
notifyListeners();
|
||||
return null;
|
||||
} finally {
|
||||
@@ -180,11 +193,16 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
Future<bool> delete(int id) async {
|
||||
_setSubmitting(true);
|
||||
try {
|
||||
final groupId = _resolveGroupIdForPermission(id);
|
||||
await _permissionRepository.delete(id);
|
||||
await fetch(page: _result?.page ?? 1);
|
||||
if (groupId != null) {
|
||||
await _syncPermissionsForGroup(groupId);
|
||||
}
|
||||
return true;
|
||||
} catch (e) {
|
||||
_errorMessage = e.toString();
|
||||
} catch (error) {
|
||||
final failure = Failure.from(error);
|
||||
_errorMessage = failure.describe();
|
||||
notifyListeners();
|
||||
return false;
|
||||
} finally {
|
||||
@@ -198,9 +216,11 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
try {
|
||||
final restored = await _permissionRepository.restore(id);
|
||||
await fetch(page: _result?.page ?? 1);
|
||||
await _syncPermissionsForGroup(restored.group.id);
|
||||
return restored;
|
||||
} catch (e) {
|
||||
_errorMessage = e.toString();
|
||||
} catch (error) {
|
||||
final failure = Failure.from(error);
|
||||
_errorMessage = failure.describe();
|
||||
notifyListeners();
|
||||
return null;
|
||||
} finally {
|
||||
@@ -219,4 +239,33 @@ class GroupPermissionController extends ChangeNotifier {
|
||||
_isSubmitting = value;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> _syncPermissionsForGroup(int groupId) async {
|
||||
final manager = _permissionManager;
|
||||
if (manager == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final synchronizer = PermissionSynchronizer(
|
||||
repository: _permissionRepository,
|
||||
manager: manager,
|
||||
);
|
||||
await synchronizer.syncForGroup(groupId);
|
||||
} catch (_) {
|
||||
// 권한 동기화 실패는 사용자 경험에 영향이 없도록 무시한다.
|
||||
}
|
||||
}
|
||||
|
||||
int? _resolveGroupIdForPermission(int permissionId) {
|
||||
final current = _result?.items;
|
||||
if (current == null) {
|
||||
return null;
|
||||
}
|
||||
for (final item in current) {
|
||||
if (item.id == permissionId) {
|
||||
return item.group.id;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user