diff --git a/internal/httpapi/handlers_members.go b/internal/httpapi/handlers_members.go index 693018b..5a38376 100644 --- a/internal/httpapi/handlers_members.go +++ b/internal/httpapi/handlers_members.go @@ -25,6 +25,22 @@ func (s *Server) handleListMembers(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, out) } +// handleMemberDirectory: 모든 인증 사용자에게 공개되는 최소 디렉터리(이름·아바타). +// PM/작업자/담당자 등을 이메일이 아니라 이름으로 표시하기 위한 용도. 직급/연락처 +// 같은 상세는 포함하지 않는다. +func (s *Server) handleMemberDirectory(w http.ResponseWriter, r *http.Request) { + type entry struct { + ID string `json:"id"` + Email string `json:"email"` + DisplayName string `json:"displayName"` + AvatarKey string `json:"avatarKey"` + } + var out []entry + s.db.Model(&models.Member{}).Order("display_name asc"). + Select("id", "email", "display_name", "avatar_key").Find(&out) + writeJSON(w, http.StatusOK, out) +} + func (s *Server) handleGetMember(w http.ResponseWriter, r *http.Request) { var m models.Member if err := s.db.First(&m, "id = ?", chi.URLParam(r, "id")).Error; err != nil { diff --git a/internal/httpapi/router.go b/internal/httpapi/router.go index fda6fdc..12c17d5 100644 --- a/internal/httpapi/router.go +++ b/internal/httpapi/router.go @@ -66,6 +66,7 @@ func NewRouter(db *gorm.DB, store *storage.Storage, cfg config.Config, pusher *p // ---- slice 1: members / org ---- r.Get("/members", s.handleListMembers) + r.Get("/members/directory", s.handleMemberDirectory) r.Post("/members", s.handleCreateMember) r.Get("/members/{id}", s.handleGetMember) r.Get("/members/{id}/avatar", s.handleGetAvatar)