Initial commit2
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package com.novayaplaneta.domain.model
|
||||
|
||||
import java.time.LocalDateTime
|
||||
|
||||
data class ChatMessage(
|
||||
val id: String,
|
||||
val message: String,
|
||||
val isFromAI: Boolean,
|
||||
val timestamp: LocalDateTime,
|
||||
val userId: String
|
||||
)
|
||||
|
||||
14
app/src/main/java/com/novayaplaneta/domain/model/Reward.kt
Normal file
14
app/src/main/java/com/novayaplaneta/domain/model/Reward.kt
Normal file
@@ -0,0 +1,14 @@
|
||||
package com.novayaplaneta.domain.model
|
||||
|
||||
import java.time.LocalDateTime
|
||||
|
||||
data class Reward(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val description: String?,
|
||||
val imageUrl: String?,
|
||||
val points: Int,
|
||||
val earnedAt: LocalDateTime? = null,
|
||||
val userId: String
|
||||
)
|
||||
|
||||
14
app/src/main/java/com/novayaplaneta/domain/model/Schedule.kt
Normal file
14
app/src/main/java/com/novayaplaneta/domain/model/Schedule.kt
Normal file
@@ -0,0 +1,14 @@
|
||||
package com.novayaplaneta.domain.model
|
||||
|
||||
import java.time.LocalDateTime
|
||||
|
||||
data class Schedule(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val description: String?,
|
||||
val tasks: List<Task>,
|
||||
val date: LocalDateTime,
|
||||
val createdAt: LocalDateTime,
|
||||
val userId: String
|
||||
)
|
||||
|
||||
15
app/src/main/java/com/novayaplaneta/domain/model/Task.kt
Normal file
15
app/src/main/java/com/novayaplaneta/domain/model/Task.kt
Normal file
@@ -0,0 +1,15 @@
|
||||
package com.novayaplaneta.domain.model
|
||||
|
||||
import java.time.LocalDateTime
|
||||
|
||||
data class Task(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val description: String?,
|
||||
val imageUrl: String?,
|
||||
val completed: Boolean = false,
|
||||
val scheduledTime: LocalDateTime?,
|
||||
val duration: Int? = null, // in minutes
|
||||
val scheduleId: String
|
||||
)
|
||||
|
||||
16
app/src/main/java/com/novayaplaneta/domain/model/User.kt
Normal file
16
app/src/main/java/com/novayaplaneta/domain/model/User.kt
Normal file
@@ -0,0 +1,16 @@
|
||||
package com.novayaplaneta.domain.model
|
||||
|
||||
data class User(
|
||||
val id: String,
|
||||
val name: String,
|
||||
val email: String,
|
||||
val role: UserRole,
|
||||
val token: String? = null
|
||||
)
|
||||
|
||||
enum class UserRole {
|
||||
CHILD,
|
||||
PARENT,
|
||||
TEACHER
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.novayaplaneta.domain.repository
|
||||
|
||||
import com.novayaplaneta.domain.model.ChatMessage
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface AIRepository {
|
||||
suspend fun sendMessage(userId: String, message: String): Result<String>
|
||||
fun getChatHistory(userId: String): Flow<List<ChatMessage>>
|
||||
suspend fun generateSchedule(userId: String, preferences: String): Result<String>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.novayaplaneta.domain.repository
|
||||
|
||||
import com.novayaplaneta.domain.model.User
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface AuthRepository {
|
||||
suspend fun login(email: String, password: String): Result<User>
|
||||
suspend fun logout()
|
||||
fun getCurrentUser(): Flow<User?>
|
||||
suspend fun saveUser(user: User)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.novayaplaneta.domain.repository
|
||||
|
||||
import com.novayaplaneta.domain.model.Reward
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface RewardRepository {
|
||||
fun getRewards(userId: String): Flow<List<Reward>>
|
||||
suspend fun getRewardById(id: String): Reward?
|
||||
suspend fun createReward(reward: Reward)
|
||||
suspend fun updateReward(reward: Reward)
|
||||
suspend fun deleteReward(id: String)
|
||||
suspend fun earnReward(userId: String, rewardId: String)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.novayaplaneta.domain.repository
|
||||
|
||||
import com.novayaplaneta.domain.model.Schedule
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import java.time.LocalDateTime
|
||||
|
||||
interface ScheduleRepository {
|
||||
fun getSchedules(userId: String): Flow<List<Schedule>>
|
||||
suspend fun getScheduleById(id: String): Schedule?
|
||||
suspend fun createSchedule(schedule: Schedule)
|
||||
suspend fun updateSchedule(schedule: Schedule)
|
||||
suspend fun deleteSchedule(id: String)
|
||||
suspend fun syncSchedules(userId: String)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.novayaplaneta.domain.repository
|
||||
|
||||
import com.novayaplaneta.domain.model.Task
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface TaskRepository {
|
||||
fun getTasks(scheduleId: String): Flow<List<Task>>
|
||||
suspend fun getTaskById(id: String): Task?
|
||||
suspend fun createTask(task: Task)
|
||||
suspend fun updateTask(task: Task)
|
||||
suspend fun deleteTask(id: String)
|
||||
suspend fun completeTask(id: String)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.novayaplaneta.domain.usecase
|
||||
|
||||
import com.novayaplaneta.domain.repository.TaskRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
class CompleteTaskUseCase @Inject constructor(
|
||||
private val repository: TaskRepository
|
||||
) {
|
||||
suspend operator fun invoke(taskId: String) {
|
||||
repository.completeTask(taskId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.novayaplaneta.domain.usecase
|
||||
|
||||
import com.novayaplaneta.domain.model.Schedule
|
||||
import com.novayaplaneta.domain.repository.ScheduleRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
class CreateScheduleUseCase @Inject constructor(
|
||||
private val repository: ScheduleRepository
|
||||
) {
|
||||
suspend operator fun invoke(schedule: Schedule) {
|
||||
repository.createSchedule(schedule)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.novayaplaneta.domain.usecase
|
||||
|
||||
import com.novayaplaneta.domain.model.Schedule
|
||||
import com.novayaplaneta.domain.repository.ScheduleRepository
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import javax.inject.Inject
|
||||
|
||||
class GetSchedulesUseCase @Inject constructor(
|
||||
private val repository: ScheduleRepository
|
||||
) {
|
||||
operator fun invoke(userId: String): Flow<List<Schedule>> {
|
||||
return repository.getSchedules(userId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.novayaplaneta.domain.usecase
|
||||
|
||||
import com.novayaplaneta.domain.repository.AIRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
class SendAIMessageUseCase @Inject constructor(
|
||||
private val repository: AIRepository
|
||||
) {
|
||||
suspend operator fun invoke(userId: String, message: String): Result<String> {
|
||||
return repository.sendMessage(userId, message)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user