fa6019ef

By: Michael Lynch <git@mtlynch.io>

Collapse duplicated animated-photo upload path

ProcessableAnimatedPhoto was identical to ProcessablePhoto and built by the
same resolution check, so the separate type, constructor, handler case, and
process method only duplicated code. Use ProcessablePhoto for both kinds,
select the converter by media type in the handler, and share the full-size
write between ProcessPhoto and ProcessAnimatedPhoto.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
configuredevShellbackendbackend-devcheck-bashcheck-frontendcheck-go-formattingcheck-go-test-packagescheck-trailing-newlinecheck-trailing-whitespacedeploy-to-flydiagramdocker-imagee2e-testsgo-testsimport-from-tinybeanslint-sqllittle-momentslittle-moments-devx86_64-linux