feat: image variants per image

This commit is contained in:
fsylvain committed 2026-10-08 19:57:51 +02:00
1 parent f567866161
commit 951fef18ba
92 files changed
+8695 -413

No files matched your search

+26
View File
@@ -7,6 +7,7 @@ import (
"bytes"
"errors"
"io"
"log"
"sort"
"strconv"
"strings"
@@ -114,6 +115,8 @@ type mockVariantFileRepo struct {
deleted []uint32
saves int
calls int
totalsBySourceCalls int
}
var _ domain.VariantFileRepository = &mockVariantFileRepo{}
@@ -195,6 +198,19 @@ func (m *mockVariantFileRepo) Totals() (map[string]domain.VariantFileTotals, err
return totals, nil
}
func (m *mockVariantFileRepo) TotalsBySource() (map[string]domain.VariantFileTotals, error) {
m.mutex.Lock()
defer m.mutex.Unlock()
m.calls++
m.totalsBySourceCalls++
totals := map[string]domain.VariantFileTotals{}
for _, row := range m.rows {
current := totals[row.SourceName]
totals[row.SourceName] = domain.VariantFileTotals{Files: current.Files + 1, Bytes: current.Bytes + row.Size}
}
return totals, nil
}
func (m *mockVariantFileRepo) rowsOf(variantName string) []domain.VariantFile {
rows, _ := m.ListByVariant(variantName)
return rows
@@ -290,6 +306,7 @@ type countingRenderer struct {
calls atomic.Int32
failFirst bool
onRender func()
failFor func(settings domain.VariantSettings) error
}
var _ domain.VariantRenderer = &countingRenderer{}
@@ -307,6 +324,11 @@ func (c *countingRenderer) Render(source io.Reader, settings domain.VariantSetti
if c.onRender != nil {
c.onRender()
}
if c.failFor != nil {
if err := c.failFor(settings); err != nil {
return domain.RenderedVariant{}, err
}
}
if c.failFirst && call == 1 {
return domain.RenderedVariant{}, errors.New("render failure")
}
@@ -371,6 +393,10 @@ func newInertServeVariantUseCase(storage domain.Storage) *useCases.ServeVariantU
return useCases.NewServeVariantUseCase(newMockVariantRepo(), newMockVariantFileRepo(), newMockImageRepo(), storage, newCountingRenderer(), defaultServeLimits(variantDefaultCap))
}
func newInertGenerateOnUploadUseCase() *useCases.GenerateVariantsOnUploadUseCase {
return useCases.NewGenerateVariantsOnUploadUseCase(newMockVariantRepo(), newInertServeVariantUseCase(newMockVariantStorage()), log.New(io.Discard, "", 0))
}
func (m *mockVariantStorage) openCountOf(storedName string) int {
m.mutex.Lock()
defer m.mutex.Unlock()