bots/map.go
Кобелев Андрей Андреевич ff76b5842d list godoc
2022-06-06 14:01:56 +03:00

74 lines
1.6 KiB
Go

package bot
import (
"strconv"
"git.belvedersky.ru/common/logger/service"
"github.com/gofiber/fiber/v2"
"github.com/puzpuzpuz/xsync"
"gopkg.in/telebot.v3"
)
type Bots struct {
log *service.LoggerService // Логгер
I *xsync.MapOf[*Bot]
}
func NewMap(Log *service.LoggerService) *Bots {
return &Bots{
log: Log,
I: xsync.NewMapOf[*Bot](),
}
}
// Get godoc
// @Summary Получение бота
// @Description Получение бота по username
// @ID bots/get
// @Tags Боты
// @Param name path string true "Username бота"
// @Router /bot/{name} [get]
// @Success 200 {object} telebot.User
func (b *Bots) Get(c *fiber.Ctx) error {
name := c.Params("name")
if name != "" {
b.log.Log.Println("Запрос на получение бота", name)
_b, ok := b.I.Load(name)
if !ok {
botId, err := strconv.Atoi(name)
if err != nil {
return err
}
b.I.Range(func(key string, bot *Bot) bool {
if bot.Self().ID == int64(botId) {
_b = bot
return false
}
return true
})
if _b == nil {
return c.Status(404).SendString("not found")
}
}
return c.JSON(_b.Self())
}
return c.Status(404).SendString("not found")
}
// List godoc
// @Summary Получение списка ботов
// @Description Получение списка ботов
// @ID bots/list
// @Tags Боты
// @Router /bot/list [get]
// @Success 200 {array} telebot.User
func (b *Bots) List(c *fiber.Ctx) error {
bots := []*telebot.User{}
b.I.Range(func(key string, value *Bot) bool {
bot := value
bots = append(bots, bot.Self())
return true
})
return c.JSON(bots)
}