2016-11-05 2 views
-1

Я работаю над проектом, в котором я нажимаю классы для firebase, и я хочу, чтобы сделать это максимально эффективным. Допустим, мои данные выглядит следующим образомAngularFire Duplicate Prevention

-Classes 
    -classKey1 
     -startTime: --- 
     -endTime: --- 
     -Instructor: --- 
    -classKey2 
     -startTime: --- 
     -endTime: --- 
     -Instructor: --- 

Теперь, когда я иду, чтобы выдвинуть еще один класс в базу данных, я хотел бы быть в состоянии проверить, чтобы убедиться, что класс так же, как это уже не существует. Если кто-то существует, я хотел бы воспользоваться его ключом для использования где-то еще. Я пытаюсь все, о чем я могу думать, и ничего не получится. Если у кого-нибудь есть идеи, пожалуйста, дайте мне знать. Заранее спасибо!

+0

Пытались ли вы что-нибудь? Каков ваш текущий код для продвижения этих значений? –

+0

Кроме того, если ключ уже существует и вы устанавливаете его значение, вы будете перезаписывать то, что там есть. Не будет дубликатов. –

+0

Некоторые из вещей, которые я пробовал, подписываются на firebaselistobservable, а затем пытаются сравнить результаты и посмотреть, не соответствует ли мне то, что я пытаюсь нажать или нет. Затем, если я нахожу совпадение, он использует этот ключ значений соответствия. Я пробовал фильтровать наблюдаемый, который не работал. Для толкания данных я просто использую функцию, которую дает угловой огонь, поэтому каждый раз, когда я нажимаю случайный ключ, генерируется. Вот почему у меня проблемы, потому что, если бы я просто сделал еще один толчок, клавиши были бы разными, но дети были бы одинаковыми. – rpascal

ответ

0

Ваша идея подписавшись этих предметов и поиск себя ключ ..

Попробуй так:

export class EntityModel { 
    $key: string; 
    $exists:() => {}; 

    startTime: Date = new Date(); 
    endTime: Date = new Date(); 
    Instructor: string = ''; 
} 

@Injectable() 
export class YourService { 

    public entities: EntityModel[]; 

    private _authState: FirebaseAuthState; 

    constructor(private _af: AngularFire) { 
     _af.auth.subscribe(authState => { 
     this._authState = authState; 

     if (authState) { 
      _af.database.list('/classes').subscribe(classes => { 
       this.entities = classes; 
      }); 
     } 
     }); 
    } 

    public add(entity: EntityModel) { 
     if (!entity) return console.log('invalid entity!'); 

     if (this._authState) { 
     entity.Instructor = this._authState.uid; 
     } 

     // trying to find an existing one .. 
     const existing = this.entities && 
     this.entities.length && 
     this.entities.find(e => 
      e.startTime == entity.startTime && 
      e.endTime == entity.endTime && 
      e.Instructor == entity.Instructor 
     ); 
     if (existing) { 
     // we found one .. 
     console.log('FOUND:', existing.$key); 
     return; 
     } 

     delete entity.$exists; 

     // update or create? 
     if (entity.$key) { 
     // update .. 
     const key = entity.$key; // temporary save our key! 
     delete entity.$key; // we dont want to push this into our firebase-database .. 
     this._af.database.list('/classes').update(key, entity); // update entry 
     } 
     else { 
     // create .. 
     this._af.database.list('/classes').push(entity); 
     } 
    } 
}