feat(backend): add delete avatar logic
This commit is contained in:
		
							parent
							
								
									163e7c3fd6
								
							
						
					
					
						commit
						57ed81add3
					
				
					 4 changed files with 95 additions and 38 deletions
				
			
		|  | @ -200,3 +200,31 @@ func (db *DB) WriteMemberAvatar(ctx context.Context, | |||
| 
 | ||||
| 	return hash, nil | ||||
| } | ||||
| 
 | ||||
| func (db *DB) DeleteUserAvatar(ctx context.Context, userID xid.ID, hash string) error { | ||||
| 	err := db.minio.RemoveObject(ctx, db.minioBucket, "/users/"+userID.String()+"/"+hash+".webp", minio.RemoveObjectOptions{}) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "deleting webp avatar") | ||||
| 	} | ||||
| 
 | ||||
| 	err = db.minio.RemoveObject(ctx, db.minioBucket, "/users/"+userID.String()+"/"+hash+".jpg", minio.RemoveObjectOptions{}) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "deleting jpeg avatar") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (db *DB) DeleteMemberAvatar(ctx context.Context, memberID xid.ID, hash string) error { | ||||
| 	err := db.minio.RemoveObject(ctx, db.minioBucket, "/members/"+memberID.String()+"/"+hash+".webp", minio.RemoveObjectOptions{}) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "deleting webp avatar") | ||||
| 	} | ||||
| 
 | ||||
| 	err = db.minio.RemoveObject(ctx, db.minioBucket, "/members/"+memberID.String()+"/"+hash+".webp", minio.RemoveObjectOptions{}) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "deleting jpeg avatar") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
|  |  | |||
|  | @ -40,6 +40,13 @@ func (s *Server) deleteMember(w http.ResponseWriter, r *http.Request) error { | |||
| 		return errors.Wrap(err, "deleting member") | ||||
| 	} | ||||
| 
 | ||||
| 	if m.Avatar != nil { | ||||
| 		err = s.DB.DeleteMemberAvatar(ctx, m.ID, *m.Avatar) | ||||
| 		if err != nil { | ||||
| 			return errors.Wrap(err, "deleting member avatar") | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	render.NoContent(w, r) | ||||
| 	return nil | ||||
| } | ||||
|  |  | |||
|  | @ -129,30 +129,41 @@ func (s *Server) patchMember(w http.ResponseWriter, r *http.Request) error { | |||
| 	// update avatar | ||||
| 	var avatarHash *string = nil | ||||
| 	if req.Avatar != nil { | ||||
| 		webp, jpg, err := s.DB.ConvertAvatar(*req.Avatar) | ||||
| 		if err != nil { | ||||
| 			if err == db.ErrInvalidDataURI { | ||||
| 				return server.APIError{ | ||||
| 					Code:    server.ErrBadRequest, | ||||
| 					Details: "invalid avatar data URI", | ||||
| 				} | ||||
| 			} else if err == db.ErrInvalidContentType { | ||||
| 				return server.APIError{ | ||||
| 					Code:    server.ErrBadRequest, | ||||
| 					Details: "invalid avatar content type", | ||||
| 		if *req.Avatar == "" { | ||||
| 			if m.Avatar != nil { | ||||
| 				err = s.DB.DeleteMemberAvatar(ctx, m.ID, *m.Avatar) | ||||
| 				if err != nil { | ||||
| 					log.Errorf("deleting member avatar: %v", err) | ||||
| 					return errors.Wrap(err, "deleting avatar") | ||||
| 				} | ||||
| 			} | ||||
| 			avatarHash = req.Avatar | ||||
| 		} else { | ||||
| 			webp, jpg, err := s.DB.ConvertAvatar(*req.Avatar) | ||||
| 			if err != nil { | ||||
| 				if err == db.ErrInvalidDataURI { | ||||
| 					return server.APIError{ | ||||
| 						Code:    server.ErrBadRequest, | ||||
| 						Details: "invalid avatar data URI", | ||||
| 					} | ||||
| 				} else if err == db.ErrInvalidContentType { | ||||
| 					return server.APIError{ | ||||
| 						Code:    server.ErrBadRequest, | ||||
| 						Details: "invalid avatar content type", | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 			log.Errorf("converting member avatar: %v", err) | ||||
| 			return err | ||||
| 		} | ||||
| 				log.Errorf("converting member avatar: %v", err) | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 		hash, err := s.DB.WriteMemberAvatar(ctx, id, webp, jpg) | ||||
| 		if err != nil { | ||||
| 			log.Errorf("uploading member avatar: %v", err) | ||||
| 			return err | ||||
| 			hash, err := s.DB.WriteMemberAvatar(ctx, id, webp, jpg) | ||||
| 			if err != nil { | ||||
| 				log.Errorf("uploading member avatar: %v", err) | ||||
| 				return err | ||||
| 			} | ||||
| 			avatarHash = &hash | ||||
| 		} | ||||
| 		avatarHash = &hash | ||||
| 	} | ||||
| 
 | ||||
| 	// start transaction | ||||
|  |  | |||
|  | @ -103,30 +103,41 @@ func (s *Server) patchUser(w http.ResponseWriter, r *http.Request) error { | |||
| 	// update avatar | ||||
| 	var avatarHash *string = nil | ||||
| 	if req.Avatar != nil { | ||||
| 		webp, jpg, err := s.DB.ConvertAvatar(*req.Avatar) | ||||
| 		if err != nil { | ||||
| 			if err == db.ErrInvalidDataURI { | ||||
| 				return server.APIError{ | ||||
| 					Code:    server.ErrBadRequest, | ||||
| 					Details: "invalid avatar data URI", | ||||
| 				} | ||||
| 			} else if err == db.ErrInvalidContentType { | ||||
| 				return server.APIError{ | ||||
| 					Code:    server.ErrBadRequest, | ||||
| 					Details: "invalid avatar content type", | ||||
| 		if *req.Avatar == "" { | ||||
| 			if u.Avatar != nil { | ||||
| 				err = s.DB.DeleteUserAvatar(ctx, u.ID, *u.Avatar) | ||||
| 				if err != nil { | ||||
| 					log.Errorf("deleting user avatar: %v", err) | ||||
| 					return errors.Wrap(err, "deleting avatar") | ||||
| 				} | ||||
| 			} | ||||
| 			avatarHash = req.Avatar | ||||
| 		} else { | ||||
| 			webp, jpg, err := s.DB.ConvertAvatar(*req.Avatar) | ||||
| 			if err != nil { | ||||
| 				if err == db.ErrInvalidDataURI { | ||||
| 					return server.APIError{ | ||||
| 						Code:    server.ErrBadRequest, | ||||
| 						Details: "invalid avatar data URI", | ||||
| 					} | ||||
| 				} else if err == db.ErrInvalidContentType { | ||||
| 					return server.APIError{ | ||||
| 						Code:    server.ErrBadRequest, | ||||
| 						Details: "invalid avatar content type", | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 			log.Errorf("converting user avatar: %v", err) | ||||
| 			return err | ||||
| 		} | ||||
| 				log.Errorf("converting user avatar: %v", err) | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 		hash, err := s.DB.WriteUserAvatar(ctx, claims.UserID, webp, jpg) | ||||
| 		if err != nil { | ||||
| 			log.Errorf("uploading user avatar: %v", err) | ||||
| 			return err | ||||
| 			hash, err := s.DB.WriteUserAvatar(ctx, claims.UserID, webp, jpg) | ||||
| 			if err != nil { | ||||
| 				log.Errorf("uploading user avatar: %v", err) | ||||
| 				return err | ||||
| 			} | ||||
| 			avatarHash = &hash | ||||
| 		} | ||||
| 		avatarHash = &hash | ||||
| 	} | ||||
| 
 | ||||
| 	// start transaction | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue