Skip to content

Upload Process

Seán Lynch edited this page May 6, 2023 · 10 revisions

PhotosController@store

Currently being refactored to Uploads\UploadPhotoController

1. Verification

  • Request Verification

    • The file should be an image
  • Check for GPS

    • We extract the EXIF data and check it for GPS keys.
      • If no GPS keys are found, a 500 error is thrown and the process is aborted.
    • We then test for empty "0/0" values, which we believe can be introduced when transferring images across devices.
      • If no GPS values are found, a 500 error is thrown with this information.
  • Check For Duplicates

    • We check the dateTime the image was taken at.
    • The user will get an error if they try to upload the same photo twice.

2. Upload the Photo

Actions Used

  • UploadPhotoAction x2
    • We use AWS S3 on production, DigitalOcean on staging, and public/local-uploads/ locally.
    • Creates the filepath in year/month/day/fileHashName.jpg format.
    • Uploads the photo.
    • We duplicate the upload with a resized image of 500x500 dimensions for the OpenLitterAI.
      • This should be done asynchronously after everything else has been done.

3. Check For Locations

  • Create New Locations
    • If a new location is created, we fire these events: NewCountryAdded, NewStateAdded, and NewCityAdded.
    • These need to move to after the Photo was created.

4. Update Leaderboards & XP.

  • We need to move the Users XP to Redis.
  • We need daily, weekly, monthly Leaderboards.

5. Dispatch Events & Notifications

  • After everything is done, we should dispatch these last.
    • Image Uploaded

      • AddLocationContributor
      • IncreaseLocationTotalPhotos
      • IncreaseTeamTotalPhotos
        • This data needs to move to Redis
    • Locations Created should move here

    • Increment PhotosPerMonth

      • IncrementCountryMonth
      • IncrementStateMonth
      • IncrementCityMonth
    • We also need PhotosPerDay, per week and more.

Clone this wiki locally