refactor(album): migrate photo voting to new architecture
Move the vote action to POST /album/photo/{img}/vote/{type} with CSRF.
- Add VoteType enum, EnsureVoteAccessUseCase (can_vote policy),
GetVotePhotoContextUseCase, VotePhotoUseCase and VotePhotoController.
- Add vote repository methods (hasUserVote/addVote) and atomic
vote counter increments on the photo repository.
- Update PhotoPresenter vote URLs and convert vote links to inline
POST forms in top/show/show_one templates.
- Remove legacy includes/vote.php and drop it from the dispatcher.
- Add VoteType enum, EnsureVoteAccessUseCase (can_vote policy),
GetVotePhotoContextUseCase, VotePhotoUseCase and VotePhotoController.
- Add vote repository methods (hasUserVote/addVote) and atomic
vote counter increments on the photo repository.
- Update PhotoPresenter vote URLs and convert vote links to inline
POST forms in top/show/show_one templates.
- Remove legacy includes/vote.php and drop it from the dispatcher.