@hed-hog/studio 0.0.285

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 (68) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +20 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/studio.controller.d.ts +79 -0
  6. package/dist/studio.controller.d.ts.map +1 -0
  7. package/dist/studio.controller.js +186 -0
  8. package/dist/studio.controller.js.map +1 -0
  9. package/dist/studio.module.d.ts +3 -0
  10. package/dist/studio.module.d.ts.map +1 -0
  11. package/dist/studio.module.js +33 -0
  12. package/dist/studio.module.js.map +1 -0
  13. package/dist/studio.service.d.ts +76 -0
  14. package/dist/studio.service.d.ts.map +1 -0
  15. package/dist/studio.service.js +98 -0
  16. package/dist/studio.service.js.map +1 -0
  17. package/hedhog/data/menu.yaml +114 -0
  18. package/hedhog/data/role.yaml +7 -0
  19. package/hedhog/data/route.yaml +152 -0
  20. package/hedhog/data/setting_group.yaml +8 -0
  21. package/hedhog/frontend/app/_components/studio-status-badge.tsx.ejs +14 -0
  22. package/hedhog/frontend/app/_lib/mocks.ts.ejs +209 -0
  23. package/hedhog/frontend/app/_lib/status.ts.ejs +38 -0
  24. package/hedhog/frontend/app/_lib/types.ts.ejs +148 -0
  25. package/hedhog/frontend/app/assets/page.tsx.ejs +117 -0
  26. package/hedhog/frontend/app/editing/page.tsx.ejs +55 -0
  27. package/hedhog/frontend/app/incidents/page.tsx.ejs +59 -0
  28. package/hedhog/frontend/app/page.tsx.ejs +207 -0
  29. package/hedhog/frontend/app/projects/[id]/page.tsx.ejs +323 -0
  30. package/hedhog/frontend/app/projects/form/page.tsx.ejs +129 -0
  31. package/hedhog/frontend/app/projects/page.tsx.ejs +169 -0
  32. package/hedhog/frontend/app/publication/page.tsx.ejs +62 -0
  33. package/hedhog/frontend/app/scenes/form/page.tsx.ejs +110 -0
  34. package/hedhog/frontend/app/sessions/[id]/page.tsx.ejs +118 -0
  35. package/hedhog/frontend/app/sessions/form/page.tsx.ejs +103 -0
  36. package/hedhog/frontend/app/sessions/page.tsx.ejs +80 -0
  37. package/hedhog/frontend/app/storage-profiles/form/page.tsx.ejs +100 -0
  38. package/hedhog/frontend/app/storage-profiles/page.tsx.ejs +80 -0
  39. package/hedhog/frontend/app/takes/[id]/page.tsx.ejs +143 -0
  40. package/hedhog/frontend/app/takes/page.tsx.ejs +74 -0
  41. package/hedhog/table/capture_agent.yaml +48 -0
  42. package/hedhog/table/edit_composition.yaml +67 -0
  43. package/hedhog/table/edit_pipeline.yaml +46 -0
  44. package/hedhog/table/edit_stage_execution.yaml +46 -0
  45. package/hedhog/table/editor_delivery_package.yaml +63 -0
  46. package/hedhog/table/ingestion_job.yaml +74 -0
  47. package/hedhog/table/media_asset.yaml +130 -0
  48. package/hedhog/table/participant_command_ack.yaml +32 -0
  49. package/hedhog/table/participant_recording.yaml +67 -0
  50. package/hedhog/table/production_binding.yaml +34 -0
  51. package/hedhog/table/production_project.yaml +104 -0
  52. package/hedhog/table/publication_target.yaml +44 -0
  53. package/hedhog/table/recorded_file.yaml +74 -0
  54. package/hedhog/table/recording_command.yaml +72 -0
  55. package/hedhog/table/recording_incident.yaml +65 -0
  56. package/hedhog/table/recording_session.yaml +86 -0
  57. package/hedhog/table/scene.yaml +64 -0
  58. package/hedhog/table/scene_take.yaml +83 -0
  59. package/hedhog/table/session_participant.yaml +55 -0
  60. package/hedhog/table/storage_profile.yaml +75 -0
  61. package/hedhog/table/sync_marker.yaml +44 -0
  62. package/package.json +38 -0
  63. package/src/index.ts +4 -0
  64. package/src/language/en.json +8 -0
  65. package/src/language/pt.json +8 -0
  66. package/src/studio.controller.ts +94 -0
  67. package/src/studio.module.ts +20 -0
  68. package/src/studio.service.ts +102 -0
@@ -0,0 +1,63 @@
1
+ columns:
2
+ - type: pk
3
+ - name: production_project_id
4
+ type: fk
5
+ references:
6
+ table: production_project
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: scene_take_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: scene_take
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - name: edit_composition_id
19
+ type: fk
20
+ isNullable: true
21
+ references:
22
+ table: edit_composition
23
+ column: id
24
+ onDelete: SET NULL
25
+ onUpdate: CASCADE
26
+ - name: package_type
27
+ type: enum
28
+ values: [raw_take_bundle, participant_bundle, editing_bundle, proxy_bundle]
29
+ default: raw_take_bundle
30
+ - name: status
31
+ type: enum
32
+ values: [pending, generating, available, expired, failed]
33
+ default: pending
34
+ - name: manifest_json
35
+ type: json
36
+ isNullable: true
37
+ - name: generated_file_id
38
+ type: fk
39
+ isNullable: true
40
+ references:
41
+ table: file
42
+ column: id
43
+ onDelete: SET NULL
44
+ onUpdate: CASCADE
45
+ - name: download_url
46
+ type: varchar
47
+ length: 260
48
+ isNullable: true
49
+ - name: expires_at
50
+ type: datetime
51
+ isNullable: true
52
+ - name: generated_at
53
+ type: datetime
54
+ isNullable: true
55
+ - type: created_at
56
+ - type: updated_at
57
+
58
+ indices:
59
+ - columns: [production_project_id]
60
+ - columns: [scene_take_id]
61
+ - columns: [edit_composition_id]
62
+ - columns: [status]
63
+ - columns: [expires_at]
@@ -0,0 +1,74 @@
1
+ columns:
2
+ - type: pk
3
+ - name: scene_take_id
4
+ type: fk
5
+ references:
6
+ table: scene_take
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: participant_recording_id
11
+ type: fk
12
+ references:
13
+ table: participant_recording
14
+ column: id
15
+ onDelete: CASCADE
16
+ onUpdate: CASCADE
17
+ - name: session_participant_id
18
+ type: fk
19
+ references:
20
+ table: session_participant
21
+ column: id
22
+ onDelete: CASCADE
23
+ onUpdate: CASCADE
24
+ - name: capture_agent_id
25
+ type: fk
26
+ isNullable: true
27
+ references:
28
+ table: capture_agent
29
+ column: id
30
+ onDelete: SET NULL
31
+ onUpdate: CASCADE
32
+ - name: storage_profile_id
33
+ type: fk
34
+ references:
35
+ table: storage_profile
36
+ column: id
37
+ onDelete: RESTRICT
38
+ onUpdate: CASCADE
39
+ - name: job_status
40
+ type: enum
41
+ values: [pending, packing, uploading, uploaded, validating, completed, failed, partial]
42
+ default: pending
43
+ - name: original_size_bytes
44
+ type: bigint
45
+ isNullable: true
46
+ - name: compressed_size_bytes
47
+ type: bigint
48
+ isNullable: true
49
+ - name: file_count
50
+ type: int
51
+ isNullable: true
52
+ - name: checksum
53
+ type: varchar
54
+ length: 128
55
+ isNullable: true
56
+ - name: error_message
57
+ type: text
58
+ isNullable: true
59
+ - name: manifest_json
60
+ type: json
61
+ isNullable: true
62
+ - name: started_at
63
+ type: datetime
64
+ isNullable: true
65
+ - name: finished_at
66
+ type: datetime
67
+ isNullable: true
68
+ - type: created_at
69
+ - type: updated_at
70
+
71
+ indices:
72
+ - columns: [scene_take_id, job_status]
73
+ - columns: [participant_recording_id]
74
+ - columns: [storage_profile_id]
@@ -0,0 +1,130 @@
1
+ columns:
2
+ - type: pk
3
+ - name: production_project_id
4
+ type: fk
5
+ isNullable: true
6
+ references:
7
+ table: production_project
8
+ column: id
9
+ onDelete: SET NULL
10
+ onUpdate: CASCADE
11
+ - name: scene_id
12
+ type: fk
13
+ isNullable: true
14
+ references:
15
+ table: scene
16
+ column: id
17
+ onDelete: SET NULL
18
+ onUpdate: CASCADE
19
+ - name: scene_take_id
20
+ type: fk
21
+ isNullable: true
22
+ references:
23
+ table: scene_take
24
+ column: id
25
+ onDelete: SET NULL
26
+ onUpdate: CASCADE
27
+ - name: participant_recording_id
28
+ type: fk
29
+ isNullable: true
30
+ references:
31
+ table: participant_recording
32
+ column: id
33
+ onDelete: SET NULL
34
+ onUpdate: CASCADE
35
+ - name: ingestion_job_id
36
+ type: fk
37
+ isNullable: true
38
+ references:
39
+ table: ingestion_job
40
+ column: id
41
+ onDelete: SET NULL
42
+ onUpdate: CASCADE
43
+ - name: related_file_id
44
+ type: fk
45
+ isNullable: true
46
+ references:
47
+ table: file
48
+ column: id
49
+ onDelete: SET NULL
50
+ onUpdate: CASCADE
51
+ - name: asset_origin_type
52
+ type: enum
53
+ values: [uploaded_raw, generated_proxy, generated_waveform, final_render, subtitle, thumbnail, metadata]
54
+ default: uploaded_raw
55
+ - name: asset_type
56
+ type: enum
57
+ values: [camera_video, screen_capture, microphone_audio, system_audio, mixed_audio, composition_project, subtitle, thumbnail, final_video, other]
58
+ default: other
59
+ - name: provider_type
60
+ type: varchar
61
+ length: 60
62
+ isNullable: true
63
+ - name: bucket_name
64
+ type: varchar
65
+ length: 120
66
+ isNullable: true
67
+ - name: object_key
68
+ type: varchar
69
+ length: 300
70
+ isNullable: true
71
+ - name: version_id
72
+ type: varchar
73
+ length: 150
74
+ isNullable: true
75
+ - name: etag
76
+ type: varchar
77
+ length: 120
78
+ isNullable: true
79
+ - name: mime_type
80
+ type: varchar
81
+ length: 120
82
+ isNullable: true
83
+ - name: extension
84
+ type: varchar
85
+ length: 16
86
+ isNullable: true
87
+ - name: size_bytes
88
+ type: bigint
89
+ isNullable: true
90
+ - name: duration_ms
91
+ type: int
92
+ isNullable: true
93
+ - name: width
94
+ type: int
95
+ isNullable: true
96
+ - name: height
97
+ type: int
98
+ isNullable: true
99
+ - name: checksum
100
+ type: varchar
101
+ length: 128
102
+ isNullable: true
103
+ - name: availability_status
104
+ type: enum
105
+ values: [pending, available, archived, deleted, failed]
106
+ default: pending
107
+ - name: uploaded_by_participant_id
108
+ type: fk
109
+ isNullable: true
110
+ references:
111
+ table: session_participant
112
+ column: id
113
+ onDelete: SET NULL
114
+ onUpdate: CASCADE
115
+ - name: metadata_json
116
+ type: json
117
+ isNullable: true
118
+ - name: deleted_at
119
+ type: datetime
120
+ isNullable: true
121
+ - type: created_at
122
+ - type: updated_at
123
+
124
+ indices:
125
+ - columns: [production_project_id, asset_type]
126
+ - columns: [scene_take_id]
127
+ - columns: [participant_recording_id]
128
+ - columns: [related_file_id]
129
+ - columns: [availability_status]
130
+ - columns: [deleted_at]
@@ -0,0 +1,32 @@
1
+ columns:
2
+ - type: pk
3
+ - name: recording_command_id
4
+ type: fk
5
+ references:
6
+ table: recording_command
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: session_participant_id
11
+ type: fk
12
+ references:
13
+ table: session_participant
14
+ column: id
15
+ onDelete: CASCADE
16
+ onUpdate: CASCADE
17
+ - name: ack_type
18
+ type: enum
19
+ values: [received, accepted, executed, failed]
20
+ default: received
21
+ - name: ack_at
22
+ type: datetime
23
+ - name: details_json
24
+ type: json
25
+ isNullable: true
26
+ - type: created_at
27
+ - type: updated_at
28
+
29
+ indices:
30
+ - columns: [recording_command_id, session_participant_id]
31
+ isUnique: true
32
+ - columns: [ack_type]
@@ -0,0 +1,67 @@
1
+ columns:
2
+ - type: pk
3
+ - name: scene_take_id
4
+ type: fk
5
+ references:
6
+ table: scene_take
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: session_participant_id
11
+ type: fk
12
+ references:
13
+ table: session_participant
14
+ column: id
15
+ onDelete: CASCADE
16
+ onUpdate: CASCADE
17
+ - name: capture_agent_id
18
+ type: fk
19
+ isNullable: true
20
+ references:
21
+ table: capture_agent
22
+ column: id
23
+ onDelete: SET NULL
24
+ onUpdate: CASCADE
25
+ - name: recording_status
26
+ type: enum
27
+ values: [armed, recording, stopped, uploaded, failed, partial]
28
+ default: armed
29
+ - name: upload_status
30
+ type: enum
31
+ values: [not_started, compressing, ready_to_upload, uploading, uploaded, validated, failed]
32
+ default: not_started
33
+ - name: integrity_status
34
+ type: enum
35
+ values: [unknown, ok, warning, corrupted, incomplete]
36
+ default: unknown
37
+ - name: local_recording_started_at
38
+ type: datetime
39
+ isNullable: true
40
+ - name: local_recording_stopped_at
41
+ type: datetime
42
+ isNullable: true
43
+ - name: sync_offset_ms
44
+ type: int
45
+ isNullable: true
46
+ - name: drift_ms
47
+ type: int
48
+ isNullable: true
49
+ - name: manifest_status
50
+ type: enum
51
+ values: [pending, sent, validated, failed]
52
+ default: pending
53
+ - name: notes
54
+ type: text
55
+ isNullable: true
56
+ - name: metadata_json
57
+ type: json
58
+ isNullable: true
59
+ - type: created_at
60
+ - type: updated_at
61
+
62
+ indices:
63
+ - columns: [scene_take_id, session_participant_id]
64
+ isUnique: true
65
+ - columns: [recording_status]
66
+ - columns: [upload_status]
67
+ - columns: [integrity_status]
@@ -0,0 +1,34 @@
1
+ columns:
2
+ - type: pk
3
+ - name: production_project_id
4
+ type: fk
5
+ references:
6
+ table: production_project
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: binding_role
11
+ type: enum
12
+ values: [source, context, publication_target]
13
+ default: context
14
+ - name: bound_to_type
15
+ type: varchar
16
+ length: 80
17
+ - name: bound_to_id
18
+ type: varchar
19
+ length: 120
20
+ - name: bound_to_label
21
+ type: varchar
22
+ length: 180
23
+ isNullable: true
24
+ - name: metadata_json
25
+ type: json
26
+ isNullable: true
27
+ - type: created_at
28
+ - type: updated_at
29
+
30
+ indices:
31
+ - columns: [production_project_id, binding_role]
32
+ - columns: [bound_to_type, bound_to_id]
33
+ - columns: [production_project_id, bound_to_type, bound_to_id]
34
+ isUnique: true
@@ -0,0 +1,104 @@
1
+ columns:
2
+ - type: pk
3
+ - name: uuid
4
+ type: varchar
5
+ length: 36
6
+ isNullable: true
7
+ - name: title
8
+ - type: slug
9
+ - name: description
10
+ type: text
11
+ isNullable: true
12
+ - name: project_type
13
+ type: enum
14
+ values: [course_lesson, standalone, social_content, campaign_asset, other]
15
+ default: standalone
16
+ - name: status
17
+ type: enum
18
+ values: [draft, planned, in_recording, recorded, in_editing, in_finalization, ready_to_publish, published, archived, cancelled]
19
+ default: draft
20
+ - name: current_stage
21
+ type: enum
22
+ values: [preparation, recording, rough_cut, cleanup, finalization, publication]
23
+ default: preparation
24
+ - name: cover_file_id
25
+ type: fk
26
+ isNullable: true
27
+ references:
28
+ table: file
29
+ column: id
30
+ onDelete: SET NULL
31
+ onUpdate: CASCADE
32
+ - name: thumbnail_file_id
33
+ type: fk
34
+ isNullable: true
35
+ references:
36
+ table: file
37
+ column: id
38
+ onDelete: SET NULL
39
+ onUpdate: CASCADE
40
+ - name: owner_user_id
41
+ type: fk
42
+ isNullable: true
43
+ references:
44
+ table: user
45
+ column: id
46
+ onDelete: SET NULL
47
+ onUpdate: CASCADE
48
+ - name: assigned_editor_user_id
49
+ type: fk
50
+ isNullable: true
51
+ references:
52
+ table: user
53
+ column: id
54
+ onDelete: SET NULL
55
+ onUpdate: CASCADE
56
+ - name: planned_at
57
+ type: datetime
58
+ isNullable: true
59
+ - name: recorded_at
60
+ type: datetime
61
+ isNullable: true
62
+ - name: published_at
63
+ type: datetime
64
+ isNullable: true
65
+ - name: started_at
66
+ type: datetime
67
+ isNullable: true
68
+ - name: finished_at
69
+ type: datetime
70
+ isNullable: true
71
+ - name: metadata_json
72
+ type: json
73
+ isNullable: true
74
+ - name: created_by_user_id
75
+ type: fk
76
+ isNullable: true
77
+ references:
78
+ table: user
79
+ column: id
80
+ onDelete: SET NULL
81
+ onUpdate: CASCADE
82
+ - name: updated_by_user_id
83
+ type: fk
84
+ isNullable: true
85
+ references:
86
+ table: user
87
+ column: id
88
+ onDelete: SET NULL
89
+ onUpdate: CASCADE
90
+ - name: deleted_at
91
+ type: datetime
92
+ isNullable: true
93
+ - type: created_at
94
+ - type: updated_at
95
+
96
+ indices:
97
+ - columns: [slug]
98
+ isUnique: true
99
+ - columns: [status]
100
+ - columns: [project_type, status]
101
+ - columns: [current_stage]
102
+ - columns: [owner_user_id]
103
+ - columns: [assigned_editor_user_id]
104
+ - columns: [deleted_at]
@@ -0,0 +1,44 @@
1
+ columns:
2
+ - type: pk
3
+ - name: production_project_id
4
+ type: fk
5
+ references:
6
+ table: production_project
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: target_type
11
+ type: enum
12
+ values: [lms, youtube, tiktok, instagram, internal_library, external_url]
13
+ - name: target_reference
14
+ type: varchar
15
+ length: 180
16
+ isNullable: true
17
+ - name: publication_mode
18
+ type: enum
19
+ values: [manual, scheduled, automatic]
20
+ default: manual
21
+ - name: status
22
+ type: enum
23
+ values: [pending, scheduled, processing, published, failed]
24
+ default: pending
25
+ - name: scheduled_at
26
+ type: datetime
27
+ isNullable: true
28
+ - name: published_at
29
+ type: datetime
30
+ isNullable: true
31
+ - name: published_url
32
+ type: varchar
33
+ length: 260
34
+ isNullable: true
35
+ - name: metadata_json
36
+ type: json
37
+ isNullable: true
38
+ - type: created_at
39
+ - type: updated_at
40
+
41
+ indices:
42
+ - columns: [production_project_id]
43
+ - columns: [target_type, status]
44
+ - columns: [scheduled_at]
@@ -0,0 +1,74 @@
1
+ columns:
2
+ - type: pk
3
+ - name: ingestion_job_id
4
+ type: fk
5
+ references:
6
+ table: ingestion_job
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: participant_recording_id
11
+ type: fk
12
+ references:
13
+ table: participant_recording
14
+ column: id
15
+ onDelete: CASCADE
16
+ onUpdate: CASCADE
17
+ - name: source_type
18
+ type: enum
19
+ values: [camera_video, screen_capture, microphone_audio, system_audio, webcam_audio_video, metadata, project_file, other]
20
+ default: other
21
+ - name: local_filename
22
+ type: varchar
23
+ length: 220
24
+ - name: original_filename
25
+ type: varchar
26
+ length: 220
27
+ isNullable: true
28
+ - name: container_format
29
+ type: varchar
30
+ length: 40
31
+ isNullable: true
32
+ - name: codec
33
+ type: varchar
34
+ length: 80
35
+ isNullable: true
36
+ - name: mime_type
37
+ type: varchar
38
+ length: 120
39
+ isNullable: true
40
+ - name: duration_ms
41
+ type: int
42
+ isNullable: true
43
+ - name: size_bytes
44
+ type: bigint
45
+ isNullable: true
46
+ - name: checksum
47
+ type: varchar
48
+ length: 128
49
+ isNullable: true
50
+ - name: width
51
+ type: int
52
+ isNullable: true
53
+ - name: height
54
+ type: int
55
+ isNullable: true
56
+ - name: frame_rate
57
+ type: int
58
+ isNullable: true
59
+ - name: audio_sample_rate
60
+ type: int
61
+ isNullable: true
62
+ - name: track_index
63
+ type: int
64
+ isNullable: true
65
+ - name: is_optional
66
+ type: boolean
67
+ default: false
68
+ - type: created_at
69
+ - type: updated_at
70
+
71
+ indices:
72
+ - columns: [ingestion_job_id]
73
+ - columns: [participant_recording_id]
74
+ - columns: [source_type]
@@ -0,0 +1,72 @@
1
+ columns:
2
+ - type: pk
3
+ - name: recording_session_id
4
+ type: fk
5
+ references:
6
+ table: recording_session
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: scene_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: scene
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - name: scene_take_id
19
+ type: fk
20
+ isNullable: true
21
+ references:
22
+ table: scene_take
23
+ column: id
24
+ onDelete: SET NULL
25
+ onUpdate: CASCADE
26
+ - name: command_type
27
+ type: enum
28
+ values: [arm, start, stop, pause, resume, cancel]
29
+ - name: command_status
30
+ type: enum
31
+ values: [issued, acknowledged, partially_executed, executed, failed]
32
+ default: issued
33
+ - name: requested_by_user_id
34
+ type: fk
35
+ isNullable: true
36
+ references:
37
+ table: user
38
+ column: id
39
+ onDelete: SET NULL
40
+ onUpdate: CASCADE
41
+ - name: issued_by_user_id
42
+ type: fk
43
+ isNullable: true
44
+ references:
45
+ table: user
46
+ column: id
47
+ onDelete: SET NULL
48
+ onUpdate: CASCADE
49
+ - name: command_uuid
50
+ type: varchar
51
+ length: 36
52
+ - name: idempotency_key
53
+ type: varchar
54
+ length: 120
55
+ isNullable: true
56
+ - name: payload_json
57
+ type: json
58
+ isNullable: true
59
+ - name: issued_at
60
+ type: datetime
61
+ - name: effective_at
62
+ type: datetime
63
+ isNullable: true
64
+ - type: created_at
65
+ - type: updated_at
66
+
67
+ indices:
68
+ - columns: [recording_session_id, issued_at]
69
+ - columns: [scene_take_id]
70
+ - columns: [command_uuid]
71
+ isUnique: true
72
+ - columns: [idempotency_key]