//go:build mysql // +build mysql package mysql import ( "context" "database/sql" "github.com/tinode/chat/server/store" t "github.com/tinode/chat/server/store/types" ) type fileReviewExecContext interface { ExecContext(context.Context, string, ...any) (sql.Result, error) } func insertFileReviewTasks(ctx context.Context, exec fileReviewExecContext, fd *t.FileDef) error { fileID := decodeUID(fd.Uid()) userID := int64(0) if fd.User != "" { userID = decodeUID(t.ParseUid(fd.User)) } tasks := []struct { taskType string provider string }{ {taskType: t.FileReviewTaskTypeContent, provider: t.FileReviewProviderAliyunGreen}, {taskType: t.FileReviewTaskTypeMalware, provider: t.FileReviewProviderAliyunSAS}, } for _, task := range tasks { id, err := nextSnowflakeID() if err != nil { return err } taskID := store.EncodeUid(id).String() _, err = exec.ExecContext(ctx, `INSERT IGNORE INTO im_file_review_tasks (id,task_id,file_id,user_id,task_type,provider,storage_provider,object_name,mime_type,file_size,status,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)`, id, taskID, fileID, userID, task.taskType, task.provider, "", fd.Location, fd.MimeType, fd.Size, t.FileReviewStatusPending, fd.UpdatedAt, fd.UpdatedAt) if err != nil { return err } } return nil }