package domain import ( "io" "time" ) type FileSizeQuota struct { AllowanceKB int64 CurrentUsage int64 } func (f *FileSizeQuota) Allows(size int64) bool { return f.CurrentUsage + size <= f.AllowanceKB } func (f *FileSizeQuota) Add(size int64) error { if !f.Allows(size) { return ErrExceedQuota } f.CurrentUsage += size return nil } func (f *FileSizeQuota) Remove(size int64) error { if size > f.CurrentUsage { return ErrQuotaInvalid } f.CurrentUsage -= size return nil } type BogOutFile interface { Path() string Size() int64 Modified() time.Time io.Reader io.Seeker io.Closer } type BogInFile interface { Path() string Size() int64 Modified() time.Time io.Writer io.Seeker io.Closer } type FileReference struct { Path string UserAgent string }