Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
vzwingma committed Jun 10, 2024
2 parents a7b52b6 + 569e2a1 commit 3478477
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,24 +68,29 @@ public class BudgetsResource extends AbstractAPIInterceptors {
@RolesAllowed({OperationsAPIEnum.OPERATIONS_ROLE})
@Path(value = OperationsAPIEnum.BUDGET_QUERY)
@Produces(MediaType.APPLICATION_JSON)
public Uni<BudgetMensuel> getBudget(
public Multi<BudgetMensuel> getBudget(
@RestQuery("idCompte") String idCompte,
@RestQuery("mois") Integer mois,
@RestQuery("annee") Integer annee) {

BusinessTraceContext.getclear().put(BusinessTraceContextKeyEnum.COMPTE, idCompte).put(BusinessTraceContextKeyEnum.USER, super.getAuthenticatedUser());
LOG.trace("getBudget {}/{}", mois, annee);

if (mois != null && annee != null) {
if (idCompte != null && mois != null && annee != null) {
try {
String idBudget = BudgetDataUtils.getBudgetId(idCompte, Month.of(mois), annee);
BusinessTraceContext.get().put(BusinessTraceContextKeyEnum.BUDGET, idBudget);
return budgetService.getBudgetMensuel(idCompte, Month.of(mois), annee);
return Multi.createFrom().uni(budgetService.getBudgetMensuel(idCompte, Month.of(mois), annee));
} catch (NumberFormatException e) {
return Uni.createFrom().failure(new BadParametersException("Mois et année doivent être des entiers"));
return Multi.createFrom().failure(new BadParametersException("Mois et année doivent être des entiers"));
}
}
return Uni.createFrom().failure(new BadParametersException("Mois et année doivent être renseignés"));
else if(idCompte != null){
return budgetService.getBudgetsMensuels(idCompte);
}
else {
return Multi.createFrom().failure(new BadParametersException("IdCompte et/ou Mois et année doivent être renseignés"));
}
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,15 @@ public Uni<BudgetMensuel> getBudgetMensuel(String idCompte, Month mois, int anne
}


public Multi<BudgetMensuel> getBudgetsMensuels(String idCompte) {
BusinessTraceContext.get().put(BusinessTraceContextKeyEnum.COMPTE, idCompte);
LOGGER.debug("Chargement des budgets");
return this.comptesService.getCompteById(idCompte)
.invoke(compte -> LOGGER.debug("-> Compte correspondant : {}", compte))
.onItem().ifNotNull()
.transformToMulti(this::chargerBudgetsMensuelsSurCompte);
}

/**
* Chargement du budget mensuel
*
Expand Down Expand Up @@ -193,6 +202,18 @@ private Uni<BudgetMensuel> chargerBudgetMensuelSurCompteInactif(CompteBancaire c
}


/**
* Chargement des budgets du compte
*
* @param compteBancaire compte bancaire
* @return budgets mensuels chargés à partir des données précédentes
*/
private Multi<BudgetMensuel> chargerBudgetsMensuelsSurCompte(CompteBancaire compteBancaire) {
LOGGER.debug(" Chargement des budgets du compte");

// Chargement du budget précédent
return this.dataOperationsProvider.chargeBudgetsMensuels(compteBancaire.getId());
}
/************************************
* CALCULS
***********************************/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ public interface IBudgetAppProvider {
*/
Uni<BudgetMensuel> getBudgetMensuel(String idCompte, Month mois, int annee);


/**
* Chargement des budgets mensuels du compte
* @param idCompte id du compte
* @return budgets mensuels
*/
Multi<BudgetMensuel> getBudgetsMensuels(String idCompte);
/**
* Charger budget
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ public interface IOperationsRepository extends ReactivePanacheMongoRepository<Bu
*/
Uni<BudgetMensuel> chargeBudgetMensuel(String idBudget);

/**
* Chargement des budgets mensuels du compte
*
* @param idCompte compte bancaire
* @return budgets mensuels : flux de budgets mensuels correspondants au compte
*/
Multi<BudgetMensuel> chargeBudgetsMensuels(String idCompte);
/**
* Sauvegarde du budget mensuel
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import io.github.vzwingma.finances.budget.services.communs.data.trace.BusinessTraceContext;
import io.github.vzwingma.finances.budget.services.communs.data.trace.BusinessTraceContextKeyEnum;
import io.github.vzwingma.finances.budget.services.communs.utils.exceptions.BudgetNotFoundException;
import io.quarkus.panache.common.Sort;
import io.smallrye.mutiny.Multi;
import io.smallrye.mutiny.Uni;
import jakarta.enterprise.context.ApplicationScoped;
Expand Down Expand Up @@ -82,6 +83,24 @@ public Uni<BudgetMensuel> chargeBudgetMensuel(String idBudget) {
.invoke(budget -> LOGGER.debug("-> Réception du budget {}. {} opérations", budget.getId(), budget.getListeOperations().size()));
}

/**
* Chargement des budgets mensuels du compte
*
* @param idCompte compte bancaire
* @return budgets mensuels : flux de budgets mensuels correspondants au compte
*/
@Override
public Multi<BudgetMensuel> chargeBudgetsMensuels(String idCompte){
LOGGER.info("Chargement des budgets ");
return find(ATTRIBUT_COMPTE_ID + "=?1", idCompte, Sort.by("id"))
.stream()
.onFailure()
.transform(e -> {
LOGGER.error("Erreur lors du chargement des budgets de {}", idCompte, e);
return new BudgetNotFoundException("Erreur lors du chargement des budgets " + idCompte);
})
.invoke(budget -> LOGGER.debug("-> {} : {} opérations", budget.getId(), budget.getListeOperations().size()));
}

/**
* Liste des libellés des opérations d'un compte
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@
import io.github.vzwingma.finances.budget.services.communs.utils.exceptions.CompteClosedException;
import io.github.vzwingma.finances.budget.services.communs.utils.exceptions.DataNotFoundException;
import io.quarkus.test.junit.QuarkusTest;
import io.smallrye.mutiny.Multi;
import io.smallrye.mutiny.Uni;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import java.time.Month;
import java.util.List;
import java.util.concurrent.CompletionException;

import static org.junit.jupiter.api.Assertions.*;
Expand Down Expand Up @@ -65,6 +67,29 @@ void testGetBudgetWithNoCompte() {
}



/**
* Test d'un chargement des budgets d'un compte
*/
@Test
void testGetBudgetsOfCompte() {

// Initialisation
Mockito.when(mockCompteServiceProvider.getCompteById(anyString()))
.thenReturn(Uni.createFrom().item(MockDataBudgets.getCompteC1()));

Mockito.when(mockOperationDataProvider.chargeBudgetsMensuels(anyString()))
.thenReturn(Multi.createFrom().items(
MockDataBudgets.getBudgetInactifCompteC1(),
MockDataBudgets.getBudgetActifCompteC1et1operationPrevue(),
MockDataBudgets.getBudgetActifCompteC2et0operationPrevue()));

// Test
List<BudgetMensuel> budgets = budgetAppProvider.getBudgetsMensuels("C1").collect().asList().await().indefinitely();
assertEquals(3, budgets.size());
}


/**
* Test du chargement nominal d'un budget actif sur compte actif
*/
Expand Down

0 comments on commit 3478477

Please sign in to comment.