38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
|
|
// Code scaffolded by goctl. Safe to edit.
|
||
|
|
// goctl 1.10.1
|
||
|
|
|
||
|
|
package member
|
||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"net/http"
|
||
|
|
|
||
|
|
app "haixun-backend/internal/library/errors"
|
||
|
|
"haixun-backend/internal/library/errors/code"
|
||
|
|
|
||
|
|
"haixun-backend/internal/logic/member"
|
||
|
|
"haixun-backend/internal/response"
|
||
|
|
"haixun-backend/internal/svc"
|
||
|
|
)
|
||
|
|
|
||
|
|
const maxAvatarUploadBytes = 5 << 20
|
||
|
|
|
||
|
|
func UploadMemberAvatarHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
r.Body = http.MaxBytesReader(w, r.Body, maxAvatarUploadBytes)
|
||
|
|
file, header, err := r.FormFile("avatar")
|
||
|
|
if err != nil {
|
||
|
|
if errors.As(err, new(*http.MaxBytesError)) {
|
||
|
|
response.Write(r.Context(), w, nil, app.For(code.Member).InputInvalidFormat("avatar file must be smaller than 5MB"))
|
||
|
|
return
|
||
|
|
}
|
||
|
|
response.Write(r.Context(), w, nil, app.For(code.Member).InputMissingRequired("avatar file is required"))
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer file.Close()
|
||
|
|
l := member.NewUploadMemberAvatarLogic(r.Context(), svcCtx)
|
||
|
|
data, err := l.UploadMemberAvatar(header.Filename, header.Header.Get("Content-Type"), file)
|
||
|
|
response.Write(r.Context(), w, data, err)
|
||
|
|
}
|
||
|
|
}
|