package service import ( "github.com/IceWhaleTech/CasaOS-Common/external" "github.com/IceWhaleTech/CasaOS-UserService/codegen/message_bus" "github.com/IceWhaleTech/CasaOS-UserService/pkg/config" "gorm.io/gorm" ) var MyService Repository type Repository interface { Gateway() external.ManagementService User() UserService MessageBus() *message_bus.ClientWithResponses Event() EventService } func NewService(db *gorm.DB, RuntimePath string) Repository { gatewayManagement, err := external.NewManagementService(RuntimePath) if err != nil { panic(err) } return &store{ gateway: gatewayManagement, user: NewUserService(db), event: NewEventService(db), } } type store struct { gateway external.ManagementService user UserService event EventService } func (c *store) Event() EventService { return c.event } func (c *store) Gateway() external.ManagementService { return c.gateway } func (c *store) User() UserService { return c.user } func (c *store) MessageBus() *message_bus.ClientWithResponses { client, _ := message_bus.NewClientWithResponses("", func(c *message_bus.Client) error { // error will never be returned, as we always want to return a client, even with wrong address, // in order to avoid panic. // // If we don't avoid panic, message bus becomes a hard dependency, which is not what we want. messageBusAddress, err := external.GetMessageBusAddress(config.CommonInfo.RuntimePath) if err != nil { c.Server = "message bus address not found" return nil } c.Server = messageBusAddress return nil }) return client }