From 2fc779c32ac606b40abc352d53d25f36e0303385 Mon Sep 17 00:00:00 2001 From: Ansuman Satapathy Date: Mon, 4 Nov 2024 04:40:28 +0000 Subject: [PATCH] feat: [CDE-332]: updated swagger for gitspaces and sort order for gitspaces activation (#2913) * feat: [CDE-332]: added a way to filter gitspaces * feat: [CDE-332]: updated swagger for gitspaces and sort order for gitspaces activation * feat: [CDE-332]: updated swagger for gitspaces --- app/api/openapi/gitspace.go | 5 ++-- app/api/request/gitspace.go | 9 +++++++ app/store/database/gitspace_config.go | 6 +++-- types/enum/common.go | 1 + types/enum/gitspace.go | 34 +++++++++++++++++++++++++-- types/gitspace.go | 1 + 6 files changed, 50 insertions(+), 6 deletions(-) diff --git a/app/api/openapi/gitspace.go b/app/api/openapi/gitspace.go index 7a62afa4b..70c7cc0eb 100644 --- a/app/api/openapi/gitspace.go +++ b/app/api/openapi/gitspace.go @@ -51,8 +51,9 @@ type getGitspaceRequest struct { } type gitspacesListRequest struct { - Sort string `query:"sort" enum:"id,created,updated"` - Order string `query:"order" enum:"asc,desc"` + Sort string `query:"sort" enum:"created,last_used,last_activated"` + Order string `query:"order" enum:"asc,desc"` + GitspaceOwner string `query:"gitspace_owner" enum:"self,all"` // include pagination request paginationRequest diff --git a/app/api/request/gitspace.go b/app/api/request/gitspace.go index d43bf4861..56fe933eb 100644 --- a/app/api/request/gitspace.go +++ b/app/api/request/gitspace.go @@ -23,6 +23,7 @@ import ( const ( PathParamGitspaceIdentifier = "gitspace_identifier" + QueryParamGitspaceOwner = "gitspace_owner" ) func GetGitspaceRefFromPath(r *http.Request) (string, error) { @@ -36,11 +37,19 @@ func ParseGitspaceSort(r *http.Request) enum.GitspaceSort { ) } +// ParseGitspaceOwner extracts the gitspace owner type from the url. +func ParseGitspaceOwner(r *http.Request) enum.GitspaceOwner { + return enum.ParseGitspaceOwner( + r.URL.Query().Get(QueryParamGitspaceOwner), + ) +} + // ParseGitspaceFilter extracts the gitspace filter from the url. func ParseGitspaceFilter(r *http.Request) types.GitspaceFilter { return types.GitspaceFilter{ QueryFilter: ParseListQueryFilterFromRequest(r), Sort: ParseGitspaceSort(r), + Owner: ParseGitspaceOwner(r), Order: ParseOrder(r), } } diff --git a/app/store/database/gitspace_config.go b/app/store/database/gitspace_config.go index 4583ccc81..18d8e74b3 100644 --- a/app/store/database/gitspace_config.go +++ b/app/store/database/gitspace_config.go @@ -313,7 +313,7 @@ func addGitspaceFilter(stmt squirrel.SelectBuilder, filter *types.GitspaceFilter stmt = stmt.Where(squirrel.Eq{"gconf_is_deleted": false}) } - if filter.UserIdentifier != "" { + if filter.Owner == enum.GitspaceOwnerSelf && filter.UserIdentifier != "" { stmt = stmt.Where(squirrel.Eq{"gconf_user_uid": filter.UserIdentifier}) } @@ -334,8 +334,10 @@ func addOrderBy(stmt squirrel.SelectBuilder, filter *types.GitspaceFilter) squir return stmt.OrderBy("gits_last_used " + filter.Order.String()) case enum.GitspaceSortCreated: return stmt.OrderBy("gconf_created " + filter.Order.String()) + case enum.GitspaceSortLastActivated: + return stmt.OrderBy("gits_active_time_started " + filter.Order.String()) default: - return stmt.OrderBy("gits_last_used " + filter.Order.String()) + return stmt.OrderBy("gits_active_time_started " + filter.Order.String()) } } diff --git a/types/enum/common.go b/types/enum/common.go index 58ebb1264..8a79c060d 100644 --- a/types/enum/common.go +++ b/types/enum/common.go @@ -63,6 +63,7 @@ const ( descending = "descending" value = "value" lastUsed = "last_used" + lastActivated = "last_activated" ) func toInterfaceSlice[T interface{}](vals []T) []interface{} { diff --git a/types/enum/gitspace.go b/types/enum/gitspace.go index 11e17124c..9f5a9cbf8 100644 --- a/types/enum/gitspace.go +++ b/types/enum/gitspace.go @@ -23,8 +23,9 @@ type GitspaceSort string // GitspaceSort enumeration. const ( - GitspaceSortLastUsed GitspaceSort = lastUsed - GitspaceSortCreated GitspaceSort = created + GitspaceSortLastUsed GitspaceSort = lastUsed + GitspaceSortCreated GitspaceSort = created + GitspaceSortLastActivated GitspaceSort = lastActivated ) var GitspaceSorts = sortEnum([]GitspaceSort{ @@ -42,7 +43,36 @@ func ParseGitspaceSort(s string) GitspaceSort { return GitspaceSortLastUsed case created, createdAt: return GitspaceSortCreated + case lastActivated: + return GitspaceSortLastActivated default: return GitspaceSortLastUsed } } + +type GitspaceOwner string + +var GitspaceOwners = sortEnum([]GitspaceOwner{ + GitspaceOwnerSelf, + GitspaceOwnerAll, +}) + +const ( + GitspaceOwnerSelf GitspaceOwner = "self" + GitspaceOwnerAll GitspaceOwner = "all" +) + +func (GitspaceOwner) Enum() []interface{} { return toInterfaceSlice(GitspaceOwners) } + +// ParseGitspaceSort parses the gitspace sort attribute string +// and returns the equivalent enumeration. +func ParseGitspaceOwner(s string) GitspaceOwner { + switch strings.ToLower(s) { + case string(GitspaceOwnerSelf): + return GitspaceOwnerSelf + case string(GitspaceOwnerAll): + return GitspaceOwnerAll + default: + return GitspaceOwnerSelf + } +} diff --git a/types/gitspace.go b/types/gitspace.go index e1d088dec..4be3930b0 100644 --- a/types/gitspace.go +++ b/types/gitspace.go @@ -84,6 +84,7 @@ type GitspaceFilter struct { QueryFilter ListQueryFilter Sort enum.GitspaceSort `json:"sort"` Order enum.Order `json:"order"` + Owner enum.GitspaceOwner IncludeDeleted bool IncludeMarkedForDeletion bool GitspaceInstanceFilter