Add Customer Discovery
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
package discovery
|
||||
|
||||
import (
|
||||
"context"
|
||||
"furtuna-be/config"
|
||||
|
||||
"furtuna-be/internal/entity"
|
||||
"furtuna-be/internal/repository"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultLatitude = -6.2088
|
||||
defaultLongitude = 106.8456
|
||||
radius = 10000
|
||||
)
|
||||
|
||||
type DiscoveryService struct {
|
||||
repo repository.SiteRepository
|
||||
cfg config.Discovery
|
||||
}
|
||||
|
||||
func NewDiscoveryService(repo repository.SiteRepository, cfg config.Discovery) *DiscoveryService {
|
||||
return &DiscoveryService{
|
||||
repo: repo,
|
||||
cfg: cfg,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *DiscoveryService) Home(ctx context.Context, search *entity.DiscoverySearch) (*entity.DiscoverySearchResp, error) {
|
||||
if search.Lat == 0 || search.Long == 0 {
|
||||
search.Lat = defaultLatitude
|
||||
search.Long = defaultLongitude
|
||||
}
|
||||
|
||||
siteProducts, err := s.repo.GetNearestSites(ctx, search.Lat, search.Long, radius)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
exploreDestinations := []entity.ExploreDestination{}
|
||||
for _, exploreDestination := range s.cfg.ExploreDestinations {
|
||||
exploreDestinations = append(exploreDestinations, entity.ExploreDestination{
|
||||
Name: exploreDestination.Name,
|
||||
ImageURL: exploreDestination.ImageURL,
|
||||
})
|
||||
}
|
||||
|
||||
exploreRegions := []entity.ExploreRegion{}
|
||||
for _, exploreRegion := range s.cfg.ExploreRegions {
|
||||
exploreRegions = append(exploreRegions, entity.ExploreRegion{
|
||||
Name: exploreRegion.Name,
|
||||
})
|
||||
}
|
||||
|
||||
mustVisits := []entity.MustVisit{}
|
||||
|
||||
for _, siteProduct := range siteProducts {
|
||||
mustVisits = append(mustVisits, entity.MustVisit{
|
||||
Name: siteProduct.SiteName,
|
||||
Price: siteProduct.ProductPrice,
|
||||
Region: siteProduct.Region,
|
||||
SiteID: siteProduct.SiteID,
|
||||
ImageURL: siteProduct.Image,
|
||||
})
|
||||
}
|
||||
|
||||
response := &entity.DiscoverySearchResp{
|
||||
ExploreRegions: exploreRegions,
|
||||
ExploreDestinations: exploreDestinations,
|
||||
MustVisit: mustVisits,
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s *DiscoveryService) Search(ctx context.Context, search *entity.DiscoverySearch) (*entity.DiscoverySearchResp, int64, error) {
|
||||
if search.Lat == 0 || search.Long == 0 {
|
||||
search.Lat = defaultLatitude
|
||||
search.Long = defaultLongitude
|
||||
search.Radius = radius
|
||||
}
|
||||
|
||||
siteProducts, total, err := s.repo.SearchSites(ctx, search)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
exploreDestinations := []entity.ExploreDestination{}
|
||||
for _, exploreDestination := range s.cfg.ExploreDestinations {
|
||||
exploreDestinations = append(exploreDestinations, entity.ExploreDestination{
|
||||
Name: exploreDestination.Name,
|
||||
ImageURL: exploreDestination.ImageURL,
|
||||
})
|
||||
}
|
||||
|
||||
exploreRegions := []entity.ExploreRegion{}
|
||||
for _, exploreRegion := range s.cfg.ExploreRegions {
|
||||
exploreRegions = append(exploreRegions, entity.ExploreRegion{
|
||||
Name: exploreRegion.Name,
|
||||
})
|
||||
}
|
||||
|
||||
mustVisits := []entity.MustVisit{}
|
||||
|
||||
for _, siteProduct := range siteProducts {
|
||||
mustVisits = append(mustVisits, entity.MustVisit{
|
||||
Name: siteProduct.SiteName,
|
||||
Price: siteProduct.ProductPrice,
|
||||
Region: siteProduct.Region,
|
||||
SiteID: siteProduct.SiteID,
|
||||
ImageURL: siteProduct.Image,
|
||||
Regency: siteProduct.Regency,
|
||||
})
|
||||
}
|
||||
|
||||
response := &entity.DiscoverySearchResp{
|
||||
ExploreRegions: exploreRegions,
|
||||
ExploreDestinations: exploreDestinations,
|
||||
MustVisit: mustVisits,
|
||||
}
|
||||
|
||||
return response, total, nil
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"furtuna-be/internal/common/mycontext"
|
||||
"furtuna-be/internal/services/balance"
|
||||
"furtuna-be/internal/services/branch"
|
||||
"furtuna-be/internal/services/discovery"
|
||||
service "furtuna-be/internal/services/license"
|
||||
"furtuna-be/internal/services/order"
|
||||
"furtuna-be/internal/services/oss"
|
||||
@@ -25,19 +26,20 @@ import (
|
||||
)
|
||||
|
||||
type ServiceManagerImpl struct {
|
||||
AuthSvc Auth
|
||||
EventSvc Event
|
||||
UserSvc User
|
||||
BranchSvc Branch
|
||||
StudioSvc Studio
|
||||
ProductSvc Product
|
||||
OrderSvc Order
|
||||
OSSSvc OSSService
|
||||
PartnerSvc Partner
|
||||
SiteSvc Site
|
||||
LicenseSvc License
|
||||
Transaction Transaction
|
||||
Balance Balance
|
||||
AuthSvc Auth
|
||||
EventSvc Event
|
||||
UserSvc User
|
||||
BranchSvc Branch
|
||||
StudioSvc Studio
|
||||
ProductSvc Product
|
||||
OrderSvc Order
|
||||
OSSSvc OSSService
|
||||
PartnerSvc Partner
|
||||
SiteSvc Site
|
||||
LicenseSvc License
|
||||
Transaction Transaction
|
||||
Balance Balance
|
||||
DiscoverService DiscoverService
|
||||
}
|
||||
|
||||
func NewServiceManagerImpl(cfg *config.Config, repo *repository.RepoManagerImpl) *ServiceManagerImpl {
|
||||
@@ -52,10 +54,11 @@ func NewServiceManagerImpl(cfg *config.Config, repo *repository.RepoManagerImpl)
|
||||
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),
|
||||
LicenseSvc: service.NewLicenseService(repo.License),
|
||||
Transaction: transaction.New(repo.Transaction, repo.Wallet, repo.Trx),
|
||||
Balance: balance.NewBalanceService(repo.Wallet, repo.Trx, repo.Crypto, &cfg.Withdraw, repo.Transaction),
|
||||
SiteSvc: site.NewSiteService(repo.Site),
|
||||
LicenseSvc: service.NewLicenseService(repo.License),
|
||||
Transaction: transaction.New(repo.Transaction, repo.Wallet, repo.Trx),
|
||||
Balance: balance.NewBalanceService(repo.Wallet, repo.Trx, repo.Crypto, &cfg.Withdraw, repo.Transaction),
|
||||
DiscoverService: discovery.NewDiscoveryService(repo.Site, cfg.Discovery),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,3 +159,8 @@ type Balance interface {
|
||||
WithdrawInquiry(ctx context.Context, req *entity.BalanceWithdrawInquiry) (*entity.BalanceWithdrawInquiryResponse, error)
|
||||
WithdrawExecute(ctx mycontext.Context, req *entity.WalletWithdrawRequest) (*entity.WalletWithdrawResponse, error)
|
||||
}
|
||||
|
||||
type DiscoverService interface {
|
||||
Home(ctx context.Context, search *entity.DiscoverySearch) (*entity.DiscoverySearchResp, error)
|
||||
Search(ctx context.Context, search *entity.DiscoverySearch) (*entity.DiscoverySearchResp, int64, error)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user