JBear2/src/main/kotlin/at/eisibaer/jbear2/service/BoardServiceImpl.kt

100 lines
3.5 KiB
Kotlin
Raw Normal View History

2026-03-15 17:38:23 +01:00
package at.eisibaer.jbear2.service
import at.eisibaer.jbear2.dto.board.BoardDto
import at.eisibaer.jbear2.model.Board
import at.eisibaer.jbear2.model.User
import at.eisibaer.jbear2.repository.BoardRepository
import at.eisibaer.jbear2.repository.FileRepository
import at.eisibaer.jbear2.repository.UserRepository
import at.eisibaer.jbear2.service.mapper.BoardMapper
import org.slf4j.Logger
import org.slf4j.LoggerFactory
2026-04-23 20:56:57 +02:00
import org.springframework.http.HttpStatus
2026-03-15 17:38:23 +01:00
import org.springframework.http.ResponseEntity
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
2026-04-23 20:56:57 +02:00
import org.springframework.web.multipart.MultipartFile
2026-03-15 17:38:23 +01:00
@Service
class BoardServiceImpl (
2026-04-23 20:56:57 +02:00
private val fileService: FileService,
2026-03-15 17:38:23 +01:00
private val boardRepository: BoardRepository,
private val userRepository: UserRepository,
private val fileRepository: FileRepository,
private val boardMapper: BoardMapper,
) : BoardService {
2026-04-23 20:56:57 +02:00
val log: Logger = LoggerFactory.getLogger(BoardServiceImpl::class.java)
2026-03-15 17:38:23 +01:00
@Transactional
override fun getBoardsByUser(user: User): ResponseEntity<List<BoardDto>?> {
val boards = boardRepository.findAllByOwner(user)
2026-04-23 20:56:57 +02:00
return ResponseEntity.ok(boardMapper.toDto(boards))
2026-03-15 17:38:23 +01:00
}
@Transactional
override fun getBoardByUserAndId(user: User, boardId: Long): ResponseEntity<BoardDto?> {
2026-04-23 20:56:57 +02:00
val board = boardRepository.findByIdAndOwner(boardId, user) ?: return ResponseEntity.status(404).build()
2026-03-15 17:38:23 +01:00
return ResponseEntity.ok(boardMapper.toDto(board))
}
@Transactional
2026-04-23 20:56:57 +02:00
override fun saveBoardToUser( user: User, boardDto: BoardDto, files: List<MultipartFile>): ResponseEntity<BoardDto> {
val board = if( boardDto.id == null ){
Board(owner = user)
} else {
boardRepository.findByIdAndOwner(boardDto.id, user) ?: throw NoSuchElementException("Board not found for user " + user.username)
}
boardMapper.mapToEntity(board, boardDto, user, userRepository, fileRepository)
2026-03-15 17:38:23 +01:00
2026-04-23 20:56:57 +02:00
val savedBoard: Board
2026-03-15 17:38:23 +01:00
try {
2026-04-23 20:56:57 +02:00
savedBoard = boardRepository.save(board)
} catch (ex: Exception) {
log.error(ex.message, ex)
return ResponseEntity.badRequest().build()
}
try{
fileService.saveFiles(files, user, savedBoard)
2026-03-15 17:38:23 +01:00
} catch (ex: Exception) {
2026-04-23 20:56:57 +02:00
log.error(ex.message, ex)
return ResponseEntity.badRequest().build()
2026-03-15 17:38:23 +01:00
}
return ResponseEntity.ok(boardMapper.toDto(savedBoard))
}
override fun deleteBoardOfUser(user: User, boardId: Long): ResponseEntity<Unit> {
2026-04-23 20:56:57 +02:00
val board = boardRepository.findByIdAndOwner(boardId, user) ?: return ResponseEntity.status(HttpStatus.NOT_FOUND).build()
boardRepository.deleteById( boardId )
2026-03-15 17:38:23 +01:00
//TODO Delete Images
2026-04-23 20:56:57 +02:00
return ResponseEntity.ok().build()
}
private fun deleteFilesOfBoard(board: Board) {
try {
for (category in board.categories) {
for (boardEntry in category.boardEntries) {
if (boardEntry.answer != null && boardEntry.answer!!.image != null) {
fileService.deleteFile(boardEntry.answer!!.image!!)
}
for (question in boardEntry.questions) {
if (question.image != null) {
fileService.deleteFile(question.image!!)
}
}
}
}
} catch (exception: Exception) {
log.error("Error occured",exception) //TODO
}
2026-03-15 17:38:23 +01:00
}
}