2017-05-03 07:30:18 +02:00
|
|
|
// Package with the mostly static content (models) of this microservice
|
2017-04-03 14:59:43 +02:00
|
|
|
package models
|
|
|
|
|
2017-04-04 19:28:46 +02:00
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/jinzhu/gorm"
|
|
|
|
|
|
|
|
"github.com/genofire/hs_master-kss-monolith/lib/database"
|
|
|
|
)
|
2017-04-03 14:59:43 +02:00
|
|
|
|
2017-05-05 09:35:27 +02:00
|
|
|
// Goods managed in this stock microservice
|
2017-04-03 14:59:43 +02:00
|
|
|
type Good struct {
|
2017-05-12 10:17:27 +02:00
|
|
|
ID int64 `json:"id"`
|
|
|
|
ProductID int64 `json:"product_id"`
|
|
|
|
Position string `json:"position"`
|
|
|
|
Comment string `json:"comment"`
|
|
|
|
FouledAt *time.Time `json:"fouled_at"`
|
2017-04-04 19:28:46 +02:00
|
|
|
|
2017-05-12 10:17:27 +02:00
|
|
|
RecievedAt *time.Time `sql:"default:current_timestamp" json:"recieved_at"`
|
2017-04-04 19:28:46 +02:00
|
|
|
// Make it temporary unusable
|
2017-05-12 10:17:27 +02:00
|
|
|
LockedAt *time.Time `json:"-"`
|
|
|
|
LockedSecret string `json:"-"`
|
2017-04-04 19:28:46 +02:00
|
|
|
// Make it unusable
|
2017-05-18 23:42:00 +02:00
|
|
|
DeletedAt *time.Time `json:"-"`
|
|
|
|
ManuelleDelete bool `json:"-"`
|
|
|
|
FouledDelete bool `json:"-"`
|
2017-04-04 19:28:46 +02:00
|
|
|
}
|
|
|
|
|
2017-05-15 10:22:24 +02:00
|
|
|
// Function to generate a database and select locked goods with a filter
|
2017-04-04 19:28:46 +02:00
|
|
|
func (g *Good) FilterAvailable(db *gorm.DB) *gorm.DB {
|
2017-05-19 13:37:01 +02:00
|
|
|
return db.Model(g).Where("locked_secret = '' OR locked_secret is NULL")
|
2017-04-04 19:28:46 +02:00
|
|
|
}
|
|
|
|
|
2017-05-15 10:22:24 +02:00
|
|
|
// Function to lock a good, so that it cannot be locked (bought) by other users
|
2017-04-04 19:28:46 +02:00
|
|
|
func (g *Good) Lock(secret string) {
|
|
|
|
now := time.Now()
|
|
|
|
g.LockedSecret = secret
|
|
|
|
g.LockedAt = &now
|
|
|
|
}
|
2017-04-28 10:27:36 +02:00
|
|
|
|
2017-05-03 07:30:18 +02:00
|
|
|
// Function to check if a good is locked
|
2017-04-04 19:28:46 +02:00
|
|
|
func (g *Good) IsLock() bool {
|
|
|
|
return len(g.LockedSecret) > 0
|
|
|
|
}
|
2017-04-28 10:27:36 +02:00
|
|
|
|
2017-05-03 07:30:18 +02:00
|
|
|
// Function to unlock a good
|
2017-04-04 19:28:46 +02:00
|
|
|
func (g *Good) Unlock(secret string) error {
|
|
|
|
if g.LockedSecret == secret {
|
|
|
|
g.LockedSecret = ""
|
|
|
|
g.LockedAt = nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
return errors.New("wrong secret")
|
2017-04-03 14:59:43 +02:00
|
|
|
}
|
|
|
|
|
2017-05-03 07:30:18 +02:00
|
|
|
// Function to initialize the database
|
2017-04-03 14:59:43 +02:00
|
|
|
func init() {
|
|
|
|
database.AddModel(&Good{})
|
|
|
|
}
|