github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/profiles/delivery/http/handlers/updaters.go (about) 1 package handlers 2 3 import ( 4 "encoding/json" 5 "github.com/k0marov/go-socnet/core/general/client_errors" 6 helpers "github.com/k0marov/go-socnet/core/helpers/http_helpers" 7 "github.com/k0marov/go-socnet/features/profiles/delivery/http/responses" 8 "net/http" 9 10 "github.com/k0marov/go-socnet/features/profiles/domain/service" 11 "github.com/k0marov/go-socnet/features/profiles/domain/values" 12 13 "github.com/go-chi/chi/v5" 14 ) 15 16 func NewUpdateMeHandler(profileUpdater service.ProfileUpdater) http.HandlerFunc { 17 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 18 user, ok := helpers.GetUserOrAddUnauthorized(w, r) 19 if !ok { 20 return 21 } 22 23 var updateData values.ProfileUpdateData 24 err := json.NewDecoder(r.Body).Decode(&updateData) 25 if err != nil { 26 helpers.ThrowClientError(w, client_errors.InvalidJsonError) 27 return 28 } 29 30 updatedProfile, err := profileUpdater(user, updateData) 31 if err != nil { 32 helpers.HandleServiceError(w, err) 33 return 34 } 35 36 helpers.WriteJson(w, responses.NewProfileResponse(updatedProfile)) 37 }) 38 } 39 40 func NewToggleFollowHandler(followToggler service.FollowToggler) http.HandlerFunc { 41 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 42 follower, ok := helpers.GetUserOrAddUnauthorized(w, r) 43 if !ok { 44 return 45 } 46 47 targetId := chi.URLParam(r, "id") 48 if targetId == "" { 49 helpers.ThrowClientError(w, client_errors.IdNotProvided) 50 return 51 } 52 53 err := followToggler(targetId, follower.Id) 54 if err != nil { 55 helpers.HandleServiceError(w, err) 56 return 57 } 58 }) 59 } 60 61 func NewUpdateAvatarHandler(avatarUpdater service.AvatarUpdater) http.HandlerFunc { 62 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 63 user, ok := helpers.GetUserOrAddUnauthorized(w, r) 64 if !ok { 65 return 66 } 67 68 avatarFileData, ok := helpers.ParseFile(r, "avatar") 69 if !ok { 70 helpers.ThrowClientError(w, client_errors.AvatarNotProvidedError) 71 return 72 } 73 avatarData := values.AvatarData{Data: avatarFileData} 74 75 url, err := avatarUpdater(user, avatarData) 76 if err != nil { 77 helpers.HandleServiceError(w, err) 78 return 79 } 80 81 helpers.WriteJson(w, responses.AvatarURLResponse{AvatarURL: url}) 82 }) 83 }