-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feature: add calendar view for reminder occurrences
- Loading branch information
Showing
22 changed files
with
944 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 16 additions & 4 deletions
20
backend/src/main/java/com/github/mdeluise/plantit/reminder/frequency/Unit.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,20 @@ | ||
package com.github.mdeluise.plantit.reminder.frequency; | ||
|
||
import java.util.Calendar; | ||
|
||
public enum Unit { | ||
DAYS, | ||
WEEKS, | ||
MONTHS, | ||
YEARS | ||
DAYS(Calendar.DAY_OF_MONTH), | ||
WEEKS(Calendar.WEEK_OF_YEAR), | ||
MONTHS(Calendar.MONTH), | ||
YEARS(Calendar.YEAR); | ||
|
||
private final int calendarField; | ||
|
||
Unit(int calendarField) { | ||
this.calendarField = calendarField; | ||
} | ||
|
||
public int toCalendarField() { | ||
return this.calendarField; | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
...end/src/main/java/com/github/mdeluise/plantit/reminder/occurrence/ReminderOccurrence.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package com.github.mdeluise.plantit.reminder.occurrence; | ||
|
||
import java.util.Date; | ||
|
||
import com.github.mdeluise.plantit.reminder.Reminder; | ||
|
||
public class ReminderOccurrence { | ||
private Date date; | ||
private Reminder reminder; | ||
|
||
|
||
public Date getDate() { | ||
return date; | ||
} | ||
|
||
|
||
public void setDate(Date date) { | ||
this.date = date; | ||
} | ||
|
||
|
||
public Reminder getReminder() { | ||
return reminder; | ||
} | ||
|
||
|
||
public void setReminder(Reminder reminder) { | ||
this.reminder = reminder; | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
.../src/main/java/com/github/mdeluise/plantit/reminder/occurrence/ReminderOccurrenceDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package com.github.mdeluise.plantit.reminder.occurrence; | ||
|
||
import java.util.Date; | ||
|
||
import com.github.mdeluise.plantit.reminder.frequency.FrequencyDTO; | ||
|
||
public class ReminderOccurrenceDTO { | ||
private Date date; | ||
private Long reminderId; | ||
private FrequencyDTO reminderFrequency; | ||
private String reminderAction; | ||
private Long reminderTargetId; | ||
private String reminderTargetInfoPersonalName; | ||
|
||
|
||
public Date getDate() { | ||
return date; | ||
} | ||
|
||
|
||
public void setDate(Date date) { | ||
this.date = date; | ||
} | ||
|
||
|
||
public Long getReminderId() { | ||
return reminderId; | ||
} | ||
|
||
|
||
public void setReminderId(Long reminderId) { | ||
this.reminderId = reminderId; | ||
} | ||
|
||
|
||
public FrequencyDTO getReminderFrequency() { | ||
return reminderFrequency; | ||
} | ||
|
||
|
||
public void setReminderFrequency(FrequencyDTO reminderFrequency) { | ||
this.reminderFrequency = reminderFrequency; | ||
} | ||
|
||
|
||
public String getReminderAction() { | ||
return reminderAction; | ||
} | ||
|
||
|
||
public void setReminderAction(String reminderAction) { | ||
this.reminderAction = reminderAction; | ||
} | ||
|
||
|
||
public Long getReminderTargetId() { | ||
return reminderTargetId; | ||
} | ||
|
||
|
||
public void setReminderTargetId(Long reminderTargetId) { | ||
this.reminderTargetId = reminderTargetId; | ||
} | ||
|
||
|
||
public String getReminderTargetInfoPersonalName() { | ||
return reminderTargetInfoPersonalName; | ||
} | ||
|
||
|
||
public void setReminderTargetInfoPersonalName(String reminderTargetInfoPersonalName) { | ||
this.reminderTargetInfoPersonalName = reminderTargetInfoPersonalName; | ||
} | ||
} |
24 changes: 24 additions & 0 deletions
24
.../java/com/github/mdeluise/plantit/reminder/occurrence/ReminderOccurrenceDTOConverter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.github.mdeluise.plantit.reminder.occurrence; | ||
|
||
import com.github.mdeluise.plantit.common.AbstractDTOConverter; | ||
import org.modelmapper.ModelMapper; | ||
import org.springframework.stereotype.Controller; | ||
|
||
@Controller | ||
public class ReminderOccurrenceDTOConverter extends AbstractDTOConverter<ReminderOccurrence, ReminderOccurrenceDTO> { | ||
public ReminderOccurrenceDTOConverter(ModelMapper modelMapper) { | ||
super(modelMapper); | ||
} | ||
|
||
|
||
@Override | ||
public ReminderOccurrence convertFromDTO(ReminderOccurrenceDTO dto) { | ||
return modelMapper.map(dto, ReminderOccurrence.class); | ||
} | ||
|
||
|
||
@Override | ||
public ReminderOccurrenceDTO convertToDTO(ReminderOccurrence data) { | ||
return modelMapper.map(data, ReminderOccurrenceDTO.class); | ||
} | ||
} |
64 changes: 64 additions & 0 deletions
64
.../main/java/com/github/mdeluise/plantit/reminder/occurrence/ReminderOccurrenceService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package com.github.mdeluise.plantit.reminder.occurrence; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Calendar; | ||
import java.util.Collection; | ||
import java.util.Date; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
import com.github.mdeluise.plantit.diary.entry.DiaryEntry; | ||
import com.github.mdeluise.plantit.diary.entry.DiaryEntryService; | ||
import com.github.mdeluise.plantit.reminder.Reminder; | ||
import com.github.mdeluise.plantit.reminder.frequency.Frequency; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
public class ReminderOccurrenceService { | ||
private final DiaryEntryService diaryEntryService; | ||
|
||
|
||
@Autowired | ||
public ReminderOccurrenceService(DiaryEntryService diaryEntryService) { | ||
this.diaryEntryService = diaryEntryService; | ||
} | ||
|
||
|
||
public Collection<ReminderOccurrence> getOccurrences(Reminder reminder, Date start, Date end) { | ||
if (!reminder.isEnabled() || reminder.getStart().after(end) || | ||
reminder.getEnd() != null && reminder.getEnd().before(start)) { | ||
return List.of(); | ||
} | ||
|
||
final List<ReminderOccurrence> occurrences = new ArrayList<>(); | ||
final Optional<DiaryEntry> lastAction = diaryEntryService.getLast( | ||
reminder.getTarget().getId(), reminder.getAction()); | ||
Date occurrenceDate; | ||
if (lastAction.isPresent()) { | ||
final Date lastActionDate = lastAction.get().getDate(); | ||
occurrenceDate = addToDateOneStep(lastActionDate, reminder.getFrequency()); | ||
} else { | ||
occurrenceDate = reminder.getStart(); | ||
} | ||
while (occurrenceDate.before(end)) { | ||
if (occurrenceDate.after(start)) { | ||
final ReminderOccurrence occurrence = new ReminderOccurrence(); | ||
occurrence.setDate(occurrenceDate); | ||
occurrence.setReminder(reminder); | ||
occurrences.add(occurrence); | ||
} | ||
occurrenceDate = addToDateOneStep(occurrenceDate, reminder.getFrequency()); | ||
} | ||
return occurrences; | ||
} | ||
|
||
|
||
private Date addToDateOneStep(Date date, Frequency frequency) { | ||
final Calendar calendar = Calendar.getInstance(); | ||
calendar.setTime(date); | ||
calendar.add(frequency.getUnit().toCalendarField(), Math.max(1, frequency.getQuantity())); | ||
return calendar.getTime(); | ||
} | ||
|
||
} |
Oops, something went wrong.