feat: 결재·마스터 실연동 업데이트
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import '../../domain/entities/approval_proceed_status.dart';
|
||||
|
||||
/// 결재 진행 가능 여부(can-proceed) 응답 DTO.
|
||||
class ApprovalProceedStatusDto {
|
||||
ApprovalProceedStatusDto({
|
||||
required this.approvalId,
|
||||
required this.canProceed,
|
||||
this.reason,
|
||||
});
|
||||
|
||||
final int approvalId;
|
||||
final bool canProceed;
|
||||
final String? reason;
|
||||
|
||||
factory ApprovalProceedStatusDto.fromJson(Map<String, dynamic> json) {
|
||||
return ApprovalProceedStatusDto(
|
||||
approvalId: json['id'] as int? ?? json['approval_id'] as int? ?? 0,
|
||||
canProceed: json['can_proceed'] as bool? ?? false,
|
||||
reason: json['reason'] as String?,
|
||||
);
|
||||
}
|
||||
|
||||
ApprovalProceedStatus toEntity() => ApprovalProceedStatus(
|
||||
approvalId: approvalId,
|
||||
canProceed: canProceed,
|
||||
reason: reason,
|
||||
);
|
||||
}
|
||||
@@ -1,10 +1,13 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:superport_v2/core/common/models/paginated_result.dart';
|
||||
import 'package:superport_v2/core/network/api_client.dart';
|
||||
import 'package:superport_v2/core/network/api_routes.dart';
|
||||
|
||||
import '../../domain/entities/approval.dart';
|
||||
import '../../domain/entities/approval_proceed_status.dart';
|
||||
import '../../domain/repositories/approval_repository.dart';
|
||||
import '../dtos/approval_dto.dart';
|
||||
import '../dtos/approval_proceed_status_dto.dart';
|
||||
|
||||
/// 결재 API 엔드포인트를 호출하는 원격 저장소 구현체.
|
||||
///
|
||||
@@ -15,7 +18,7 @@ class ApprovalRepositoryRemote implements ApprovalRepository {
|
||||
|
||||
final ApiClient _api;
|
||||
|
||||
static const _basePath = '/approvals';
|
||||
static const _basePath = '${ApiRoutes.apiV1}/approvals';
|
||||
|
||||
/// 결재 목록을 조회한다. 필터 조건이 없으면 최신순 페이지를 반환한다.
|
||||
@override
|
||||
@@ -69,7 +72,7 @@ class ApprovalRepositoryRemote implements ApprovalRepository {
|
||||
@override
|
||||
Future<List<ApprovalAction>> listActions({bool activeOnly = true}) async {
|
||||
final response = await _api.get<Map<String, dynamic>>(
|
||||
'/approval-actions',
|
||||
'${ApiRoutes.apiV1}/approval-actions',
|
||||
query: {'page': 1, 'page_size': 100, if (activeOnly) 'active': true},
|
||||
options: Options(responseType: ResponseType.json),
|
||||
);
|
||||
@@ -85,7 +88,7 @@ class ApprovalRepositoryRemote implements ApprovalRepository {
|
||||
@override
|
||||
Future<Approval> performStepAction(ApprovalStepActionInput input) async {
|
||||
final response = await _api.post<Map<String, dynamic>>(
|
||||
'/approval-steps/${input.stepId}/actions',
|
||||
'${ApiRoutes.apiV1}/approval-steps/${input.stepId}/actions',
|
||||
data: input.toPayload(),
|
||||
options: Options(responseType: ResponseType.json),
|
||||
);
|
||||
@@ -102,7 +105,7 @@ class ApprovalRepositoryRemote implements ApprovalRepository {
|
||||
@override
|
||||
Future<Approval> assignSteps(ApprovalStepAssignmentInput input) async {
|
||||
final response = await _api.post<Map<String, dynamic>>(
|
||||
'/approvals/${input.approvalId}/steps',
|
||||
'${ApiRoutes.apiV1}/approvals/${input.approvalId}/steps',
|
||||
data: input.toPayload(),
|
||||
options: Options(responseType: ResponseType.json),
|
||||
);
|
||||
@@ -115,6 +118,17 @@ class ApprovalRepositoryRemote implements ApprovalRepository {
|
||||
return ApprovalDto.fromJson(approvalJson).toEntity();
|
||||
}
|
||||
|
||||
/// 결재가 다음 단계로 진행 가능한지 확인한다.
|
||||
@override
|
||||
Future<ApprovalProceedStatus> canProceed(int id) async {
|
||||
final response = await _api.get<Map<String, dynamic>>(
|
||||
'$_basePath/$id/can-proceed',
|
||||
options: Options(responseType: ResponseType.json),
|
||||
);
|
||||
final data = (response.data?['data'] as Map<String, dynamic>?) ?? {};
|
||||
return ApprovalProceedStatusDto.fromJson(data).toEntity();
|
||||
}
|
||||
|
||||
/// 새로운 결재를 생성한다.
|
||||
@override
|
||||
Future<Approval> create(ApprovalInput input) async {
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:dio/dio.dart';
|
||||
|
||||
import '../../../../core/common/models/paginated_result.dart';
|
||||
import '../../../../core/network/api_client.dart';
|
||||
import '../../../../core/network/api_routes.dart';
|
||||
import '../../domain/entities/approval_template.dart';
|
||||
import '../../domain/repositories/approval_template_repository.dart';
|
||||
import '../dtos/approval_template_dto.dart';
|
||||
@@ -16,7 +17,7 @@ class ApprovalTemplateRepositoryRemote implements ApprovalTemplateRepository {
|
||||
|
||||
final ApiClient _api;
|
||||
|
||||
static const _basePath = '/approval-templates';
|
||||
static const _basePath = '${ApiRoutes.apiV1}/approval-templates';
|
||||
|
||||
/// 결재 템플릿 목록을 조회한다. 검색/활성 여부 필터를 지원한다.
|
||||
@override
|
||||
|
||||
Reference in New Issue
Block a user