// CreateUser inserts User object into a database, updates creation time and assigns UID func (u UsersObjMapper) Create(user *types.User, private interface{}) (*types.User, error) { user.SetUid(GetUid()) err, _ := adaptr.UserCreate(user) if err != nil { return nil, err } // Create user's subscription to 'me' && 'find'. Theese topics are ephemeral, the topic object need not to be inserted. err = Subs.Create( &types.Subscription{ ObjHeader: types.ObjHeader{CreatedAt: user.CreatedAt}, User: user.Id, Topic: user.Uid().UserId(), ModeWant: types.ModeSelf, ModeGiven: types.ModeSelf, Private: private, }, &types.Subscription{ ObjHeader: types.ObjHeader{CreatedAt: user.CreatedAt}, User: user.Id, Topic: user.Uid().FndName(), ModeWant: types.ModeSelf, ModeGiven: types.ModeSelf, Private: nil, }) if err != nil { // Best effort to delete incomplete user record. Orphaned user records are not a problem. // They just take up space. adaptr.UserDelete(user.Uid(), true) return nil, err } return user, nil }