Skip to content

Commit 407372d

Browse files
committed
memberships
1 parent 5aeac9b commit 407372d

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

aiplan.go/internal/aiplan/http-user.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ func (s *Services) AddUserServices(g *echo.Group) {
116116
releaseNoteGroup.GET("", s.getProductUpdateList)
117117
releaseNoteGroup.GET(":noteId/", s.getRecentReleaseNoteList)
118118

119+
g.GET("users/me/memberships/workspaces/", s.getCurrentUserWorkspaceMemberships)
120+
g.GET("users/me/memberships/projects/", s.getCurrentUserProjectMemberships)
121+
119122
g.GET("jitsi-url/", func(c echo.Context) error {
120123
u := "meet.jit.si" // fallback to jitsi instance
121124
if cfg.JitsiURL != nil {
@@ -2287,6 +2290,62 @@ func (s *Services) getRecentReleaseNoteList(c echo.Context) error {
22872290
return c.JSON(http.StatusOK, notesDTO)
22882291
}
22892292

2293+
// getCurrentUserWorkspaceMemberships godoc
2294+
// @id getCurrentUserWorkspaceMemberships
2295+
// @Summary Пользователи: получение членства в рабочих пространствах
2296+
// @Description Возвращает информацию о членстве текущего пользователя в указанных рабочих пространствах, если не указывать пространства - возвращаются все членства
2297+
// @Tags Users
2298+
// @Security ApiKeyAuth
2299+
// @Produce json
2300+
// @Param workspaces path string false "Список ID рабочих пространств через запятую"
2301+
// @Success 200 {array} dto.WorkspaceMember "Список членств в рабочих пространствах"
2302+
// @Failure 401 {object} apierrors.DefinedError "Необходима авторизация"
2303+
// @Failure 500 {object} apierrors.DefinedError "Ошибка сервера"
2304+
// @Router /api/auth/users/me/memberships/workspaces/ [get]
2305+
func (s *Services) getCurrentUserWorkspaceMemberships(c echo.Context) error {
2306+
user := c.(AuthContext).User
2307+
workspaces := strings.Split(c.Param("workspaces"), ",")
2308+
2309+
query := s.db.Where("member_id = ?", user.ID)
2310+
if len(workspaces) > 0 {
2311+
query = query.Where("workspace_id in (?)", workspaces)
2312+
}
2313+
2314+
var memberships []dao.WorkspaceMember
2315+
if err := query.Find(&memberships).Error; err != nil {
2316+
return EError(c, err)
2317+
}
2318+
return c.JSON(http.StatusOK, utils.SliceToSlice(&memberships, func(t *dao.WorkspaceMember) dto.WorkspaceMember { return *t.ToDTO() }))
2319+
}
2320+
2321+
// getCurrentUserProjectMemberships godoc
2322+
// @id getCurrentUserProjectMemberships
2323+
// @Summary Пользователи: получение членства в проектах
2324+
// @Description Возвращает информацию о членстве текущего пользователя в указанных проектах, если не указывать проекты - возвращаются все членства
2325+
// @Tags Users
2326+
// @Security ApiKeyAuth
2327+
// @Produce json
2328+
// @Param projects path string false "Список ID проектов через запятую"
2329+
// @Success 200 {array} dto.ProjectMember "Список членств в проектах"
2330+
// @Failure 401 {object} apierrors.DefinedError "Необходима авторизация"
2331+
// @Failure 500 {object} apierrors.DefinedError "Ошибка сервера"
2332+
// @Router /api/auth/users/me/memberships/projects/ [get]
2333+
func (s *Services) getCurrentUserProjectMemberships(c echo.Context) error {
2334+
user := c.(AuthContext).User
2335+
projects := strings.Split(c.Param("projects"), ",")
2336+
2337+
query := s.db.Where("member_id = ?", user.ID)
2338+
if len(projects) > 0 && len(c.Param("projects")) > 0 {
2339+
query = query.Where("project_id in (?)", projects)
2340+
}
2341+
2342+
var memberships []dao.ProjectMember
2343+
if err := query.Find(&memberships).Error; err != nil {
2344+
return EError(c, err)
2345+
}
2346+
return c.JSON(http.StatusOK, utils.SliceToSlice(&memberships, func(t *dao.ProjectMember) dto.ProjectMember { return *t.ToDTO() }))
2347+
}
2348+
22902349
// EmailCaptchaRequest представляет структуру данных для запроса на восстановление пароля
22912350
type EmailCaptchaRequest struct {
22922351
Email string `json:"email" validate:"required,email"`

0 commit comments

Comments
 (0)