feat: add /users/@me/members/{memberRef} route (closes #62)
This commit is contained in:
		
							parent
							
								
									23f79b0fec
								
							
						
					
					
						commit
						9a70245c2d
					
				
					 4 changed files with 30 additions and 3 deletions
				
			
		
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -6,6 +6,7 @@ import ( | |||
| 
 | ||||
| 	"codeberg.org/u1f320/pronouns.cc/backend/db" | ||||
| 	"codeberg.org/u1f320/pronouns.cc/backend/server" | ||||
| 	"emperror.dev/errors" | ||||
| 	"github.com/go-chi/chi/v5" | ||||
| 	"github.com/go-chi/render" | ||||
| 	"github.com/rs/xid" | ||||
|  | @ -140,6 +141,31 @@ func (s *Server) getUserMember(w http.ResponseWriter, r *http.Request) error { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (s *Server) getMeMember(w http.ResponseWriter, r *http.Request) error { | ||||
| 	ctx := r.Context() | ||||
| 	claims, _ := server.ClaimsFromContext(ctx) | ||||
| 
 | ||||
| 	u, err := s.DB.User(ctx, claims.UserID) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "getting me user") | ||||
| 	} | ||||
| 
 | ||||
| 	m, err := s.DB.UserMember(ctx, claims.UserID, chi.URLParam(r, "memberRef")) | ||||
| 	if err != nil { | ||||
| 		return server.APIError{ | ||||
| 			Code: server.ErrMemberNotFound, | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	fields, err := s.DB.MemberFields(ctx, m.ID) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	render.JSON(w, r, dbMemberToMember(u, m, fields, true)) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (s *Server) parseUser(ctx context.Context, userRef string) (u db.User, err error) { | ||||
| 	if id, err := xid.FromString(userRef); err != nil { | ||||
| 		u, err := s.DB.User(ctx, id) | ||||
|  |  | |||
|  | @ -19,6 +19,7 @@ func Mount(srv *server.Server, r chi.Router) { | |||
| 
 | ||||
| 	// user-scoped member lookup (including custom urls) | ||||
| 	r.Get("/users/{userRef}/members/{memberRef}", server.WrapHandler(s.getUserMember)) | ||||
| 	r.With(server.MustAuth).Get("/users/@me/members/{memberRef}", server.WrapHandler(s.getMeMember)) | ||||
| 
 | ||||
| 	r.Route("/members", func(r chi.Router) { | ||||
| 		// any member by ID | ||||
|  |  | |||
|  | @ -261,7 +261,7 @@ paths: | |||
|       summary: Get a member by ID or name | ||||
|     parameters: | ||||
|     - name: userRef | ||||
|       description: A user ID or username. | ||||
|       description: "A user ID, username, or `@me` for yourself." | ||||
|       schema: | ||||
|         type: string | ||||
|       in: path | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue