70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package repositories
|
|
|
|
import (
|
|
"GoMembership/internal/database"
|
|
"GoMembership/internal/models"
|
|
"GoMembership/pkg/errors"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// CarRepository interface defines the CRUD operations
|
|
type CarRepositoryInterface interface {
|
|
Create(car *models.Car) (*models.Car, error)
|
|
GetByID(id uint) (*models.Car, error)
|
|
GetAll() ([]models.Car, error)
|
|
Update(car *models.Car) (*models.Car, error)
|
|
Delete(id uint) error
|
|
}
|
|
|
|
type CarRepository struct{}
|
|
|
|
// Create a new car
|
|
func (r *CarRepository) Create(car *models.Car) (*models.Car, error) {
|
|
if err := database.DB.Create(car).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return car, nil
|
|
}
|
|
|
|
// GetByID fetches a car by its ID
|
|
func (r *CarRepository) GetByID(id uint) (*models.Car, error) {
|
|
var car models.Car
|
|
if err := database.DB.Where("id = ?", id).First(&car).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, errors.ErrNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
return &car, nil
|
|
}
|
|
|
|
// GetAll retrieves all cars
|
|
func (r *CarRepository) GetAll() ([]models.Car, error) {
|
|
var cars []models.Car
|
|
if err := database.DB.Find(&cars).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return cars, nil
|
|
}
|
|
|
|
// Update an existing car
|
|
func (r *CarRepository) Update(car *models.Car) (*models.Car, error) {
|
|
if err := database.DB.Save(car).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return car, nil
|
|
}
|
|
|
|
// Delete a car (soft delete)
|
|
func (r *CarRepository) Delete(id uint) error {
|
|
result := database.DB.Delete(&models.Car{}, id)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
return errors.ErrNotFound
|
|
}
|
|
return nil
|
|
}
|