---
# System prepended metadata

title: Untitled

---

```mermaid
sequenceDiagram
autonumber

participant mb as Mobile Client 
participant hasura as Harura
participant storage as Google Storage Bucket
participant image_resizer as Image Resizer 
participant saveImageInfoFn as SaveImageInfo Firebase Function 
participant lst as Local Storage

link hasura: GetSession query @ https://wiki.nodeart.app/display/LIV/User+profile#Userprofile-Userlogingraphqlmutation
link mb: SetAvatar mutation @ https://wiki.nodeart.app/display/LIV/User+Gallery#UserGallery-SetAvatargqlrequest
link mb: GetPhotoUploadUrl @ https://wiki.nodeart.app/display/LIV/User+Gallery#UserGallery-Uploadingimages

Note over mb: get desired image size for device

activate mb
mb ->> hasura: call GetSessionByClientToken query 
hasura ->> mb: reply with desired device image size

mb ->> lst: store the device image size in local storage

mb ->> hasura: call GetPhotoUploadUrl query
hasura ->> mb: returns the signed url to upload the image
Note right of mb: prepare the image for uploading (set mime type, etc)

activate mb
mb ->> storage: upload the image to cloud storage
deactivate mb

activate image_resizer
loop Image processing loop

image_resizer ->> storage: Resize image accroding to image resizer settings for a while 
storage ->> saveImageInfoFn: storage object added event trigger SaveImageInfo Firebase Function 
saveImageInfoFn ->> hasura: adds image url to hasura database 

end


loop Fetch images loop
activate mb 
Note left of hasura: "call GetImagesByFileName query in order to fetch new resized images by Image Resizer"
Note left of hasura: get image from local storage and use in the next query to hasura
mb ->> hasura: call GetImagesByFileName gql query 
hasura ->> mb: reply with new image records with desired image size and filenames
end

mb ->> hasura: call SetAvatar mutation
hasura ->> mb: profile avatar is set
```