Add: missing @RequestBody annotations in some controllers as well as some missing fields in entities.

This commit is contained in:
Jose
2026-01-26 14:16:14 +01:00
parent e4461f7790
commit c5a2c19efb
15 changed files with 122 additions and 59 deletions

View File

@@ -1,7 +1,9 @@
package net.miarma.backend.huertos.controller;
import net.miarma.backend.huertos.dto.BalanceDto;
import net.miarma.backend.huertos.dto.view.VBalanceWithTotalsDto;
import net.miarma.backend.huertos.mapper.BalanceMapper;
import net.miarma.backend.huertos.mapper.view.VBalanceWithTotalsMapper;
import net.miarma.backend.huertos.model.Balance;
import net.miarma.backend.huertos.service.BalanceService;
import org.springframework.http.ResponseEntity;
@@ -27,6 +29,12 @@ public class BalanceController {
return ResponseEntity.ok(BalanceMapper.toDto(balance));
}
@GetMapping("/with-totals")
@PreAuthorize("hasAnyRole('HUERTOS_ROLE_ADMIN', 'HUERTOS_ROLE_DEV')")
public ResponseEntity<VBalanceWithTotalsDto> getWithTotals() {
return ResponseEntity.ok(VBalanceWithTotalsMapper.toDto(balanceService.getWithTotals()));
}
@PostMapping
@PreAuthorize("hasAnyRole('HUERTOS_ROLE_ADMIN', 'HUERTOS_ROLE_DEV')")
public ResponseEntity<BalanceDto> setBalance(BalanceDto dto) {

View File

@@ -34,7 +34,7 @@ public class ExpenseController {
@PostMapping
@PreAuthorize("hasAnyRole('HUERTOS_ROLE_ADMIN', 'HUERTOS_ROLE_DEV')")
public ResponseEntity<ExpenseDto.Response> create(ExpenseDto.Request dto) {
public ResponseEntity<ExpenseDto.Response> create(@RequestBody ExpenseDto.Request dto) {
return ResponseEntity.ok(
ExpenseMapper.toResponse(
expenseService.create(

View File

@@ -1,14 +1,13 @@
package net.miarma.backend.huertos.controller;
import net.miarma.backend.huertos.dto.ExpenseDto;
import net.miarma.backend.huertos.dto.IncomeDto;
import net.miarma.backend.huertos.dto.view.VIncomesWithFullNamesDto;
import net.miarma.backend.huertos.mapper.ExpenseMapper;
import net.miarma.backend.huertos.dto.view.VIncomesWithInfoDto;
import net.miarma.backend.huertos.mapper.IncomeMapper;
import net.miarma.backend.huertos.mapper.view.VIncomesWithFullNamesMapper;
import net.miarma.backend.huertos.mapper.view.VIncomesWithInfoMapper;
import net.miarma.backend.huertos.model.Income;
import net.miarma.backend.huertos.service.HuertosUserMetadataService;
import net.miarma.backend.huertos.service.IncomeService;
import net.miarma.backend.huertos.service.view.VIncomesWithFullNamesService;
import net.miarma.backend.huertos.service.view.VIncomesWithInfoService;
import net.miarma.backlib.security.JwtService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -23,12 +22,12 @@ import java.util.UUID;
@RequestMapping("/incomes")
public class IncomeController {
private IncomeService incomeService;
private VIncomesWithFullNamesService vIncomesWithFullNamesService;
private VIncomesWithInfoService vIncomesWithInfoService;
private JwtService jwtService;
public IncomeController(IncomeService incomeService, VIncomesWithFullNamesService vIncomesWithFullNamesService, JwtService jwtService) {
public IncomeController(IncomeService incomeService, VIncomesWithInfoService vIncomesWithInfoService, JwtService jwtService) {
this.incomeService = incomeService;
this.vIncomesWithFullNamesService = vIncomesWithFullNamesService;
this.vIncomesWithInfoService = vIncomesWithInfoService;
this.jwtService = jwtService;
}
@@ -43,13 +42,13 @@ public class IncomeController {
);
}
@GetMapping("/with-names")
@GetMapping("/with-info")
@PreAuthorize("hasAnyRole('HUERTOS_ROLE_ADMIN', 'HUERTOS_ROLE_DEV')")
public ResponseEntity<List<VIncomesWithFullNamesDto>> getAllWithNames() {
public ResponseEntity<List<VIncomesWithInfoDto>> getAllWithInfo() {
return ResponseEntity.ok(
vIncomesWithFullNamesService.getAll()
vIncomesWithInfoService.getAll()
.stream()
.map(VIncomesWithFullNamesMapper::toResponse)
.map(VIncomesWithInfoMapper::toResponse)
.toList()
);
}
@@ -79,7 +78,7 @@ public class IncomeController {
@PostMapping
@PreAuthorize("hasAnyRole('HUERTOS_ROLE_ADMIN', 'HUERTOS_ROLE_DEV')")
public ResponseEntity<IncomeDto.Response> create(IncomeDto.Request dto) {
public ResponseEntity<IncomeDto.Response> create(@RequestBody IncomeDto.Request dto) {
return ResponseEntity.ok(
IncomeMapper.toResponse(
incomeService.create(

View File

@@ -52,10 +52,10 @@ public class RequestController {
}
@PostMapping
public ResponseEntity<RequestDto.Response> create(RequestDto.Request dto) {
public ResponseEntity<RequestDto.Response> create(@RequestBody RequestDto.Request dto) {
return ResponseEntity.ok(
RequestMapper.toResponse(
requestService.createWaitlist(
requestService.create(
RequestMapper.toEntity(dto)
)));
}

View File

@@ -7,11 +7,20 @@ import java.util.UUID;
public class IncomeDto {
public static class Request {
private UUID userId;
private Integer memberNumber;
private String concept;
private BigDecimal amount;
private Byte type;
private Byte frequency;
public Integer getMemberNumber() {
return memberNumber;
}
public void setMemberNumber(Integer memberNumber) {
this.memberNumber = memberNumber;
}
public UUID getUserId() {
return userId;
}

View File

@@ -4,10 +4,11 @@ import java.math.BigDecimal;
import java.time.Instant;
import java.util.UUID;
public class VIncomesWithFullNamesDto {
public class VIncomesWithInfoDto {
private UUID incomeId;
private UUID userId;
private String displayName;
private Integer memberNumber;
private String concept;
private BigDecimal amount;
private Byte type;
@@ -34,6 +35,14 @@ public class VIncomesWithFullNamesDto {
return displayName;
}
public Integer getMemberNumber() {
return memberNumber;
}
public void setMemberNumber(Integer memberNumber) {
this.memberNumber = memberNumber;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}

View File

@@ -1,15 +1,16 @@
package net.miarma.backend.huertos.mapper.view;
import net.miarma.backend.huertos.dto.view.VIncomesWithFullNamesDto;
import net.miarma.backend.huertos.model.view.VIncomesWithFullNames;
import net.miarma.backend.huertos.dto.view.VIncomesWithInfoDto;
import net.miarma.backend.huertos.model.view.VIncomesWithInfo;
public class VIncomesWithFullNamesMapper {
public class VIncomesWithInfoMapper {
public static VIncomesWithFullNamesDto toResponse(VIncomesWithFullNames entity) {
VIncomesWithFullNamesDto dto = new VIncomesWithFullNamesDto();
public static VIncomesWithInfoDto toResponse(VIncomesWithInfo entity) {
VIncomesWithInfoDto dto = new VIncomesWithInfoDto();
dto.setIncomeId(entity.getIncomeId());
dto.setUserId(entity.getUserId());
dto.setDisplayName(entity.getDisplayName());
dto.setMemberNumber(entity.getMemberNumber());
dto.setConcept(entity.getConcept());
dto.setAmount(entity.getAmount());
dto.setType(entity.getType());

View File

@@ -24,10 +24,16 @@ public class Request {
private Byte status;
@Column(name = "requested_by", columnDefinition = "BINARY(16)")
private UUID requestedBy;
private byte[] requestedByBin;
@Transient
private UUID requestedBy;
@Column(name = "target_user_id", columnDefinition = "BINARY(16)")
private UUID targetUserId;
private byte[] targetUserIdBin;
@Transient
private UUID targetUserId;
@Column(name = "created_at", nullable = false)
private Instant createdAt;
@@ -38,6 +44,14 @@ public class Request {
if (requestId != null) {
requestIdBin = UuidUtil.uuidToBin(requestId);
}
if (requestedBy != null) {
requestedByBin = UuidUtil.uuidToBin(requestedBy);
}
if (targetUserId != null) {
targetUserIdBin = UuidUtil.uuidToBin(targetUserId);
}
}
@PostLoad
@@ -45,6 +59,14 @@ public class Request {
if (requestIdBin != null) {
requestId = UuidUtil.binToUUID(requestIdBin);
}
if (requestedByBin != null) {
requestedBy = UuidUtil.binToUUID(requestedByBin);
}
if (targetUserIdBin != null) {
targetUserId = UuidUtil.binToUUID(targetUserIdBin);
}
}
public UUID getRequestId() {

View File

@@ -10,8 +10,8 @@ import java.util.UUID;
@Entity
@Immutable
@Table(name = "v_incomes_with_full_names")
public class VIncomesWithFullNames {
@Table(name = "v_incomes_with_info")
public class VIncomesWithInfo {
@Id
@Column(name = "income_id", columnDefinition = "BINARY(16)")
@@ -29,6 +29,9 @@ public class VIncomesWithFullNames {
@Column(name = "display_name")
private String displayName;
@Column(name = "member_number")
private Integer memberNumber;
private String concept;
private BigDecimal amount;
private Byte type;
@@ -60,6 +63,8 @@ public class VIncomesWithFullNames {
return displayName;
}
public Integer getMemberNumber() { return memberNumber; }
public String getConcept() {
return concept;
}

View File

@@ -4,7 +4,9 @@ import net.miarma.backend.huertos.model.view.VBalanceWithTotals;
import org.springframework.data.repository.Repository;
import java.util.List;
import java.util.Optional;
public interface VBalanceWithTotalsRepository extends Repository<VBalanceWithTotals, byte[]> {
public interface VBalanceWithTotalsRepository extends Repository<VBalanceWithTotals, Byte> {
List<VBalanceWithTotals> findAll();
Optional<VBalanceWithTotals> findById(Byte id);
}

View File

@@ -1,12 +0,0 @@
package net.miarma.backend.huertos.repository.view;
import net.miarma.backend.huertos.model.view.VIncomesWithFullNames;
import org.springframework.data.repository.Repository;
import java.util.List;
import java.util.Optional;
public interface VIncomesWithFullNamesRepository extends Repository<VIncomesWithFullNames, byte[]> {
List<VIncomesWithFullNames> findAll();
Optional<VIncomesWithFullNames> findById(byte[] incomeId);
}

View File

@@ -0,0 +1,12 @@
package net.miarma.backend.huertos.repository.view;
import net.miarma.backend.huertos.model.view.VIncomesWithInfo;
import org.springframework.data.repository.Repository;
import java.util.List;
import java.util.Optional;
public interface VIncomesWithInfoRepository extends Repository<VIncomesWithInfo, byte[]> {
List<VIncomesWithInfo> findAll();
Optional<VIncomesWithInfo> findById(byte[] incomeId);
}

View File

@@ -1,8 +1,9 @@
package net.miarma.backend.huertos.service;
import java.time.Instant;
import java.util.Optional;
import net.miarma.backend.huertos.model.view.VBalanceWithTotals;
import net.miarma.backend.huertos.repository.view.VBalanceWithTotalsRepository;
import net.miarma.backlib.exception.ConflictException;
import net.miarma.backlib.exception.NotFoundException;
import org.springframework.stereotype.Service;
@@ -15,40 +16,47 @@ import net.miarma.backend.huertos.repository.BalanceRepository;
@Transactional
public class BalanceService {
private final BalanceRepository repo;
private final BalanceRepository balanceRepository;
private final VBalanceWithTotalsRepository vBalanceWithTotalsRepository;
public BalanceService(BalanceRepository repo) {
this.repo = repo;
public BalanceService(BalanceRepository balanceRepository, VBalanceWithTotalsRepository vBalanceWithTotalsRepository) {
this.balanceRepository = balanceRepository;
this.vBalanceWithTotalsRepository = vBalanceWithTotalsRepository;
}
public Balance get() {
return repo.findById((byte) 1)
return balanceRepository.findById((byte) 1)
.orElseThrow(() -> new NotFoundException("Balance not found"));
}
public VBalanceWithTotals getWithTotals() {
return vBalanceWithTotalsRepository.findById((byte) 1)
.orElseThrow(() -> new NotFoundException("Balance not found"));
}
public Balance create(Balance balance) {
if (repo.existsById((byte) 1)) {
if (balanceRepository.existsById((byte) 1)) {
throw new ConflictException("Balance already exists");
}
balance.setId((byte) 1);
balance.setCreatedAt(Instant.now());
return repo.save(balance);
return balanceRepository.save(balance);
}
public Balance update(Balance dto) {
Balance balance = repo.findById((byte) 1)
Balance balance = balanceRepository.findById((byte) 1)
.orElseThrow(() -> new NotFoundException("Balance not found"));
if (dto.getInitialBank() != null) balance.setInitialBank(dto.getInitialBank());
if (dto.getInitialCash() != null) balance.setInitialCash(dto.getInitialCash());
return repo.save(balance);
return balanceRepository.save(balance);
}
public void delete() {
if (!repo.existsById((byte) 1)) {
if (!balanceRepository.existsById((byte) 1)) {
throw new NotFoundException("Balance not found");
}
repo.deleteById((byte) 1);
balanceRepository.deleteById((byte) 1);
}
}

View File

@@ -63,7 +63,7 @@ public class RequestService {
.toList();
}
public Request createWaitlist(Request request) {
public Request create(Request request) {
if (request.getType() == null) {
throw new BadRequestException("type is required");
}

View File

@@ -7,31 +7,31 @@ import net.miarma.backlib.exception.NotFoundException;
import org.springframework.stereotype.Service;
import jakarta.transaction.Transactional;
import net.miarma.backend.huertos.model.view.VIncomesWithFullNames;
import net.miarma.backend.huertos.repository.view.VIncomesWithFullNamesRepository;
import net.miarma.backend.huertos.model.view.VIncomesWithInfo;
import net.miarma.backend.huertos.repository.view.VIncomesWithInfoRepository;
import net.miarma.backlib.util.UuidUtil;
@Service
@Transactional
public class VIncomesWithFullNamesService {
public class VIncomesWithInfoService {
private final VIncomesWithFullNamesRepository repository;
private final VIncomesWithInfoRepository repository;
public VIncomesWithFullNamesService(VIncomesWithFullNamesRepository repository) {
public VIncomesWithInfoService(VIncomesWithInfoRepository repository) {
this.repository = repository;
}
public List<VIncomesWithFullNames> getAll() {
public List<VIncomesWithInfo> getAll() {
return repository.findAll();
}
public VIncomesWithFullNames getById(UUID incomeId) {
public VIncomesWithInfo getById(UUID incomeId) {
byte[] idBytes = UuidUtil.uuidToBin(incomeId);
return repository.findById(idBytes)
.orElseThrow(() -> new NotFoundException("Income not found"));
}
public List<VIncomesWithFullNames> getByUserId(UUID userId) {
public List<VIncomesWithInfo> getByUserId(UUID userId) {
byte[] idBytes = UuidUtil.uuidToBin(userId);
return repository.findAll().stream()
.filter(i -> i.getUserId().equals(userId))