generated from VLADIMIR/template
48 lines
1.7 KiB
Go
48 lines
1.7 KiB
Go
package scenario_archive
|
|
|
|
import (
|
|
"context"
|
|
|
|
"evening_detective_server/internal/modules/storytelling"
|
|
"evening_detective_server/internal/repos"
|
|
)
|
|
|
|
// Имя файла с описанием сценария внутри архива.
|
|
const FileName = "scenario.json"
|
|
|
|
// Текущая версия формата scenario.json.
|
|
const Version = 1
|
|
|
|
// ScenarioJSON — описание сценария в архиве; Story — в формате колонки
|
|
// scenarios.scenario в БД.
|
|
type ScenarioJSON struct {
|
|
Version int `json:"version"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
Image string `json:"image,omitempty"`
|
|
Story *storytelling.Story `json:"story"`
|
|
}
|
|
|
|
// Bundle — результат разбора входящего архива.
|
|
type Bundle struct {
|
|
Scenario *ScenarioJSON
|
|
Files map[string][]byte
|
|
}
|
|
|
|
// IScenarioArchive — контракт модуля scenario_archive: сборка и разбор
|
|
// ZIP-архива сценария.
|
|
type IScenarioArchive interface {
|
|
// Pack собирает ZIP-архив сценария: ссылки на изображения хранилища
|
|
// переписываются в images/<имя>, файлы запрашиваются через getFile;
|
|
// внешние URL остаются без изменений.
|
|
Pack(
|
|
ctx context.Context,
|
|
scenario *repos.Scenario,
|
|
domain string,
|
|
getFile func(ctx context.Context, name string) ([]byte, error),
|
|
) ([]byte, error)
|
|
|
|
// Unpack разбирает входящий архив с проверкой лимитов и путей записей.
|
|
Unpack(data []byte) (*Bundle, error)
|
|
}
|