package handlers import ( "bufio" "io" "log" "net/http" "github.com/gofiber/fiber/v3" "lmika.dev/lmika/weiro/models" "lmika.dev/lmika/weiro/services/imgedit" ) type ImageEditHandlers struct { ImageEditService *imgedit.Service } func (ieh ImageEditHandlers) Create(c fiber.Ctx) error { var req struct { BaseUploadID int64 `json:"base_upload"` } if err := c.Bind().JSON(&req); err != nil { return err } res, err := ieh.ImageEditService.NewSession(c.Context(), req.BaseUploadID) if err != nil { return err } var resp = struct { Session models.ImageEditSession `json:"session"` PreviewURL string `json:"preview_url"` }{ Session: res, PreviewURL: res.PreviewURL(), } return c.Status(http.StatusCreated).JSON(resp) } func (ieh ImageEditHandlers) Preview(c fiber.Ctx) error { log.Printf("Previewing image edit session %v/%v", c.Params("sessionID"), c.Params("versionID")) sessionID := c.Params("sessionID") versionID := c.Params("versionID") mimeTime, rw, err := ieh.ImageEditService.LoadImageVersion(c.Context(), sessionID, versionID) if err != nil { return err } c.Set("Content-Type", mimeTime) c.Status(http.StatusOK) return c.SendStreamWriter(func(w *bufio.Writer) { rw, err := rw() if err != nil { return } defer rw.Close() _, err = io.Copy(w, rw) if err != nil { return } }) }