58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
/*
|
|
Sticker
|
|
- name, abstr, descr, price, tag
|
|
|
|
Poster
|
|
- name, abstr, descr, price bw/colored, tag
|
|
|
|
Zines
|
|
- name, abstr, descr, price bw/colored/coloredcoveronly, tag
|
|
|
|
Books
|
|
- name, abstr, descr, price, tag
|
|
*/
|
|
type Category string
|
|
|
|
const (
|
|
Zine Category = "Zine"
|
|
)
|
|
|
|
func ParseCategory(s string) (c Category, err error) {
|
|
if s == "Zine" {
|
|
return Zine, nil
|
|
}
|
|
|
|
return c, fmt.Errorf("Cannot parse category %s", s)
|
|
}
|
|
|
|
type ItemVariant struct {
|
|
gorm.Model
|
|
Name string `json:"name" gorm:"not null"`
|
|
Price float64 `json:"price" gorm:"not null"`
|
|
InStock bool `json:"inStock" gorm:"default:true"`
|
|
ShopItemID uint
|
|
}
|
|
|
|
type ShopItem struct {
|
|
gorm.Model
|
|
Name string `json:"name" binding:"required" gorm:"unique;not null"`
|
|
Abstract string `json:"abstract" binding:"required"`
|
|
Description string `json:"description" binding:"required"`
|
|
Category Category `json:"category"`
|
|
Variants []ItemVariant `json:"variant"`
|
|
BasePrice float64 `json:"basePrice"`
|
|
IsPublic bool `json:"isPublic" gorm:"default:true"`
|
|
Tags []Tag `gorm:"many2many:item_tags;"`
|
|
Image string
|
|
Pdf string
|
|
PrintMode string `json:"printMode" gorm:"default:CreateBooklet"`
|
|
WasPrinted bool `gorm:"default:false"`
|
|
}
|