package cache import ( "fmt" "git.sr.ht/~evanj/cms/internal/m/space" "git.sr.ht/~evanj/cms/internal/m/user" "git.sr.ht/~evanj/cms/internal/s/db" ) func (c *Cache) space(breakCache bool, key string, getter func() (space.Space, error)) (space.Space, error) { var v *db.Space if err := c.cache(breakCache, key, &v, func() (interface{}, error) { return getter() }); err != nil { return nil, err } return v, nil } func (c *Cache) SpaceNew(user user.User, name, desc string) (space.Space, error) { thing, err := c.db.SpaceNew(user, name, desc) if err != nil { return nil, err } return c.space( true, fmt.Sprintf("%s::%s", c.baseKey, thing.ID()), func() (space.Space, error) { return thing, err }, ) } func (c *Cache) SpaceGet(user user.User, thingID string) (space.Space, error) { return c.space( false, fmt.Sprintf("%s::%s", c.baseKey, thingID), func() (space.Space, error) { return c.db.SpaceGet(user, thingID) }, ) } func (c *Cache) SpaceDelete(s space.Space) error { key := fmt.Sprintf("%s::%s", c.baseKey, s.ID()) var deleteErr error _, _ = c.space( true, key, func() (space.Space, error) { deleteErr = c.db.SpaceDelete(s) return nil, deleteErr }, ) if deleteErr != nil { return deleteErr } return c.mc.Delete(key) } // TODO: SpaceUpdate // TODO: SpacesPerUser