74 lines
2.1 KiB
Go
74 lines
2.1 KiB
Go
package services
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/pahmiudahgede/senggoldong/dto"
|
|
"github.com/pahmiudahgede/senggoldong/internal/repositories"
|
|
"github.com/pahmiudahgede/senggoldong/model"
|
|
"github.com/pahmiudahgede/senggoldong/utils"
|
|
)
|
|
|
|
type StoreService interface {
|
|
CreateStore(userID string, storeDTO *dto.RequestStoreDTO) (*dto.ResponseStoreDTO, error)
|
|
}
|
|
|
|
type storeService struct {
|
|
storeRepo repositories.StoreRepository
|
|
}
|
|
|
|
func NewStoreService(storeRepo repositories.StoreRepository) StoreService {
|
|
return &storeService{storeRepo}
|
|
}
|
|
|
|
func (s *storeService) CreateStore(userID string, storeDTO *dto.RequestStoreDTO) (*dto.ResponseStoreDTO, error) {
|
|
|
|
existingStore, err := s.storeRepo.FindStoreByUserID(userID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error checking if user already has a store: %w", err)
|
|
}
|
|
if existingStore != nil {
|
|
return nil, fmt.Errorf("user already has a store")
|
|
}
|
|
|
|
address, err := s.storeRepo.FindAddressByID(storeDTO.StoreAddressID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error validating store address ID: %w", err)
|
|
}
|
|
if address == nil {
|
|
return nil, fmt.Errorf("store address ID not found")
|
|
}
|
|
|
|
store := model.Store{
|
|
UserID: userID,
|
|
StoreName: storeDTO.StoreName,
|
|
StoreLogo: storeDTO.StoreLogo,
|
|
StoreBanner: storeDTO.StoreBanner,
|
|
StoreInfo: storeDTO.StoreInfo,
|
|
StoreAddressID: storeDTO.StoreAddressID,
|
|
}
|
|
|
|
if err := s.storeRepo.CreateStore(&store); err != nil {
|
|
return nil, fmt.Errorf("failed to create store: %w", err)
|
|
}
|
|
|
|
createdAt, _ := utils.FormatDateToIndonesianFormat(store.CreatedAt)
|
|
updatedAt, _ := utils.FormatDateToIndonesianFormat(store.UpdatedAt)
|
|
|
|
storeResponseDTO := &dto.ResponseStoreDTO{
|
|
ID: store.ID,
|
|
UserID: store.UserID,
|
|
StoreName: store.StoreName,
|
|
StoreLogo: store.StoreLogo,
|
|
StoreBanner: store.StoreBanner,
|
|
StoreInfo: store.StoreInfo,
|
|
StoreAddressID: store.StoreAddressID,
|
|
TotalProduct: store.TotalProduct,
|
|
Followers: store.Followers,
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
}
|
|
|
|
return storeResponseDTO, nil
|
|
}
|