package space.luminic.finance.api 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, ){ @GetMapping fun getTransactions(@PathVariable spaceId: Int) : List{ return transactionService.getTransactions(spaceId, TransactionService.TransactionsFilter(),"date", "DESC").map { it.toDto() } } @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 { return mapOf("id" to transactionService.createTransaction(spaceId, transactionDTO)) } @PutMapping("/{transactionId}") fun updateTransaction(@PathVariable spaceId: Int, @PathVariable transactionId: Int, @RequestBody transactionDTO: TransactionDTO.UpdateTransactionDTO): Map { return mapOf("id" to transactionService.updateTransaction(spaceId, transactionId, transactionDTO)) } @DeleteMapping("/{transactionId}") fun deleteTransaction(@PathVariable spaceId: Int, @PathVariable transactionId: Int) { transactionService.deleteTransaction(spaceId, transactionId) } }