127 lines
5.3 KiB
Go
Raw Normal View History

2023-10-08 15:59:42 +07:00
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"
2024-07-26 11:37:22 +07:00
site "furtuna-be/internal/services/sites"
2023-10-08 15:59:42 +07:00
"furtuna-be/internal/services/studio"
"furtuna-be/internal/services/users"
2024-07-26 11:37:22 +07:00
2024-06-03 14:40:50 +07:00
"gorm.io/gorm"
2023-10-08 15:59:42 +07:00
"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
2024-06-03 14:40:50 +07:00
SiteSvc Site
2023-10-08 15:59:42 +07:00
}
func NewServiceManagerImpl(cfg *config.Config, repo *repository.RepoManagerImpl) *ServiceManagerImpl {
return &ServiceManagerImpl{
2024-07-23 01:36:25 +07:00
AuthSvc: auth.New(repo.Auth, repo.Crypto, repo.User, repo.EmailService, cfg.Email, repo.Trx),
2023-10-08 15:59:42 +07:00
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),
2024-07-26 22:32:24 +07:00
OrderSvc: order.NewOrderService(repo.Order, repo.Product, repo.Crypto, repo.Midtrans, repo.Payment, repo.Trx, repo.Wallet),
OSSSvc: oss.NewOSSService(repo.OSS),
2024-06-03 14:40:50 +07:00
PartnerSvc: partner.NewPartnerService(
repo.Partner, users.NewUserService(repo.User, repo.Branch), repo.Trx, repo.Wallet),
SiteSvc: site.NewSiteService(repo.Site),
2023-10-08 15:59:42 +07:00
}
}
type Auth interface {
AuthenticateUser(ctx context.Context, email, password string) (*entity.AuthenticateUser, error)
2024-07-23 01:36:25 +07:00
SendPasswordResetLink(ctx context.Context, email string) error
ResetPassword(ctx mycontext.Context, oldPassword, newPassword string) error
2023-10-08 15:59:42 +07:00
}
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)
2024-06-03 14:40:50 +07:00
CreateWithTx(ctx mycontext.Context, tx *gorm.DB, userReq *entity.User) (*entity.User, error)
2023-10-08 15:59:42 +07:00
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)
2024-06-05 00:24:53 +07:00
GetProductPOS(ctx context.Context, search entity.ProductPOS) ([]*entity.Product, error)
2023-10-08 15:59:42 +07:00
Delete(ctx mycontext.Context, id int64) error
}
type Order interface {
2024-06-04 02:59:31 +07:00
CreateOrder(ctx context.Context, req *entity.OrderRequest) (*entity.OrderResponse, error)
Execute(ctx context.Context, req *entity.OrderExecuteRequest) (*entity.ExecuteOrderResponse, error)
2024-06-05 00:24:53 +07:00
ProcessCallback(ctx context.Context, req *entity.CallbackRequest) error
2024-07-26 22:32:24 +07:00
GetAllHistoryOrders(ctx mycontext.Context, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error)
2023-10-08 15:59:42 +07:00
}
type OSSService interface {
UploadFile(ctx context.Context, req *entity.UploadFileRequest) (*entity.UploadFileResponse, error)
}
type Partner interface {
2024-06-03 14:40:50 +07:00
Create(ctx mycontext.Context, branchReq *entity.CreatePartnerRequest) (*entity.Partner, error)
2023-10-08 15:59:42 +07:00
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
}
2024-06-03 14:40:50 +07:00
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
2024-07-27 15:26:00 +07:00
Count(ctx mycontext.Context, req entity.SiteSearch) (*entity.SiteCount, error)
2024-06-03 14:40:50 +07:00
}