feedback/internal/initialize/controllers.go
2023-04-20 07:03:21 +05:00

42 lines
1.1 KiB
Go

package initialize
import (
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/client"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/controller"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/repository"
"reflect"
)
type Controller interface {
Register() (method, path, name string, handler fiber.Handler)
Handler(c *fiber.Ctx) error
}
type Controllers struct {
Feedback *controller.FeedbackController
}
// List - возвращает список контроллеров
func (c *Controllers) List() []Controller {
fields := reflect.ValueOf(c).Elem()
var controllers []Controller
for i := 0; i < fields.NumField(); i++ {
vf := fields.Field(i)
if vf.Type().Implements(reflect.TypeOf((*Controller)(nil)).Elem()) {
controllers = append(controllers, vf.Interface().(Controller))
}
}
return controllers
}
func NewControllers(logger *zap.Logger, rep *repository.FeedbackRepository, tg *client.Telegram) *Controllers {
return &Controllers{
Feedback: controller.NewFeedbackController(logger, rep, tg),
}
}