mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-18 00:16:37 +08:00
130 lines
4.5 KiB
Go
130 lines
4.5 KiB
Go
package dto
|
||
|
||
import (
|
||
"encoding/json"
|
||
)
|
||
|
||
type TaskData interface {
|
||
SunoDataResponse | []SunoDataResponse | string | any
|
||
}
|
||
|
||
type SunoSubmitReq struct {
|
||
GptDescriptionPrompt string `json:"gpt_description_prompt,omitempty"`
|
||
Prompt string `json:"prompt,omitempty"`
|
||
Mv string `json:"mv,omitempty"`
|
||
Title string `json:"title,omitempty"`
|
||
Tags string `json:"tags,omitempty"`
|
||
ContinueAt float64 `json:"continue_at,omitempty"`
|
||
TaskID string `json:"task_id,omitempty"`
|
||
ContinueClipId string `json:"continue_clip_id,omitempty"`
|
||
MakeInstrumental bool `json:"make_instrumental"`
|
||
}
|
||
|
||
type FetchReq struct {
|
||
IDs []string `json:"ids"`
|
||
}
|
||
|
||
type SunoDataResponse struct {
|
||
TaskID string `json:"task_id" gorm:"type:varchar(50);index"`
|
||
Action string `json:"action" gorm:"type:varchar(40);index"` // 任务类型, song, lyrics, description-mode
|
||
Status string `json:"status" gorm:"type:varchar(20);index"` // 任务状态, submitted, queueing, processing, success, failed
|
||
FailReason string `json:"fail_reason"`
|
||
SubmitTime int64 `json:"submit_time" gorm:"index"`
|
||
StartTime int64 `json:"start_time" gorm:"index"`
|
||
FinishTime int64 `json:"finish_time" gorm:"index"`
|
||
Data json.RawMessage `json:"data" gorm:"type:json"`
|
||
}
|
||
|
||
type SunoSong struct {
|
||
ID string `json:"id"`
|
||
VideoURL string `json:"video_url"`
|
||
AudioURL string `json:"audio_url"`
|
||
ImageURL string `json:"image_url"`
|
||
ImageLargeURL string `json:"image_large_url"`
|
||
MajorModelVersion string `json:"major_model_version"`
|
||
ModelName string `json:"model_name"`
|
||
Status string `json:"status"`
|
||
Title string `json:"title"`
|
||
Text string `json:"text"`
|
||
Metadata SunoMetadata `json:"metadata"`
|
||
}
|
||
|
||
type SunoMetadata struct {
|
||
Tags string `json:"tags"`
|
||
Prompt string `json:"prompt"`
|
||
GPTDescriptionPrompt interface{} `json:"gpt_description_prompt"`
|
||
AudioPromptID interface{} `json:"audio_prompt_id"`
|
||
Duration interface{} `json:"duration"`
|
||
ErrorType interface{} `json:"error_type"`
|
||
ErrorMessage interface{} `json:"error_message"`
|
||
}
|
||
|
||
type SunoLyrics struct {
|
||
ID string `json:"id"`
|
||
Status string `json:"status"`
|
||
Title string `json:"title"`
|
||
Text string `json:"text"`
|
||
}
|
||
|
||
const TaskSuccessCode = "success"
|
||
|
||
type TaskResponse[T TaskData] struct {
|
||
Code string `json:"code"`
|
||
Message string `json:"message"`
|
||
Data T `json:"data"`
|
||
}
|
||
|
||
func (t *TaskResponse[T]) IsSuccess() bool {
|
||
return t.Code == TaskSuccessCode
|
||
}
|
||
|
||
type TaskDto struct {
|
||
TaskID string `json:"task_id"` // 第三方id,不一定有/ song id\ Task id
|
||
Action string `json:"action"` // 任务类型, song, lyrics, description-mode
|
||
Status string `json:"status"` // 任务状态, submitted, queueing, processing, success, failed
|
||
FailReason string `json:"fail_reason"`
|
||
SubmitTime int64 `json:"submit_time"`
|
||
StartTime int64 `json:"start_time"`
|
||
FinishTime int64 `json:"finish_time"`
|
||
Progress string `json:"progress"`
|
||
Data json.RawMessage `json:"data"`
|
||
}
|
||
|
||
type SunoGoAPISubmitReq struct {
|
||
CustomMode bool `json:"custom_mode"`
|
||
|
||
Input SunoGoAPISubmitReqInput `json:"input"`
|
||
|
||
NotifyHook string `json:"notify_hook,omitempty"`
|
||
}
|
||
|
||
type SunoGoAPISubmitReqInput struct {
|
||
GptDescriptionPrompt string `json:"gpt_description_prompt"`
|
||
Prompt string `json:"prompt"`
|
||
Mv string `json:"mv"`
|
||
Title string `json:"title"`
|
||
Tags string `json:"tags"`
|
||
ContinueAt float64 `json:"continue_at"`
|
||
TaskID string `json:"task_id"`
|
||
ContinueClipId string `json:"continue_clip_id"`
|
||
MakeInstrumental bool `json:"make_instrumental"`
|
||
}
|
||
|
||
type GoAPITaskResponse[T any] struct {
|
||
Code int `json:"code"`
|
||
Message string `json:"message"`
|
||
Data T `json:"data"`
|
||
ErrorMessage string `json:"error_message,omitempty"`
|
||
}
|
||
|
||
type GoAPITaskResponseData struct {
|
||
TaskID string `json:"task_id"`
|
||
}
|
||
|
||
type GoAPIFetchResponseData struct {
|
||
TaskID string `json:"task_id"`
|
||
Status string `json:"status"`
|
||
Input string `json:"input"`
|
||
Clips map[string]SunoSong `json:"clips"`
|
||
}
|