feat: scaffold codespace backend

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
tao.chen
2026-07-02 15:07:54 +08:00
co-authored by Claude Fable 5
commit 411ed1f8ba
43 changed files with 4428 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
package api
import (
"net/http"
"codespace/internal/model"
"codespace/internal/service"
"github.com/gin-gonic/gin"
)
type workspaceHandler struct {
svc *service.WorkspaceService
}
func (h *workspaceHandler) create(c *gin.Context) {
var req model.CreateWorkspaceRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeBadRequest(c, "invalid json")
return
}
if req.ID == "" {
writeBadRequest(c, "id is required")
return
}
ws, err := h.svc.Create(req.ID)
if err != nil {
writeError(c, err)
return
}
c.JSON(http.StatusCreated, model.WorkspaceResponse{ID: ws.ID})
}
func (h *workspaceHandler) get(c *gin.Context) {
id := c.Param("id")
ws, err := h.svc.Get(id)
if err != nil {
writeError(c, err)
return
}
c.JSON(http.StatusOK, model.WorkspaceResponse{ID: ws.ID})
}
func (h *workspaceHandler) delete(c *gin.Context) {
id := c.Param("id")
if err := h.svc.Delete(id); err != nil {
writeError(c, err)
return
}
c.Status(http.StatusNoContent)
}