File size: 2,273 Bytes
11f4e50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import mongoose, { Schema, Document } from 'mongoose';

export interface IVideoAsset {
    type: 'clip' | 'image' | 'logo';
    path: string;
}

export interface IVideoVoice {
    type: string;
    language: string;
    tone: string;
    speed: number;
}

export interface IExportUrl {
    format: string;
    quality: string;
    url: string;
}

export interface IVideo extends Document {
    projectId: mongoose.Types.ObjectId;
    script: string;
    voice: IVideoVoice;
    music: {
        filePath: string;
    };
    stylePreset: mongoose.Types.ObjectId;
    assets: IVideoAsset[];
    status: 'pending' | 'generating' | 'preview' | 'exported' | 'failed';
    previewUrl: string;
    exportUrls: IExportUrl[];
    cliLog: string[];
    createdAt: Date;
}

const VideoSchema = new Schema<IVideo>({
    projectId: {
        type: Schema.Types.ObjectId,
        ref: 'Project',
        required: true,
    },
    script: {
        type: String,
        required: true,
    },
    voice: {
        type: {
            type: String,
            default: 'neutral',
        },
        language: {
            type: String,
            default: 'en',
        },
        tone: {
            type: String,
            default: 'professional',
        },
        speed: {
            type: Number,
            default: 1.0,
        },
    },
    music: {
        filePath: {
            type: String,
            default: '',
        },
    },
    stylePreset: {
        type: Schema.Types.ObjectId,
        ref: 'Preset',
    },
    assets: [{
        type: {
            type: String,
            enum: ['clip', 'image', 'logo'],
        },
        path: String,
    }],
    status: {
        type: String,
        enum: ['pending', 'generating', 'preview', 'exported', 'failed'],
        default: 'pending',
    },
    previewUrl: {
        type: String,
        default: '',
    },
    exportUrls: [{
        format: String,
        quality: String,
        url: String,
    }],
    cliLog: [{
        type: String,
    }],
    createdAt: {
        type: Date,
        default: Date.now,
    },
});

export const Video = mongoose.model<IVideo>('Video', VideoSchema);