Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package data.datasource.interfaces
package data.datasource

import domain.model.User

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package data.datasource.interfaces
package data.datasource

import domain.model.ProjectLog
import domain.model.TaskLog
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package data.datasource.interfaces
package data.datasource

import domain.model.Project
import domain.model.State
import domain.model.TaskState
import domain.model.User
import java.util.*

Expand All @@ -11,9 +11,9 @@ interface ProjectDataSource {
suspend fun deleteProject(id: UUID)
suspend fun getAllProjects(): List<Project>
suspend fun getProject(id: UUID): Project
suspend fun addState(projectId: UUID, state: State): Project
suspend fun editState(projectId: UUID, state: State): Project
suspend fun deleteState(projectId: UUID, state: State): Project
suspend fun addState(projectId: UUID, taskState: TaskState): Project
suspend fun editState(projectId: UUID, taskState: TaskState): Project
suspend fun deleteState(projectId: UUID, taskState: TaskState): Project
suspend fun addMate(projectId: UUID, user: User): Project
suspend fun getUserProjectsById(userId: UUID): List<Project>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package data.datasource.interfaces
package data.datasource

import domain.model.Task
import java.util.*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,53 @@
package data.datasource.csv.implementation
package data.datasource.csv

import data.datasource.csv.helper.FileName
import data.datasource.csv.reader.CsvReader
import data.datasource.csv.writer.CsvWriter
import data.datasource.interfaces.AuthenticationDataSource
import data.datasource.AuthenticationDataSource
import ui.common.exception.EmailAlreadyExistsException
import ui.common.exception.InvalidCredentialsException
import ui.common.exception.UserNotLoggedInException
import domain.model.Role
import domain.model.UserRole
import domain.model.User
import java.util.*

class AuthenticationDataSourceImplementation(
class AuthenticationDataSourceImpl(
private val csvWriter: CsvWriter<User>,
private val csvReader: CsvReader<User>,
) : AuthenticationDataSource {

override suspend fun login(email: String, password: String): User {
override suspend fun login(
email: String,
password: String
): User {
val users = readUsersFromCsv()
val user = users.find { it.email == email && it.password == password } ?: throw InvalidCredentialsException()
saveCurrentUser(user)
return user
}

override suspend fun isValidEmail(email: String): Boolean {
override suspend fun isValidEmail(
email: String
): Boolean {
val users = readUsersFromCsv()
return users.none { it.email == email }
}

override suspend fun registerMate(name: String, password: String, email: String): User {
override suspend fun registerMate(
name: String,
password: String,
email: String
): User {
val users = readUsersFromCsv()
validateUniqueEmail(users, email)
validateUniqueEmail(users = users, email = email)

val newUser = User(
id = UUID.randomUUID(), name = name, password = password, email = email, role = Role.MATE, isDeleted = false
id = UUID.randomUUID(),
name = name,
password = password,
email = email,
userRole = UserRole.MATE,
isDeleted = false
)

addUserToCsv(newUser)
Expand All @@ -42,23 +56,31 @@ class AuthenticationDataSourceImplementation(
return newUser
}

override suspend fun registerAdmin(name: String, password: String, email: String): User {
override suspend fun registerAdmin(
name: String,
password: String,
email: String
): User {
val users = readUsersFromCsv()
validateUniqueEmail(users, email)

val newAdmin = User(
id = UUID.randomUUID(),
name = name,
password = password,
email = email,
role = Role.ADMIN,
userRole = UserRole.ADMIN,
isDeleted = false
)
addUserToCsv(newAdmin)
saveCurrentUser(newAdmin)
return newAdmin
}

private fun validateUniqueEmail(users: List<User>, email: String) {
private fun validateUniqueEmail(
users: List<User>,
email: String
) {
if (users.any { it.email == email }) {
throw EmailAlreadyExistsException()
}
Expand All @@ -81,7 +103,9 @@ class AuthenticationDataSourceImplementation(
}

override suspend fun getCurrentUser(): User {
return readUsersFromCsv().singleOrNull() ?: throw UserNotLoggedInException()
return readUsersFromCsv()
.singleOrNull()
?: throw UserNotLoggedInException()
}

override suspend fun getUsers(): List<User> {
Expand All @@ -98,6 +122,9 @@ class AuthenticationDataSourceImplementation(
}

private suspend fun writeUsersToCsv(users: List<User>) {
csvWriter.writeToFile(users, FileName.REGISTERED_USERS_FILE)
csvWriter.writeToFile(
items = users,
filePath = FileName.REGISTERED_USERS_FILE
)
}
}
Original file line number Diff line number Diff line change
@@ -1,52 +1,66 @@
package data.datasource.csv.implementation
package data.datasource.csv

import data.datasource.csv.helper.FileName
import data.datasource.csv.reader.CsvReader
import data.datasource.csv.writer.CsvWriter
import data.datasource.interfaces.LogDataSource
import data.datasource.LogDataSource
import ui.common.exception.NoProjectLogsFoundException
import ui.common.exception.NoTaskLogsFoundException
import domain.model.ProjectLog
import domain.model.TaskLog
import java.util.*

class LogDataSourceImplementation(
class LogDataSourceImpl(
private val csvProjectLogReader: CsvReader<ProjectLog>,
private val csvProjectLogWriter: CsvWriter<ProjectLog>,
private val csvTaskLogReader: CsvReader<TaskLog>,
private val csvTaskLogWriter: CsvWriter<TaskLog>,
) : LogDataSource {

override suspend fun getProjectLogs(id: UUID): List<ProjectLog> {
return csvProjectLogReader.read(FileName.PROJECT_LOG).filter { it.entityId == id }.takeIf { it.isNotEmpty() }
return csvProjectLogReader
.read(FileName.PROJECT_LOG)
.filter { it.entityId == id }
.takeIf { it.isNotEmpty() }
?: throw NoProjectLogsFoundException()
}

override suspend fun getTaskLogs(id: UUID): List<TaskLog> {
return csvTaskLogReader.read(FileName.TASK_LOG).filter { it.entityId == id }.takeIf { it.isNotEmpty() }
return csvTaskLogReader
.read(FileName.TASK_LOG)
.filter { it.entityId == id }
.takeIf { it.isNotEmpty() }
?: throw NoTaskLogsFoundException()
}

override suspend fun saveProjectLog(projectLog: ProjectLog) {
val logs = csvProjectLogReader.read(FileName.PROJECT_LOG).toMutableList()
logs.add(projectLog)
csvProjectLogWriter.writeToFile(logs, FileName.PROJECT_LOG)
csvProjectLogWriter.writeToFile(
items = logs,
filePath = FileName.PROJECT_LOG
)
}

override suspend fun saveTaskLog(taskLog: TaskLog) {
val logs = csvTaskLogReader.read(FileName.TASK_LOG).toMutableList()
logs.add(taskLog)
csvTaskLogWriter.writeToFile(logs, FileName.TASK_LOG)
csvTaskLogWriter.writeToFile(
items = logs,
filePath = FileName.TASK_LOG
)
}

override suspend fun getAllProjectLogs(): List<ProjectLog> {
return csvProjectLogReader.read(FileName.PROJECT_LOG)
return csvProjectLogReader
.read(FileName.PROJECT_LOG)
.takeIf { it.isNotEmpty() }
?: throw NoProjectLogsFoundException()
}

override suspend fun getAllTaskLogs(): List<TaskLog> {
return csvTaskLogReader.read(FileName.TASK_LOG)
return csvTaskLogReader
.read(FileName.TASK_LOG)
.takeIf { it.isNotEmpty() }
?: throw NoTaskLogsFoundException()
}
Expand Down
Loading