package controllers import ( "context" "fmt" "time" "doormile/db" "doormile/utils" "github.com/gofiber/fiber/v2" ) func GetBookingFromCache(c *fiber.Ctx) error { bookingID := c.Params("booking_id") ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() data, err := db.Rdb.HGetAll(ctx, fmt.Sprintf("bookings:%s", bookingID)).Result() if err != nil { return utils.Internal(c, "failed to fetch booking from cache") } if len(data) == 0 { return utils.NotFound(c, "booking not found in cache") } return utils.OK(c, data) } func GetCustomerBookingsFromCache(c *fiber.Ctx) error { customerID := c.Params("customer_id") ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() ids, err := db.Rdb.SMembers(ctx, fmt.Sprintf("bookings:customer:%s", customerID)).Result() if err != nil { return utils.Internal(c, "failed to fetch customer booking IDs from cache") } bookings := make([]map[string]string, 0, len(ids)) for _, bid := range ids { ctx2, cancel2 := context.WithTimeout(context.Background(), 3*time.Second) bdata, berr := db.Rdb.HGetAll(ctx2, fmt.Sprintf("bookings:%s", bid)).Result() cancel2() if berr == nil && len(bdata) > 0 { bookings = append(bookings, bdata) } } return utils.List(c, bookings, int64(len(bookings))) } func ListAllBookingsFromCache(c *fiber.Ctx) error { ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() ids, err := db.Rdb.SMembers(ctx, "bookings:all").Result() if err != nil { return utils.Internal(c, "failed to fetch booking IDs from cache") } bookings := make([]map[string]string, 0, len(ids)) for _, bid := range ids { ctx2, cancel2 := context.WithTimeout(context.Background(), 3*time.Second) bdata, berr := db.Rdb.HGetAll(ctx2, fmt.Sprintf("bookings:%s", bid)).Result() cancel2() if berr == nil && len(bdata) > 0 { bookings = append(bookings, bdata) } } return utils.List(c, bookings, int64(len(bookings))) }