MIF_E31222379_BE/internal/services/store_service.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
}