package app import ( "tercul/internal/app/author" "tercul/internal/app/bookmark" "tercul/internal/app/category" "tercul/internal/app/collection" "tercul/internal/app/comment" "tercul/internal/app/like" "tercul/internal/app/localization" "tercul/internal/app/tag" "tercul/internal/app/translation" "tercul/internal/app/user" "tercul/internal/app/auth" "tercul/internal/app/work" "tercul/internal/data/sql" "tercul/internal/domain/search" platform_auth "tercul/internal/platform/auth" ) // Application is a container for all the application-layer services. type Application struct { Author *author.Service Bookmark *bookmark.Service Category *category.Service Collection *collection.Service Comment *comment.Service Like *like.Service Tag *tag.Service Translation *translation.Service User *user.Service Localization *localization.Service Auth *auth.Service Work *work.Service } func NewApplication(repos *sql.Repositories, searchClient search.SearchClient, analyticsService any) *Application { jwtManager := platform_auth.NewJWTManager() authorService := author.NewService(repos.Author) bookmarkService := bookmark.NewService(repos.Bookmark) categoryService := category.NewService(repos.Category) collectionService := collection.NewService(repos.Collection) commentService := comment.NewService(repos.Comment) likeService := like.NewService(repos.Like) tagService := tag.NewService(repos.Tag) translationService := translation.NewService(repos.Translation) userService := user.NewService(repos.User) localizationService := localization.NewService(repos.Localization) authService := auth.NewService(repos.User, jwtManager) workService := work.NewService(repos.Work, searchClient) return &Application{ Author: authorService, Bookmark: bookmarkService, Category: categoryService, Collection: collectionService, Comment: commentService, Like: likeService, Tag: tagService, Translation: translationService, User: userService, Localization: localizationService, Auth: authService, Work: workService, } }