#javascript #php #laravel #indexeddb #dexie
Вопрос:
Я пытаюсь создать таблицу «журналы» (мои цели-узнать, сколько времени используется приложение), поэтому я создал функцию, которая определяет, неактивен ли пользователь по истечении определенного периода времени.
Таблица выглядит так:
dblogs.version(1).stores({
aLogs: " id, story_id, user_id, session_start, session_end, words_written"
});
Поэтому, когда пользователь активен, я создаю новую запись в aLogs, например:
0, 1 , 19 , 2021/06/30 10:15:10
пользователь 19
начал печатать в 2021/06/30 10:15:10
(это происходит в session_start), затем, если пользователь становится неактивным, я добавляю текущую дату и время в session_end
Пример:
0, 1 , 19 , 2021/06/30 10:15:10, 2021/06/30 12:15:48
таким образом, в основном расчетное время пользователя-это разница между этими 2 датами (в данном случае 2 часа 0 минут 38 минут).
моя цель состоит в том, чтобы иметь несколько таких журналов, затем запустить цикл по ним и записать количество секунд, потраченных пользователем «сегодня».
как мне запросить это у Декси?
Я пробовал await dblogs.aLogs.get({session_start : "2021/06/30"});
, но он возвращается неопределенным
Ответ №1:
Вероятно, у вас должен быть следующий индекс:
[идентификатор пользователя идентификатор истории начало сеанса]
Это позволит эффективным запросам извлекать все записи журнала для данного пользователя, истории и дня:
const result = await dblogs.aLogs
.where('[user_id story_id session_start]')
.between (
[userId, storyId, dayStart],
[userId, storyId, dayEnd])
.toArray();
const totalSpentToday = results.reduce(
(sum, {session_start, session_end}) =>
sum Math.min(dayEnd, session_end) - session_start);
Если вам нужно перехватить сеансы, которые перекрываются между вчерашней и текущей датой, вы можете рассмотреть возможность корректировки начала дня (в предложении «между») до некоторого разумного количества часов до начала дня, а затем из результата игнорировать (вычесть) продолжительность, которая не соответствует текущей дате.
Подробнее о составных индексах читайте здесь: https://dexie.org/docs/Compound-Index