feat: add flags to PATCH /members/{id}

This commit is contained in:
Sam 2023-05-25 15:21:50 +02:00
parent d23526fa6d
commit 279b79ecd9
No known key found for this signature in database
GPG key ID: B4EF20DDE721CAA1

View file

@ -25,6 +25,7 @@ type PatchMemberRequest struct {
Fields *[]db.Field `json:"fields"` Fields *[]db.Field `json:"fields"`
Avatar *string `json:"avatar"` Avatar *string `json:"avatar"`
Unlisted *bool `json:"unlisted"` Unlisted *bool `json:"unlisted"`
Flags *[]xid.ID `json:"flags"`
} }
func (s *Server) patchMember(w http.ResponseWriter, r *http.Request) error { func (s *Server) patchMember(w http.ResponseWriter, r *http.Request) error {
@ -74,7 +75,8 @@ func (s *Server) patchMember(w http.ResponseWriter, r *http.Request) error {
req.Fields == nil && req.Fields == nil &&
req.Names == nil && req.Names == nil &&
req.Pronouns == nil && req.Pronouns == nil &&
req.Avatar == nil { req.Avatar == nil &&
req.Flags == nil {
return server.APIError{ return server.APIError{
Code: server.ErrBadRequest, Code: server.ErrBadRequest,
Details: "Data must not be empty", Details: "Data must not be empty",
@ -270,6 +272,19 @@ func (s *Server) patchMember(w http.ResponseWriter, r *http.Request) error {
} }
} }
// update flags
if req.Flags != nil {
err = s.DB.SetMemberFlags(ctx, tx, m.ID, *req.Flags)
if err != nil {
if err == db.ErrInvalidFlagID {
return server.APIError{Code: server.ErrBadRequest, Details: "One or more flag IDs are unknown"}
}
log.Errorf("updating flags for member %v: %v", m.ID, err)
return err
}
}
// update last active time // update last active time
err = s.DB.UpdateActiveTime(ctx, tx, claims.UserID) err = s.DB.UpdateActiveTime(ctx, tx, claims.UserID)
if err != nil { if err != nil {
@ -283,7 +298,14 @@ func (s *Server) patchMember(w http.ResponseWriter, r *http.Request) error {
return err return err
} }
// get flags to return (we need to return full flag objects, not the array of IDs in the request body)
flags, err := s.DB.MemberFlags(ctx, m.ID)
if err != nil {
log.Errorf("getting user flags: %v", err)
return err
}
// echo the updated member back on success // echo the updated member back on success
render.JSON(w, r, dbMemberToMember(u, m, fields, nil, true)) render.JSON(w, r, dbMemberToMember(u, m, fields, flags, true))
return nil return nil
} }