1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package web
- import (
- "fmt"
- "log"
- "net/http"
- "time"
- "github.com/gin-contrib/sessions"
- "github.com/gin-gonic/gin"
- "code.osinet.fr/fgm/sqs_demo/back/services/redriver"
- )
- func makeDeleteHandler(rd redriver.Redriver) gin.HandlerFunc {
- return func(c *gin.Context) {
- ctx := c.Request.Context()
- qName := c.Param("name")
- redirect := "/queue/" + qName
- sess := sessions.Default(c)
- // Do not consume sess.Flashes(): this is a redirect-only handler, and they would be lost.
- defer func() {
- _ = sess.Save()
- c.Redirect(http.StatusSeeOther, redirect)
- }()
- req := c.Request
- if err := req.ParseForm(); err != nil {
- log.Printf("Failed to parse deletion confirm form for queue %s: %v",
- qName, err)
- sess.AddFlash(fmt.Sprintf("Failed to parsed deletion confirmm form for queue %s",
- qName))
- return
- }
- ids := parseIDs(req.Form, validateUint)
- var messages []redriver.Message
- if len(ids) == 0 {
- flash := fmt.Sprintf("Got no message to delete from queue %q", qName)
- log.Print(flash)
- sess.AddFlash(flash)
- return
- }
- messages = parseMessages(req.Form, ids)
- keys := make([]redriver.ItemsKeys, len(messages))
- for i, msg := range messages {
- keys[i] = msg.Keys()
- }
- t0 := time.Now()
- err := rd.DeleteItems(ctx, qName, keys)
- latency := time.Since(t0)
- if err != nil {
- log.Printf("failed deleting %d items from queue %q: %v",
- len(keys), qName, err)
- sess.AddFlash(fmt.Sprintf("Failed deleting %d items from queue %q",
- len(keys), qName))
- return
- }
- sess.AddFlash(fmt.Sprintf("Deleted %d items from queue %s in %v", len(keys),
- qName, latency))
- }
- }
|