@@ -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 представляет структуру данных для запроса на восстановление пароля
22912350type EmailCaptchaRequest struct {
22922351 Email string `json:"email" validate:"required,email"`
0 commit comments