From 57872925e3b438122520a245caacf2843bebf185 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Tue, 27 Aug 2013 12:11:44 +0200 Subject: Rough idea for a database model. --- model/dbmodel.go | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 model/dbmodel.go diff --git a/model/dbmodel.go b/model/dbmodel.go new file mode 100644 index 0000000..9dd2c91 --- /dev/null +++ b/model/dbmodel.go @@ -0,0 +1,83 @@ +package model + +import ( + "errors" + "fmt" + "kch42.de/gostuff/mailremind/chronos" + "sync" + "time" +) + +var ( + NotFound = errors.New("Not Found") +) + +type DBID interface { + fmt.Stringer +} + +type User interface { + ID() DBID + Email() string + + PWHash() []byte + SetPWHash([]byte) error + + AddJob() Job + Jobs() []Job + JobByID(DBID) (Job, error) + + Delete() error +} + +type Job interface { + ID() DBID + User() User + + Subject() string + SetSubject(string) error + + Content() []byte + SetContent([]byte) error + + Chronos() []chronos.Chronos + SetChronos([]chronos.Chronos) error + + Next() time.Time + SetNext(time.Time) error + + Delete() error +} + +type DBCon interface { + Close() + + UserByID(DBID) (User, error) + UserByMail(string) (User, error) + + LastAccess() time.Time + SetLastAccess(time.Time) error + + JobsBetween(a, b time.Time) ([]Job, error) +} + +type DBInfo struct { + Connect func(dbconf string) (DBCon, error) + ParseDBID func(string) (DBID, error) +} + +var dbinfos map[string]DBInfo +var dbinfoInit sync.Once + +func Register(name string, dbinfo DBInfo) { + dbinfoInit.Do(func() { + dbinfos = make(map[string]DBInfo) + }) + + dbinfos[name] = dbinfo +} + +func GetDBInfo(name string) (DBInfo, bool) { + dbinfo, ok := dbinfos[name] + return dbinfo, ok +} -- cgit v1.2.3-54-g00ecf