Skip to content
Snippets Groups Projects
Commit b6e361bd authored by Gomez Goiri, Aitor's avatar Gomez Goiri, Aitor
Browse files

Enhancing understandability by adding methods to RawStats struct

parent 8cda676c
Branches master
No related merge requests found
...@@ -81,7 +81,7 @@ func ContextOperations(m shared.AbstractChaincodeOperationManager) error { ...@@ -81,7 +81,7 @@ func ContextOperations(m shared.AbstractChaincodeOperationManager) error {
middleware.InjectAssetOwnerData, middleware.InjectAssetOwnerData,
}, },
[]shared.MiddlewareInterface{ []shared.MiddlewareInterface{
m2.UpdateStats, m2.UpdateSlagStats,
}, },
assetController.SaveAbstractAsset, assetController.SaveAbstractAsset,
). ).
......
...@@ -29,22 +29,22 @@ func GetStatsOperation(stub shared.LedgerBuildrStubInterface, request shared.Led ...@@ -29,22 +29,22 @@ func GetStatsOperation(stub shared.LedgerBuildrStubInterface, request shared.Led
return api.NewApiResponsePtr(fnName, err, nil).SendResponse() return api.NewApiResponsePtr(fnName, err, nil).SendResponse()
} }
globalStat, err := GetStats(stub, GLOBAL_KEY) globalStat, err := getStats(stub, GLOBAL_KEY)
if err != nil { if err != nil {
return api.NewApiResponsePtr(fnName, err, nil).SendResponse() return api.NewApiResponsePtr(fnName, err, nil).SendResponse()
} }
ret.GlobalStats = *model.RefineStats(globalStat) ret.GlobalStats = *globalStat.RefineStats()
if len(*orgs) > 0 { if len(*orgs) > 0 {
ret.PerCompany = make(map[string]model.Stats) ret.PerCompany = make(map[string]model.Stats)
} }
for _, org := range *orgs { for _, org := range *orgs {
orgStat, err := GetStats(stub, org) orgStat, err := getStats(stub, org)
if err != nil { if err != nil {
return api.NewApiResponsePtr(fnName, err, nil).SendResponse() return api.NewApiResponsePtr(fnName, err, nil).SendResponse()
} }
ret.PerCompany[org] = *model.RefineStats(orgStat) ret.PerCompany[org] = *orgStat.RefineStats()
} }
return api.NewAPIGenericResponsePtr(fnName, nil, ret).SendResponse() return api.NewAPIGenericResponsePtr(fnName, nil, ret).SendResponse()
......
...@@ -19,7 +19,7 @@ const ORG_LIST_KEY = "org_list" ...@@ -19,7 +19,7 @@ const ORG_LIST_KEY = "org_list"
type OrgList []string type OrgList []string
func GetStats(stub shared.LedgerBuildrStubInterface, key string) (st *model.RawStats, err error) { func getStats(stub shared.LedgerBuildrStubInterface, key string) (st *model.RawStats, err error) {
value, err := stub.GetState(key) value, err := stub.GetState(key)
if err != nil || len(value) == 0 { if err != nil || len(value) == 0 {
st = new(model.RawStats) st = new(model.RawStats)
...@@ -33,7 +33,7 @@ func GetStats(stub shared.LedgerBuildrStubInterface, key string) (st *model.RawS ...@@ -33,7 +33,7 @@ func GetStats(stub shared.LedgerBuildrStubInterface, key string) (st *model.RawS
return st, nil return st, nil
} }
func PutStats(stub shared.LedgerBuildrStubInterface, key string, stats *model.RawStats) (error) { func putStats(stub shared.LedgerBuildrStubInterface, key string, stats *model.RawStats) (error) {
serialized, err := json.Marshal(stats) serialized, err := json.Marshal(stats)
if err != nil { if err != nil {
return err return err
...@@ -92,3 +92,47 @@ func AddOrgIfNotExist(stub shared.LedgerBuildrStubInterface, org string) (err er ...@@ -92,3 +92,47 @@ func AddOrgIfNotExist(stub shared.LedgerBuildrStubInterface, org string) (err er
return nil return nil
} }
func RetrieveExistingStats(stub shared.LedgerBuildrStubInterface) (*model.RawStats, *model.RawStats, error) {
org, err := stub.GetOrganization()
if err != nil {
return nil, nil, err
}
customStats, err := getStats(stub, org)
if err != nil {
return nil, nil, err
}
globalStats, err := getStats(stub , GLOBAL_KEY)
if err != nil {
return nil, nil, err
}
return globalStats, customStats, nil
}
func UpgradeStats(stub shared.LedgerBuildrStubInterface, globalStats *model.RawStats, customStats *model.RawStats) (error) {
org, err := stub.GetOrganization()
if err != nil {
return err
}
err = putStats(stub, org, customStats)
if err != nil {
return err
}
err = putStats(stub, GLOBAL_KEY, globalStats)
if err != nil {
return err
}
err = AddOrgIfNotExist(stub, org)
if err != nil {
return err
}
return nil
}
\ No newline at end of file
...@@ -8,59 +8,14 @@ package middleware ...@@ -8,59 +8,14 @@ package middleware
import ( import (
"git.code.tecnalia.com/blockchain/hypercog/controller/stats" "git.code.tecnalia.com/blockchain/hypercog/controller/stats"
"git.code.tecnalia.com/blockchain/hypercog/model"
"git.code.tecnalia.com/ledgerbuilder/sdk/shared" "git.code.tecnalia.com/ledgerbuilder/sdk/shared"
"git.code.tecnalia.com/traceblock/sdk/middleware" "git.code.tecnalia.com/traceblock/sdk/middleware"
) )
var ( var (
UpdateStats = shared.NewMiddlewareFunction("update-stats-slag", _updateSlagProduction) UpdateSlagStats = shared.NewMiddlewareFunction("update-stats-slag", _updateSlagProduction)
) )
func _retrieveExistingStats(stub shared.LedgerBuildrStubInterface) (*model.RawStats, *model.RawStats, error) {
org, err := stub.GetOrganization()
if err != nil {
return nil, nil, err
}
customStats, err := stats.GetStats(stub, org)
if err != nil {
return nil, nil, err
}
globalStats, err := stats.GetStats(stub , stats.GLOBAL_KEY)
if err != nil {
return nil, nil, err
}
return globalStats, customStats, nil
}
func _upgradeStats(stub shared.LedgerBuildrStubInterface, globalStats *model.RawStats, customStats *model.RawStats) (error) {
org, err := stub.GetOrganization()
if err != nil {
return err
}
err = stats.PutStats(stub, org, customStats)
if err != nil {
return err
}
err = stats.PutStats(stub, stats.GLOBAL_KEY, globalStats)
if err != nil {
return err
}
err = stats.AddOrgIfNotExist(stub, org)
if err != nil {
return err
}
return nil
}
func _updateSlagProduction(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, requestAsset shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) { func _updateSlagProduction(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, requestAsset shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
asst, err := middleware.ConvertToTraceableAsset(requestAsset) asst, err := middleware.ConvertToTraceableAsset(requestAsset)
if err != nil { if err != nil {
...@@ -69,20 +24,15 @@ func _updateSlagProduction(stub shared.LedgerBuildrStubInterface, ctl shared.Con ...@@ -69,20 +24,15 @@ func _updateSlagProduction(stub shared.LedgerBuildrStubInterface, ctl shared.Con
status, ok := asst.Get("status") status, ok := asst.Get("status")
if ok && status == "slag" { if ok && status == "slag" {
globalStats, customStats, err := _retrieveExistingStats(stub) globalStats, customStats, err := stats.RetrieveExistingStats(stub)
if err != nil { if err != nil {
return nil, err return nil, err
} }
amount := float64(asst.Quantity) customStats.RegisterSlag(asst.Quantity, asst.Units)
if asst.Units == "kg" { globalStats.RegisterSlag(asst.Quantity, asst.Units)
amount /= 1000.0
}
customStats.TotalSlag += amount
globalStats.TotalSlag += amount
err = _upgradeStats(stub, globalStats, customStats) err = stats.UpgradeStats(stub, globalStats, customStats)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -38,7 +38,34 @@ type RawStats struct { ...@@ -38,7 +38,34 @@ type RawStats struct {
MaxPrice float64 `json:"maxPrice"` // in € MaxPrice float64 `json:"maxPrice"` // in €
} }
func RefineStats(raw *RawStats) (*Stats) { func toTons(quantity uint32, units string) (float64) {
amount := float64(quantity)
if units == "kg" {
amount /= 1000.0
}
return amount
}
func (raw *RawStats) RegisterSlag(quantity uint32, units string) {
raw.TotalSlag += toTons(quantity, units)
}
func (raw *RawStats) UpgradeSell(quantity uint32, price float32, units string) {
raw.SlagReused += toTons(quantity, units)
raw.TotalPrice += float64(price)
raw.BidAmount += 1
convertedPrice := float64(price)
if convertedPrice < raw.MinPrice {
raw.MinPrice = convertedPrice
}
if raw.MaxPrice < convertedPrice {
raw.MaxPrice = convertedPrice
}
}
func (raw *RawStats) RefineStats() (*Stats) {
ret := new(Stats) ret := new(Stats)
ret.TotalSlag = raw.TotalSlag ret.TotalSlag = raw.TotalSlag
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment