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.