2017-12-14 20:12:14 +02:00
const BaseModel = require ( 'lib/BaseModel.js' ) ;
const Note = require ( 'lib/models/Note.js' ) ;
2017-11-28 00:50:46 +02:00
class Alarm extends BaseModel {
static tableName ( ) {
return 'alarms' ;
}
static modelType ( ) {
return BaseModel . TYPE _ALARM ;
}
static byNoteId ( noteId ) {
return this . modelSelectOne ( 'SELECT * FROM alarms WHERE note_id = ?' , [ noteId ] ) ;
}
2017-11-28 02:22:38 +02:00
static async deleteExpiredAlarms ( ) {
return this . db ( ) . exec ( 'DELETE FROM alarms WHERE trigger_time <= ?' , [ Date . now ( ) ] ) ;
}
2017-11-28 00:50:46 +02:00
2017-11-28 02:22:38 +02:00
static async alarmIdsWithoutNotes ( ) {
2017-11-28 00:50:46 +02:00
// https://stackoverflow.com/a/4967229/561309
2017-11-28 02:22:38 +02:00
const alarms = await this . db ( ) . selectAll ( 'SELECT alarms.id FROM alarms LEFT JOIN notes ON alarms.note_id = notes.id WHERE notes.id IS NULL' ) ;
return alarms . map ( ( a ) => { return a . id } ) ;
2017-11-28 00:50:46 +02:00
}
2017-11-28 22:17:34 +02:00
static async makeNotification ( alarm , note = null ) {
2018-12-08 01:42:29 +02:00
if ( ! note ) {
note = await Note . load ( alarm . note _id ) ;
} else if ( ! note . todo _due ) {
this . logger ( ) . warn ( 'Trying to create notification for note with todo_due property - reloading note object in case we are dealing with a partial note' ) ;
note = await Note . load ( alarm . note _id ) ;
this . logger ( ) . warn ( 'Reloaded note:' , note ) ;
}
2017-11-28 22:17:34 +02:00
const output = {
id : alarm . id ,
date : new Date ( note . todo _due ) ,
title : note . title . substr ( 0 , 128 ) ,
} ;
if ( note . body ) output . body = note . body . substr ( 0 , 512 ) ;
return output ;
}
2017-11-28 22:31:14 +02:00
static async allDue ( ) {
return this . modelSelectAll ( 'SELECT * FROM alarms WHERE trigger_time >= ?' , [ Date . now ( ) ] ) ;
}
2017-11-28 00:50:46 +02:00
}
module . exports = Alarm ;