From 974b95b244ad0732550dd30a2913cedb92ae3891 Mon Sep 17 00:00:00 2001 From: kalipso Date: Fri, 7 Mar 2025 12:04:19 +0100 Subject: [PATCH] add order rep --- repositories/OrderRepository.go | 90 +++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 repositories/OrderRepository.go diff --git a/repositories/OrderRepository.go b/repositories/OrderRepository.go new file mode 100644 index 0000000..6af675b --- /dev/null +++ b/repositories/OrderRepository.go @@ -0,0 +1,90 @@ +package repositories + +import( + "strconv" + "gorm.io/gorm" + + "example.com/gin/test/models" +) + +type OrderRepository interface { + Create(models.Order) (models.Order, error) + GetAll() ([]models.Order, error) + GetById(string) (models.Order, error) + GetAllBySession(string) ([]models.Order, error) + Update(models.Order) (models.Order, error) + DeleteById(string) (error) +} + +type GORMOrderRepository struct { + DB *gorm.DB +} + +func NewGORMOrderRepository(db *gorm.DB) OrderRepository { + return &GORMOrderRepository{ + DB: db, + } +} + +func (r *GORMOrderRepository) Create(order models.Order) (models.Order, error) { + //Omit the shopitem so it is not created again in db leading to unique constain fails + result := r.DB.Omit("CartItems").Create(&order) + if result.Error != nil { + return models.Order{}, result.Error + } + + return order, nil +} + +func (r *GORMOrderRepository) GetAll() ([]models.Order, error) { + var orders []models.Order + result := r.DB.Preload("CartItems").Find(&orders) + + return orders, result.Error +} + +func (t *GORMOrderRepository) GetById(id string) (models.Order, error) { + orderId, err := strconv.Atoi(id) + + if err != nil { + return models.Order{}, err + } + + var order models.Order + result := t.DB.Preload("CartItems").First(&order, uint(orderId)) + + if result.Error != nil { + return models.Order{}, result.Error + } + + return order, nil +} + + +func (r *GORMOrderRepository) GetAllBySession(sessionId string) ([]models.Order, error) { + var orders []models.Order + result := r.DB.Preload("CartItems").Where("session_id = ?", sessionId).Find(&orders) + + return orders, result.Error + +} + +func (r *GORMOrderRepository) Update(order models.Order) (models.Order, error) { + result := r.DB.Save(&order) + if result.Error != nil { + return models.Order{}, result.Error + } + + return order, nil +} + +func (r *GORMOrderRepository) DeleteById(id string) error { + orderId, err := strconv.Atoi(id) + + if err != nil { + return err + } + + result := r.DB.Delete(&models.Order{}, orderId) + return result.Error +}