@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.
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/studio.controller.d.ts +79 -0
- package/dist/studio.controller.d.ts.map +1 -0
- package/dist/studio.controller.js +186 -0
- package/dist/studio.controller.js.map +1 -0
- package/dist/studio.module.d.ts +3 -0
- package/dist/studio.module.d.ts.map +1 -0
- package/dist/studio.module.js +33 -0
- package/dist/studio.module.js.map +1 -0
- package/dist/studio.service.d.ts +76 -0
- package/dist/studio.service.d.ts.map +1 -0
- package/dist/studio.service.js +98 -0
- package/dist/studio.service.js.map +1 -0
- package/hedhog/data/menu.yaml +114 -0
- package/hedhog/data/role.yaml +7 -0
- package/hedhog/data/route.yaml +152 -0
- package/hedhog/data/setting_group.yaml +8 -0
- package/hedhog/frontend/app/_components/studio-status-badge.tsx.ejs +14 -0
- package/hedhog/frontend/app/_lib/mocks.ts.ejs +209 -0
- package/hedhog/frontend/app/_lib/status.ts.ejs +38 -0
- package/hedhog/frontend/app/_lib/types.ts.ejs +148 -0
- package/hedhog/frontend/app/assets/page.tsx.ejs +117 -0
- package/hedhog/frontend/app/editing/page.tsx.ejs +55 -0
- package/hedhog/frontend/app/incidents/page.tsx.ejs +59 -0
- package/hedhog/frontend/app/page.tsx.ejs +207 -0
- package/hedhog/frontend/app/projects/[id]/page.tsx.ejs +323 -0
- package/hedhog/frontend/app/projects/form/page.tsx.ejs +129 -0
- package/hedhog/frontend/app/projects/page.tsx.ejs +169 -0
- package/hedhog/frontend/app/publication/page.tsx.ejs +62 -0
- package/hedhog/frontend/app/scenes/form/page.tsx.ejs +110 -0
- package/hedhog/frontend/app/sessions/[id]/page.tsx.ejs +118 -0
- package/hedhog/frontend/app/sessions/form/page.tsx.ejs +103 -0
- package/hedhog/frontend/app/sessions/page.tsx.ejs +80 -0
- package/hedhog/frontend/app/storage-profiles/form/page.tsx.ejs +100 -0
- package/hedhog/frontend/app/storage-profiles/page.tsx.ejs +80 -0
- package/hedhog/frontend/app/takes/[id]/page.tsx.ejs +143 -0
- package/hedhog/frontend/app/takes/page.tsx.ejs +74 -0
- package/hedhog/table/capture_agent.yaml +48 -0
- package/hedhog/table/edit_composition.yaml +67 -0
- package/hedhog/table/edit_pipeline.yaml +46 -0
- package/hedhog/table/edit_stage_execution.yaml +46 -0
- package/hedhog/table/editor_delivery_package.yaml +63 -0
- package/hedhog/table/ingestion_job.yaml +74 -0
- package/hedhog/table/media_asset.yaml +130 -0
- package/hedhog/table/participant_command_ack.yaml +32 -0
- package/hedhog/table/participant_recording.yaml +67 -0
- package/hedhog/table/production_binding.yaml +34 -0
- package/hedhog/table/production_project.yaml +104 -0
- package/hedhog/table/publication_target.yaml +44 -0
- package/hedhog/table/recorded_file.yaml +74 -0
- package/hedhog/table/recording_command.yaml +72 -0
- package/hedhog/table/recording_incident.yaml +65 -0
- package/hedhog/table/recording_session.yaml +86 -0
- package/hedhog/table/scene.yaml +64 -0
- package/hedhog/table/scene_take.yaml +83 -0
- package/hedhog/table/session_participant.yaml +55 -0
- package/hedhog/table/storage_profile.yaml +75 -0
- package/hedhog/table/sync_marker.yaml +44 -0
- package/package.json +38 -0
- package/src/index.ts +4 -0
- package/src/language/en.json +8 -0
- package/src/language/pt.json +8 -0
- package/src/studio.controller.ts +94 -0
- package/src/studio.module.ts +20 -0
- 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]
|