c909a902

By: Michael Lynch <git@mtlynch.io>

Introduce littlemoments.UploadPath; validate inline instead of via Processable types

Replace uploads.ProcessableImage/ProcessableVideo with inline
validate-then-process calls in ProcessImage/ProcessVideo: those types only
ever proved validation happened before a *separate* caller processed the
file, but now validation and processing happen in one call, so nothing
outside the function observes the intermediate value. Replace the
zero-validation littlemoments.VideoUploadPath and the plain string used for
image paths with one shared, validated littlemoments.UploadPath type
(rejects empty and "/"), threading it from handlers/upload.go's
copyToTempFile through to convert.ExtractPreviewFrameFromVideo, which now
takes the path and duration directly instead of via a convert.ProcessableVideo
interface.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 1s 3s 3s 4s 1s
Eval 6s 20s 20s 26s 1s
Build 23s 5m59s 2m13s 2m36s 0s
Suite 1s 6m23s 2m34s 2m36s 2s

Timeline

0s20s40s1m1m20s1m40s2m2m20s