66 lines
2.8 KiB
Kotlin
66 lines
2.8 KiB
Kotlin
package space.luminic.finance.services
|
|
|
|
import org.springframework.stereotype.Service
|
|
import space.luminic.finance.dtos.RecurrentOperationDTO
|
|
import space.luminic.finance.models.NotFoundException
|
|
import space.luminic.finance.models.RecurrentOperation
|
|
import space.luminic.finance.repos.RecurrentOperationRepo
|
|
import space.luminic.finance.repos.SpaceRepo
|
|
|
|
@Service
|
|
class RecurrentOperationServiceImpl(
|
|
private val authService: AuthService,
|
|
private val spaceRepo: SpaceRepo,
|
|
private val recurrentOperationRepo: RecurrentOperationRepo,
|
|
private val categoryService: CategoryService
|
|
): RecurrentOperationService {
|
|
override fun findBySpaceId(spaceId: Int): List<RecurrentOperation> {
|
|
val userId = authService.getSecurityUserId()
|
|
spaceRepo.findSpaceById(spaceId, userId)
|
|
return recurrentOperationRepo.findAllBySpaceId(spaceId)
|
|
}
|
|
|
|
override fun findBySpaceIdAndId(
|
|
spaceId: Int,
|
|
id: Int
|
|
): RecurrentOperation {
|
|
val userId = authService.getSecurityUserId()
|
|
spaceRepo.findSpaceById(spaceId, userId)
|
|
return recurrentOperationRepo.findBySpaceIdAndId(spaceId, id) ?: throw NotFoundException("Cannot find recurrent operation with id ${id}")
|
|
}
|
|
|
|
override fun create(spaceId: Int, operation: RecurrentOperationDTO.CreateRecurrentOperationDTO): Int {
|
|
val userId = authService.getSecurityUserId()
|
|
val space = spaceRepo.findSpaceById(spaceId, userId) ?: throw NotFoundException("Cannot find space with id ${spaceId}")
|
|
val category = categoryService.getCategory(spaceId, operation.categoryId)
|
|
val creatingOperation = RecurrentOperation(
|
|
space = space,
|
|
category = category,
|
|
name = operation.name,
|
|
amount = operation.amount,
|
|
date = operation.date
|
|
)
|
|
return recurrentOperationRepo.create(creatingOperation, userId)
|
|
}
|
|
|
|
override fun update(spaceId: Int, operationId: Int, operation: RecurrentOperationDTO.UpdateRecurrentOperationDTO) {
|
|
val userId = authService.getSecurityUserId()
|
|
spaceRepo.findSpaceById(spaceId, userId)
|
|
val newCategory = categoryService.getCategory(spaceId, operation.categoryId)
|
|
val existingOperation = recurrentOperationRepo.findBySpaceIdAndId(spaceId,operationId ) ?: throw NotFoundException("Cannot find operation with id $operationId")
|
|
val updatedOperation = existingOperation.copy(
|
|
category = newCategory,
|
|
name = operation.name,
|
|
amount = operation.amount,
|
|
date = operation.date
|
|
)
|
|
recurrentOperationRepo.update(updatedOperation, userId)
|
|
|
|
}
|
|
|
|
override fun delete(spaceId: Int, id: Int) {
|
|
val userId = authService.getSecurityUserId()
|
|
spaceRepo.findSpaceById(spaceId, userId)
|
|
recurrentOperationRepo.delete(id)
|
|
}
|
|
} |