mirror of
https://github.com/derfenix/webarchive.git
synced 2026-03-11 12:41:54 +03:00
173 lines
3.9 KiB
Go
173 lines
3.9 KiB
Go
package rest
|
|
|
|
import (
|
|
"fmt"
|
|
"html"
|
|
|
|
"github.com/derfenix/webarchive/api/openapi"
|
|
"github.com/derfenix/webarchive/entity"
|
|
)
|
|
|
|
func PageToRestWithResults(page *entity.Page) openapi.PageWithResults {
|
|
return openapi.PageWithResults{
|
|
ID: page.ID,
|
|
URL: page.URL,
|
|
Created: page.Created,
|
|
Formats: func() []openapi.Format {
|
|
res := make([]openapi.Format, len(page.Formats))
|
|
|
|
for i, format := range page.Formats {
|
|
res[i] = FormatToRest(format)
|
|
}
|
|
|
|
return res
|
|
}(),
|
|
Status: StatusToRest(page.Status),
|
|
Meta: openapi.PageWithResultsMeta{
|
|
Title: html.EscapeString(page.Meta.Title),
|
|
Description: html.EscapeString(page.Meta.Description),
|
|
Error: openapi.NewOptString(page.Meta.Error),
|
|
},
|
|
Results: func() []openapi.Result {
|
|
results := make([]openapi.Result, len(page.Results))
|
|
|
|
for i := range results {
|
|
result := &page.Results[i]
|
|
|
|
errText := openapi.OptString{}
|
|
if result.Err != nil {
|
|
errText = openapi.NewOptString(result.Err.Error())
|
|
}
|
|
|
|
results[i] = openapi.Result{
|
|
Format: FormatToRest(result.Format),
|
|
Error: errText,
|
|
Files: func() []openapi.ResultFilesItem {
|
|
files := make([]openapi.ResultFilesItem, len(result.Files))
|
|
|
|
for j := range files {
|
|
file := &result.Files[j]
|
|
|
|
files[j] = openapi.ResultFilesItem{
|
|
ID: file.ID,
|
|
Name: file.Name,
|
|
Mimetype: file.MimeType,
|
|
Size: file.Size,
|
|
}
|
|
}
|
|
|
|
return files
|
|
}(),
|
|
}
|
|
}
|
|
|
|
return results
|
|
}(),
|
|
}
|
|
}
|
|
|
|
func BasePageToRest(page *entity.PageBase) openapi.Page {
|
|
return openapi.Page{
|
|
ID: page.ID,
|
|
URL: page.URL,
|
|
Created: page.Created,
|
|
Meta: openapi.PageMeta{
|
|
Title: html.EscapeString(page.Meta.Title),
|
|
Description: html.EscapeString(page.Meta.Description),
|
|
Error: openapi.NewOptString(page.Meta.Error),
|
|
},
|
|
Formats: func() []openapi.Format {
|
|
res := make([]openapi.Format, len(page.Formats))
|
|
|
|
for i, format := range page.Formats {
|
|
res[i] = FormatToRest(format)
|
|
}
|
|
|
|
return res
|
|
}(),
|
|
Status: StatusToRest(page.Status),
|
|
}
|
|
}
|
|
|
|
func PageToRest(page *entity.Page) openapi.Page {
|
|
return openapi.Page{
|
|
ID: page.ID,
|
|
URL: page.URL,
|
|
Created: page.Created,
|
|
Meta: openapi.PageMeta{
|
|
Title: html.EscapeString(page.Meta.Title),
|
|
Description: html.EscapeString(page.Meta.Description),
|
|
Error: openapi.NewOptString(page.Meta.Error),
|
|
},
|
|
Formats: func() []openapi.Format {
|
|
res := make([]openapi.Format, len(page.Formats))
|
|
|
|
for i, format := range page.Formats {
|
|
res[i] = FormatToRest(format)
|
|
}
|
|
|
|
return res
|
|
}(),
|
|
Status: StatusToRest(page.Status),
|
|
}
|
|
}
|
|
|
|
func StatusToRest(s entity.Status) openapi.Status {
|
|
switch s {
|
|
case entity.StatusNew:
|
|
return openapi.StatusNew
|
|
case entity.StatusProcessing:
|
|
return openapi.StatusProcessing
|
|
case entity.StatusDone:
|
|
return openapi.StatusDone
|
|
case entity.StatusFailed:
|
|
return openapi.StatusFailed
|
|
case entity.StatusWithErrors:
|
|
return openapi.StatusWithErrors
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
func FormatFromRest(format []openapi.Format) ([]entity.Format, error) {
|
|
var formats []entity.Format
|
|
|
|
switch {
|
|
case len(format) == 0 || (len(format) == 1 && format[0] == openapi.FormatAll):
|
|
formats = entity.AllFormats
|
|
|
|
default:
|
|
formats = make([]entity.Format, len(format))
|
|
for i, format := range format {
|
|
switch format {
|
|
case openapi.FormatPdf:
|
|
formats[i] = entity.FormatPDF
|
|
|
|
case openapi.FormatHeaders:
|
|
formats[i] = entity.FormatHeaders
|
|
|
|
case openapi.FormatSingleFile:
|
|
formats[i] = entity.FormatSingleFile
|
|
|
|
default:
|
|
return nil, fmt.Errorf("invalid format value %s", format)
|
|
}
|
|
}
|
|
}
|
|
|
|
return formats, nil
|
|
}
|
|
|
|
func FormatToRest(format entity.Format) openapi.Format {
|
|
switch format {
|
|
case entity.FormatPDF:
|
|
return openapi.FormatPdf
|
|
case entity.FormatSingleFile:
|
|
return openapi.FormatSingleFile
|
|
case entity.FormatHeaders:
|
|
return openapi.FormatHeaders
|
|
default:
|
|
return ""
|
|
}
|
|
}
|