fix: add tests and cleanup
All checks were successful
continuous-integration/drone/pr Build is passing
All checks were successful
continuous-integration/drone/pr Build is passing
This commit is contained in:
parent
8674b6437e
commit
54ed002d1b
|
@ -33,24 +33,26 @@ import (
|
||||||
"code.vikunja.io/api/pkg/user"
|
"code.vikunja.io/api/pkg/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ReminderRelation represents the task attribute which the period based reminder relates to
|
// ReminderRelation represents the date attribute of the task which a period based reminder relates to
|
||||||
type ReminderRelation string
|
type ReminderRelation string
|
||||||
|
|
||||||
// All valid ReminderRelations
|
// All valid ReminderRelations
|
||||||
const (
|
const (
|
||||||
ReminderDueDate ReminderRelation = `due_date`
|
ReminderRelationDueDate ReminderRelation = `due_date`
|
||||||
ReminderStartDate ReminderRelation = `start_date`
|
ReminderRelationStartDate ReminderRelation = `start_date`
|
||||||
ReminderEndDate ReminderRelation = `end_date`
|
ReminderRelationEndDate ReminderRelation = `end_date`
|
||||||
)
|
)
|
||||||
|
|
||||||
// TaskReminder holds a reminder on a task
|
// TaskReminder holds a reminder on a task.
|
||||||
|
// If RelativeTo and the assciated date field are defined, then the attribute Reminder will be computed.
|
||||||
|
// If RelativeTo is missing, than Reminder must be given.
|
||||||
type TaskReminder struct {
|
type TaskReminder struct {
|
||||||
ID int64 `xorm:"bigint autoincr not null unique pk" json:"-"`
|
ID int64 `xorm:"bigint autoincr not null unique pk" json:"-"`
|
||||||
TaskID int64 `xorm:"bigint not null INDEX" json:"-"`
|
TaskID int64 `xorm:"bigint not null INDEX" json:"-"`
|
||||||
// The absolute time when the user wants to be reminded of the task.
|
// The absolute time when the user wants to be reminded of the task.
|
||||||
Reminder time.Time `xorm:"DATETIME not null INDEX 'reminder'" json:"reminder"`
|
Reminder time.Time `xorm:"DATETIME not null INDEX 'reminder'" json:"reminder"`
|
||||||
Created time.Time `xorm:"created not null" json:"-"`
|
Created time.Time `xorm:"created not null" json:"-"`
|
||||||
// A period in seconds relative to another date argument. Negative values mean the reminder triggers before the date, positive after.
|
// A period in seconds relative to another date argument. Negative values mean the reminder triggers before the date. Default: 0, tiggers when RelativeTo is due.
|
||||||
RelativePeriod int64 `xorm:"bigint null" json:"relative_period"`
|
RelativePeriod int64 `xorm:"bigint null" json:"relative_period"`
|
||||||
// The name of the date field to which the relative period refers to.
|
// The name of the date field to which the relative period refers to.
|
||||||
RelativeTo ReminderRelation `xorm:"varchar(50) null" json:"relative_to"`
|
RelativeTo ReminderRelation `xorm:"varchar(50) null" json:"relative_to"`
|
||||||
|
|
|
@ -63,7 +63,7 @@ type Task struct {
|
||||||
DueDate time.Time `xorm:"DATETIME INDEX null 'due_date'" json:"due_date"`
|
DueDate time.Time `xorm:"DATETIME INDEX null 'due_date'" json:"due_date"`
|
||||||
// An array of datetimes when the user wants to be reminded of the task.
|
// An array of datetimes when the user wants to be reminded of the task.
|
||||||
//
|
//
|
||||||
// Deprecated: Use Reminders[]
|
// Deprecated: Use Reminders
|
||||||
ReminderDates []time.Time `xorm:"-" json:"reminder_dates"`
|
ReminderDates []time.Time `xorm:"-" json:"reminder_dates"`
|
||||||
// An array of reminders that are associated with this task.
|
// An array of reminders that are associated with this task.
|
||||||
Reminders []*TaskReminder `xorm:"-" json:"reminders"`
|
Reminders []*TaskReminder `xorm:"-" json:"reminders"`
|
||||||
|
@ -975,7 +975,7 @@ func createTask(s *xorm.Session, t *Task, a web.Auth, updateAssignees bool) (err
|
||||||
|
|
||||||
// Deprecated: the if clause can be removed when ReminderDates will be removed
|
// Deprecated: the if clause can be removed when ReminderDates will be removed
|
||||||
if t.ReminderDates != nil {
|
if t.ReminderDates != nil {
|
||||||
t.updateRemindersFromReminderDates(t.ReminderDates)
|
t.overwriteRemindersWithReminderDates(t.ReminderDates)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the reminders
|
// Update the reminders
|
||||||
|
@ -1068,7 +1068,7 @@ func (t *Task) Update(s *xorm.Session, a web.Auth) (err error) {
|
||||||
|
|
||||||
// Deprecated: This statement can be removed when ReminderDates will be removed
|
// Deprecated: This statement can be removed when ReminderDates will be removed
|
||||||
if t.ReminderDates != nil {
|
if t.ReminderDates != nil {
|
||||||
t.updateRemindersFromReminderDates(t.ReminderDates)
|
t.overwriteRemindersWithReminderDates(t.ReminderDates)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the reminders
|
// Update the reminders
|
||||||
|
@ -1502,24 +1502,42 @@ func updateDone(oldTask *Task, newTask *Task) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deprecated: will be removed when ReminderDates are removed from Task.
|
// Deprecated: will be removed when ReminderDates are removed from Task.
|
||||||
// For now the method just creates Taskeminder objects from the ReminderDates
|
// For now the method just creates TaskReminder objects from the ReminderDates and overwrites Reminder.
|
||||||
func (t *Task) updateRemindersFromReminderDates(reminderDates []time.Time) {
|
func (t *Task) overwriteRemindersWithReminderDates(reminderDates []time.Time) {
|
||||||
// if the client still sends old reminder_dates, then these will overwrite the absolute triggers
|
// If the client still sends old reminder_dates, then these will overwrite
|
||||||
// of the Reminders, sent by the client. We assume that clients still sending old reminder_dates do not
|
// the Reminders, if the were sent by the client, too.
|
||||||
// understand the new reminders.
|
// We assume that clients still using the old API with reminder_dates do not understand the new reminders.
|
||||||
|
// Clients who want to use the new Reminder structure must explicitey unset reminder_dates.
|
||||||
|
|
||||||
|
// start with empty Reminders
|
||||||
|
reminders := make([]*TaskReminder, 0)
|
||||||
|
|
||||||
// remove absolute triggers in Reminders
|
|
||||||
updatedReminders := make([]*TaskReminder, 0)
|
|
||||||
for _, reminder := range t.Reminders {
|
|
||||||
if reminder.RelativeTo != "" {
|
|
||||||
updatedReminders = append(updatedReminders, reminder)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// append absolute triggers from ReminderDates
|
// append absolute triggers from ReminderDates
|
||||||
for _, reminderDate := range reminderDates {
|
for _, reminderDate := range reminderDates {
|
||||||
updatedReminders = append(updatedReminders, &TaskReminder{TaskID: t.ID, Reminder: reminderDate})
|
reminders = append(reminders, &TaskReminder{TaskID: t.ID, Reminder: reminderDate})
|
||||||
|
}
|
||||||
|
t.Reminders = reminders
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the absolute trigger dates for Reminders with relative period
|
||||||
|
func updateRelativeReminderDates(reminders []*TaskReminder, dueDate time.Time, startDate time.Time, endDate time.Time) {
|
||||||
|
for _, reminder := range reminders {
|
||||||
|
relativeDuration := time.Duration(reminder.RelativePeriod) * time.Second
|
||||||
|
switch reminder.RelativeTo {
|
||||||
|
case ReminderRelationDueDate:
|
||||||
|
if !dueDate.IsZero() {
|
||||||
|
reminder.Reminder = dueDate.Add(relativeDuration)
|
||||||
|
}
|
||||||
|
case ReminderRelationStartDate:
|
||||||
|
if !startDate.IsZero() {
|
||||||
|
reminder.Reminder = startDate.Add(relativeDuration)
|
||||||
|
}
|
||||||
|
case ReminderRelationEndDate:
|
||||||
|
if !endDate.IsZero() {
|
||||||
|
reminder.Reminder = endDate.Add(relativeDuration)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
t.Reminders = updatedReminders
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Removes all old reminders and adds the new ones. This is a lot easier and less buggy than
|
// Removes all old reminders and adds the new ones. This is a lot easier and less buggy than
|
||||||
|
@ -1535,7 +1553,7 @@ func (t *Task) updateReminders(s *xorm.Session, reminders []*TaskReminder, dueDa
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
setRelativeReminderDates(reminders, dueDate, startDate, endDate)
|
updateRelativeReminderDates(reminders, dueDate, startDate, endDate)
|
||||||
|
|
||||||
// Resolve duplicates and sort them
|
// Resolve duplicates and sort them
|
||||||
reminderMap := make(map[int64]TaskReminder, len(reminders))
|
reminderMap := make(map[int64]TaskReminder, len(reminders))
|
||||||
|
@ -1554,18 +1572,19 @@ func (t *Task) updateReminders(s *xorm.Session, reminders []*TaskReminder, dueDa
|
||||||
RelativePeriod: r.RelativePeriod,
|
RelativePeriod: r.RelativePeriod,
|
||||||
RelativeTo: r.RelativeTo}
|
RelativeTo: r.RelativeTo}
|
||||||
_, err = s.Insert(taskReminder)
|
_, err = s.Insert(taskReminder)
|
||||||
t.Reminders = append(t.Reminders, taskReminder)
|
|
||||||
t.ReminderDates = append(t.ReminderDates, taskReminder.Reminder)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
t.Reminders = append(t.Reminders, taskReminder)
|
||||||
|
t.ReminderDates = append(t.ReminderDates, taskReminder.Reminder)
|
||||||
}
|
}
|
||||||
|
|
||||||
// sort reminders
|
// sort reminders
|
||||||
sort.Slice(t.Reminders, func(i, j int) bool {
|
sort.Slice(t.Reminders, func(i, j int) bool {
|
||||||
return t.Reminders[i].Reminder.Before(t.Reminders[j].Reminder)
|
return t.Reminders[i].Reminder.Before(t.Reminders[j].Reminder)
|
||||||
})
|
})
|
||||||
|
|
||||||
if len(reminders) == 0 {
|
if len(t.Reminders) == 0 {
|
||||||
t.Reminders = nil
|
t.Reminders = nil
|
||||||
t.ReminderDates = nil
|
t.ReminderDates = nil
|
||||||
}
|
}
|
||||||
|
@ -1574,26 +1593,6 @@ func (t *Task) updateReminders(s *xorm.Session, reminders []*TaskReminder, dueDa
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func setRelativeReminderDates(reminders []*TaskReminder, dueDate time.Time, startDate time.Time, endDate time.Time) {
|
|
||||||
for _, reminder := range reminders {
|
|
||||||
relativeDuration := time.Duration(reminder.RelativePeriod) * time.Second
|
|
||||||
switch reminder.RelativeTo {
|
|
||||||
case ReminderDueDate:
|
|
||||||
if !dueDate.IsZero() {
|
|
||||||
reminder.Reminder = dueDate.Add(relativeDuration)
|
|
||||||
}
|
|
||||||
case ReminderStartDate:
|
|
||||||
if !startDate.IsZero() {
|
|
||||||
reminder.Reminder = startDate.Add(relativeDuration)
|
|
||||||
}
|
|
||||||
case ReminderEndDate:
|
|
||||||
if !endDate.IsZero() {
|
|
||||||
reminder.Reminder = endDate.Add(relativeDuration)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateTaskLastUpdated(s *xorm.Session, task *Task) error {
|
func updateTaskLastUpdated(s *xorm.Session, task *Task) error {
|
||||||
_, err := s.ID(task.ID).Cols("updated").Update(task)
|
_, err := s.ID(task.ID).Cols("updated").Update(task)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -103,9 +103,11 @@ func TestTask_Create(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 1, 0, time.Local), task.Reminders[0].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 1, 0, time.Local), task.Reminders[0].Reminder)
|
||||||
assert.Equal(t, int64(1), task.Reminders[0].RelativePeriod)
|
assert.Equal(t, int64(1), task.Reminders[0].RelativePeriod)
|
||||||
assert.Equal(t, ReminderDueDate, task.Reminders[0].RelativeTo)
|
assert.Equal(t, ReminderRelationDueDate, task.Reminders[0].RelativeTo)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 8, 0, time.Local), task.Reminders[1].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 8, 0, time.Local), task.Reminders[1].Reminder)
|
||||||
|
assert.Equal(t, ReminderRelationStartDate, task.Reminders[1].RelativeTo)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 19, 0, time.Local), task.Reminders[2].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 19, 0, time.Local), task.Reminders[2].Reminder)
|
||||||
|
assert.Equal(t, ReminderRelationEndDate, task.Reminders[2].RelativeTo)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 23, 0, 0, 0, time.Local), task.Reminders[3].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 23, 0, 0, 0, time.Local), task.Reminders[3].Reminder)
|
||||||
err = s.Commit()
|
err = s.Commit()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
@ -442,9 +444,11 @@ func TestTask_Update(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 1, 0, time.Local), task.Reminders[0].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 1, 0, time.Local), task.Reminders[0].Reminder)
|
||||||
assert.Equal(t, int64(1), task.Reminders[0].RelativePeriod)
|
assert.Equal(t, int64(1), task.Reminders[0].RelativePeriod)
|
||||||
assert.Equal(t, ReminderDueDate, task.Reminders[0].RelativeTo)
|
assert.Equal(t, ReminderRelationDueDate, task.Reminders[0].RelativeTo)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 8, 0, time.Local), task.Reminders[1].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 8, 0, time.Local), task.Reminders[1].Reminder)
|
||||||
|
assert.Equal(t, ReminderRelationStartDate, task.Reminders[1].RelativeTo)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 19, 0, time.Local), task.Reminders[2].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 22, 5, 19, 0, time.Local), task.Reminders[2].Reminder)
|
||||||
|
assert.Equal(t, ReminderRelationEndDate, task.Reminders[2].RelativeTo)
|
||||||
assert.Equal(t, time.Date(2023, time.March, 7, 23, 0, 0, 0, time.Local), task.Reminders[3].Reminder)
|
assert.Equal(t, time.Date(2023, time.March, 7, 23, 0, 0, 0, time.Local), task.Reminders[3].Reminder)
|
||||||
err = s.Commit()
|
err = s.Commit()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
@ -474,6 +478,40 @@ func TestTask_Update(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
db.AssertCount(t, "task_reminders", builder.Eq{"task_id": 1}, 1)
|
db.AssertCount(t, "task_reminders", builder.Eq{"task_id": 1}, 1)
|
||||||
})
|
})
|
||||||
|
t.Run("update relative reminder when start_date changes", func(t *testing.T) {
|
||||||
|
db.LoadAndAssertFixtures(t)
|
||||||
|
s := db.NewSession()
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
// given task with start_date and relative reminder for start_date
|
||||||
|
taskBefore := &Task{
|
||||||
|
Title: "test",
|
||||||
|
ListID: 1,
|
||||||
|
StartDate: time.Date(2022, time.March, 8, 8, 5, 20, 0, time.Local),
|
||||||
|
Reminders: []*TaskReminder{
|
||||||
|
{
|
||||||
|
RelativeTo: "start_date",
|
||||||
|
RelativePeriod: -60,
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
err := taskBefore.Create(s, u)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
err = s.Commit()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, time.Date(2022, time.March, 8, 8, 4, 20, 0, time.Local), taskBefore.Reminders[0].Reminder)
|
||||||
|
|
||||||
|
// when start_date is modified
|
||||||
|
task := taskBefore
|
||||||
|
task.StartDate = time.Date(2023, time.March, 8, 8, 5, 0, 0, time.Local)
|
||||||
|
task.ReminderDates = nil
|
||||||
|
err = task.Update(s, u)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// then reminder time is updated
|
||||||
|
assert.Equal(t, time.Date(2023, time.March, 8, 8, 4, 0, 0, time.Local), task.Reminders[0].Reminder)
|
||||||
|
err = s.Commit()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTask_Delete(t *testing.T) {
|
func TestTask_Delete(t *testing.T) {
|
||||||
|
|
|
@ -149,7 +149,7 @@ func convertTickTickToVikunja(tasks []*tickTickTask) (result []*models.Namespace
|
||||||
if !t.DueDate.IsZero() && t.Reminder > 0 {
|
if !t.DueDate.IsZero() && t.Reminder > 0 {
|
||||||
task.Task.Reminders = []*models.TaskReminder{
|
task.Task.Reminders = []*models.TaskReminder{
|
||||||
{
|
{
|
||||||
RelativeTo: models.ReminderDueDate,
|
RelativeTo: models.ReminderRelationDueDate,
|
||||||
RelativePeriod: int64((t.Reminder * -1).Seconds()),
|
RelativePeriod: int64((t.Reminder * -1).Seconds()),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -7790,7 +7790,7 @@ const docTemplate = `{
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"reminder_dates": {
|
"reminder_dates": {
|
||||||
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders[]",
|
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders",
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
@ -8317,9 +8317,9 @@ const docTemplate = `{
|
||||||
"end_date"
|
"end_date"
|
||||||
],
|
],
|
||||||
"x-enum-varnames": [
|
"x-enum-varnames": [
|
||||||
"ReminderDueDate",
|
"ReminderRelationDueDate",
|
||||||
"ReminderStartDate",
|
"ReminderRelationStartDate",
|
||||||
"ReminderEndDate"
|
"ReminderRelationEndDate"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"models.Right": {
|
"models.Right": {
|
||||||
|
@ -8537,7 +8537,7 @@ const docTemplate = `{
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"reminder_dates": {
|
"reminder_dates": {
|
||||||
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders[]",
|
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders",
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
@ -8721,7 +8721,7 @@ const docTemplate = `{
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"relative_period": {
|
"relative_period": {
|
||||||
"description": "A period in seconds relative to another date argument. Negative values mean the reminder triggers before the date, positive after.",
|
"description": "A period in seconds relative to another date argument. Negative values mean the reminder triggers before the date. Default: 0, tiggers when RelativeTo is due.",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"relative_to": {
|
"relative_to": {
|
||||||
|
|
|
@ -7782,7 +7782,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"reminder_dates": {
|
"reminder_dates": {
|
||||||
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders[]",
|
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders",
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
@ -8309,9 +8309,9 @@
|
||||||
"end_date"
|
"end_date"
|
||||||
],
|
],
|
||||||
"x-enum-varnames": [
|
"x-enum-varnames": [
|
||||||
"ReminderDueDate",
|
"ReminderRelationDueDate",
|
||||||
"ReminderStartDate",
|
"ReminderRelationStartDate",
|
||||||
"ReminderEndDate"
|
"ReminderRelationEndDate"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"models.Right": {
|
"models.Right": {
|
||||||
|
@ -8529,7 +8529,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"reminder_dates": {
|
"reminder_dates": {
|
||||||
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders[]",
|
"description": "An array of datetimes when the user wants to be reminded of the task.\n\nDeprecated: Use Reminders",
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
@ -8713,7 +8713,7 @@
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"relative_period": {
|
"relative_period": {
|
||||||
"description": "A period in seconds relative to another date argument. Negative values mean the reminder triggers before the date, positive after.",
|
"description": "A period in seconds relative to another date argument. Negative values mean the reminder triggers before the date. Default: 0, tiggers when RelativeTo is due.",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"relative_to": {
|
"relative_to": {
|
||||||
|
|
|
@ -199,7 +199,7 @@ definitions:
|
||||||
description: |-
|
description: |-
|
||||||
An array of datetimes when the user wants to be reminded of the task.
|
An array of datetimes when the user wants to be reminded of the task.
|
||||||
|
|
||||||
Deprecated: Use Reminders[]
|
Deprecated: Use Reminders
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
@ -609,9 +609,9 @@ definitions:
|
||||||
- end_date
|
- end_date
|
||||||
type: string
|
type: string
|
||||||
x-enum-varnames:
|
x-enum-varnames:
|
||||||
- ReminderDueDate
|
- ReminderRelationDueDate
|
||||||
- ReminderStartDate
|
- ReminderRelationStartDate
|
||||||
- ReminderEndDate
|
- ReminderRelationEndDate
|
||||||
models.Right:
|
models.Right:
|
||||||
enum:
|
enum:
|
||||||
- 0
|
- 0
|
||||||
|
@ -782,7 +782,7 @@ definitions:
|
||||||
description: |-
|
description: |-
|
||||||
An array of datetimes when the user wants to be reminded of the task.
|
An array of datetimes when the user wants to be reminded of the task.
|
||||||
|
|
||||||
Deprecated: Use Reminders[]
|
Deprecated: Use Reminders
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
@ -915,8 +915,9 @@ definitions:
|
||||||
models.TaskReminder:
|
models.TaskReminder:
|
||||||
properties:
|
properties:
|
||||||
relative_period:
|
relative_period:
|
||||||
description: A period in seconds relative to another date argument. Negative
|
description: 'A period in seconds relative to another date argument. Negative
|
||||||
values mean the reminder triggers before the date, positive after.
|
values mean the reminder triggers before the date. Default: 0, tiggers when
|
||||||
|
RelativeTo is due.'
|
||||||
type: integer
|
type: integer
|
||||||
relative_to:
|
relative_to:
|
||||||
allOf:
|
allOf:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user