42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package initialize
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
"gitea.pena/PenaSide/feedback/internal/client"
|
|
"gitea.pena/PenaSide/feedback/internal/controller"
|
|
"gitea.pena/PenaSide/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),
|
|
}
|
|
}
|