feat(members): 전 구성원 공개 이름 디렉터리 엔드포인트
All checks were successful
build-and-push / build (push) Successful in 33s
All checks were successful
build-and-push / build (push) Successful in 33s
- GET /members/directory: 모든 인증 사용자에게 {id,email,displayName,avatarKey} 반환
- PM/작업자/담당자 등을 이메일이 아닌 이름으로 표시하기 위함 (직급/연락처 미포함)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f46f135dbf
commit
ce07aced0f
@ -25,6 +25,22 @@ func (s *Server) handleListMembers(w http.ResponseWriter, r *http.Request) {
|
|||||||
writeJSON(w, http.StatusOK, out)
|
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) {
|
func (s *Server) handleGetMember(w http.ResponseWriter, r *http.Request) {
|
||||||
var m models.Member
|
var m models.Member
|
||||||
if err := s.db.First(&m, "id = ?", chi.URLParam(r, "id")).Error; err != nil {
|
if err := s.db.First(&m, "id = ?", chi.URLParam(r, "id")).Error; err != nil {
|
||||||
|
|||||||
@ -66,6 +66,7 @@ func NewRouter(db *gorm.DB, store *storage.Storage, cfg config.Config, pusher *p
|
|||||||
|
|
||||||
// ---- slice 1: members / org ----
|
// ---- slice 1: members / org ----
|
||||||
r.Get("/members", s.handleListMembers)
|
r.Get("/members", s.handleListMembers)
|
||||||
|
r.Get("/members/directory", s.handleMemberDirectory)
|
||||||
r.Post("/members", s.handleCreateMember)
|
r.Post("/members", s.handleCreateMember)
|
||||||
r.Get("/members/{id}", s.handleGetMember)
|
r.Get("/members/{id}", s.handleGetMember)
|
||||||
r.Get("/members/{id}/avatar", s.handleGetAvatar)
|
r.Get("/members/{id}/avatar", s.handleGetAvatar)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user