diff --git a/app/src/main/java/com/planify/mobile/domain/model/BackendType.kt b/app/src/main/java/com/planify/mobile/domain/model/BackendType.kt new file mode 100644 index 0000000..a37643b --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/BackendType.kt @@ -0,0 +1,3 @@ +package com.planify.mobile.domain.model + +enum class BackendType { LOCAL, CALDAV, TODOIST } diff --git a/app/src/main/java/com/planify/mobile/domain/model/DueDate.kt b/app/src/main/java/com/planify/mobile/domain/model/DueDate.kt new file mode 100644 index 0000000..72e7508 --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/DueDate.kt @@ -0,0 +1,16 @@ +package com.planify.mobile.domain.model + +data class DueDate( + val date: String, + val timezone: String? = null, + val isRecurring: Boolean = false, + val recurrencyType: RecurrencyType = RecurrencyType.NONE, + val recurrencyInterval: Int = 1, + val recurrencyWeekDays: List = emptyList(), + val recurrencyCount: Int? = null, + val recurrencyEnd: String? = null, +) + +enum class RecurrencyType { + NONE, MINUTELY, HOURLY, EVERY_DAY, EVERY_WEEK, EVERY_MONTH, EVERY_YEAR +} diff --git a/app/src/main/java/com/planify/mobile/domain/model/Label.kt b/app/src/main/java/com/planify/mobile/domain/model/Label.kt new file mode 100644 index 0000000..ebfe368 --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/Label.kt @@ -0,0 +1,12 @@ +package com.planify.mobile.domain.model + +data class Label( + val id: String, + val name: String, + val color: String, + val order: Int = 0, + val sourceId: String? = null, + val backendType: BackendType = BackendType.LOCAL, + val isFavorite: Boolean = false, + val isDeleted: Boolean = false, +) diff --git a/app/src/main/java/com/planify/mobile/domain/model/Project.kt b/app/src/main/java/com/planify/mobile/domain/model/Project.kt new file mode 100644 index 0000000..9bed99c --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/Project.kt @@ -0,0 +1,25 @@ +package com.planify.mobile.domain.model + +data class Project( + val id: String, + val name: String, + val color: String = "#4CAF50", + val emoji: String? = null, + val parentId: String? = null, + val sourceId: String? = null, + val backendType: BackendType = BackendType.LOCAL, + val isInbox: Boolean = false, + val isFavorite: Boolean = false, + val isArchived: Boolean = false, + val isDeleted: Boolean = false, + val viewStyle: ViewStyle = ViewStyle.LIST, + val sortedBy: SortBy = SortBy.MANUAL, + val sortAscending: Boolean = true, + val childOrder: Int = 0, + val calendarUrl: String? = null, + val syncId: String? = null, +) + +enum class ViewStyle { LIST, BOARD } + +enum class SortBy { MANUAL, NAME, DUE_DATE, ADDED_DATE, PRIORITY } diff --git a/app/src/main/java/com/planify/mobile/domain/model/Reminder.kt b/app/src/main/java/com/planify/mobile/domain/model/Reminder.kt new file mode 100644 index 0000000..8d415c7 --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/Reminder.kt @@ -0,0 +1,11 @@ +package com.planify.mobile.domain.model + +data class Reminder( + val id: String, + val taskId: String, + val type: ReminderType, + val dueDate: DueDate? = null, + val minutesOffset: Int? = null, +) + +enum class ReminderType { ABSOLUTE, RELATIVE } diff --git a/app/src/main/java/com/planify/mobile/domain/model/Section.kt b/app/src/main/java/com/planify/mobile/domain/model/Section.kt new file mode 100644 index 0000000..c4215c3 --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/Section.kt @@ -0,0 +1,13 @@ +package com.planify.mobile.domain.model + +data class Section( + val id: String, + val name: String, + val projectId: String, + val order: Int = 0, + val isArchived: Boolean = false, + val isDeleted: Boolean = false, + val collapsed: Boolean = false, + val icalUrl: String? = null, + val etag: String? = null, +) diff --git a/app/src/main/java/com/planify/mobile/domain/model/Source.kt b/app/src/main/java/com/planify/mobile/domain/model/Source.kt new file mode 100644 index 0000000..9b8487b --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/Source.kt @@ -0,0 +1,26 @@ +package com.planify.mobile.domain.model + +data class Source( + val id: String, + val type: SourceType, + val displayName: String, + val addedAt: String, + val updatedAt: String, + val isVisible: Boolean = true, + val lastSync: String? = null, + val caldavData: SourceCalDavData? = null, +) + +enum class SourceType { LOCAL, CALDAV } + +data class SourceCalDavData( + val serverUrl: String, + val username: String, + val calendarHomeUrl: String? = null, + val userDisplayName: String? = null, + val userEmail: String? = null, + val caldavType: CalDavType = CalDavType.GENERIC, + val ignoreSsl: Boolean = false, +) + +enum class CalDavType { NEXTCLOUD, GENERIC } diff --git a/app/src/main/java/com/planify/mobile/domain/model/Task.kt b/app/src/main/java/com/planify/mobile/domain/model/Task.kt new file mode 100644 index 0000000..0632479 --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/model/Task.kt @@ -0,0 +1,28 @@ +package com.planify.mobile.domain.model + +data class Task( + val id: String, + val content: String, + val description: String = "", + val projectId: String, + val sectionId: String? = null, + val parentId: String? = null, + val priority: Int = 4, + val checked: Boolean = false, + val dueDate: DueDate? = null, + val deadlineDate: String? = null, + val labels: List = emptyList(), + val pinned: Boolean = false, + val collapsed: Boolean = false, + val childOrder: Int = 0, + val addedAt: String = "", + val updatedAt: String = "", + val completedAt: String? = null, + val itemType: ItemType = ItemType.TASK, + val calendarEventUid: String? = null, + val icalUrl: String? = null, + val etag: String? = null, + val responsibleUid: String? = null, +) + +enum class ItemType { TASK, NOTE } diff --git a/app/src/main/java/com/planify/mobile/domain/repository/ProjectRepository.kt b/app/src/main/java/com/planify/mobile/domain/repository/ProjectRepository.kt new file mode 100644 index 0000000..152dc82 --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/repository/ProjectRepository.kt @@ -0,0 +1,15 @@ +package com.planify.mobile.domain.repository + +import com.planify.mobile.domain.model.Project +import kotlinx.coroutines.flow.Flow + +interface ProjectRepository { + fun getAllProjects(): Flow> + fun getFavoriteProjects(): Flow> + fun getSubProjects(parentId: String): Flow> + suspend fun getProjectById(id: String): Project? + suspend fun getInboxProject(): Project? + suspend fun insertProject(project: Project) + suspend fun updateProject(project: Project) + suspend fun deleteProject(id: String) +} diff --git a/app/src/main/java/com/planify/mobile/domain/repository/TaskRepository.kt b/app/src/main/java/com/planify/mobile/domain/repository/TaskRepository.kt new file mode 100644 index 0000000..90556dd --- /dev/null +++ b/app/src/main/java/com/planify/mobile/domain/repository/TaskRepository.kt @@ -0,0 +1,18 @@ +package com.planify.mobile.domain.repository + +import com.planify.mobile.domain.model.Task +import kotlinx.coroutines.flow.Flow + +interface TaskRepository { + fun getTasksByProject(projectId: String): Flow> + fun getTasksBySection(sectionId: String): Flow> + fun getInboxTasks(): Flow> + fun getTodayTasks(): Flow> + fun getOverdueTasks(): Flow> + fun getSubTasks(parentId: String): Flow> + suspend fun getTaskById(id: String): Task? + suspend fun insertTask(task: Task) + suspend fun updateTask(task: Task) + suspend fun deleteTask(id: String) + suspend fun checkTask(id: String, checked: Boolean) +}