create-entity-server 0.0.27 → 0.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/package.json +1 -1
  2. package/template/configs/auth/password.json +17 -5
  3. package/template/configs/cache.json +2 -1
  4. package/template/entities/System/Auth/account.json +158 -18
  5. package/template/entities/System/Auth/account_audit.json +11 -3
  6. package/template/entities/System/Auth/account_device.json +13 -12
  7. package/template/entities/System/Auth/account_login_log.json +21 -6
  8. package/template/entities/System/Auth/account_oauth.json +42 -13
  9. package/template/entities/System/Auth/api_keys.json +18 -9
  10. package/template/entities/System/Auth/identity_verification.json +18 -7
  11. package/template/entities/System/Auth/license.json +41 -20
  12. package/template/entities/System/Auth/password_history.json +4 -5
  13. package/template/entities/System/Auth/rbac_roles.json +10 -7
  14. package/template/entities/System/Backup/backup_log.json +11 -7
  15. package/template/entities/System/Email/smtp_log.json +9 -5
  16. package/template/entities/System/Email/smtp_msg.json +5 -5
  17. package/template/entities/System/Notification/alimtalk_log.json +32 -12
  18. package/template/entities/System/Notification/alimtalk_msg.json +23 -9
  19. package/template/entities/System/Notification/friendtalk_log.json +59 -18
  20. package/template/entities/System/Notification/friendtalk_msg.json +43 -15
  21. package/template/entities/System/Notification/sms_log.json +55 -16
  22. package/template/entities/System/Notification/sms_msg.json +45 -15
  23. package/template/entities/System/Notification/sms_verification.json +17 -7
  24. package/template/entities/System/Payment/pg_cancel.json +25 -10
  25. package/template/entities/System/Payment/pg_order.json +40 -13
  26. package/template/entities/System/Payment/pg_webhook_log.json +24 -9
  27. package/template/entities/System/Push/push_log.json +18 -3
  28. package/template/entities/System/Push/push_msg.json +6 -5
  29. package/template/entities/System/Storage/file_backup_log.json +11 -6
  30. package/template/entities/System/Storage/file_download_log.json +7 -5
  31. package/template/entities/System/Storage/file_meta.json +20 -7
  32. package/template/entities/System/system_audit_log.json +38 -34
  33. package/template/entities/company.json +5 -2
  34. package/template/entities/goods.json +10 -3
  35. package/template/entities/todo.json +4 -2
  36. package/template/samples/entities/01_basic_fields.json +15 -2
  37. package/template/samples/entities/02_types_and_defaults.json +15 -5
  38. package/template/samples/entities/03_hash_and_unique.json +18 -3
  39. package/template/samples/entities/04_fk_and_composite_unique.json +18 -3
  40. package/template/samples/entities/05_cache.json +15 -9
  41. package/template/samples/entities/06_history_and_hard_delete.json +19 -6
  42. package/template/samples/entities/07_license_scope.json +18 -3
  43. package/template/samples/entities/08_hook_sql.json +24 -5
  44. package/template/samples/entities/09_hook_entity.json +12 -2
  45. package/template/samples/entities/10_hook_submit_delete.json +14 -5
  46. package/template/samples/entities/11_hook_webhook.json +20 -6
  47. package/template/samples/entities/12_hook_push.json +15 -2
  48. package/template/samples/entities/13_read_only.json +8 -4
  49. package/template/samples/entities/14_optimistic_lock.json +13 -2
  50. package/template/samples/entities/15_reset_defaults.json +7 -1
  51. package/template/samples/entities/16_isolated_license.json +19 -6
  52. package/template/scripts/reset-all.sh +57 -3
  53. package/template/scripts/run.sh +56 -6
  54. package/template/templates/ocr/business_reg.json +145 -0
  55. package/template/templates/ocr/career_cert.json +93 -0
  56. package/template/templates/ocr/driver_license.json +89 -0
  57. package/template/templates/ocr/facility_card.json +82 -0
  58. package/template/templates/ocr/id_card.json +55 -0
  59. package/template/templates/ocr/invoice.json +92 -0
  60. package/template/templates/ocr/namecard.json +116 -0
  61. package/template/templates/ocr/prompts/business_reg.json +14 -0
  62. package/template/templates/ocr/prompts/career_cert.json +16 -0
  63. package/template/templates/ocr/prompts/driver_license.json +14 -0
  64. package/template/templates/ocr/prompts/facility_card.json +15 -0
  65. package/template/templates/ocr/prompts/general.json +13 -0
  66. package/template/templates/ocr/prompts/id_card.json +11 -0
  67. package/template/templates/ocr/prompts/invoice.json +17 -0
  68. package/template/templates/ocr/prompts/namecard.json +15 -0
  69. package/template/templates/ocr/prompts/receipt.json +14 -0
  70. package/template/templates/ocr/receipt.json +79 -0
  71. package/template/configs/auth/identity.json +0 -27
  72. package/template/configs/auth/privacy_policy.json +0 -28
  73. package/template/configs/auth/two_factor.json +0 -12
  74. package/template/configs/extensions/pg.json +0 -37
  75. package/template/configs/extensions/tax-invoice.json +0 -59
  76. package/template/configs/notification/alimtalk.json +0 -75
  77. package/template/configs/notification/sms.json +0 -54
  78. package/template/templates/email/account/dormancy_warning.html +0 -20
  79. package/template/templates/email/account/password_expiry_warning.html +0 -21
  80. package/template/templates/email/auth/email_verification.html +0 -18
  81. package/template/templates/email/auth/force_reset.html +0 -18
  82. package/template/templates/email/auth/password_reset.html +0 -19
  83. package/template/templates/email/auth/verification.html +0 -15
  84. package/template/templates/email/auth/verification_link.html +0 -25
@@ -1,42 +1,72 @@
1
1
  {
2
2
  "name": "sms_msg",
3
- "description": "SMS/LMS/MMS 발송 트리거 엔티티. insert 시 sms hook으로 비동기 발송. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "SMS/LMS/MMS 발송 트리거 엔티티. insert 시 sms hook으로 비동기 발송. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
5
  "hard_delete": true,
6
6
  "history": false,
7
7
  "read_only": true,
8
- "index": {
8
+ "fields": {
9
9
  "status": {
10
- "type": ["queued", "sent", "failed"],
10
+ "index": true,
11
+ "type": [
12
+ "queued",
13
+ "sent",
14
+ "failed"
15
+ ],
11
16
  "default": "queued"
12
17
  },
13
18
  "msg_type": {
14
- "type": ["sms", "lms", "mms"],
19
+ "index": true,
20
+ "type": [
21
+ "sms",
22
+ "lms",
23
+ "mms"
24
+ ],
15
25
  "default": "sms"
16
26
  },
17
27
  "receiver": {
28
+ "index": true,
29
+ "hash": true,
18
30
  "type": "string",
19
31
  "required": true,
20
32
  "comment": "수신 전화번호"
21
- }
22
- },
23
- "fields": {
24
- "sender": { "type": "string", "comment": "발신번호" },
33
+ },
34
+ "sender": {
35
+ "type": "string",
36
+ "comment": "발신번호"
37
+ },
25
38
  "subject": {
26
39
  "type": "string",
27
40
  "comment": "LMS/MMS 제목 (SMS는 미사용)"
28
41
  },
29
- "content": { "type": "string", "comment": "메시지 본문" },
30
- "image_url": { "type": "string", "comment": "MMS 이미지 URL" },
31
- "provider": { "type": "string", "comment": "발송 프로바이더 키" },
42
+ "content": {
43
+ "type": "string",
44
+ "comment": "메시지 본문"
45
+ },
46
+ "image_url": {
47
+ "type": "string",
48
+ "comment": "MMS 이미지 URL"
49
+ },
50
+ "provider": {
51
+ "type": "string",
52
+ "comment": "발송 프로바이더 키"
53
+ },
32
54
  "provider_msg_id": {
33
55
  "type": "string",
34
56
  "comment": "프로바이더 메시지 ID"
35
57
  },
36
- "ref_entity": { "type": "string" },
37
- "ref_seq": { "type": "int" },
38
- "error_message": { "type": "string" },
39
- "sent_at": { "type": "string" }
58
+ "ref_entity": {
59
+ "type": "string"
60
+ },
61
+ "ref_seq": {
62
+ "type": "int"
63
+ },
64
+ "error_message": {
65
+ "type": "string"
66
+ },
67
+ "sent_at": {
68
+ "type": "string"
69
+ }
40
70
  },
41
71
  "hooks": {
42
72
  "after_insert": [
@@ -1,27 +1,37 @@
1
1
  {
2
2
  "name": "sms_verification",
3
- "description": "SMS 인증번호 검증 엔티티. 인증번호 SHA-256 해시 저장, 시도 횟수 관리. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "SMS 인증번호 검증 엔티티. 인증번호 SHA-256 해시 저장, 시도 횟수 관리. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
5
  "hard_delete": true,
6
6
  "history": false,
7
- "index": {
7
+ "fields": {
8
8
  "phone": {
9
+ "index": true,
10
+ "hash": true,
9
11
  "comment": "수신 전화번호",
10
12
  "type": "varchar(20)",
11
13
  "required": true
12
14
  },
13
15
  "purpose": {
16
+ "index": true,
14
17
  "comment": "인증 목적",
15
- "type": ["signup", "password_reset", "identity"],
18
+ "type": [
19
+ "signup",
20
+ "password_reset",
21
+ "identity"
22
+ ],
16
23
  "required": true
17
24
  },
18
25
  "status": {
19
- "type": ["pending", "verified", "expired"],
26
+ "index": true,
27
+ "type": [
28
+ "pending",
29
+ "verified",
30
+ "expired"
31
+ ],
20
32
  "default": "pending",
21
33
  "required": true
22
- }
23
- },
24
- "fields": {
34
+ },
25
35
  "code_hash": {
26
36
  "type": "varchar(64)",
27
37
  "required": true,
@@ -1,43 +1,58 @@
1
1
  {
2
2
  "name": "pg_cancel",
3
- "description": "PG 결제 취소 이력 엔티티. 부분/전액 취소를 기록합니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "PG 결제 취소 이력 엔티티. 부분/전액 취소를 기록합니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "read_only": true,
5
- "index": {
5
+ "fields": {
6
6
  "order_seq": {
7
+ "index": true,
7
8
  "type": "integer",
8
9
  "required": true,
9
10
  "comment": "pg_order.seq 참조"
10
11
  },
11
12
  "order_id": {
13
+ "index": true,
12
14
  "type": "string",
13
15
  "required": true,
14
16
  "comment": "주문번호 (조회 편의)"
15
17
  },
16
18
  "cancel_amount": {
19
+ "index": true,
17
20
  "type": "integer",
18
21
  "required": true,
19
22
  "comment": "취소 금액"
20
23
  },
21
24
  "cancel_reason": {
25
+ "index": true,
22
26
  "type": "string",
23
27
  "required": true,
24
28
  "comment": "취소 사유 (최대 200자)"
25
29
  },
26
30
  "cancel_status": {
27
- "type": ["done", "failed"],
31
+ "index": true,
32
+ "type": [
33
+ "done",
34
+ "failed"
35
+ ],
28
36
  "default": "done",
29
37
  "comment": "취소 처리 상태"
30
38
  },
31
39
  "transaction_key": {
40
+ "index": true,
32
41
  "type": "string",
33
42
  "comment": "PG사 취소 거래 키"
34
- }
35
- },
36
- "fields": {
37
- "canceled_time": { "comment": "취소 시각 (ISO 8601)" },
38
- "refundable_amount": { "comment": "취소 후 환불 가능 잔액" },
39
- "tax_free_amount": { "comment": "취소된 금액 면세 금액" },
40
- "receipt_key": { "comment": "현금영수증 키 (해당 시)" },
43
+ },
44
+ "canceled_time": {
45
+ "comment": "취소 시각 (ISO 8601)"
46
+ },
47
+ "refundable_amount": {
48
+ "comment": "취소 환불 가능 잔액"
49
+ },
50
+ "tax_free_amount": {
51
+ "comment": "취소된 금액 중 면세 금액"
52
+ },
53
+ "receipt_key": {
54
+ "comment": "현금영수증 키 (해당 시)"
55
+ },
41
56
  "refund_account": {
42
57
  "comment": "환불 계좌 정보 JSON (가상계좌 취소 시)"
43
58
  }
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "pg_order",
3
- "description": "PG 결제 주문 엔티티. 결제 요청/승인/취소 상태를 추적합니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
4
- "index": {
3
+ "description": "PG 결제 주문 엔티티. 결제 요청/승인/취소 상태를 추적합니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
+ "fields": {
5
5
  "order_id": {
6
+ "index": true,
6
7
  "type": "string",
7
8
  "required": true,
8
9
  "unique": true,
9
10
  "comment": "고유 주문번호 (6~64자, [a-zA-Z0-9_-])"
10
11
  },
11
12
  "status": {
13
+ "index": true,
12
14
  "type": [
13
15
  "created",
14
16
  "ready",
@@ -24,49 +26,64 @@
24
26
  "comment": "결제 상태"
25
27
  },
26
28
  "payment_key": {
29
+ "index": true,
27
30
  "type": "string",
28
31
  "comment": "PG사 결제 키 (승인 후 할당)"
29
32
  },
30
33
  "provider": {
34
+ "index": true,
31
35
  "type": "string",
32
36
  "required": true,
33
37
  "comment": "PG 프로바이더 키 (toss_payments, kcp, inicis 등)"
34
38
  },
35
39
  "method": {
40
+ "index": true,
36
41
  "type": "string",
37
42
  "comment": "결제수단 (card, virtual_account, transfer, phone, easy_pay)"
38
43
  },
39
44
  "amount": {
45
+ "index": true,
40
46
  "type": "integer",
41
47
  "required": true,
42
48
  "comment": "총 결제 금액 (원)"
43
49
  },
44
50
  "balance_amount": {
51
+ "index": true,
45
52
  "type": "integer",
46
53
  "comment": "취소 가능 잔액"
47
54
  },
48
55
  "currency": {
56
+ "index": true,
49
57
  "type": "string",
50
58
  "default": "KRW",
51
59
  "comment": "통화 코드 (ISO 4217)"
52
60
  },
53
61
  "account_seq": {
62
+ "index": true,
54
63
  "type": "integer",
55
64
  "comment": "구매자 계정 seq (로그인 사용자)"
56
65
  },
57
66
  "customer_name": {
67
+ "index": true,
68
+ "hash": true,
58
69
  "type": "string",
59
70
  "comment": "구매자명"
60
71
  },
61
72
  "customer_email": {
73
+ "index": true,
74
+ "hash": true,
62
75
  "type": "string",
63
76
  "comment": "구매자 이메일"
64
- }
65
- },
66
- "fields": {
67
- "order_name": { "comment": "주문 상품명 (예: '토스 티셔츠 외 2건')" },
68
- "requested_time": { "comment": "결제 요청 시각 (ISO 8601)" },
69
- "approved_time": { "comment": "결제 승인 시각 (ISO 8601)" },
77
+ },
78
+ "order_name": {
79
+ "comment": "주문 상품명 (예: '토스 티셔츠 외 2건')"
80
+ },
81
+ "requested_time": {
82
+ "comment": "결제 요청 시각 (ISO 8601)"
83
+ },
84
+ "approved_time": {
85
+ "comment": "결제 승인 시각 (ISO 8601)"
86
+ },
70
87
  "card_info": {
71
88
  "comment": "카드 결제 정보 JSON (마스킹된 카드번호, 카드타입 등)"
72
89
  },
@@ -76,13 +93,23 @@
76
93
  "easy_pay_info": {
77
94
  "comment": "간편결제 정보 JSON (provider, amount, discountAmount)"
78
95
  },
79
- "receipt_url": { "comment": "영수증 URL" },
80
- "checkout_url": { "comment": "결제창 URL" },
81
- "failure_code": { "comment": "실패 에러 코드" },
82
- "failure_message": { "comment": "실패 에러 메시지" },
96
+ "receipt_url": {
97
+ "comment": "영수증 URL"
98
+ },
99
+ "checkout_url": {
100
+ "comment": "결제창 URL"
101
+ },
102
+ "failure_code": {
103
+ "comment": "실패 에러 코드"
104
+ },
105
+ "failure_message": {
106
+ "comment": "실패 에러 메시지"
107
+ },
83
108
  "metadata": {
84
109
  "comment": "상점 커스텀 데이터 JSON (최대 5개 key-value)"
85
110
  },
86
- "pg_raw_response": { "comment": "PG사 원본 응답 JSON (디버깅용)" }
111
+ "pg_raw_response": {
112
+ "comment": "PG사 원본 응답 JSON (디버깅용)"
113
+ }
87
114
  }
88
115
  }
@@ -1,37 +1,52 @@
1
1
  {
2
2
  "name": "pg_webhook_log",
3
- "description": "PG 웹훅 수신 이력. 모든 수신 이벤트를 기록합니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "PG 웹훅 수신 이력. 모든 수신 이벤트를 기록합니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "hard_delete": true,
5
5
  "read_only": true,
6
6
  "compress": true,
7
- "index": {
7
+ "fields": {
8
8
  "event_type": {
9
+ "index": true,
9
10
  "type": "string",
10
11
  "required": true,
11
12
  "comment": "웹훅 이벤트 타입 (payment.done, payment.canceled 등)"
12
13
  },
13
14
  "order_id": {
15
+ "index": true,
14
16
  "type": "string",
15
17
  "comment": "관련 주문번호"
16
18
  },
17
19
  "payment_key": {
20
+ "index": true,
18
21
  "type": "string",
19
22
  "comment": "관련 결제 키"
20
23
  },
21
24
  "status": {
22
- "type": ["received", "processed", "failed"],
25
+ "index": true,
26
+ "type": [
27
+ "received",
28
+ "processed",
29
+ "failed"
30
+ ],
23
31
  "default": "received",
24
32
  "comment": "웹훅 처리 상태"
25
33
  },
26
34
  "provider": {
35
+ "index": true,
27
36
  "type": "string",
28
37
  "comment": "PG 프로바이더 키"
38
+ },
39
+ "payload": {
40
+ "comment": "수신한 웹훅 원본 JSON"
41
+ },
42
+ "processed_time": {
43
+ "comment": "처리 완료 시각"
44
+ },
45
+ "error_message": {
46
+ "comment": "처리 실패 시 에러 메시지"
47
+ },
48
+ "signature": {
49
+ "comment": "웹훅 서명값 (검증용)"
29
50
  }
30
- },
31
- "fields": {
32
- "payload": { "comment": "수신한 웹훅 원본 JSON" },
33
- "processed_time": { "comment": "처리 완료 시각" },
34
- "error_message": { "comment": "처리 실패 시 에러 메시지" },
35
- "signature": { "comment": "웹훅 서명값 (검증용)" }
36
51
  }
37
52
  }
@@ -1,25 +1,29 @@
1
1
  {
2
2
  "name": "push_log",
3
- "description": "푸시 알림 발송 이력. 발송 결과 추적 및 재시도 관리용. account_seq(JWT) 또는 device_id(HMAC) 중 하나 존재. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "푸시 알림 발송 이력. 발송 결과 추적 및 재시도 관리용. account_seq(JWT) 또는 device_id(HMAC) 중 하나 존재. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
5
  "hard_delete": true,
6
6
  "history_ttl": 30,
7
7
  "compress": true,
8
- "index": {
8
+ "fields": {
9
9
  "account_seq": {
10
+ "index": true,
10
11
  "comment": "수신자 account seq (JWT 인증 시. nullable)"
11
12
  },
12
13
  "attempt_time": {
14
+ "index": true,
13
15
  "comment": "처리 시작(claim) 시각 — 비정상 종료 감지용"
14
16
  },
15
17
  "body": {
16
18
  "comment": "알림 본문"
17
19
  },
18
20
  "device_id": {
21
+ "index": true,
19
22
  "comment": "대상 디바이스 ID (HMAC 인증 시. nullable)",
20
23
  "type": "varchar(255)"
21
24
  },
22
25
  "device_seq": {
26
+ "index": true,
23
27
  "comment": "대상 디바이스 seq (account_device.seq)"
24
28
  },
25
29
  "device_token": {
@@ -30,28 +34,38 @@
30
34
  "type": "varchar(500)"
31
35
  },
32
36
  "platform": {
37
+ "index": true,
33
38
  "comment": "발송 채널",
34
- "type": ["fcm", "apns", "web"]
39
+ "type": [
40
+ "fcm",
41
+ "apns",
42
+ "web"
43
+ ]
35
44
  },
36
45
  "push_data": {
37
46
  "comment": "커스텀 페이로드 JSON 문자열",
38
47
  "type": "varchar(2000)"
39
48
  },
40
49
  "ref_entity": {
50
+ "index": true,
41
51
  "comment": "트리거 엔티티명"
42
52
  },
43
53
  "ref_seq": {
54
+ "index": true,
44
55
  "comment": "트리거 레코드 seq"
45
56
  },
46
57
  "retry_count": {
58
+ "index": true,
47
59
  "comment": "재시도 횟수",
48
60
  "type": "uint",
49
61
  "default": 0
50
62
  },
51
63
  "sent_time": {
64
+ "index": true,
52
65
  "comment": "발송 완료 시각"
53
66
  },
54
67
  "status": {
68
+ "index": true,
55
69
  "comment": "발송 상태",
56
70
  "type": [
57
71
  "pending",
@@ -65,6 +79,7 @@
65
79
  "required": true
66
80
  },
67
81
  "title": {
82
+ "index": true,
68
83
  "comment": "알림 제목"
69
84
  }
70
85
  }
@@ -1,21 +1,22 @@
1
1
  {
2
2
  "name": "push_msg",
3
- "description": "시스템 푸시 트리거 엔티티. insert 시 push hook로 비동기 발송. account_seq(JWT) 또는 device_id(HMAC) 중 하나 필수. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
4
- "index": {
3
+ "description": "시스템 푸시 트리거 엔티티. insert 시 push hook로 비동기 발송. account_seq(JWT) 또는 device_id(HMAC) 중 하나 필수. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
+ "fields": {
5
5
  "account_seq": {
6
+ "index": true,
6
7
  "comment": "수신자 account seq (JWT 인증 시 필수. HMAC 인증은 device_id 사용)",
7
8
  "required": true
8
9
  },
9
10
  "device_id": {
11
+ "index": true,
10
12
  "comment": "대상 디바이스 ID (HMAC 인증 시. 기기단위로 account 없이 푸시 발송)",
11
13
  "type": "varchar(255)"
12
14
  },
13
15
  "title": {
16
+ "index": true,
14
17
  "comment": "푸시 제목",
15
18
  "required": true
16
- }
17
- },
18
- "fields": {
19
+ },
19
20
  "message": {
20
21
  "comment": "푸시 본문",
21
22
  "nullable": true
@@ -1,23 +1,28 @@
1
1
  {
2
2
  "name": "file_backup_log",
3
- "description": "파일 백업 작업 로그. 스토리지 간 백업 동기화 이력을 기록합니다. 서버 내부 백업 고루틴이 자동 기록. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "파일 백업 작업 로그. 스토리지 간 백업 동기화 이력을 기록합니다. 서버 내부 백업 고루틴이 자동 기록. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
5
  "history": false,
6
6
  "hard_delete": true,
7
7
  "read_only": true,
8
8
  "compress": true,
9
- "index": {
9
+ "fields": {
10
10
  "started_time": {
11
+ "index": true,
11
12
  "comment": "백업 작업 시작 시각"
12
13
  },
13
14
  "status": {
15
+ "index": true,
14
16
  "comment": "작업 상태",
15
- "type": ["running", "completed", "partial", "failed"],
17
+ "type": [
18
+ "running",
19
+ "completed",
20
+ "partial",
21
+ "failed"
22
+ ],
16
23
  "default": "running",
17
24
  "required": true
18
- }
19
- },
20
- "fields": {
25
+ },
21
26
  "error_count": {
22
27
  "comment": "실패 파일 수"
23
28
  },
@@ -1,25 +1,27 @@
1
1
  {
2
2
  "name": "file_download_log",
3
- "description": "파일 다운로드 이력. 누가 어떤 파일을 언제 다운로드했는지 기록합니다. 감사(audit) 및 통계 목적. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "파일 다운로드 이력. 누가 어떤 파일을 언제 다운로드했는지 기록합니다. 감사(audit) 및 통계 목적. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "hard_delete": true,
5
5
  "history": false,
6
6
  "compress": true,
7
- "index": {
7
+ "fields": {
8
8
  "account_seq": {
9
+ "index": true,
9
10
  "comment": "다운로드한 계정 seq. JWT 인증 시 기록, 비인증은 NULL"
10
11
  },
11
12
  "downloaded_time": {
13
+ "index": true,
12
14
  "comment": "다운로드 시각"
13
15
  },
14
16
  "entity_name": {
17
+ "index": true,
15
18
  "comment": "파일이 속한 엔티티 이름"
16
19
  },
17
20
  "file_seq": {
21
+ "index": true,
18
22
  "comment": "다운로드한 file_meta seq",
19
23
  "required": true
20
- }
21
- },
22
- "fields": {
24
+ },
23
25
  "ip": {
24
26
  "comment": "요청 IP 주소 (IPv4/IPv6)",
25
27
  "type": "varchar(45)"
@@ -1,33 +1,46 @@
1
1
  {
2
2
  "name": "file_meta",
3
- "description": "파일 메타데이터. 업로드된 파일의 저장 위치·크기·해시·상태를 관리합니다. 파일 핸들러가 자동 기록하며 API를 통한 직접 수정은 허용되지 않습니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "파일 메타데이터. 업로드된 파일의 저장 위치·크기·해시·상태를 관리합니다. 파일 핸들러가 자동 기록하며 API를 통한 직접 수정은 허용되지 않습니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "history": false,
5
5
  "hard_delete": true,
6
6
  "read_only": true,
7
- "index": {
7
+ "fields": {
8
8
  "backup_status": {
9
+ "index": true,
9
10
  "comment": "백업 동기화 상태",
10
- "type": ["none", "pending", "synced", "failed", "skipped"],
11
+ "type": [
12
+ "none",
13
+ "pending",
14
+ "synced",
15
+ "failed",
16
+ "skipped"
17
+ ],
11
18
  "default": "none"
12
19
  },
13
20
  "size": {
21
+ "index": true,
14
22
  "comment": "파일 크기 (bytes)",
15
23
  "type": "bigint unsigned"
16
24
  },
17
25
  "status": {
26
+ "index": true,
18
27
  "comment": "파일 상태",
19
- "type": ["active", "pending", "orphan", "deleted"],
28
+ "type": [
29
+ "active",
30
+ "pending",
31
+ "orphan",
32
+ "deleted"
33
+ ],
20
34
  "default": "pending",
21
35
  "required": true
22
36
  },
23
37
  "uuid": {
38
+ "index": true,
24
39
  "comment": "파일 고유 식별자 (UUID v4). 저장 경로·다운로드 URL의 키로 사용",
25
40
  "type": "varchar(36)",
26
41
  "required": true,
27
42
  "unique": true
28
- }
29
- },
30
- "fields": {
43
+ },
31
44
  "backup_retries": {
32
45
  "comment": "백업 재시도 횟수"
33
46
  },