diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/config/ApplicationConfig.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/config/ApplicationConfig.java index 097a303f4..6f53eb811 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/config/ApplicationConfig.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/config/ApplicationConfig.java @@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.smartsensesolutions.java.commons.specification.SpecificationUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springdoc.core.properties.SwaggerUiConfigProperties; @@ -58,6 +59,11 @@ public ObjectMapper objectMapper() { return objectMapper; } + @Bean + public SpecificationUtil specificationUtil() { + return new SpecificationUtil<>(); + } + @Override public void addViewControllers(ViewControllerRegistry registry) { String redirectUri = properties.getPath(); diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/CredentialController.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/CredentialController.java index 04bded85c..8bea2720c 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/CredentialController.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/CredentialController.java @@ -32,6 +32,7 @@ import org.eclipse.tractusx.managedidentitywallets.dto.IssueMembershipCredentialRequest; import org.eclipse.tractusx.managedidentitywallets.service.CredentialService; import org.eclipse.tractusx.ssi.lib.model.verifiable.credential.VerifiableCredential; +import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -60,8 +61,14 @@ public class CredentialController { */ @Operation(description = "Permission: **view_wallets** OR **view_wallet** (The BPN of holderIdentifier must equal BPN of caller)\n\n Search verifiable credentials with filter criteria", summary = "Query Verifiable Credentials") @GetMapping(path = RestURI.CREDENTIALS, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> getCredentials(@RequestParam(required = false) String holderIdentifier, @RequestParam(required = false) String id, @RequestParam(required = false) String issuerIdentifier, @RequestParam(required = false) List type) { - return ResponseEntity.status(HttpStatus.OK).body(service.getCredentials(holderIdentifier, id, issuerIdentifier, type)); + public ResponseEntity> getCredentials(@RequestParam(required = false) String holderIdentifier, @RequestParam(required = false) String id, + @RequestParam(required = false) String issuerIdentifier, + @RequestParam(required = false) List type, + @RequestParam(required = false, defaultValue = "0") int pageNumber, + @RequestParam(required = false, defaultValue = Integer.MAX_VALUE + "") int size, + @RequestParam(required = false, defaultValue = "createdAt") String sortColumn, + @RequestParam(required = false, defaultValue = "desc") String sortTpe) { + return ResponseEntity.status(HttpStatus.OK).body(service.getCredentials(holderIdentifier, id, issuerIdentifier, type, pageNumber, size, sortColumn, sortTpe)); } /** diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/WalletController.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/WalletController.java index 1076522c8..1ab824763 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/WalletController.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/controller/WalletController.java @@ -31,12 +31,12 @@ import org.eclipse.tractusx.managedidentitywallets.dao.entity.Wallet; import org.eclipse.tractusx.managedidentitywallets.dto.CreateWalletRequest; import org.eclipse.tractusx.managedidentitywallets.service.WalletService; +import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.Map; /** @@ -129,7 +129,10 @@ public ResponseEntity getWalletByIdentifier(@PathVariable(name = "identi */ @Operation(summary = "List of wallets", description = "Permission: **view_wallets** \n\n Retrieve list of registered wallets") @GetMapping(path = RestURI.WALLETS, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> getWallets() { - return ResponseEntity.status(HttpStatus.OK).body(service.getWallets()); + public ResponseEntity> getWallets(@RequestParam(required = false, defaultValue = "0") int pageNumber, + @RequestParam(required = false, defaultValue = Integer.MAX_VALUE + "") int size, + @RequestParam(required = false, defaultValue = "createdAt") String sortColumn, + @RequestParam(required = false, defaultValue = "desc") String sortTpe) { + return ResponseEntity.status(HttpStatus.OK).body(service.getWallets(pageNumber, size, sortColumn, sortTpe)); } } \ No newline at end of file diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Credential.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Credential.java index e3a61711b..f0a72315b 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Credential.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Credential.java @@ -37,7 +37,7 @@ @AllArgsConstructor @NoArgsConstructor @Builder -public class Credential extends BaseEntity { +public class Credential extends MIWBaseEntity { @Id @@ -47,10 +47,10 @@ public class Credential extends BaseEntity { private Long id; @Column(nullable = false) - private Long holder; + private String holderDid; @Column(nullable = false) - private Long issuer; + private String issuerDid; @Column(nullable = false) private String type; diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/BaseEntity.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/MIWBaseEntity.java similarity index 93% rename from src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/BaseEntity.java rename to src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/MIWBaseEntity.java index 77b626ce7..2a8a58640 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/BaseEntity.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/MIWBaseEntity.java @@ -22,6 +22,7 @@ package org.eclipse.tractusx.managedidentitywallets.dao.entity; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.smartsensesolutions.java.commons.base.entity.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.MappedSuperclass; import jakarta.persistence.Temporal; @@ -43,7 +44,7 @@ @Setter @NoArgsConstructor @AllArgsConstructor -public class BaseEntity { +public class MIWBaseEntity implements BaseEntity { @JsonIgnore @CreationTimestamp diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Wallet.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Wallet.java index 055faf2f8..4214085e3 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Wallet.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/Wallet.java @@ -42,7 +42,7 @@ @AllArgsConstructor @NoArgsConstructor @Builder -public class Wallet extends BaseEntity { +public class Wallet extends MIWBaseEntity { @Id @JsonIgnore diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/WalletKey.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/WalletKey.java index 002adddb0..056bdaf2a 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/WalletKey.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/entity/WalletKey.java @@ -34,7 +34,7 @@ @AllArgsConstructor @NoArgsConstructor @Builder -public class WalletKey extends BaseEntity{ +public class WalletKey extends MIWBaseEntity { @Id @JsonIgnore diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/CredentialRepository.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/CredentialRepository.java index 8cff4d7c3..e07f71e23 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/CredentialRepository.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/CredentialRepository.java @@ -21,9 +21,9 @@ package org.eclipse.tractusx.managedidentitywallets.dao.repository; +import com.smartsensesolutions.java.commons.base.repository.BaseRepository; import org.eclipse.tractusx.managedidentitywallets.dao.entity.Credential; import org.eclipse.tractusx.ssi.lib.model.verifiable.credential.VerifiableCredential; -import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -32,39 +32,39 @@ /** * The interface Credential repository. */ -public interface CredentialRepository extends JpaRepository { +public interface CredentialRepository extends BaseRepository { /** - * Gets by holder. + * Gets by holder did. * - * @param id the id - * @return the by holder + * @param holderDid the holder did + * @return the by holder did */ - List getByHolder(Long id); + List getByHolderDid(String holderDid); /** * Gets credentials by holder. * - * @param holder the holder + * @param holderDid the holder did * @return the credentials by holder */ - @Query("select data from Credential where holder=:holder") - List getCredentialsByHolder(@Param("holder") Long holder); + @Query("select data from Credential where holderDid=:holderDid") + List getCredentialsByHolder(@Param("holderDid") String holderDid); /** - * Gets by holder and type. + * Gets by holder did and type. * - * @param holderWalletId the holder wallet id - * @param type the type - * @return the by holder and type + * @param holderDid the holder did + * @param type the type + * @return the by holder did and type */ - Credential getByHolderAndType(Long holderWalletId, String type); + Credential getByHolderDidAndType(String holderDid, String type); /** - * Exists by holder and type boolean. + * Exists by holder did and type boolean. * - * @param holderWalletId the holder wallet id - * @param type the type + * @param holderDid the holder did + * @param type the type * @return the boolean */ - boolean existsByHolderAndType(Long holderWalletId, String type); + boolean existsByHolderDidAndType(String holderDid, String type); } diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletKeyRepository.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletKeyRepository.java index 58d93df8e..26874d35e 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletKeyRepository.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletKeyRepository.java @@ -21,15 +21,15 @@ package org.eclipse.tractusx.managedidentitywallets.dao.repository; +import com.smartsensesolutions.java.commons.base.repository.BaseRepository; import org.eclipse.tractusx.managedidentitywallets.dao.entity.WalletKey; -import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** * The interface Wallet key repository. */ @Repository -public interface WalletKeyRepository extends JpaRepository { +public interface WalletKeyRepository extends BaseRepository { /** * Gets by wallet id. * diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletRepository.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletRepository.java index c56d5a4cb..32a171464 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletRepository.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/dao/repository/WalletRepository.java @@ -21,15 +21,15 @@ package org.eclipse.tractusx.managedidentitywallets.dao.repository; +import com.smartsensesolutions.java.commons.base.repository.BaseRepository; import org.eclipse.tractusx.managedidentitywallets.dao.entity.Wallet; -import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** * The interface Wallet repository. */ @Repository -public interface WalletRepository extends JpaRepository { +public interface WalletRepository extends BaseRepository { /** * Gets by bpn. diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/CredentialService.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/CredentialService.java index d4146474f..feb15ccee 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/CredentialService.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/CredentialService.java @@ -21,6 +21,13 @@ package org.eclipse.tractusx.managedidentitywallets.service; +import com.smartsensesolutions.java.commons.FilterRequest; +import com.smartsensesolutions.java.commons.base.repository.BaseRepository; +import com.smartsensesolutions.java.commons.base.service.BaseService; +import com.smartsensesolutions.java.commons.operator.Operator; +import com.smartsensesolutions.java.commons.sort.Sort; +import com.smartsensesolutions.java.commons.sort.SortType; +import com.smartsensesolutions.java.commons.specification.SpecificationUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.util.io.pem.PemReader; @@ -44,7 +51,10 @@ import org.eclipse.tractusx.ssi.lib.model.verifiable.credential.VerifiableCredentialType; import org.eclipse.tractusx.ssi.lib.proof.LinkedDataProofGenerator; import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.io.StringReader; import java.net.URI; @@ -58,7 +68,7 @@ */ @Service @Slf4j -public class CredentialService { +public class CredentialService extends BaseService { private final CredentialRepository credentialRepository; private final MIWSettings miwSettings; @@ -66,12 +76,26 @@ public class CredentialService { private final EncryptionUtils encryptionUtils; private final WalletService walletService; - public CredentialService(CredentialRepository credentialRepository, MIWSettings miwSettings, WalletKeyRepository walletKeyRepository, EncryptionUtils encryptionUtils, @Lazy WalletService walletService) { + private final SpecificationUtil credentialSpecificationUtil; + + public CredentialService(CredentialRepository credentialRepository, MIWSettings miwSettings, WalletKeyRepository walletKeyRepository, EncryptionUtils encryptionUtils, @Lazy WalletService walletService, SpecificationUtil credentialSpecificationUtil) { this.credentialRepository = credentialRepository; this.miwSettings = miwSettings; this.walletKeyRepository = walletKeyRepository; this.encryptionUtils = encryptionUtils; this.walletService = walletService; + this.credentialSpecificationUtil = credentialSpecificationUtil; + } + + + @Override + protected BaseRepository getRepository() { + return credentialRepository; + } + + @Override + protected SpecificationUtil getSpecificationUtil() { + return credentialSpecificationUtil; } /** @@ -83,8 +107,29 @@ public CredentialService(CredentialRepository credentialRepository, MIWSettings * @param type the type * @return the credentials */ - public List getCredentials(String holderIdentifier, String id, String issuerIdentifier, List type) { - return credentialRepository.findAll();//TODO with params + public Page getCredentials(String holderIdentifier, String id, String issuerIdentifier, List type, int pageNumber, int size, String sortColumn, String sortType) { + FilterRequest filterRequest = new FilterRequest(); + filterRequest.setPage(pageNumber); + filterRequest.setSize(size); + if (StringUtils.hasText(holderIdentifier)) { + Wallet holderWallet = walletService.getWalletByIdentifier(holderIdentifier); + filterRequest.appendNewCriteria("holderDid", Operator.EQUALS, holderWallet.getDid()); + } + + if (StringUtils.hasText(issuerIdentifier)) { + Wallet issuerWallet = walletService.getWalletByIdentifier(issuerIdentifier); + filterRequest.appendNewCriteria("issuerDid", Operator.EQUALS, issuerWallet.getDid()); + } + + if (!CollectionUtils.isEmpty(type)) { + filterRequest.appendNewCriteria("type", Operator.IN, type); + } + + Sort sort = new Sort(); + sort.setColumn(sortColumn); + sort.setSortType(SortType.valueOf(sortType.toUpperCase())); + filterRequest.setSort(sort); + return filter(filterRequest); } /** @@ -96,7 +141,7 @@ public List getCredentials(String holderIdentifier, String id, Strin public VerifiableCredential issueFrameworkCredential(IssueFrameworkCredentialRequest request) { //Fetch Holder Wallet Wallet holderWallet = walletService.getWalletByIdentifier(request.getBpn()); - + // Fetch Issuer Wallet Wallet baseWallet = walletService.getWalletByIdentifier(miwSettings.authorityWalletBpn()); byte[] privateKeyBytes = getPrivateKeyById(baseWallet.getId()); @@ -109,7 +154,7 @@ public VerifiableCredential issueFrameworkCredential(IssueFrameworkCredentialReq Credential credential = getCredential(subject, MIWVerifiableCredentialType.USE_CASE_FRAMEWORK_CONDITION_CX, baseWallet, privateKeyBytes, holderWallet); //Store Credential - credentialRepository.save(credential); + credential = create(credential); // Return VC return credential.getData(); @@ -127,7 +172,7 @@ public VerifiableCredential issueDismantlerCredential(IssueDismantlerCredentialR Wallet holderWallet = walletService.getWalletByIdentifier(request.getBpn()); //check duplicate - isCredentialExit(holderWallet.getId(), MIWVerifiableCredentialType.DISMANTLER_CREDENTIAL_CX); + isCredentialExit(holderWallet.getDid(), MIWVerifiableCredentialType.DISMANTLER_CREDENTIAL_CX); // Fetch Issuer Wallet Wallet baseWallet = walletService.getWalletByIdentifier(miwSettings.authorityWalletBpn()); @@ -141,7 +186,7 @@ public VerifiableCredential issueDismantlerCredential(IssueDismantlerCredentialR Credential credential = getCredential(subject, MIWVerifiableCredentialType.DISMANTLER_CREDENTIAL_CX, baseWallet, privateKeyBytes, holderWallet); //Store Credential - credentialRepository.save(credential); + credential = create(credential); // Return VC return credential.getData(); @@ -160,7 +205,7 @@ public VerifiableCredential issueMembershipCredential(IssueMembershipCredentialR Wallet holderWallet = walletService.getWalletByIdentifier(issueMembershipCredentialRequest.getBpn()); //check duplicate - isCredentialExit(holderWallet.getId(), MIWVerifiableCredentialType.MEMBERSHIP_CREDENTIAL_CX); + isCredentialExit(holderWallet.getDid(), MIWVerifiableCredentialType.MEMBERSHIP_CREDENTIAL_CX); // Fetch Issuer Wallet Wallet baseWallet = walletService.getWalletByIdentifier(miwSettings.authorityWalletBpn()); @@ -175,7 +220,7 @@ public VerifiableCredential issueMembershipCredential(IssueMembershipCredentialR "startTime", Instant.now().toString()), MIWVerifiableCredentialType.MEMBERSHIP_CREDENTIAL_CX, baseWallet, privateKeyBytes, holderWallet); //Store Credential - credentialRepository.save(credential); + credential = create(credential); // Return VC return credential.getData(); @@ -219,8 +264,8 @@ public Credential getCredential(Map subject, String type, Wallet // Create Credential return Credential.builder() - .holder(holderWallet.getId()) - .issuer(baseWallet.getId()) + .holderDid(holderWallet.getDid()) + .issuerDid(baseWallet.getDid()) .type(type) .data(verifiableCredential) .build(); @@ -234,7 +279,8 @@ public byte[] getPrivateKeyById(Long id) { return new PemReader(new StringReader(privateKey)).readPemObject().getContent(); } - private void isCredentialExit(Long holderId, String credentialType) { - Validate.isTrue(credentialRepository.existsByHolderAndType(holderId, credentialType)).launch(new DuplicateCredentialProblem("Credential of type " + credentialType + " is already exists ")); + private void isCredentialExit(String holderDid, String credentialType) { + Validate.isTrue(credentialRepository.existsByHolderDidAndType(holderDid, credentialType)).launch(new DuplicateCredentialProblem("Credential of type " + credentialType + " is already exists ")); } + } diff --git a/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/WalletService.java b/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/WalletService.java index c8d485cf9..4e72e922a 100644 --- a/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/WalletService.java +++ b/src/main/java/org/eclipse/tractusx/managedidentitywallets/service/WalletService.java @@ -21,6 +21,12 @@ package org.eclipse.tractusx.managedidentitywallets.service; +import com.smartsensesolutions.java.commons.FilterRequest; +import com.smartsensesolutions.java.commons.base.repository.BaseRepository; +import com.smartsensesolutions.java.commons.base.service.BaseService; +import com.smartsensesolutions.java.commons.sort.Sort; +import com.smartsensesolutions.java.commons.sort.SortType; +import com.smartsensesolutions.java.commons.specification.SpecificationUtil; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -56,6 +62,7 @@ import org.eclipse.tractusx.ssi.lib.model.MultibaseString; import org.eclipse.tractusx.ssi.lib.model.did.*; import org.eclipse.tractusx.ssi.lib.model.verifiable.credential.VerifiableCredential; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import java.io.StringWriter; @@ -73,7 +80,7 @@ @Service @RequiredArgsConstructor @Slf4j -public class WalletService { +public class WalletService extends BaseService { private final WalletRepository walletRepository; @@ -87,6 +94,17 @@ public class WalletService { private final CredentialService credentialService; + private final SpecificationUtil walletSpecificationUtil; + + @Override + protected BaseRepository getRepository() { + return walletRepository; + } + + @Override + protected SpecificationUtil getSpecificationUtil() { + return walletSpecificationUtil; + } /** * Store credential map. @@ -112,8 +130,8 @@ public Map storeCredential(Map data, String iden verifiableCredential.getTypes().remove("VerifiableCredential"); } credentialRepository.save(Credential.builder() - .holder(wallet.getId()) - .issuer(wallet.getId()) //TODO need to discuss if we want allow credentials issued by wallet that are not in our system? + .holderDid(wallet.getDid()) + .issuerDid(URLDecoder.decode(verifiableCredential.getIssuer().toString(), Charset.defaultCharset())) .type(verifiableCredential.getTypes().get(0)) .data(verifiableCredential) .build()); @@ -131,7 +149,7 @@ public Map storeCredential(Map data, String iden public Wallet getWalletByIdentifier(String identifier, boolean withCredentials) { Wallet wallet = getWalletByIdentifier(identifier); if (withCredentials) { - wallet.setVerifiableCredentials(credentialRepository.getCredentialsByHolder(wallet.getId())); + wallet.setVerifiableCredentials(credentialRepository.getCredentialsByHolder(wallet.getDid())); } return wallet; } @@ -158,8 +176,16 @@ public Wallet getWalletByIdentifier(String identifier) { * * @return the wallets */ - public List getWallets() { - return walletRepository.findAll(); + public Page getWallets(int pageNumber, int size, String sortColumn, String sortType) { + FilterRequest filterRequest = new FilterRequest(); + filterRequest.setSize(size); + filterRequest.setPage(pageNumber); + + Sort sort = new Sort(); + sort.setColumn(sortColumn); + sort.setSortType(SortType.valueOf(sortType.toUpperCase())); + filterRequest.setSort(sort); + return filter(filterRequest); } /** @@ -201,7 +227,7 @@ public Wallet createWallet(CreateWalletRequest request) { log.debug("did document created for bpn ->{}", request.getBpn()); //Save wallet - Wallet wallet = walletRepository.save(Wallet.builder() + Wallet wallet = create(Wallet.builder() .didDocument(didDocument) .bpn(request.getBpn()) .name(request.getName()) @@ -293,4 +319,5 @@ private String getPublicKeyString(byte[] publicKeyBytes) { pemWriter.close(); return stringWriter.toString(); } + } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 3739e374d..e449e7d63 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -68,9 +68,9 @@ miw: vcExpiryDate: ${VC_EXPIRY_DATE:01-01-2025} #dd-MM-yyyy ie. 01-01-2025 expiry date will be 2024-12-31T18:30:00Z in VC security: enabled: true - realm: ${KEYCLOAK_REALM:miw} - clientId: ${KEYCLOAK_CLIENT_ID:miw} - auth-server-url: ${AUTH_SERVER_URL:https://localhost} + realm: ${KEYCLOAK_REALM:miw_test} + clientId: ${KEYCLOAK_CLIENT_ID:miw_private_client} + auth-server-url: ${AUTH_SERVER_URL:https://dev-auth.keenlyco.com} auth-url: ${miw.security.auth-server-url}/realms/${miw.security.realm}/protocol/openid-connect/auth token-url: ${miw.security.auth-server-url}/realms/${miw.security.realm}/protocol/openid-connect/token refresh-token-url: ${miw.security.token-url} \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/init.sql b/src/main/resources/db/changelog/changes/init.sql index 6147d93c5..aa933e5b1 100644 --- a/src/main/resources/db/changelog/changes/init.sql +++ b/src/main/resources/db/changelog/changes/init.sql @@ -36,8 +36,8 @@ CREATE TABLE public.wallet_key ( CREATE TABLE public.credential ( id bigserial NOT NULL, - holder bigserial NOT NULL, - issuer bigserial NOT NULL, + holder_did varchar(255) NOT NULL, + issuer_did varchar(255) NOT NULL, "data" text NOT NULL, "type" varchar(255) NULL, created_at timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, @@ -45,6 +45,5 @@ CREATE TABLE public.credential ( modified_from varchar(255) NULL, CONSTRAINT credential_pkey PRIMARY KEY (id), CONSTRAINT credential_fk FOREIGN KEY (modified_from) REFERENCES public.wallet(bpn), - CONSTRAINT holder_wallet_fk FOREIGN KEY (holder) REFERENCES public.wallet(id), - CONSTRAINT issuer_wallet_fk FOREIGN KEY (issuer) REFERENCES public.wallet(id) + CONSTRAINT holder_wallet_fk FOREIGN KEY (holder_did) REFERENCES public.wallet(did) ); \ No newline at end of file diff --git a/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/DismantlerCredentialTest.java b/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/DismantlerCredentialTest.java index 24adf6e0b..1509efef9 100644 --- a/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/DismantlerCredentialTest.java +++ b/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/DismantlerCredentialTest.java @@ -107,7 +107,7 @@ void issueDismantlerCredentialTest201() throws JsonProcessingException, JSONExce Assertions.assertTrue(verifiableCredential.getCredentialSubject().get(0).get("activityType").toString().equals("vehicleDismantle")); - Credential credential = credentialRepository.getByHolderAndType(wallet.getId(), MIWVerifiableCredentialType.DISMANTLER_CREDENTIAL_CX); + Credential credential = credentialRepository.getByHolderDidAndType(wallet.getDid(), MIWVerifiableCredentialType.DISMANTLER_CREDENTIAL_CX); Assertions.assertNotNull(credential); TestUtils.checkVC(credential.getData(), miwSettings); @@ -153,5 +153,4 @@ private ResponseEntity issueDismantlerCredential(String bpn, String did) return restTemplate.exchange(RestURI.CREDENTIALS_ISSUER_DISMANTLER, HttpMethod.POST, entity, String.class); } - -} +} \ No newline at end of file diff --git a/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/FrameworkCredentialTest.java b/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/FrameworkCredentialTest.java index 71949a0e7..5e48d4d09 100644 --- a/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/FrameworkCredentialTest.java +++ b/src/test/java/org/eclipse/tractusx/managedidentitywallets/vc/FrameworkCredentialTest.java @@ -245,7 +245,7 @@ private void validate(Wallet wallet, String type, String value, ResponseEntity response = storeCredential(miwSettings.authorityWalletBpn(), did); + Assertions.assertEquals(HttpStatus.CREATED.value(), response.getStatusCode().value()); Wallet byBpn = walletRepository.getByBpn(miwSettings.authorityWalletBpn()); - List byHolder = credentialRepository.getByHolder(byBpn.getId()); + List byHolder = credentialRepository.getByHolderDid(byBpn.getDid()); Assertions.assertEquals(2, byHolder.size()); } @@ -320,8 +322,6 @@ void getWallets200() throws JsonProcessingException { private Wallet getWalletFromString(String body) throws JsonProcessingException { JSONObject jsonObject = new JSONObject(body); - LOGGER.info("-----------String body ->{}", body); - LOGGER.info("--------Json --->{}", jsonObject); //convert DidDocument JSONObject didDocument = jsonObject.getJSONObject("didDocument"); jsonObject.remove("didDocument"); @@ -415,7 +415,8 @@ private ResponseEntity createWallet(String bpn, String name) { private List getWalletsFromString(String body) throws JsonProcessingException { List walletList = new ArrayList<>(); - JSONArray array = new JSONArray(body); + + JSONArray array = new JSONArray(new JSONObject(body).getJSONArray("content")); if (array.length() == 0) { return walletList; }