From 922f8e6f950a2d4c084dc91d8e05695150e20386 Mon Sep 17 00:00:00 2001 From: steven Date: Mon, 3 Oct 2022 23:30:51 +0800 Subject: [PATCH] feat: add member list to workspace --- api/workspace.go | 3 +++ api/workspace_user.go | 5 ++++- server/workspace.go | 18 ++++++++++++++++++ store/workspace.go | 5 +++-- store/workspace_user.go | 23 ++++++++++++++++++++--- 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/api/workspace.go b/api/workspace.go index 52a23a1..732a5d3 100644 --- a/api/workspace.go +++ b/api/workspace.go @@ -12,6 +12,9 @@ type Workspace struct { // Domain specific fields Name string `json:"name"` Description string `json:"description"` + + // Related fields + WorkspaceUserList []*WorkspaceUser `json:"workspaceUserList"` } type WorkspaceCreate struct { diff --git a/api/workspace_user.go b/api/workspace_user.go index 23fc74e..6f84e62 100644 --- a/api/workspace_user.go +++ b/api/workspace_user.go @@ -23,10 +23,13 @@ func (e Role) String() string { type WorkspaceUser struct { WorkspaceID int `json:"workspaceId"` UserID int `json:"userId"` - User *User `json:"user"` Role Role `json:"role"` CreatedTs int64 `json:"createdTs"` UpdatedTs int64 `json:"updatedTs"` + + // Related fields + Email string `json:"email"` + Name string `json:"name"` } type WorkspaceUserUpsert struct { diff --git a/server/workspace.go b/server/workspace.go index 343bf5d..4471266 100644 --- a/server/workspace.go +++ b/server/workspace.go @@ -40,6 +40,10 @@ func (s *Server) registerWorkspaceRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create workspace user").SetInternal(err) } + if err := s.Store.ComposeWorkspaceUserListForWorkspace(ctx, workspace); err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to compose workspace user list").SetInternal(err) + } + c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8) if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(workspace)); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode workspace response").SetInternal(err) @@ -62,6 +66,12 @@ func (s *Server) registerWorkspaceRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch workspace list").SetInternal(err) } + for _, workspace := range workspaceList { + if err := s.Store.ComposeWorkspaceUserListForWorkspace(ctx, workspace); err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to compose workspace user list").SetInternal(err) + } + } + c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8) if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(workspaceList)); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode workspace list response").SetInternal(err) @@ -83,6 +93,10 @@ func (s *Server) registerWorkspaceRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find workspace").SetInternal(err) } + if err := s.Store.ComposeWorkspaceUserListForWorkspace(ctx, workspace); err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to compose workspace user list").SetInternal(err) + } + c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8) if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(workspace)); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode workspace response").SetInternal(err) @@ -188,6 +202,10 @@ func (s *Server) registerWorkspaceRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to patch workspace").SetInternal(err) } + if err := s.Store.ComposeWorkspaceUserListForWorkspace(ctx, workspace); err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to compose workspace user list").SetInternal(err) + } + c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8) if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(workspace)); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode workspace response").SetInternal(err) diff --git a/store/workspace.go b/store/workspace.go index 0e8b08a..b691070 100644 --- a/store/workspace.go +++ b/store/workspace.go @@ -34,8 +34,9 @@ func (raw *workspaceRaw) toWorkspace() *api.Workspace { UpdatedTs: raw.UpdatedTs, RowStatus: raw.RowStatus, - Name: raw.Name, - Description: raw.Description, + Name: raw.Name, + Description: raw.Description, + WorkspaceUserList: []*api.WorkspaceUser{}, } } diff --git a/store/workspace_user.go b/store/workspace_user.go index 3097bf4..908ca54 100644 --- a/store/workspace_user.go +++ b/store/workspace_user.go @@ -37,9 +37,26 @@ func (s *Store) ComposeWorkspaceUser(ctx context.Context, workspaceUser *api.Wor return err } - user.OpenID = "" - user.UserSettingList = nil - workspaceUser.User = user + workspaceUser.Email = user.Email + workspaceUser.Name = user.Name + + return nil +} + +func (s *Store) ComposeWorkspaceUserListForWorkspace(ctx context.Context, workspace *api.Workspace) error { + workspaceUserList, err := s.FindWordspaceUserList(ctx, &api.WorkspaceUserFind{ + WorkspaceID: &workspace.ID, + }) + if err != nil { + return err + } + + for _, workspaceUser := range workspaceUserList { + if err := s.ComposeWorkspaceUser(ctx, workspaceUser); err != nil { + return err + } + } + workspace.WorkspaceUserList = workspaceUserList return nil }