66 lines
2.5 KiB
Kotlin
66 lines
2.5 KiB
Kotlin
package space.luminic.finance.api
|
|
|
|
import org.springframework.http.HttpHeaders
|
|
import org.springframework.http.MediaType
|
|
import org.springframework.http.ResponseEntity
|
|
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType
|
|
import io.swagger.v3.oas.annotations.security.SecurityScheme
|
|
import org.springframework.web.bind.annotation.*
|
|
import space.luminic.finance.dtos.TransactionDTO
|
|
import space.luminic.finance.mappers.TransactionMapper.toDto
|
|
import space.luminic.finance.services.TransactionService
|
|
|
|
|
|
@RestController
|
|
@RequestMapping("/spaces/{spaceId}/transactions")
|
|
@SecurityScheme(
|
|
name = "bearerAuth",
|
|
type = SecuritySchemeType.HTTP,
|
|
bearerFormat = "JWT",
|
|
scheme = "bearer"
|
|
)
|
|
class TransactionController (
|
|
private val transactionService: TransactionService,
|
|
){
|
|
|
|
|
|
@PostMapping("/_search")
|
|
fun getTransactions(@PathVariable spaceId: Int, @RequestBody filter: TransactionService.TransactionsFilter) : List<TransactionDTO>{
|
|
return transactionService.getTransactions(spaceId, filter).map { it.toDto() }
|
|
}
|
|
|
|
@PostMapping("/_export")
|
|
fun exportExcel(@PathVariable spaceId: Int, @RequestBody filter: TransactionService.TransactionsFilter): ResponseEntity<ByteArray> {
|
|
val excelBytes = transactionService.generateExcel(spaceId, filter)
|
|
val headers = HttpHeaders()
|
|
headers.contentType = MediaType.APPLICATION_OCTET_STREAM
|
|
headers.setContentDispositionFormData("attachment", "transactions.xlsx")
|
|
|
|
return ResponseEntity.ok()
|
|
.headers(headers)
|
|
.body(excelBytes)
|
|
}
|
|
|
|
@GetMapping("/{transactionId}")
|
|
fun getTransaction(@PathVariable spaceId: Int, @PathVariable transactionId: Int): TransactionDTO {
|
|
return transactionService.getTransaction(spaceId, transactionId).toDto()
|
|
}
|
|
|
|
@PostMapping
|
|
fun createTransaction(@PathVariable spaceId: Int, @RequestBody transactionDTO: TransactionDTO.CreateTransactionDTO): Map<String, Int> {
|
|
return mapOf("id" to transactionService.createTransaction(spaceId, transactionDTO))
|
|
}
|
|
|
|
|
|
@PutMapping("/{transactionId}")
|
|
fun updateTransaction(@PathVariable spaceId: Int, @PathVariable transactionId: Int, @RequestBody transactionDTO: TransactionDTO.UpdateTransactionDTO): Map<String, Int> {
|
|
return mapOf("id" to transactionService.updateTransaction(spaceId, transactionId, transactionDTO))
|
|
}
|
|
|
|
@DeleteMapping("/{transactionId}")
|
|
fun deleteTransaction(@PathVariable spaceId: Int, @PathVariable transactionId: Int) {
|
|
transactionService.deleteTransaction(spaceId, transactionId)
|
|
}
|
|
|
|
|
|
} |