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,36 +1,57 @@
1
1
  {
2
2
  "name": "license",
3
- "description": "license Entity. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
4
- "index": {
5
- "name": {
6
- "comment": "라이선스명",
7
- "required": true,
8
- "unique": true
3
+ "description": "license 엔티티. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
+ "cache": {
5
+ "ttl_seconds": 300
6
+ },
7
+ "fields": {
8
+ "bizno": {
9
+ "index": true,
10
+ "comment": "사업자번호",
11
+ "hash": true
9
12
  },
10
13
  "contract_date": {
14
+ "index": true,
11
15
  "comment": "계약일"
12
16
  },
17
+ "email": {
18
+ "index": true,
19
+ "hash": true,
20
+ "comment": "이메일"
21
+ },
13
22
  "expire_date": {
23
+ "index": true,
14
24
  "comment": "만료일"
15
25
  },
16
- "status": {
17
- "comment": "상태",
18
- "type": ["active", "expired", "suspended"],
19
- "default": "active"
26
+ "name": {
27
+ "index": true,
28
+ "comment": "라이선스명",
29
+ "required": true
30
+ },
31
+ "name_abbr": {
32
+ "index": true,
33
+ "comment": "약칭"
34
+ },
35
+ "pic": {
36
+ "index": true,
37
+ "comment": "담당자"
38
+ },
39
+ "sido": {
40
+ "index": true,
41
+ "comment": "시도"
42
+ },
43
+ "sigungu": {
44
+ "index": true,
45
+ "comment": "시군구"
46
+ },
47
+ "max_user_cnt": {
48
+ "type": "uint"
20
49
  }
21
50
  },
22
- "defaults": {
23
- "max_users": 100
24
- },
25
- "types": {},
26
51
  "reset_defaults": [
27
52
  {
28
- "name": "Trial License",
29
- "contract_date": "2026-01-01",
30
- "expire_date": "2026-12-31",
31
- "status": "active",
32
- "max_users": 10,
33
- "contact_email": "trial@example.com"
53
+ "name": "system",
54
+ "name_abbr": "system"
34
55
  }
35
56
  ]
36
57
  }
@@ -1,15 +1,14 @@
1
1
  {
2
2
  "name": "password_history",
3
- "description": "비밀번호 변경 이력 (재사용 금지 정책용) 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "비밀번호 변경 이력 (재사용 금지 정책용) 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "hard_delete": true,
5
- "index": {
5
+ "fields": {
6
6
  "account_seq": {
7
+ "index": true,
7
8
  "comment": "계정 seq",
8
9
  "type": "integer",
9
10
  "required": true
10
- }
11
- },
12
- "fields": {
11
+ },
13
12
  "passwd_hash": {
14
13
  "comment": "변경 시점의 비밀번호 해시 (salt 포함)"
15
14
  },
@@ -1,23 +1,26 @@
1
1
  {
2
2
  "name": "rbac_roles",
3
- "description": "RBAC 역할 정의 예제. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "역할 기반 접근 제어 역할 정의. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
- "index": {
5
+ "hard_delete": true,
6
+ "fields": {
6
7
  "name": {
8
+ "index": true,
7
9
  "comment": "역할 이름",
8
10
  "required": true,
9
11
  "unique": true
12
+ },
13
+ "permissions": {
14
+ "type": "text"
10
15
  }
11
16
  },
12
- "types": {
13
- "permissions": "text"
14
- },
15
- "hard_delete": true,
16
17
  "reset_defaults": [
17
18
  {
18
19
  "name": "admin",
19
20
  "description": "전체 권한 (모든 엔티티 CRUD + 관리)",
20
- "permissions": ["*"]
21
+ "permissions": [
22
+ "*"
23
+ ]
21
24
  },
22
25
  {
23
26
  "name": "editor",
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "backup_log",
3
- "description": "백업 작업 이력. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "백업 작업 이력. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
5
  "hard_delete": true,
6
6
  "history": false,
7
7
  "compress": true,
8
- "index": {
8
+ "fields": {
9
9
  "backup_type": {
10
+ "index": true,
10
11
  "type": [
11
12
  "data",
12
13
  "file",
@@ -14,9 +15,14 @@
14
15
  ],
15
16
  "required": true
16
17
  },
17
- "finished_time": {},
18
- "started_time": {},
18
+ "finished_time": {
19
+ "index": true
20
+ },
21
+ "started_time": {
22
+ "index": true
23
+ },
19
24
  "status": {
25
+ "index": true,
20
26
  "type": [
21
27
  "running",
22
28
  "completed",
@@ -24,9 +30,7 @@
24
30
  "failed"
25
31
  ],
26
32
  "required": true
27
- }
28
- },
29
- "fields": {
33
+ },
30
34
  "session_id": {
31
35
  "description": "백업 세션 ID (타임스탬프)"
32
36
  },
@@ -1,28 +1,34 @@
1
1
  {
2
2
  "name": "smtp_log",
3
- "description": "SMTP 이메일 발송 이력. 발송 결과 추적 및 재시도 관리용. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "SMTP 이메일 발송 이력. 발송 결과 추적 및 재시도 관리용. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
5
  "hard_delete": true,
6
6
  "history": false,
7
7
  "compress": true,
8
- "index": {
8
+ "fields": {
9
9
  "attempt_time": {
10
+ "index": true,
10
11
  "comment": "처리 시작(claim) 시각"
11
12
  },
12
13
  "provider": {
14
+ "index": true,
13
15
  "type": "varchar(50)"
14
16
  },
15
17
  "retry_count": {
18
+ "index": true,
16
19
  "type": "uint",
17
20
  "default": 0
18
21
  },
19
22
  "sent_time": {
23
+ "index": true,
20
24
  "comment": "발송 완료 시각"
21
25
  },
22
26
  "smtp_msg_seq": {
27
+ "index": true,
23
28
  "comment": "원본 smtp_msg seq"
24
29
  },
25
30
  "status": {
31
+ "index": true,
26
32
  "type": [
27
33
  "pending",
28
34
  "processing",
@@ -32,9 +38,7 @@
32
38
  ],
33
39
  "default": "pending",
34
40
  "required": true
35
- }
36
- },
37
- "fields": {
41
+ },
38
42
  "from": {
39
43
  "comment": "발신자"
40
44
  },
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "smtp_msg",
3
- "description": "SMTP 이메일 트리거 엔티티. insert 시 smtp hook으로 비동기 발송. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "SMTP 이메일 트리거 엔티티. insert 시 smtp hook으로 비동기 발송. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "hard_delete": true,
5
5
  "history": false,
6
- "index": {
6
+ "fields": {
7
7
  "provider": {
8
+ "index": true,
8
9
  "comment": "사용할 SMTP 프로바이더 키 (미지정 시 default)",
9
10
  "type": "varchar(50)"
10
11
  },
11
12
  "status": {
13
+ "index": true,
12
14
  "type": [
13
15
  "queued",
14
16
  "sent",
@@ -16,9 +18,7 @@
16
18
  ],
17
19
  "default": "queued",
18
20
  "required": true
19
- }
20
- },
21
- "fields": {
21
+ },
22
22
  "from": {
23
23
  "nullable": true,
24
24
  "comment": "발신자 이메일 (미지정 시 프로바이더 기본값)"
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "alimtalk_log",
3
- "description": "알림톡 발송 로그 — 워커가 소비하는 DB 큐 역할을 합니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "알림톡 발송 로그 — 워커가 소비하는 DB 큐 역할을 합니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "history": false,
5
5
  "read_only": true,
6
6
  "compress": true,
7
- "index": {
7
+ "fields": {
8
8
  "status": {
9
+ "index": true,
9
10
  "type": [
10
11
  "pending",
11
12
  "processing",
@@ -18,25 +19,44 @@
18
19
  "comment": "발송 상태 (delivered = 프로바이더 수신 확인)"
19
20
  },
20
21
  "template_code": {
22
+ "index": true,
21
23
  "comment": "카카오 알림톡 템플릿 코드",
22
24
  "required": true
23
25
  },
24
26
  "receiver": {
27
+ "index": true,
28
+ "hash": true,
25
29
  "comment": "수신자 전화번호",
26
30
  "required": true
27
31
  },
28
32
  "alimtalk_msg_seq": {
33
+ "index": true,
29
34
  "comment": "alimtalk_msg 참조 seq"
30
- }
31
- },
32
- "fields": {
33
- "template_name": { "comment": "내부 템플릿 이름" },
34
- "variables_json": { "type": "text", "comment": "템플릿 변수 JSON" },
35
- "provider": { "comment": "사용 프로바이더" },
36
- "provider_msg_id": { "comment": "프로바이더 메시지 ID" },
37
- "error_message": { "type": "text", "comment": "오류 메시지" },
38
- "retry_count": { "type": "uint", "default": 0 },
39
- "sent_at": { "type": "string" },
35
+ },
36
+ "template_name": {
37
+ "comment": "내부 템플릿 이름"
38
+ },
39
+ "variables_json": {
40
+ "type": "text",
41
+ "comment": "템플릿 변수 JSON"
42
+ },
43
+ "provider": {
44
+ "comment": "사용 프로바이더"
45
+ },
46
+ "provider_msg_id": {
47
+ "comment": "프로바이더 메시지 ID"
48
+ },
49
+ "error_message": {
50
+ "type": "text",
51
+ "comment": "오류 메시지"
52
+ },
53
+ "retry_count": {
54
+ "type": "uint",
55
+ "default": 0
56
+ },
57
+ "sent_at": {
58
+ "type": "string"
59
+ },
40
60
  "delivered_at": {
41
61
  "type": "string",
42
62
  "comment": "프로바이더 수신 확인 시각"
@@ -1,30 +1,44 @@
1
1
  {
2
2
  "name": "alimtalk_msg",
3
- "description": "알림톡 발송 트리거 엔티티 — Hook 또는 API를 통해 생성되면 알림톡 발송이 시작됩니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "알림톡 발송 트리거 엔티티 — Hook 또는 API를 통해 생성되면 알림톡 발송이 시작됩니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "history": false,
5
- "index": {
5
+ "fields": {
6
6
  "template_code": {
7
+ "index": true,
7
8
  "comment": "카카오 알림톡 템플릿 코드",
8
9
  "required": true
9
10
  },
10
11
  "receiver": {
12
+ "index": true,
13
+ "hash": true,
11
14
  "comment": "수신자 전화번호",
12
15
  "required": true
13
16
  },
14
17
  "status": {
15
- "type": ["pending", "processing", "sent", "delivered", "failed"],
18
+ "index": true,
19
+ "type": [
20
+ "pending",
21
+ "processing",
22
+ "sent",
23
+ "delivered",
24
+ "failed"
25
+ ],
16
26
  "default": "pending",
17
27
  "comment": "발송 상태 (delivered = 프로바이더 수신 확인)"
18
- }
19
- },
20
- "fields": {
28
+ },
21
29
  "variables_json": {
22
30
  "type": "text",
23
31
  "comment": "템플릿 변수 JSON (#{key} 바인딩)"
24
32
  },
25
- "provider": { "comment": "프로바이더 키 (빈 값이면 default)" },
26
- "ref_entity": { "comment": "참조 엔티티 이름" },
27
- "ref_seq": { "type": "int" }
33
+ "provider": {
34
+ "comment": "프로바이더 (빈 값이면 default)"
35
+ },
36
+ "ref_entity": {
37
+ "comment": "참조 엔티티 이름"
38
+ },
39
+ "ref_seq": {
40
+ "type": "int"
41
+ }
28
42
  },
29
43
  "hooks": {
30
44
  "after_insert": [
@@ -1,16 +1,24 @@
1
1
  {
2
2
  "name": "friendtalk_log",
3
- "description": "친구톡(브랜드메시지) 발송 로그 — 워커가 소비하는 DB 큐 역할을 합니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "친구톡(브랜드메시지) 발송 로그 — 워커가 소비하는 DB 큐 역할을 합니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "history": false,
5
5
  "read_only": true,
6
6
  "compress": true,
7
- "index": {
7
+ "fields": {
8
8
  "status": {
9
- "type": ["pending", "processing", "sent", "failed", "expired"],
9
+ "index": true,
10
+ "type": [
11
+ "pending",
12
+ "processing",
13
+ "sent",
14
+ "failed",
15
+ "expired"
16
+ ],
10
17
  "default": "pending",
11
18
  "comment": "발송 상태"
12
19
  },
13
20
  "msg_type": {
21
+ "index": true,
14
22
  "type": [
15
23
  "text",
16
24
  "image",
@@ -20,29 +28,62 @@
20
28
  ],
21
29
  "default": "text"
22
30
  },
23
- "receiver": { "comment": "수신자 전화번호", "required": true },
24
- "friendtalk_msg_seq": { "comment": "friendtalk_msg 참조 seq" }
25
- },
26
- "fields": {
27
- "content": { "type": "text", "comment": "메시지 본문" },
28
- "image_url": { "comment": "이미지 URL" },
29
- "image_link": { "comment": "이미지 클릭 시 이동 URL" },
31
+ "receiver": {
32
+ "index": true,
33
+ "hash": true,
34
+ "comment": "수신자 전화번호",
35
+ "required": true
36
+ },
37
+ "friendtalk_msg_seq": {
38
+ "index": true,
39
+ "comment": "friendtalk_msg 참조 seq"
40
+ },
41
+ "content": {
42
+ "type": "text",
43
+ "comment": "메시지 본문"
44
+ },
45
+ "image_url": {
46
+ "comment": "이미지 URL"
47
+ },
48
+ "image_link": {
49
+ "comment": "이미지 클릭 시 이동 URL"
50
+ },
30
51
  "is_ad": {
31
52
  "type": "bool",
32
53
  "default": true,
33
54
  "comment": "광고성 메시지 여부"
34
55
  },
35
- "buttons_json": { "type": "text", "comment": "버튼 목록 JSON" },
36
- "carousel_json": { "type": "text", "comment": "캐러셀 데이터 JSON" },
56
+ "buttons_json": {
57
+ "type": "text",
58
+ "comment": "버튼 목록 JSON"
59
+ },
60
+ "carousel_json": {
61
+ "type": "text",
62
+ "comment": "캐러셀 데이터 JSON"
63
+ },
37
64
  "items_json": {
38
65
  "type": "text",
39
66
  "comment": "와이드 아이템 리스트 JSON"
40
67
  },
41
- "header": { "comment": "와이드 아이템 리스트 헤더" },
42
- "provider": { "comment": "사용 프로바이더" },
43
- "provider_msg_id": { "comment": "프로바이더 메시지 ID" },
44
- "error_message": { "type": "text", "comment": "오류 메시지" },
45
- "retry_count": { "type": "uint", "default": 0 },
46
- "sent_at": { "type": "string" }
68
+ "header": {
69
+ "comment": "와이드 아이템 리스트 헤더"
70
+ },
71
+ "provider": {
72
+ "comment": "사용 프로바이더"
73
+ },
74
+ "provider_msg_id": {
75
+ "comment": "프로바이더 메시지 ID"
76
+ },
77
+ "error_message": {
78
+ "type": "text",
79
+ "comment": "오류 메시지"
80
+ },
81
+ "retry_count": {
82
+ "type": "uint",
83
+ "default": 0
84
+ },
85
+ "sent_at": {
86
+ "type": "string"
87
+ }
47
88
  }
48
89
  }
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "friendtalk_msg",
3
- "description": "친구톡(브랜드메시지) 발송 트리거 엔티티 — Hook 또는 API를 통해 생성되면 친구톡 발송이 시작됩니다. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "친구톡(브랜드메시지) 발송 트리거 엔티티 — Hook 또는 API를 통해 생성되면 친구톡 발송이 시작됩니다. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "history": false,
5
- "index": {
6
- "receiver": { "comment": "수신자 전화번호", "required": true },
5
+ "fields": {
6
+ "receiver": {
7
+ "index": true,
8
+ "hash": true,
9
+ "comment": "수신자 전화번호",
10
+ "required": true
11
+ },
7
12
  "msg_type": {
13
+ "index": true,
8
14
  "type": [
9
15
  "text",
10
16
  "image",
@@ -15,33 +21,55 @@
15
21
  "default": "text"
16
22
  },
17
23
  "status": {
18
- "type": ["pending", "processing", "sent", "failed"],
24
+ "index": true,
25
+ "type": [
26
+ "pending",
27
+ "processing",
28
+ "sent",
29
+ "failed"
30
+ ],
19
31
  "default": "pending"
20
- }
21
- },
22
- "fields": {
32
+ },
23
33
  "content": {
24
34
  "type": "text",
25
35
  "required": true,
26
36
  "comment": "메시지 본문"
27
37
  },
28
- "image_url": { "comment": "이미지 URL" },
29
- "image_link": { "comment": "이미지 클릭 시 이동 URL" },
38
+ "image_url": {
39
+ "comment": "이미지 URL"
40
+ },
41
+ "image_link": {
42
+ "comment": "이미지 클릭 시 이동 URL"
43
+ },
30
44
  "is_ad": {
31
45
  "type": "bool",
32
46
  "default": true,
33
47
  "comment": "광고성 메시지 여부"
34
48
  },
35
- "buttons_json": { "type": "text", "comment": "버튼 목록 JSON" },
36
- "carousel_json": { "type": "text", "comment": "캐러셀 데이터 JSON" },
49
+ "buttons_json": {
50
+ "type": "text",
51
+ "comment": "버튼 목록 JSON"
52
+ },
53
+ "carousel_json": {
54
+ "type": "text",
55
+ "comment": "캐러셀 데이터 JSON"
56
+ },
37
57
  "items_json": {
38
58
  "type": "text",
39
59
  "comment": "와이드 아이템 리스트 JSON"
40
60
  },
41
- "header": { "comment": "와이드 아이템 리스트 헤더" },
42
- "provider": { "comment": "프로바이더 (빈 값이면 default)" },
43
- "ref_entity": { "comment": "참조 엔티티 이름" },
44
- "ref_seq": { "type": "int" }
61
+ "header": {
62
+ "comment": "와이드 아이템 리스트 헤더"
63
+ },
64
+ "provider": {
65
+ "comment": "프로바이더 키 (빈 값이면 default)"
66
+ },
67
+ "ref_entity": {
68
+ "comment": "참조 엔티티 이름"
69
+ },
70
+ "ref_seq": {
71
+ "type": "int"
72
+ }
45
73
  },
46
74
  "hooks": {
47
75
  "after_insert": [
@@ -1,26 +1,65 @@
1
1
  {
2
2
  "name": "sms_log",
3
- "description": "SMS/LMS/MMS 발송 이력 로그. 사용자 환경에 맞게 index·fields를 자유롭게 확장할 수 있습니다.",
3
+ "description": "SMS/LMS/MMS 발송 이력 로그. 사용자 환경에 맞게 fields를 자유롭게 확장할 수 있습니다.",
4
4
  "license_scope": false,
5
5
  "hard_delete": true,
6
6
  "history": false,
7
7
  "read_only": true,
8
8
  "compress": true,
9
- "index": {
10
- "status": { "type": ["pending", "processing", "sent", "failed"] },
11
- "msg_type": { "type": ["sms", "lms", "mms"] },
12
- "receiver": { "type": "string" },
13
- "sms_msg_seq": { "comment": "sms_msg 참조 seq" }
14
- },
15
9
  "fields": {
16
- "sender": { "type": "string" },
17
- "subject": { "type": "string" },
18
- "content": { "type": "string" },
19
- "image_url": { "type": "string", "comment": "MMS 이미지 URL" },
20
- "provider": { "type": "string" },
21
- "provider_msg_id": { "type": "string" },
22
- "error_message": { "type": "string" },
23
- "retry_count": { "type": "uint" },
24
- "sent_at": { "type": "string" }
10
+ "status": {
11
+ "index": true,
12
+ "type": [
13
+ "pending",
14
+ "processing",
15
+ "sent",
16
+ "failed"
17
+ ]
18
+ },
19
+ "msg_type": {
20
+ "index": true,
21
+ "type": [
22
+ "sms",
23
+ "lms",
24
+ "mms"
25
+ ]
26
+ },
27
+ "receiver": {
28
+ "index": true,
29
+ "hash": true,
30
+ "type": "string"
31
+ },
32
+ "sms_msg_seq": {
33
+ "index": true,
34
+ "comment": "sms_msg 참조 seq"
35
+ },
36
+ "sender": {
37
+ "type": "string"
38
+ },
39
+ "subject": {
40
+ "type": "string"
41
+ },
42
+ "content": {
43
+ "type": "string"
44
+ },
45
+ "image_url": {
46
+ "type": "string",
47
+ "comment": "MMS 이미지 URL"
48
+ },
49
+ "provider": {
50
+ "type": "string"
51
+ },
52
+ "provider_msg_id": {
53
+ "type": "string"
54
+ },
55
+ "error_message": {
56
+ "type": "string"
57
+ },
58
+ "retry_count": {
59
+ "type": "uint"
60
+ },
61
+ "sent_at": {
62
+ "type": "string"
63
+ }
25
64
  }
26
65
  }