cafe-plaetschwiesle/internal/controller/table.go
2023-07-04 23:18:05 +02:00

73 lines
1.9 KiB
Go

package controller
import (
"fmt"
"gorm.io/plugin/soft_delete"
)
type Table struct {
ID uint64 `gorm:"primaryKey" json:"id" validate:"optional"`
OrderCount uint64 `json:"order_count" validate:"required"`
Total float32 `json:"total" validate:"required"`
UpdatedAt int64 `json:"updated_at" validate:"optional"`
IsDeleted soft_delete.DeletedAt `gorm:"softDelete:flag" json:"is_deleted" swaggerignore:"true"`
}
func (c *Controller) GetAllTables() []Table {
var tables []Table
c.orm.Model(
&Table{},
).Joins(
"left join orders on tables.id = orders.table_id",
).Joins(
"left join order_items on orders.order_item_id = order_items.id",
).Select(
"tables.id, tables.updated_at, sum(order_items.price) as total, count(orders.id) as order_count",
).Group(
"tables.id",
).Order("tables.id").Find(&tables)
return tables
}
func (c *Controller) CreateNewTable() (Table, error) {
var table Table
var err error
result := c.orm.Unscoped().Where("is_deleted = ?", 1).Limit(1).Find(&table)
if result.RowsAffected == 0 {
err = c.orm.Create(&table).Error
} else {
table.IsDeleted = 0
err = c.orm.Unscoped().Save(&table).Error
}
if err != nil {
return table, fmt.Errorf(CannotCreate.String())
}
return table, nil
}
func (c *Controller) DeleteLatestTable() error {
var table Table
err := c.orm.Model(
&Table{},
).Joins(
"left join orders on tables.id = orders.table_id",
).Joins(
"left join order_items on orders.order_item_id = order_items.id",
).Select(
"tables.id, count(orders.id) as order_count",
).Group(
"tables.id",
).Last(&table).Error
if err != nil {
return fmt.Errorf(CannotFind.String())
}
if table.OrderCount != 0 {
return fmt.Errorf(StillInUse.String())
}
err = c.orm.Delete(&table).Error
if err != nil {
return fmt.Errorf(CannotDelete.String())
}
return nil
}