mirror of
https://github.com/abhinavxd/libredesk.git
synced 2025-11-03 05:23:48 +00:00
refactor before merging conversations / messages pkg.
This commit is contained in:
143
cmd/main.go
143
cmd/main.go
@@ -8,18 +8,17 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/abhinavxd/artemis/internal/attachment"
|
||||
"github.com/abhinavxd/artemis/internal/automation"
|
||||
"github.com/abhinavxd/artemis/internal/cannedresp"
|
||||
"github.com/abhinavxd/artemis/internal/contact"
|
||||
"github.com/abhinavxd/artemis/internal/conversation"
|
||||
"github.com/abhinavxd/artemis/internal/inbox"
|
||||
"github.com/abhinavxd/artemis/internal/media"
|
||||
"github.com/abhinavxd/artemis/internal/message"
|
||||
"github.com/abhinavxd/artemis/internal/role"
|
||||
"github.com/abhinavxd/artemis/internal/setting"
|
||||
"github.com/abhinavxd/artemis/internal/tag"
|
||||
"github.com/abhinavxd/artemis/internal/team"
|
||||
"github.com/abhinavxd/artemis/internal/upload"
|
||||
"github.com/abhinavxd/artemis/internal/user"
|
||||
"github.com/abhinavxd/artemis/internal/ws"
|
||||
"github.com/knadh/go-i18n"
|
||||
@@ -44,25 +43,24 @@ const (
|
||||
|
||||
// App is the global app context which is passed and injected in the http handlers.
|
||||
type App struct {
|
||||
constants consts
|
||||
fs stuffbin.FileSystem
|
||||
rdb *redis.Client
|
||||
i18n *i18n.I18n
|
||||
lo *logf.Logger
|
||||
settingsManager *setting.Manager
|
||||
roleManager *role.Manager
|
||||
contactManager *contact.Manager
|
||||
userManager *user.Manager
|
||||
teamManager *team.Manager
|
||||
sessManager *simplesessions.Manager
|
||||
tagManager *tag.Manager
|
||||
messageManager *message.Manager
|
||||
inboxManager *inbox.Manager
|
||||
uploadManager *upload.Manager
|
||||
attachmentManager *attachment.Manager
|
||||
cannedRespManager *cannedresp.Manager
|
||||
conversationManager *conversation.Manager
|
||||
automationEngine *automation.Engine
|
||||
constant constants
|
||||
fs stuffbin.FileSystem
|
||||
rdb *redis.Client
|
||||
i18n *i18n.I18n
|
||||
lo *logf.Logger
|
||||
media *media.Manager
|
||||
setting *setting.Manager
|
||||
role *role.Manager
|
||||
contact *contact.Manager
|
||||
user *user.Manager
|
||||
team *team.Manager
|
||||
sess *simplesessions.Manager
|
||||
tag *tag.Manager
|
||||
message *message.Manager
|
||||
inbox *inbox.Manager
|
||||
cannedResp *cannedresp.Manager
|
||||
conversation *conversation.Manager
|
||||
automation *automation.Engine
|
||||
}
|
||||
|
||||
func main() {
|
||||
@@ -74,71 +72,68 @@ func main() {
|
||||
|
||||
// Load app settings into Koanf.
|
||||
db := initDB()
|
||||
settingManager := initSettingsManager(db)
|
||||
loadSettings(settingManager)
|
||||
setting := initSettingsManager(db)
|
||||
loadSettings(setting)
|
||||
|
||||
var (
|
||||
shutdownCh = make(chan struct{})
|
||||
ctx, stop = signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
|
||||
wsHub = ws.NewHub()
|
||||
fs = initFS()
|
||||
i18n = initI18n(fs)
|
||||
lo = initLogger("artemis")
|
||||
rdb = initRedis()
|
||||
templateManager = initTemplateManager(db)
|
||||
attachmentManager = initAttachmentsManager(db)
|
||||
contactManager = initContactManager(db)
|
||||
inboxManager = initInboxManager(db)
|
||||
teamManager = initTeamManager(db)
|
||||
userManager = initUserManager(i18n, db)
|
||||
notifier = initNotifier(userManager, templateManager)
|
||||
conversationManager = initConversations(i18n, wsHub, notifier, db)
|
||||
automationEngine = initAutomationEngine(db, userManager)
|
||||
messageManager = initMessages(db, wsHub, userManager, teamManager, contactManager, attachmentManager, conversationManager, inboxManager, automationEngine, templateManager)
|
||||
autoassigner = initAutoAssigner(teamManager, userManager, conversationManager)
|
||||
shutdownCh = make(chan struct{})
|
||||
ctx, stop = signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
|
||||
wsHub = ws.NewHub()
|
||||
fs = initFS()
|
||||
i18n = initI18n(fs)
|
||||
lo = initLogger("artemis")
|
||||
rdb = initRedis()
|
||||
template = initTemplate(db)
|
||||
media = initMedia(db)
|
||||
contact = initContact(db)
|
||||
inbox = initInbox(db)
|
||||
team = initTeam(db)
|
||||
user = initUser(i18n, db)
|
||||
notifier = initNotifier(user, template)
|
||||
conversation = initConversations(i18n, wsHub, notifier, db)
|
||||
automation = initAutomationEngine(db, user)
|
||||
message = initMessages(db, wsHub, user, team, contact, media, conversation, inbox, automation, template)
|
||||
autoassigner = initAutoAssigner(team, user, conversation)
|
||||
)
|
||||
|
||||
// Set message store for conversation manager.
|
||||
conversationManager.SetMessageStore(messageManager)
|
||||
// Set required stores.
|
||||
conversation.SetMessageStore(message)
|
||||
wsHub.SetConversationStore(conversation)
|
||||
automation.SetConversationStore(conversation)
|
||||
|
||||
// Register all inboxes with inbox manager & start receiving messages.
|
||||
registerInboxes(inboxManager, messageManager)
|
||||
inboxManager.Receive(ctx)
|
||||
// Register all active inboxes with inbox manager & start receiving messages.
|
||||
registerInboxes(inbox, message)
|
||||
inbox.Receive(ctx)
|
||||
|
||||
// Set conversation store for websocket hub.
|
||||
wsHub.SetConversationStore(conversationManager)
|
||||
|
||||
// Set stores for automation engine & start the evaluating rules.
|
||||
automationEngine.SetConversationStore(conversationManager)
|
||||
go automationEngine.Serve(ctx)
|
||||
// Start evaluation automation rules.
|
||||
go automation.Run(ctx)
|
||||
|
||||
// Start conversation auto assigner.
|
||||
go autoassigner.Serve(ctx, ko.MustDuration("autoassigner.assign_interval"))
|
||||
go autoassigner.Run(ctx, ko.MustDuration("autoassigner.assign_interval"))
|
||||
|
||||
// Start inserting incoming messages from all active inboxes and dispatch pending outgoing messages.
|
||||
go messageManager.StartDBInserts(ctx, ko.MustInt("message.reader_concurrency"))
|
||||
go messageManager.StartDispatcher(ctx, ko.MustInt("message.dispatch_concurrency"), ko.MustDuration("message.dispatch_read_interval"))
|
||||
// Start processing incoming and outgoing messages.
|
||||
go message.Run(ctx, ko.MustInt("message.dispatch_concurrency"), ko.MustInt("message.reader_concurrency"), ko.MustDuration("message.dispatch_read_interval"))
|
||||
|
||||
// Init the app
|
||||
var app = &App{
|
||||
lo: lo,
|
||||
rdb: rdb,
|
||||
fs: fs,
|
||||
i18n: i18n,
|
||||
settingsManager: settingManager,
|
||||
contactManager: contactManager,
|
||||
inboxManager: inboxManager,
|
||||
userManager: userManager,
|
||||
teamManager: teamManager,
|
||||
attachmentManager: attachmentManager,
|
||||
conversationManager: conversationManager,
|
||||
messageManager: messageManager,
|
||||
automationEngine: automationEngine,
|
||||
roleManager: initRoleManager(db),
|
||||
constants: initConstants(),
|
||||
tagManager: initTags(db),
|
||||
sessManager: initSessionManager(rdb),
|
||||
cannedRespManager: initCannedResponse(db),
|
||||
lo: lo,
|
||||
rdb: rdb,
|
||||
fs: fs,
|
||||
i18n: i18n,
|
||||
media: media,
|
||||
setting: setting,
|
||||
contact: contact,
|
||||
inbox: inbox,
|
||||
user: user,
|
||||
team: team,
|
||||
conversation: conversation,
|
||||
message: message,
|
||||
automation: automation,
|
||||
role: initRole(db),
|
||||
constant: initConstants(),
|
||||
tag: initTags(db),
|
||||
sess: initSessionManager(rdb),
|
||||
cannedResp: initCannedResponse(db),
|
||||
}
|
||||
|
||||
// Init fastglue http server.
|
||||
|
||||
Reference in New Issue
Block a user