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  }