MIF_E31222379_BE/internal/repositories/store_repo.go

89 lines
1.9 KiB
Go

package repositories
import (
"fmt"
"rijig/model"
"gorm.io/gorm"
)
type StoreRepository interface {
FindStoreByUserID(userID string) (*model.Store, error)
FindStoreByID(storeID string) (*model.Store, error)
FindAddressByID(addressID string) (*model.Address, error)
CreateStore(store *model.Store) error
UpdateStore(store *model.Store) error
DeleteStore(storeID string) error
}
type storeRepository struct {
DB *gorm.DB
}
func NewStoreRepository(DB *gorm.DB) StoreRepository {
return &storeRepository{DB}
}
func (r *storeRepository) FindStoreByUserID(userID string) (*model.Store, error) {
var store model.Store
if err := r.DB.Where("user_id = ?", userID).First(&store).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &store, nil
}
func (r *storeRepository) FindStoreByID(storeID string) (*model.Store, error) {
var store model.Store
if err := r.DB.Where("id = ?", storeID).First(&store).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &store, nil
}
func (r *storeRepository) FindAddressByID(addressID string) (*model.Address, error) {
var address model.Address
if err := r.DB.Where("id = ?", addressID).First(&address).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &address, nil
}
func (r *storeRepository) CreateStore(store *model.Store) error {
if err := r.DB.Create(store).Error; err != nil {
return err
}
return nil
}
func (r *storeRepository) UpdateStore(store *model.Store) error {
if err := r.DB.Save(store).Error; err != nil {
return err
}
return nil
}
func (r *storeRepository) DeleteStore(storeID string) error {
if storeID == "" {
return fmt.Errorf("store ID cannot be empty")
}
if err := r.DB.Where("id = ?", storeID).Delete(&model.Store{}).Error; err != nil {
return fmt.Errorf("failed to delete store: %w", err)
}
return nil
}