Я новичок в разработке программного обеспечения, создаю приложение Angular TS, которое управляет людьми в очереди, и я использую Firebase / Firestore для своего бэкенда.У пользователя есть 3 статуса: пользователь либо ожидает, либо звонит, либо находится вне очереди.Когда вызывается пользователь, он / она должен ответить «присутствует» до 10 секунд, в противном случае он / она автоматически выводится из очереди.
Я пытаюсь реализовать эту последнюю спецификацию, активируя каждую секунду службуон проверит, превышен ли лимит времени, и в этом случае обновит статус пользователя «вне очереди» в соответствующем документе пожарного депо.
user.service.ts
unqueueUser(): any {
const actualTime = new Date();
this.afs.collection<User>('users', ref =>
ref.orderBy('status.call_moment.time_lim', 'asc')
.where('status.value', '==', "CALLED")
.where('status.call_moment.time_lim', '<=', actualTime))
.snapshotChanges()
.pipe(map((actions: DocumentChangeAction<User>[]) => {
const indices = [];
actions.map((a: DocumentChangeAction<User>) => {
const data = a.payload.doc.data() as User;
indices.push(data.id);
});
return indices;
}))
.subscribe(data => {
for (const id of data) {
return this.afs.doc(`users/${id}`)
.update({
'status.value': "OUT OF THE LINE",
});
}
});
}
user.component.ts
export class UserListComponent implements OnInit {
userList: User[];
ngOnInit() {
this.userService.getUserList().subscribe(data => this.userList = data);
setInterval(() => { this.userService.unqueueUser(); }, 1000);
}
}
Самая большая проблема вмое решение состоит в том, что легко достичь предела операций чтения за полдня (и у меня есть сотня пользователей для обработки!).
Знаете ли вы лучшее решение?Позвольте мне знать, если вам нужна дополнительная информация, чтобы разобраться.Спасибо!