package services import ( "context" "furtuna-be/internal/common/mycontext" "furtuna-be/internal/services/branch" "furtuna-be/internal/services/order" "furtuna-be/internal/services/oss" "furtuna-be/internal/services/partner" "furtuna-be/internal/services/product" site "furtuna-be/internal/services/sites" "furtuna-be/internal/services/studio" "furtuna-be/internal/services/users" "gorm.io/gorm" "furtuna-be/config" "furtuna-be/internal/entity" "furtuna-be/internal/repository" "furtuna-be/internal/services/auth" "furtuna-be/internal/services/event" ) type ServiceManagerImpl struct { AuthSvc Auth EventSvc Event UserSvc User BranchSvc Branch StudioSvc Studio ProductSvc Product OrderSvc Order OSSSvc OSSService PartnerSvc Partner SiteSvc Site } func NewServiceManagerImpl(cfg *config.Config, repo *repository.RepoManagerImpl) *ServiceManagerImpl { return &ServiceManagerImpl{ AuthSvc: auth.New(repo.Auth, repo.Crypto, repo.User, repo.EmailService, cfg.Email, repo.Trx), EventSvc: event.NewEventService(repo.Event), UserSvc: users.NewUserService(repo.User, repo.Branch), BranchSvc: branch.NewBranchService(repo.Branch), StudioSvc: studio.NewStudioService(repo.Studio), ProductSvc: product.NewProductService(repo.Product), OrderSvc: order.NewOrderService(repo.Order, repo.Product, repo.Crypto, repo.Midtrans, repo.Payment, repo.Trx, repo.Wallet), OSSSvc: oss.NewOSSService(repo.OSS), PartnerSvc: partner.NewPartnerService( repo.Partner, users.NewUserService(repo.User, repo.Branch), repo.Trx, repo.Wallet), SiteSvc: site.NewSiteService(repo.Site), } } type Auth interface { AuthenticateUser(ctx context.Context, email, password string) (*entity.AuthenticateUser, error) SendPasswordResetLink(ctx context.Context, email string) error ResetPassword(ctx mycontext.Context, oldPassword, newPassword string) error } type Event interface { Create(ctx context.Context, eventReq *entity.Event) (*entity.Event, error) Update(ctx context.Context, id int64, eventReq *entity.Event) (*entity.Event, error) GetByID(ctx context.Context, id int64) (*entity.Event, error) GetAll(ctx context.Context, search entity.EventSearch) ([]*entity.Event, int, error) Delete(ctx context.Context, id int64) error } type User interface { Create(ctx mycontext.Context, userReq *entity.User) (*entity.User, error) CreateWithTx(ctx mycontext.Context, tx *gorm.DB, userReq *entity.User) (*entity.User, error) GetAll(ctx mycontext.Context, search entity.UserSearch) ([]*entity.User, int, error) Update(ctx mycontext.Context, id int64, userReq *entity.User) (*entity.User, error) GetByID(ctx mycontext.Context, id int64) (*entity.User, error) Delete(ctx mycontext.Context, id int64) error } type Branch interface { Create(ctx mycontext.Context, branchReq *entity.Branch) (*entity.Branch, error) Update(ctx mycontext.Context, id int64, branchReq *entity.Branch) (*entity.Branch, error) GetByID(ctx context.Context, id int64) (*entity.Branch, error) GetAll(ctx context.Context, search entity.BranchSearch) ([]*entity.Branch, int, error) Delete(ctx mycontext.Context, id int64) error } type Studio interface { Create(ctx mycontext.Context, studioReq *entity.Studio) (*entity.Studio, error) Update(ctx mycontext.Context, id int64, studioReq *entity.Studio) (*entity.Studio, error) GetByID(ctx context.Context, id int64) (*entity.Studio, error) Search(ctx context.Context, search entity.StudioSearch) ([]*entity.Studio, int, error) } type Product interface { Create(ctx mycontext.Context, productReq *entity.Product) (*entity.Product, error) Update(ctx mycontext.Context, id int64, productReq *entity.Product) (*entity.Product, error) GetByID(ctx context.Context, id int64) (*entity.Product, error) GetAll(ctx context.Context, search entity.ProductSearch) ([]*entity.Product, int, error) GetProductPOS(ctx context.Context, search entity.ProductPOS) ([]*entity.Product, error) Delete(ctx mycontext.Context, id int64) error } type Order interface { CreateOrder(ctx context.Context, req *entity.OrderRequest) (*entity.OrderResponse, error) Execute(ctx context.Context, req *entity.OrderExecuteRequest) (*entity.ExecuteOrderResponse, error) ProcessCallback(ctx context.Context, req *entity.CallbackRequest) error GetAllHistoryOrders(ctx mycontext.Context, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error) } type OSSService interface { UploadFile(ctx context.Context, req *entity.UploadFileRequest) (*entity.UploadFileResponse, error) } type Partner interface { Create(ctx mycontext.Context, branchReq *entity.CreatePartnerRequest) (*entity.Partner, error) Update(ctx mycontext.Context, id int64, branchReq *entity.Partner) (*entity.Partner, error) GetByID(ctx context.Context, id int64) (*entity.Partner, error) GetAll(ctx context.Context, search entity.PartnerSearch) ([]*entity.Partner, int, error) Delete(ctx mycontext.Context, id int64) error } type Site interface { Create(ctx mycontext.Context, branchReq *entity.Site) (*entity.Site, error) Update(ctx mycontext.Context, id int64, branchReq *entity.Site) (*entity.Site, error) GetByID(ctx context.Context, id int64) (*entity.Site, error) GetAll(ctx context.Context, search entity.SiteSearch) ([]*entity.Site, int, error) Delete(ctx mycontext.Context, id int64) error Count(ctx mycontext.Context, req entity.SiteSearch) (*entity.SiteCount, error) }