@Summary Favorite workspace by ID. @ID favorite-workspace-by-id @Security CoderSessionToken @Tags Workspaces @Param workspace path string true "Workspace ID" format(uuid) @Success 204 @Router /api/v2/workspaces/{workspace}/favorite [put]
(rw http.ResponseWriter, r *http.Request)
| 1836 | // @Success 204 |
| 1837 | // @Router /api/v2/workspaces/{workspace}/favorite [put] |
| 1838 | func (api *API) putFavoriteWorkspace(rw http.ResponseWriter, r *http.Request) { |
| 1839 | var ( |
| 1840 | ctx = r.Context() |
| 1841 | workspace = httpmw.WorkspaceParam(r) |
| 1842 | apiKey = httpmw.APIKey(r) |
| 1843 | auditor = api.Auditor.Load() |
| 1844 | ) |
| 1845 | |
| 1846 | if apiKey.UserID != workspace.OwnerID { |
| 1847 | httpapi.Write(ctx, rw, http.StatusForbidden, codersdk.Response{ |
| 1848 | Message: "You can only favorite workspaces that you own.", |
| 1849 | }) |
| 1850 | return |
| 1851 | } |
| 1852 | |
| 1853 | aReq, commitAudit := audit.InitRequest[database.WorkspaceTable](rw, &audit.RequestParams{ |
| 1854 | Audit: *auditor, |
| 1855 | Log: api.Logger, |
| 1856 | Request: r, |
| 1857 | Action: database.AuditActionWrite, |
| 1858 | OrganizationID: workspace.OrganizationID, |
| 1859 | }) |
| 1860 | defer commitAudit() |
| 1861 | aReq.Old = workspace.WorkspaceTable() |
| 1862 | |
| 1863 | err := api.Database.FavoriteWorkspace(ctx, workspace.ID) |
| 1864 | if err != nil { |
| 1865 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 1866 | Message: "Internal error setting workspace as favorite", |
| 1867 | Detail: err.Error(), |
| 1868 | }) |
| 1869 | return |
| 1870 | } |
| 1871 | |
| 1872 | aReq.New = workspace.WorkspaceTable() |
| 1873 | aReq.New.Favorite = true |
| 1874 | |
| 1875 | rw.WriteHeader(http.StatusNoContent) |
| 1876 | } |
| 1877 | |
| 1878 | // @Summary Unfavorite workspace by ID. |
| 1879 | // @ID unfavorite-workspace-by-id |
no test coverage detected