Files
2025-10-23 22:04:03 +09:00

203 lines
4.9 KiB
Dart

// 역할 옵션
const Map<String, String> roleOptions = {
'admin': '관리자',
'clubadmin': '클럽 관리자',
'user': '일반 사용자',
};
// -------------------------------
// Strong enums for client usage
// -------------------------------
/// 참가자 상태 (서버 enum과 1:1 매칭)
enum ParticipantStatus { pending, confirmed, canceled, attended }
extension ParticipantStatusX on ParticipantStatus {
String get apiValue {
switch (this) {
case ParticipantStatus.pending:
return 'pending';
case ParticipantStatus.confirmed:
return 'confirmed';
case ParticipantStatus.canceled:
return 'canceled';
case ParticipantStatus.attended:
return 'attended';
}
}
String get labelKo {
switch (this) {
case ParticipantStatus.pending:
return '대기';
case ParticipantStatus.confirmed:
return '확인됨';
case ParticipantStatus.canceled:
return '취소됨';
case ParticipantStatus.attended:
return '참석';
}
}
static ParticipantStatus? from(String? value) {
switch ((value ?? '').toLowerCase()) {
case 'pending':
return ParticipantStatus.pending;
case 'confirmed':
return ParticipantStatus.confirmed;
case 'canceled':
return ParticipantStatus.canceled;
case 'attended':
return ParticipantStatus.attended;
default:
return null;
}
}
}
/// 결제 상태 (서버 enum과 1:1 매칭)
enum PaymentStatus { unpaid, paid }
extension PaymentStatusX on PaymentStatus {
String get apiValue {
switch (this) {
case PaymentStatus.unpaid:
return 'unpaid';
case PaymentStatus.paid:
return 'paid';
}
}
String get labelKo {
switch (this) {
case PaymentStatus.unpaid:
return '미납';
case PaymentStatus.paid:
return '납부';
}
}
static PaymentStatus? from(String? value) {
switch ((value ?? '').toLowerCase()) {
case 'unpaid':
return PaymentStatus.unpaid;
case 'paid':
return PaymentStatus.paid;
default:
return null;
}
}
}
// Backward-compatible helpers for non-enum callsites
String toKoreanParticipantStatus(String? value) =>
(ParticipantStatusX.from(value) ?? ParticipantStatus.pending).labelKo;
String toKoreanPaymentStatus(String? value) =>
(PaymentStatusX.from(value) ?? PaymentStatus.unpaid).labelKo;
// 성별 옵션
const Map<String, String> genderOptions = {
'male': '남성',
'female': '여성',
};
// 회원 유형 옵션
const Map<String, String> memberTypeOptions = {
'regular': '정회원',
'associate': '준회원',
'guest': '게스트',
'manager': '운영진',
'owner': '모임장',
};
// 상태 옵션
const Map<String, String> statusOptions = {
'active': '활성',
'inactive': '비활성',
'suspended': '정지',
'deleted': '삭제',
};
// 참가자 상태 옵션
const Map<String, String> participantStatusOptions = {
'pending': '참가예정',
'confirmed': '참가확정',
'canceled': '취소',
};
// 이벤트 상태 옵션
const Map<String, String> eventStatusOptions = {
'ready': '준비',
'active': '활성',
'completed': '완료',
'canceled': '취소',
'deleted': '삭제',
};
// 이벤트 유형 옵션
const Map<String, String> eventTypeOptions = {
'regular': '정기전',
'exchange': '교류전',
'tournament': '대회',
'lightning': '번개',
'friendly': '친선전',
'event': '이벤트',
'other': '기타',
};
// 결제 상태 옵션
const Map<String, String> paymentStatusOptions = {
'unpaid': '미납',
'paid': '납부완료',
};
// 평균 산정 기준 옵션
const Map<String, String> averageCalculationPeriodOptions = {
'total': '전체',
'1year': '최근 1년',
'6month': '최근 6개월',
'3month': '최근 3개월',
'firsthalf': '상반기',
'secondhalf': '하반기',
'quarterly': '분기별',
};
// 회원 유형 레이블 가져오기
String getMemberTypeLabel(String? memberType) {
if (memberType == null) return '일반 회원';
return memberTypeOptions[memberType] ?? memberType;
}
// 역할 레이블 가져오기
String getRoleLabel(String? role) {
if (role == null) return '일반 사용자';
return roleOptions[role] ?? role;
}
// 성별 레이블 가져오기
String getGenderLabel(String? gender) {
if (gender == null) return '정보 없음';
return genderOptions[gender] ?? gender;
}
// 상태 레이블 가져오기
String getStatusLabel(String? status) {
if (status == null) return '정보 없음';
return statusOptions[status] ?? status;
}
// 이벤트 상태 레이블 가져오기
String getEventStatusLabel(String? status) {
if (status == null) return '정보 없음';
return eventStatusOptions[status] ?? status;
}
// 이벤트 유형 레이블 가져오기
String getEventTypeLabel(String? type) {
if (type == null) return '기타';
return eventTypeOptions[type] ?? type;
}