genofire/hs_monolith
genofire
/
hs_monolith
Archived
1
0
Fork 0
This repository has been archived on 2020-09-27. You can view files and clone it, but cannot push or open issues or pull requests.
hs_monolith/models/good.go

61 lines
1.3 KiB
Go

// Package with the mostly static content (models) of this microservice
package models
import (
"errors"
"time"
"github.com/jinzhu/gorm"
"github.com/genofire/hs_master-kss-monolith/lib/database"
)
// Goods managemd in this stock microservice
type Good struct {
ID int64
ProductID int64
Position string
Comment string
FouledAt *time.Time
RecievedAt *time.Time `sql:"default:current_timestamp"`
// Make it temporary unusable
LockedAt *time.Time
LockedSecret string `json:"-"`
// Make it unusable
DeletedAt *time.Time
Sended bool
}
// Function to enerate a database and select locked goods with a filter
func (g *Good) FilterAvailable(db *gorm.DB) *gorm.DB {
return db.Model(g).Where("locked_secret == '' OR locked_secret is NULL")
}
// Function to lock a good, so that it cannot be locked or bought by other users
func (g *Good) Lock(secret string) {
now := time.Now()
g.LockedSecret = secret
g.LockedAt = &now
}
// Function to check if a good is locked
func (g *Good) IsLock() bool {
return len(g.LockedSecret) > 0
}
// Function to unlock a good
func (g *Good) Unlock(secret string) error {
if g.LockedSecret == secret {
g.LockedSecret = ""
g.LockedAt = nil
return nil
}
return errors.New("wrong secret")
}
// Function to initialize the database
func init() {
database.AddModel(&Good{})
}