Add types, start writing count function

This commit is contained in:
Presley Pizzo
2022-10-14 21:26:17 +00:00
parent 931715521a
commit 2a8c1b33cf
4 changed files with 72 additions and 4 deletions
+42
View File
@@ -157,6 +157,48 @@ func (api *API) workspaces(rw http.ResponseWriter, r *http.Request) {
httpapi.Write(ctx, rw, http.StatusOK, wss)
}
func (api *API) workspaceCount(rw http.ResponseWriter, r *http.Request) {
ctx := r.Context()
apiKey := httpmw.APIKey(r)
queryStr := r.URL.Query().Get("q")
filter, errs := workspaceSearchQuery(queryStr)
if len(errs) > 0 {
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
Message: "Invalid audit search query.",
Validations: errs,
})
return
}
if filter.OwnerUsername == "me" {
filter.OwnerID = apiKey.UserID
filter.OwnerUsername = ""
}
sqlFilter, err := api.HTTPAuth.AuthorizeSQLFilter(r, rbac.ActionRead, rbac.ResourceWorkspace.Type)
if err != nil {
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
Message: "Internal error preparing sql filter.",
Detail: err.Error(),
})
return
}
count, err := api.Database.GetWorkspaceCount(ctx, filter, sqlFilter)
if err != nil {
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
Message: "Internal error fetching workspace count.",
Detail: err.Error(),
})
return
}
httpapi.Write(ctx, rw, http.StatusOK, codersdk.WorkspaceCountResponse{
Count: count,
})
}
func (api *API) workspaceByOwnerAndName(rw http.ResponseWriter, r *http.Request) {
ctx := r.Context()
owner := httpmw.UserParam(r)
+12
View File
@@ -31,6 +31,18 @@ type Workspace struct {
LastUsedAt time.Time `json:"last_used_at"`
}
type WorkspacesRequest struct {
SearchQuery string `json:"q,omitempty"`
Pagination
}
type WorkspaceCountRequest struct {
SearchQuery string `json:"q,omitempty"`
}
type WorkspaceCountResponse struct {
Count int64 `json:"count"`
}
// CreateWorkspaceBuildRequest provides options to update the latest workspace build.
type CreateWorkspaceBuildRequest struct {
TemplateVersionID uuid.UUID `json:"template_version_id,omitempty"`
+3 -4
View File
@@ -279,7 +279,7 @@ export const getURLWithSearchParams = (
}
export const getWorkspaces = async (
options: TypesGen.AuditLogsRequest,
options: TypesGen.WorkspacesRequest,
): Promise<TypesGen.Workspace[]> => {
const searchParams = new URLSearchParams()
if (options.limit) {
@@ -296,10 +296,9 @@ export const getWorkspaces = async (
return response.data
}
// TODO change types
export const getWorkspacesCount = async (
options: TypesGen.AuditLogCountRequest = {},
): Promise<TypesGen.AuditLogCountResponse> => {
options: TypesGen.WorkspaceCountRequest,
): Promise<TypesGen.WorkspaceCountResponse> => {
const searchParams = new URLSearchParams()
if (options.q) {
searchParams.set("q", options.q)
+15
View File
@@ -814,6 +814,16 @@ export interface WorkspaceBuildsRequest extends Pagination {
readonly Since: string
}
// From codersdk/workspaces.go
export interface WorkspaceCountRequest {
readonly q?: string
}
// From codersdk/workspaces.go
export interface WorkspaceCountResponse {
readonly count: number
}
// From codersdk/workspaces.go
export interface WorkspaceFilter {
readonly q?: string
@@ -851,6 +861,11 @@ export interface WorkspaceResourceMetadata {
readonly sensitive: boolean
}
// From codersdk/workspaces.go
export interface WorkspacesRequest extends Pagination {
readonly q?: string
}
// From codersdk/audit.go
export type AuditAction = "create" | "delete" | "write"