mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: Add APIs for querying workspaces (#61)
* Add SQL migration * Add query functions for workspaces * Add create routes * Add tests for codersdk * Add workspace parameter route * Add workspace query * Move workspace function * Add querying for workspace history * Fix query * Fix syntax error * Move workspace routes * Fix version * Add CLI tests * Fix syntax error * Remove error * Fix history error * Add new user test * Fix test * Lower target to 70% * Improve comments * Add comment
This commit is contained in:
+19
-15
@@ -24,8 +24,8 @@ import (
|
||||
// abstracted for ease of change later on.
|
||||
type Project database.Project
|
||||
|
||||
// ProjectVersion is the JSON representation of a Coder project version.
|
||||
type ProjectVersion struct {
|
||||
// ProjectHistory is the JSON representation of Coder project version history.
|
||||
type ProjectHistory struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
ProjectID uuid.UUID `json:"project_id"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
@@ -42,7 +42,6 @@ type CreateProjectRequest struct {
|
||||
|
||||
// CreateProjectVersionRequest enables callers to create a new Project Version.
|
||||
type CreateProjectVersionRequest struct {
|
||||
Name string `json:"name,omitempty" validate:"username"`
|
||||
StorageMethod database.ProjectStorageMethod `json:"storage_method" validate:"oneof=inline-archive,required"`
|
||||
StorageSource []byte `json:"storage_source" validate:"max=1048576,required"`
|
||||
}
|
||||
@@ -51,7 +50,7 @@ type projects struct {
|
||||
Database database.Store
|
||||
}
|
||||
|
||||
// allProjects lists all projects across organizations for a user.
|
||||
// Lists all projects the authenticated user has access to.
|
||||
func (p *projects) allProjects(rw http.ResponseWriter, r *http.Request) {
|
||||
apiKey := httpmw.APIKey(r)
|
||||
organizations, err := p.Database.GetOrganizationsByUserID(r.Context(), apiKey.UserID)
|
||||
@@ -79,7 +78,7 @@ func (p *projects) allProjects(rw http.ResponseWriter, r *http.Request) {
|
||||
render.JSON(rw, r, projects)
|
||||
}
|
||||
|
||||
// allProjectsForOrganization lists all projects for a specific organization.
|
||||
// Lists all projects in an organization.
|
||||
func (p *projects) allProjectsForOrganization(rw http.ResponseWriter, r *http.Request) {
|
||||
organization := httpmw.OrganizationParam(r)
|
||||
projects, err := p.Database.GetProjectsByOrganizationIDs(r.Context(), []string{organization.ID})
|
||||
@@ -96,7 +95,7 @@ func (p *projects) allProjectsForOrganization(rw http.ResponseWriter, r *http.Re
|
||||
render.JSON(rw, r, projects)
|
||||
}
|
||||
|
||||
// createProject makes a new project in an organization.
|
||||
// Creates a new project in an organization.
|
||||
func (p *projects) createProject(rw http.ResponseWriter, r *http.Request) {
|
||||
var createProject CreateProjectRequest
|
||||
if !httpapi.Read(rw, r, &createProject) {
|
||||
@@ -142,7 +141,7 @@ func (p *projects) createProject(rw http.ResponseWriter, r *http.Request) {
|
||||
render.JSON(rw, r, project)
|
||||
}
|
||||
|
||||
// project returns a single project parsed from the URL path.
|
||||
// Returns a single project.
|
||||
func (*projects) project(rw http.ResponseWriter, r *http.Request) {
|
||||
project := httpmw.ProjectParam(r)
|
||||
|
||||
@@ -150,8 +149,8 @@ func (*projects) project(rw http.ResponseWriter, r *http.Request) {
|
||||
render.JSON(rw, r, project)
|
||||
}
|
||||
|
||||
// projectVersions lists versions for a single project.
|
||||
func (p *projects) projectVersions(rw http.ResponseWriter, r *http.Request) {
|
||||
// Lists history for a single project.
|
||||
func (p *projects) allProjectHistory(rw http.ResponseWriter, r *http.Request) {
|
||||
project := httpmw.ProjectParam(r)
|
||||
|
||||
history, err := p.Database.GetProjectHistoryByProjectID(r.Context(), project.ID)
|
||||
@@ -164,15 +163,18 @@ func (p *projects) projectVersions(rw http.ResponseWriter, r *http.Request) {
|
||||
})
|
||||
return
|
||||
}
|
||||
versions := make([]ProjectVersion, 0)
|
||||
apiHistory := make([]ProjectHistory, 0)
|
||||
for _, version := range history {
|
||||
versions = append(versions, convertProjectHistory(version))
|
||||
apiHistory = append(apiHistory, convertProjectHistory(version))
|
||||
}
|
||||
render.Status(r, http.StatusOK)
|
||||
render.JSON(rw, r, versions)
|
||||
render.JSON(rw, r, apiHistory)
|
||||
}
|
||||
|
||||
func (p *projects) createProjectVersion(rw http.ResponseWriter, r *http.Request) {
|
||||
// Creates a new version of the project. An import job is queued to parse
|
||||
// the storage method provided. Once completed, the import job will specify
|
||||
// the version as latest.
|
||||
func (p *projects) createProjectHistory(rw http.ResponseWriter, r *http.Request) {
|
||||
var createProjectVersion CreateProjectVersionRequest
|
||||
if !httpapi.Read(rw, r, &createProjectVersion) {
|
||||
return
|
||||
@@ -204,6 +206,8 @@ func (p *projects) createProjectVersion(rw http.ResponseWriter, r *http.Request)
|
||||
Name: namesgenerator.GetRandomName(1),
|
||||
StorageMethod: createProjectVersion.StorageMethod,
|
||||
StorageSource: createProjectVersion.StorageSource,
|
||||
// TODO: Make this do something!
|
||||
ImportJobID: uuid.New(),
|
||||
})
|
||||
if err != nil {
|
||||
httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{
|
||||
@@ -218,8 +222,8 @@ func (p *projects) createProjectVersion(rw http.ResponseWriter, r *http.Request)
|
||||
render.JSON(rw, r, convertProjectHistory(history))
|
||||
}
|
||||
|
||||
func convertProjectHistory(history database.ProjectHistory) ProjectVersion {
|
||||
return ProjectVersion{
|
||||
func convertProjectHistory(history database.ProjectHistory) ProjectHistory {
|
||||
return ProjectHistory{
|
||||
ID: history.ID,
|
||||
ProjectID: history.ProjectID,
|
||||
CreatedAt: history.CreatedAt,
|
||||
|
||||
Reference in New Issue
Block a user