Progress on the great event refactoring
parent
573ef316b4
commit
c609ca7b9a
@ -1 +1,7 @@
|
||||
package dataswamp
|
||||
|
||||
import (
|
||||
// "caj-larsson/bog/dataswamp/namespace"
|
||||
)
|
||||
|
||||
type AdminService struct {}
|
||||
|
@ -1,7 +0,0 @@
|
||||
package dataswamp
|
||||
|
||||
type Logger interface {
|
||||
Debug(format string, a ...interface{})
|
||||
Info(format string, a ...interface{})
|
||||
Warn(format string, a ...interface{})
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
package namespace
|
||||
|
||||
import (
|
||||
"caj-larsson/bog/util"
|
||||
"time"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Clock interface {
|
||||
Now() time.Time
|
||||
}
|
||||
|
||||
type NamespaceService struct {
|
||||
repo Repository
|
||||
outboxes []func(util.Event)
|
||||
logger util.Logger
|
||||
clock Clock
|
||||
default_ttl time.Duration
|
||||
default_quota_bytes int64
|
||||
}
|
||||
|
||||
|
||||
func NewNamespaceService(repo Repository, logger util.Logger, clock Clock, default_ttl time.Duration, default_quota_bytes int64) *NamespaceService {
|
||||
return &NamespaceService {
|
||||
repo,
|
||||
nil,
|
||||
logger,
|
||||
clock,
|
||||
default_ttl,
|
||||
default_quota_bytes,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (s *NamespaceService) GetOrCreateNs(name string) *Namespace {
|
||||
ns, err := s.repo.GetByName(name)
|
||||
|
||||
if err == ErrNotExists {
|
||||
new_ns := Namespace{
|
||||
0,
|
||||
name,
|
||||
s.clock.Now(),
|
||||
s.default_ttl,
|
||||
FileSizeQuota{s.default_quota_bytes, 0},
|
||||
FileStat{0, 0},
|
||||
FileStat{0, 0},
|
||||
}
|
||||
created_ns, err := s.repo.Create(new_ns)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return created_ns
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return ns
|
||||
}
|
||||
|
||||
|
||||
func (s *NamespaceService) Wire(reg func(string, util.EventHandler), outbox func(ev util.Event)) { reg("FileUsed", s.handleFileUsed)
|
||||
s.outboxes = append(s.outboxes, outbox)
|
||||
|
||||
reg("FileUsed", s.handleFileUsed)
|
||||
reg("FileDeleted", s.handleFileDeleted)
|
||||
reg("FileRecieved", s.handleFileRecieved)
|
||||
}
|
||||
|
||||
|
||||
func (s *NamespaceService) All() ([]Namespace) {
|
||||
nss, err := s.repo.All()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return nss
|
||||
}
|
||||
|
||||
func (s *NamespaceService) handleFileUsed(payload interface{}) {
|
||||
var payload_s = payload.(struct{
|
||||
Name string
|
||||
Size int64
|
||||
})
|
||||
fmt.Printf("file used %v\n", payload_s )
|
||||
ns := s.GetOrCreateNs(payload_s.Name)
|
||||
ns.FileQuota = ns.FileQuota.Add(payload_s.Size)
|
||||
s.repo.Update(ns.ID, *ns)
|
||||
}
|
||||
|
||||
func (s *NamespaceService) handleFileDeleted(payload interface{}) {
|
||||
var payload_s = payload.(struct{
|
||||
Name string
|
||||
Size int64
|
||||
})
|
||||
fmt.Printf("file deleted %v\n", payload_s )
|
||||
ns := s.GetOrCreateNs(payload_s.Name)
|
||||
ns.FileQuota = ns.FileQuota.Add(-payload_s.Size)
|
||||
fmt.Printf("file usage %v\n", ns.FileQuota)
|
||||
s.repo.Update(ns.ID, *ns)
|
||||
}
|
||||
|
||||
func (s *NamespaceService) handleFileRecieved(payload interface{}) {
|
||||
var payload_s = payload.(struct{
|
||||
Name string
|
||||
Size int64
|
||||
})
|
||||
fmt.Printf("file recieved %v\n", payload_s )
|
||||
ns := s.GetOrCreateNs(payload_s.Name)
|
||||
ns.FileQuota = ns.FileQuota.Add(payload_s.Size)
|
||||
fmt.Printf("file usage %v\n", ns.FileQuota)
|
||||
s.repo.Update(ns.ID, *ns)
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package system_time
|
||||
|
||||
import "time"
|
||||
|
||||
type Clock struct {}
|
||||
|
||||
func (c Clock) Now() time.Time{
|
||||
return time.Now()
|
||||
}
|
Loading…
Reference in New Issue