Skip to content

Commit

Permalink
Merge branch 'release/2024.02.01'
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabien committed Feb 1, 2024
2 parents 0c28759 + 0693d3d commit 247b4c9
Show file tree
Hide file tree
Showing 153 changed files with 1,648 additions and 2,589 deletions.
2 changes: 1 addition & 1 deletion dossierfacile-api-owner/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<name>dossierfacile-api-owner</name>
<description>Owner api for DossierFacile</description>
<properties>
<java.version>19</java.version>
<java.version>21</java.version>
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
<lombok.version>1.18.30</lombok.version>
<keycloak.version>21.1.2</keycloak.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import fr.dossierfacile.common.entity.Owner;
import fr.dossierfacile.common.entity.OwnerLog;
import fr.dossierfacile.common.enums.OwnerLogType;
import fr.dossierfacile.common.utils.MapperUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
Expand All @@ -19,10 +20,8 @@ public class OwnerLogServiceImpl implements OwnerLogService {
private final OwnerLogRepository repository;
private final DeletedOwnerMapper deletedOwnerMapper;

private ObjectMapper objectMapper = new ObjectMapper();
{
objectMapper.registerModule(new JavaTimeModule());
}
private final ObjectMapper objectMapper = MapperUtil.newObjectMapper();

private void saveLog(OwnerLog log) {
repository.save(log);
}
Expand Down
2 changes: 1 addition & 1 deletion dossierfacile-api-tenant/.java-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
19.0
21.0
2 changes: 1 addition & 1 deletion dossierfacile-api-tenant/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<description>Front api for dossier facile</description>

<properties>
<java.version>19</java.version>
<java.version>21</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package fr.dossierfacile.api.front.config.featureflipping;

import fr.dossierfacile.common.utils.DateBasedFeatureToggle;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
// TODO delete after activation
public class PartnerAccessRevocationToggle extends DateBasedFeatureToggle {

public PartnerAccessRevocationToggle(@Value("${toggle.partners.revocation.activation.date:}") String activationDate) {
super(activationDate);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package fr.dossierfacile.api.front.config.featureflipping;

import fr.dossierfacile.api.front.security.interfaces.ClientAuthenticationFacade;
import fr.dossierfacile.common.enums.DocumentCategory;
import fr.dossierfacile.common.enums.DocumentSubCategory;
import fr.dossierfacile.common.mapper.CategoriesMapper;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

import java.util.Optional;

import static fr.dossierfacile.common.enums.DocumentSubCategory.CERTIFICATE_VISA;
import static fr.dossierfacile.common.enums.DocumentSubCategory.OTHER_IDENTIFICATION;

@Primary
@Component
@AllArgsConstructor
public class VersionedCategoriesMapper implements CategoriesMapper {

private final ClientAuthenticationFacade clientAuthenticationFacade;

@Override
public DocumentCategory mapCategory(DocumentCategory category) {
Optional<Integer> version = clientAuthenticationFacade.getApiVersion();
if (version.isPresent() && version.get() < 3) {
return hideCategoriesIntroducedInV3(category);
}
return category;
}

@Override
public DocumentSubCategory mapSubCategory(DocumentSubCategory subCategory) {
Optional<Integer> version = clientAuthenticationFacade.getApiVersion();
if (version.isPresent() && version.get() < 3) {
return hideSubCategoriesIntroducedInV3(subCategory);
}
return subCategory;
}

private DocumentCategory hideCategoriesIntroducedInV3(DocumentCategory category) {
if (category == DocumentCategory.GUARANTEE_PROVIDER_CERTIFICATE) {
return DocumentCategory.IDENTIFICATION;
}
return category;
}

private DocumentSubCategory hideSubCategoriesIntroducedInV3(DocumentSubCategory subCategory) {
return switch (subCategory) {
case FRANCE_IDENTITE -> OTHER_IDENTIFICATION;
case VISALE, OTHER_GUARANTEE -> CERTIFICATE_VISA;
default -> subCategory;
};
}

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package fr.dossierfacile.api.front.controller;

import fr.dossierfacile.api.front.config.featureflipping.PartnerAccessRevocationToggle;
import fr.dossierfacile.api.front.model.tenant.PartnerAccessModel;
import fr.dossierfacile.api.front.security.interfaces.AuthenticationFacade;
import fr.dossierfacile.api.front.service.interfaces.PartnerAccessService;
import fr.dossierfacile.common.entity.Tenant;
import fr.dossierfacile.common.utils.DateBasedFeatureToggle;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand Down Expand Up @@ -52,14 +50,4 @@ public ResponseEntity<Void> revokePartnerAccess(@PathVariable("id") Long userApi
return ok().build();
}

@Component
// TODO delete after activation
static class PartnerAccessRevocationToggle extends DateBasedFeatureToggle {

public PartnerAccessRevocationToggle(@Value("${toggle.partners.revocation.activation.date:}") String activationDate) {
super(activationDate);
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import fr.dossierfacile.api.front.model.tenant.TenantModel;
import fr.dossierfacile.api.front.register.enums.StepRegister;
import fr.dossierfacile.api.front.register.form.tenant.AccountForm;
import fr.dossierfacile.api.front.register.form.tenant.ApplicationForm;
import fr.dossierfacile.api.front.register.form.tenant.ApplicationFormV2;
import fr.dossierfacile.api.front.register.form.tenant.DocumentFinancialForm;
import fr.dossierfacile.api.front.register.form.tenant.DocumentIdentificationForm;
Expand Down Expand Up @@ -63,23 +62,13 @@ public ResponseEntity<Void> confirmAccount(@PathVariable String token) {
@PreAuthorize("hasPermissionOnTenant(#namesForm.tenantId)")
@PostMapping(value = "/names", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TenantModel> names(@Validated(Dossier.class) @RequestBody NamesForm namesForm) {
var tenant = authenticationFacade.getTenant(namesForm.getTenantId() );
var tenant = authenticationFacade.getTenant(namesForm.getTenantId());
TenantModel tenantModel = tenantService.saveStepRegister(tenant, namesForm, StepRegister.NAMES);
logService.saveStepLog(tenantModel.getId(), StepRegister.NAMES.getClazz().getSimpleName());
Tenant loggedTenant = (namesForm.getTenantId() == null) ? tenant : authenticationFacade.getLoggedTenant();
return ok(tenantMapper.toTenantModel(loggedTenant));
}

@Deprecated
@PostMapping(value = "/application", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TenantModel> application(@Validated(Dossier.class) @RequestBody ApplicationForm applicationForm) {
Tenant tenant = authenticationFacade.getTenant(applicationForm.getTenantId());
TenantModel tenantModel = tenantService.saveStepRegister(tenant, applicationForm, StepRegister.APPLICATION_V1);
logService.saveLog(LogType.ACCOUNT_EDITED, tenantModel.getId());
Tenant loggedTenant = (applicationForm.getTenantId() == null) ? tenant : authenticationFacade.getLoggedTenant();
return ok(tenantMapper.toTenantModel(loggedTenant));
}

@PostMapping(value = "/application/v2", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TenantModel> application(@Validated(Dossier.class) @RequestBody ApplicationFormV2 applicationForm) {
Tenant tenant = authenticationFacade.getTenant(applicationForm.getTenantId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.dossierfacile.api.front.mapper.TenantMapper;
import fr.dossierfacile.api.front.model.tenant.TenantModel;
import fr.dossierfacile.api.front.register.enums.StepRegister;
import fr.dossierfacile.api.front.register.form.guarantor.organism.DocumentGuaranteeProviderCertificateForm;
import fr.dossierfacile.api.front.register.form.guarantor.organism.DocumentIdentificationGuarantorOrganismForm;
import fr.dossierfacile.api.front.security.interfaces.AuthenticationFacade;
import fr.dossierfacile.api.front.service.interfaces.TenantService;
Expand All @@ -23,16 +24,28 @@
@RequiredArgsConstructor
@RequestMapping(value = "/api/register/guarantorOrganism", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public class RegisterGuarantorOrganismController {

private final TenantService tenantService;
private final TenantMapper tenantMapper;
private final AuthenticationFacade authenticationFacade;

@PreAuthorize("hasPermissionOnTenant(#documentIdentificationGuarantorOrganismForm.tenantId)")
@PostMapping("/documentIdentification")
@Deprecated
public ResponseEntity<TenantModel> documentIdentification(@Validated(Dossier.class) DocumentIdentificationGuarantorOrganismForm documentIdentificationGuarantorOrganismForm) {
var tenant = authenticationFacade.getTenant(documentIdentificationGuarantorOrganismForm.getTenantId());
tenantService.saveStepRegister(tenant, documentIdentificationGuarantorOrganismForm, StepRegister.DOCUMENT_IDENTIFICATION_GUARANTOR_ORGANISM);
Tenant loggedTenant = (documentIdentificationGuarantorOrganismForm.getTenantId() == null) ? tenant : authenticationFacade.getLoggedTenant();
return ok(tenantMapper.toTenantModel(loggedTenant));
}

@PreAuthorize("hasPermissionOnTenant(#form.tenantId)")
@PostMapping("/documentCertificate")
public ResponseEntity<TenantModel> documentCertificate(@Validated(Dossier.class) DocumentGuaranteeProviderCertificateForm form) {
var tenant = authenticationFacade.getTenant(form.getTenantId());
tenantService.saveStepRegister(tenant, form, StepRegister.DOCUMENT_GUARANTEE_PROVIDER_CERTIFICATE);
Tenant loggedTenant = (form.getTenantId() == null) ? tenant : authenticationFacade.getLoggedTenant();
return ok(tenantMapper.toTenantModel(loggedTenant));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
import fr.dossierfacile.common.entity.File;
import fr.dossierfacile.common.entity.Tenant;
import fr.dossierfacile.common.enums.TenantFileStatus;
import fr.dossierfacile.common.mapper.CategoriesMapper;
import fr.dossierfacile.common.mapper.MapDocumentCategories;
import org.mapstruct.AfterMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
Expand All @@ -34,15 +37,23 @@ public abstract class TenantMapper {
@Value("${application.domain}")
protected String domain;

protected CategoriesMapper categoriesMapper;

@Autowired
public void setCategoriesMapper(CategoriesMapper categoriesMapper) {
this.categoriesMapper = categoriesMapper;
}

@Mapping(target = "passwordEnabled", expression = "java(tenant.getPassword() != null)")
public abstract TenantModel toTenantModel(Tenant tenant);

@Mapping(target = "name", expression = "java((document.getWatermarkFile() != null )? domain + \"/" + PATH + "/\" + document.getName() : null)")
@Mapping(target = "subCategory", source = "documentSubCategory")
@Mapping(target = "documentSubCategory", expression = "java(document.getDocumentSubCategory().getOnlyOldCategories())")
@MapDocumentCategories
public abstract DocumentModel toDocumentModel(Document document);

@Mapping(target = "name", expression = "java((document.getWatermarkFile() != null )? domain + \"/" + PATH + "/\" + document.getName() : null)")
@Mapping(target = "documentCategory", expression = "java(categoriesMapper.mapCategory(document.getDocumentCategory()))")
@Mapping(target = "documentSubCategory", expression = "java(categoriesMapper.mapSubCategory(document.getDocumentSubCategory()))")
public abstract fr.dossierfacile.api.front.model.dfc.apartment_sharing.DocumentModel documentToDocumentModel(Document document);

@Mapping(target = "connectedTenantId", source = "id")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
public class DocumentModel {
private Long id;
private DocumentCategory documentCategory;
private DocumentSubCategory documentSubCategory; // TODO delete this field 6 months from now
private DocumentSubCategory subCategory;
private Boolean noDocument;
private String customText;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import fr.dossierfacile.api.front.model.tenant.TenantModel;
import fr.dossierfacile.api.front.register.enums.StepRegister;
import fr.dossierfacile.api.front.register.form.partner.AccountPartnerForm;
import fr.dossierfacile.api.front.register.form.tenant.ApplicationForm;
import fr.dossierfacile.api.front.register.form.tenant.ApplicationFormV2;
import fr.dossierfacile.api.front.register.form.tenant.DocumentFinancialForm;
import fr.dossierfacile.api.front.register.form.tenant.DocumentIdentificationForm;
Expand Down Expand Up @@ -58,16 +57,6 @@ public ResponseEntity<TenantModel> names(@Validated(ApiPartner.class) @RequestBo
return ok(tenantModel);
}

@ApiOperation("Deprecated since 2022.09.15 - use /application/v2")
@PreAuthorize("hasPermissionOnTenant(#applicationForm.tenantId)")
@Deprecated
@PostMapping(value = "/application", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TenantModel> application(@Validated(ApiPartner.class) @RequestBody ApplicationForm applicationForm) {
var tenant = tenantService.findById(applicationForm.getTenantId());
var tenantModel = tenantService.saveStepRegister(tenant, applicationForm, StepRegister.APPLICATION_V1);
logService.saveLog(LogType.ACCOUNT_EDITED, tenantModel.getId());
return ok(tenantModel);
}
@ApiOperation("En cas de couple(COUPLE), le nom et le prénom sont requis mais pas l'email.<br/>En cas de colocation(GROUP): nom, prénom et email sont requis")
@PreAuthorize("hasPermissionOnTenant(#applicationForm.tenantId)")
@PostMapping(value = "/application/v2", consumes = MediaType.APPLICATION_JSON_VALUE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.dossierfacile.api.front.model.tenant.TenantModel;
import fr.dossierfacile.api.front.register.enums.StepRegister;
import fr.dossierfacile.api.front.register.form.guarantor.organism.DocumentGuaranteeProviderCertificateForm;
import fr.dossierfacile.api.front.register.form.guarantor.organism.DocumentIdentificationGuarantorOrganismForm;
import fr.dossierfacile.api.front.service.interfaces.TenantService;
import fr.dossierfacile.api.front.validator.group.ApiPartner;
Expand All @@ -21,13 +22,24 @@
@RequiredArgsConstructor
@RequestMapping(value = "/api-partner/register/guarantorOrganism", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiPartnerRegisterGuarantorOrganismController {

private final TenantService tenantService;

@PreAuthorize("hasPermissionOnTenant(#documentIdentificationGuarantorOrganismForm.tenantId)")
@PostMapping("/documentIdentification")
@Deprecated
public ResponseEntity<TenantModel> documentIdentification(@Validated({ApiPartner.class, DocumentIdentificationGuarantor.class}) DocumentIdentificationGuarantorOrganismForm documentIdentificationGuarantorOrganismForm) {
var tenant = tenantService.findById(documentIdentificationGuarantorOrganismForm.getTenantId());
var tenantModel = tenantService.saveStepRegister(tenant, documentIdentificationGuarantorOrganismForm, StepRegister.DOCUMENT_IDENTIFICATION_GUARANTOR_ORGANISM);
return ok(tenantModel);
}

@PreAuthorize("hasPermissionOnTenant(#form.tenantId)")
@PostMapping("/documentCertificate")
public ResponseEntity<TenantModel> documentCertificate(@Validated({ApiPartner.class, DocumentGuaranteeProviderCertificateForm.class}) DocumentGuaranteeProviderCertificateForm form) {
var tenant = tenantService.findById(form.getTenantId());
var tenantModel = tenantService.saveStepRegister(tenant, form, StepRegister.DOCUMENT_GUARANTEE_PROVIDER_CERTIFICATE);
return ok(tenantModel);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ public ResponseEntity<ResponseWrapper<List<TenantUpdate>, ListMetadata>> list(@R
@RequestParam(value = "includeDeleted", defaultValue = "false") boolean includeDeleted,
@RequestParam(value = "includeRevoked", defaultValue = "false") boolean includeRevoked
) {
System.out.println("after = " + after);
UserApi userApi = clientAuthenticationFacade.getClient();
List<TenantUpdate> result;
LocalDateTime nextTimeToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import fr.dossierfacile.api.front.mapper.TenantMapper;
import fr.dossierfacile.api.front.model.tenant.EmailExistsModel;
import fr.dossierfacile.api.front.model.tenant.TenantModel;
import fr.dossierfacile.api.front.register.form.partner.EmailExistsForm;
import fr.dossierfacile.api.front.security.interfaces.ClientAuthenticationFacade;
import fr.dossierfacile.api.front.service.interfaces.TenantService;
import fr.dossierfacile.api.front.service.interfaces.UserApiService;
Expand Down Expand Up @@ -59,15 +57,6 @@ public ResponseEntity<TenantModel> getTenantByEmail(@JsonDeserialize(using = Ema
return ok(tenantMapperForPartner.toTenantModel(tenant.get()));
}

/**
* @deprecated use /email/{email}/tenant endpoint
*/
@Deprecated
@PostMapping(value = "/emailexists", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmailExistsModel> emailExists(@Validated @RequestBody EmailExistsForm emailExistsForm) {
return ok(tenantService.emailExists(emailExistsForm));
}

@PreAuthorize("hasPermissionOnTenant(#tenantId)")
@DeleteMapping("/tenant/{tenantId}/user/deleteAccount")
public ResponseEntity<Void> deleteAccount(@PathVariable Long tenantId) {
Expand Down
Loading

0 comments on commit 247b4c9

Please sign in to comment.