MIF_E31222379_BE/internal/repositories/identitycard_repo.go

83 lines
2.8 KiB
Go

package repositories
import (
"errors"
"fmt"
"log"
"rijig/model"
"gorm.io/gorm"
)
type IdentityCardRepository interface {
CreateIdentityCard(identityCard *model.IdentityCard) (*model.IdentityCard, error)
GetIdentityCardByID(id string) (*model.IdentityCard, error)
GetIdentityCardsByUserID(userID string) ([]model.IdentityCard, error)
UpdateIdentityCard(id string, updatedCard *model.IdentityCard) (*model.IdentityCard, error)
DeleteIdentityCard(id string) error
}
type identityCardRepository struct {
db *gorm.DB
}
func NewIdentityCardRepository(db *gorm.DB) IdentityCardRepository {
return &identityCardRepository{
db: db,
}
}
func (r *identityCardRepository) CreateIdentityCard(identityCard *model.IdentityCard) (*model.IdentityCard, error) {
if err := r.db.Create(identityCard).Error; err != nil {
log.Printf("Error creating identity card: %v", err)
return nil, fmt.Errorf("failed to create identity card: %w", err)
}
return identityCard, nil
}
func (r *identityCardRepository) GetIdentityCardByID(id string) (*model.IdentityCard, error) {
var identityCard model.IdentityCard
if err := r.db.Where("id = ?", id).First(&identityCard).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, fmt.Errorf("identity card not found with id %s", id)
}
log.Printf("Error fetching identity card by ID: %v", err)
return nil, fmt.Errorf("error fetching identity card by ID: %w", err)
}
return &identityCard, nil
}
func (r *identityCardRepository) GetIdentityCardsByUserID(userID string) ([]model.IdentityCard, error) {
var identityCards []model.IdentityCard
if err := r.db.Where("user_id = ?", userID).Find(&identityCards).Error; err != nil {
log.Printf("Error fetching identity cards by userID: %v", err)
return nil, fmt.Errorf("error fetching identity cards by userID: %w", err)
}
return identityCards, nil
}
func (r *identityCardRepository) UpdateIdentityCard(id string, updatedCard *model.IdentityCard) (*model.IdentityCard, error) {
var existingCard model.IdentityCard
if err := r.db.Where("id = ?", id).First(&existingCard).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, fmt.Errorf("identity card with ID %s not found", id)
}
log.Printf("Error fetching identity card for update: %v", err)
return nil, fmt.Errorf("error fetching identity card for update: %w", err)
}
if err := r.db.Save(&existingCard).Error; err != nil {
log.Printf("Error updating identity card: %v", err)
return nil, fmt.Errorf("failed to update identity card: %w", err)
}
return &existingCard, nil
}
func (r *identityCardRepository) DeleteIdentityCard(id string) error {
if err := r.db.Where("id = ?", id).Delete(&model.IdentityCard{}).Error; err != nil {
log.Printf("Error deleting identity card: %v", err)
return fmt.Errorf("failed to delete identity card: %w", err)
}
return nil
}