Skip to content

Commit 07a64f6

Browse files
committed
FINERACT-2239: New command processing - Resource Notes (org.apache.fineract.portfolio.note)
1 parent 0629bb2 commit 07a64f6

File tree

61 files changed

+1120
-1252
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1120
-1252
lines changed

custom/acme/note/service/src/main/java/com/acme/fineract/portfolio/note/service/AcmeNoteReadPlatformService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import java.util.Collections;
2222
import java.util.List;
2323
import lombok.extern.slf4j.Slf4j;
24-
import org.apache.fineract.portfolio.note.data.NoteData;
24+
import org.apache.fineract.portfolio.note.data.NoteResponse;
2525
import org.apache.fineract.portfolio.note.service.NoteReadPlatformService;
2626
import org.springframework.beans.factory.InitializingBean;
2727
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -38,12 +38,12 @@ public void afterPropertiesSet() throws Exception {
3838
}
3939

4040
@Override
41-
public NoteData retrieveNote(Long noteId, Long resourceId, Integer noteTypeId) {
41+
public NoteResponse retrieveNote(Long noteId, Long resourceId, Integer noteTypeId) {
4242
return null;
4343
}
4444

4545
@Override
46-
public List<NoteData> retrieveNotesByResource(Long resourceId, Integer noteTypeId) {
46+
public List<NoteResponse> retrieveNotesByResource(Long resourceId, Integer noteTypeId) {
4747
return Collections.emptyList();
4848
}
4949
}

custom/acme/note/service/src/main/java/com/acme/fineract/portfolio/note/service/AcmeNoteWritePlatformService.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@
1919
package com.acme.fineract.portfolio.note.service;
2020

2121
import lombok.extern.slf4j.Slf4j;
22-
import org.apache.fineract.infrastructure.core.api.JsonCommand;
23-
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
24-
import org.apache.fineract.portfolio.client.domain.Client;
22+
import org.apache.fineract.portfolio.note.data.NoteCreateRequest;
23+
import org.apache.fineract.portfolio.note.data.NoteCreateResponse;
24+
import org.apache.fineract.portfolio.note.data.NoteDeleteByResourceIdRequest;
25+
import org.apache.fineract.portfolio.note.data.NoteDeleteRequest;
26+
import org.apache.fineract.portfolio.note.data.NoteDeleteResponse;
27+
import org.apache.fineract.portfolio.note.data.NoteUpdateRequest;
28+
import org.apache.fineract.portfolio.note.data.NoteUpdateResponse;
2529
import org.apache.fineract.portfolio.note.service.NoteWritePlatformService;
2630
import org.springframework.beans.factory.InitializingBean;
2731
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -38,27 +42,22 @@ public void afterPropertiesSet() throws Exception {
3842
}
3943

4044
@Override
41-
public CommandProcessingResult createNote(JsonCommand command) {
45+
public NoteCreateResponse createNote(NoteCreateRequest request) {
4246
throw new UnsupportedOperationException("createNote() is not yet implemented.");
4347
}
4448

4549
@Override
46-
public void createLoanTransactionNote(Long loanTransactionId, String note) {
47-
throw new UnsupportedOperationException("createLoanTransactionNote() is not yet implemented.");
48-
}
49-
50-
@Override
51-
public CommandProcessingResult updateNote(JsonCommand command) {
50+
public NoteUpdateResponse updateNote(NoteUpdateRequest request) {
5251
throw new UnsupportedOperationException("updateNote() is not yet implemented.");
5352
}
5453

5554
@Override
56-
public CommandProcessingResult deleteNote(JsonCommand command) {
55+
public NoteDeleteResponse deleteNote(NoteDeleteRequest request) {
5756
throw new UnsupportedOperationException("deleteNote() is not yet implemented.");
5857
}
5958

6059
@Override
61-
public void createAndPersistClientNote(Client client, JsonCommand command) {
62-
log.warn("createAndPersistClientNote() is intentionally left empty and does nothing.");
60+
public void deleteByResource(NoteDeleteByResourceIdRequest request) {
61+
throw new UnsupportedOperationException("deleteBySavingsAccount() is not yet implemented.");
6362
}
6463
}

custom/acme/note/starter/src/test/java/com/acme/fineract/portfolio/note/starter/TestDefaultConfiguration.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper;
3030
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
3131
import org.apache.fineract.portfolio.note.domain.NoteRepository;
32-
import org.apache.fineract.portfolio.note.serialization.NoteCommandFromApiJsonDeserializer;
3332
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3433
import org.springframework.context.annotation.Bean;
3534
import org.springframework.jdbc.core.JdbcTemplate;
@@ -82,9 +81,4 @@ public LoanRepositoryWrapper loanRepository() {
8281
public LoanTransactionRepository loanTransactionRepository() {
8382
return mock(LoanTransactionRepository.class);
8483
}
85-
86-
@Bean
87-
public NoteCommandFromApiJsonDeserializer fromApiJsonDeserializer(FromJsonHelper fromJsonHelper) {
88-
return new NoteCommandFromApiJsonDeserializer(fromJsonHelper);
89-
}
9084
}

custom/acme/note/starter/src/test/java/com/acme/fineract/portfolio/note/starter/TestOverrideConfiguration.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,13 @@
2020

2121
import static org.mockito.Mockito.mock;
2222

23-
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
2423
import org.apache.fineract.infrastructure.core.service.database.RoutingDataSource;
2524
import org.apache.fineract.infrastructure.core.service.database.RoutingDataSourceServiceFactory;
2625
import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper;
2726
import org.apache.fineract.portfolio.group.domain.GroupRepository;
2827
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper;
2928
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
3029
import org.apache.fineract.portfolio.note.domain.NoteRepository;
31-
import org.apache.fineract.portfolio.note.serialization.NoteCommandFromApiJsonDeserializer;
3230
import org.springframework.context.annotation.Bean;
3331
import org.springframework.context.annotation.ComponentScan;
3432
import org.springframework.jdbc.core.JdbcTemplate;
@@ -37,11 +35,6 @@
3735
public class TestOverrideConfiguration {
3836
// NOTE: unfortunately an abastract base class that contains all these mock functions won't work
3937

40-
@Bean
41-
public FromJsonHelper fromJsonHelper() {
42-
return mock(FromJsonHelper.class);
43-
}
44-
4538
@Bean
4639
public RoutingDataSourceServiceFactory routingDataSourceServiceFactory() {
4740
return mock(RoutingDataSourceServiceFactory.class);
@@ -81,9 +74,4 @@ public LoanRepositoryWrapper loanRepository() {
8174
public LoanTransactionRepository loanTransactionRepository() {
8275
return mock(LoanTransactionRepository.class);
8376
}
84-
85-
@Bean
86-
public NoteCommandFromApiJsonDeserializer fromApiJsonDeserializer(FromJsonHelper fromJsonHelper) {
87-
return new NoteCommandFromApiJsonDeserializer(fromJsonHelper);
88-
}
8977
}

fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/data/TransactionDetailData.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import lombok.Getter;
2222
import lombok.RequiredArgsConstructor;
23-
import org.apache.fineract.portfolio.note.data.NoteData;
23+
import org.apache.fineract.portfolio.note.data.NoteResponse;
2424
import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData;
2525

2626
@RequiredArgsConstructor
@@ -29,13 +29,13 @@ public class TransactionDetailData {
2929

3030
private final Long transactionId;
3131
private final PaymentDetailData paymentDetails;
32-
private final NoteData noteData;
32+
private final NoteResponse noteResponse;
3333
private final TransactionTypeEnumData transactionType;
3434

35-
public TransactionDetailData(final Long transactionId, final PaymentDetailData paymentDetails, final NoteData noteData) {
35+
public TransactionDetailData(final Long transactionId, final PaymentDetailData paymentDetails, final NoteResponse noteResponse) {
3636
this.transactionId = transactionId;
3737
this.paymentDetails = paymentDetails;
38-
this.noteData = noteData;
38+
this.noteResponse = noteResponse;
3939
this.transactionType = null;
4040
}
4141
}

fineract-command/src/test/java/org/apache/fineract/command/sample/api/DummyApiController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
2323
import static org.springframework.http.MediaType.APPLICATION_PROBLEM_JSON_VALUE;
2424

25+
import jakarta.validation.Valid;
2526
import java.time.OffsetDateTime;
2627
import java.time.ZoneId;
2728
import java.util.UUID;
@@ -55,7 +56,7 @@ class DummyApiController {
5556

5657
@PostMapping("/sync")
5758
DummyResponse dummySync(@RequestHeader(value = COMMAND_REQUEST_ID, required = false) UUID requestId,
58-
@RequestHeader(value = "x-fineract-tenant-id", required = false) String tenantId, @RequestBody DummyRequest request) {
59+
@RequestHeader(value = "x-fineract-tenant-id", required = false) String tenantId, @Valid @RequestBody DummyRequest request) {
5960
var command = new DummyCommand();
6061
command.setId(requestId);
6162
command.setPayload(request);

fineract-core/src/main/java/org/apache/fineract/commands/service/CommandWrapperBuilder.java

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1837,55 +1837,6 @@ public CommandWrapperBuilder deleteCalendar(final String supportedEntityType, fi
18371837
return this;
18381838
}
18391839

1840-
public CommandWrapperBuilder createNote(final CommandWrapper resourceDetails, final String resourceType, final Long resourceId) {
1841-
this.actionName = "CREATE";
1842-
this.entityName = resourceDetails.entityName();// Note supports multiple
1843-
// resources. Note
1844-
// Permissions are set
1845-
// for each resource.
1846-
this.clientId = resourceDetails.getClientId();
1847-
this.loanId = resourceDetails.getLoanId();
1848-
this.savingsId = resourceDetails.getSavingsId();
1849-
this.groupId = resourceDetails.getGroupId();
1850-
this.subentityId = resourceDetails.subresourceId();
1851-
this.href = "/" + resourceType + "/" + resourceId + "/notes/template";
1852-
return this;
1853-
}
1854-
1855-
public CommandWrapperBuilder updateNote(final CommandWrapper resourceDetails, final String resourceType, final Long resourceId,
1856-
final Long noteId) {
1857-
this.actionName = "UPDATE";
1858-
this.entityName = resourceDetails.entityName();// Note supports multiple
1859-
// resources. Note
1860-
// Permissions are set
1861-
// for each resource.
1862-
this.entityId = noteId;
1863-
this.clientId = resourceDetails.getClientId();
1864-
this.loanId = resourceDetails.getLoanId();
1865-
this.savingsId = resourceDetails.getSavingsId();
1866-
this.groupId = resourceDetails.getGroupId();
1867-
this.subentityId = resourceDetails.subresourceId();
1868-
this.href = "/" + resourceType + "/" + resourceId + "/notes";
1869-
return this;
1870-
}
1871-
1872-
public CommandWrapperBuilder deleteNote(final CommandWrapper resourceDetails, final String resourceType, final Long resourceId,
1873-
final Long noteId) {
1874-
this.actionName = "DELETE";
1875-
this.entityName = resourceDetails.entityName();// Note supports multiple
1876-
// resources. Note
1877-
// Permissions are set
1878-
// for each resource.
1879-
this.entityId = noteId;
1880-
this.clientId = resourceDetails.getClientId();
1881-
this.loanId = resourceDetails.getLoanId();
1882-
this.savingsId = resourceDetails.getSavingsId();
1883-
this.groupId = resourceDetails.getGroupId();
1884-
this.subentityId = resourceDetails.subresourceId();
1885-
this.href = "/" + resourceType + "/" + resourceId + "/calendars/" + noteId;
1886-
return this;
1887-
}
1888-
18891840
public CommandWrapperBuilder createGroup() {
18901841
this.actionName = "CREATE";
18911842
this.entityName = "GROUP";
@@ -3581,13 +3532,6 @@ public CommandWrapperBuilder updateRate(final Long rateId) {
35813532
return this;
35823533
}
35833534

3584-
public CommandWrapperBuilder updateBusinessDate() {
3585-
this.actionName = "UPDATE";
3586-
this.entityName = "BUSINESS_DATE";
3587-
this.href = "/businessdate";
3588-
return this;
3589-
}
3590-
35913535
public CommandWrapperBuilder createDelinquencyRange() {
35923536
this.actionName = "CREATE";
35933537
this.entityName = "DELINQUENCY_RANGE";

fineract-core/src/main/java/org/apache/fineract/commands/service/SynchronousCommandProcessingService.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -276,16 +276,6 @@ private NewCommandSourceHandler findCommandHandler(final CommandWrapper wrapper)
276276
} else {
277277
throw new UnsupportedCommandException(wrapper.commandName());
278278
}
279-
} else if (wrapper.isNoteResource()) {
280-
if (wrapper.isCreate()) {
281-
handler = applicationContext.getBean("createNoteCommandHandler", NewCommandSourceHandler.class);
282-
} else if (wrapper.isUpdate()) {
283-
handler = applicationContext.getBean("updateNoteCommandHandler", NewCommandSourceHandler.class);
284-
} else if (wrapper.isDelete()) {
285-
handler = applicationContext.getBean("deleteNoteCommandHandler", NewCommandSourceHandler.class);
286-
} else {
287-
throw new UnsupportedCommandException(wrapper.commandName());
288-
}
289279
} else if (wrapper.isSurveyResource()) {
290280
if (wrapper.isRegisterSurvey()) {
291281
handler = applicationContext.getBean("registerSurveyCommandHandler", NewCommandSourceHandler.class);

fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
package org.apache.fineract.infrastructure.businessdate.api;
2020

2121
import io.swagger.v3.oas.annotations.Operation;
22-
import io.swagger.v3.oas.annotations.Parameter;
2322
import io.swagger.v3.oas.annotations.tags.Tag;
2423
import jakarta.validation.Valid;
2524
import jakarta.ws.rs.Consumes;
25+
import jakarta.ws.rs.DefaultValue;
2626
import jakarta.ws.rs.GET;
2727
import jakarta.ws.rs.HeaderParam;
2828
import jakarta.ws.rs.POST;
@@ -64,15 +64,15 @@ public List<BusinessDateResponse> getBusinessDates() {
6464
@Consumes({ MediaType.TEXT_HTML, MediaType.APPLICATION_JSON })
6565
@Produces(MediaType.APPLICATION_JSON)
6666
@Operation(summary = "Retrieve a specific Business date", description = "")
67-
public BusinessDateResponse getBusinessDate(@PathParam("type") @Parameter(description = "type") final String type) {
67+
public BusinessDateResponse getBusinessDate(@PathParam("type") final String type) {
6868
return this.readPlatformService.findByType(type);
6969
}
7070

7171
@POST
7272
@Consumes({ MediaType.APPLICATION_JSON })
7373
@Produces({ MediaType.APPLICATION_JSON })
7474
@Operation(summary = "Update Business Date", description = "")
75-
public BusinessDateResponse updateBusinessDate(@HeaderParam("Idempotency-Key") String idempotencyKey,
75+
public BusinessDateResponse updateBusinessDate(@HeaderParam("Idempotency-Key") @DefaultValue("") String idempotencyKey,
7676
@Valid BusinessDateUpdateRequest request) {
7777

7878
final var command = new BusinessDateUpdateCommand();

fineract-provider/src/main/java/org/apache/fineract/portfolio/note/command/NoteCommand.java renamed to fineract-core/src/main/java/org/apache/fineract/portfolio/note/command/NoteCreateCommand.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,11 @@
1818
*/
1919
package org.apache.fineract.portfolio.note.command;
2020

21-
/**
22-
* Immutable command used for create or update of notes.
23-
*/
24-
public class NoteCommand {
25-
26-
@SuppressWarnings("unused")
27-
private final String note;
28-
29-
public NoteCommand(final String note) {
30-
this.note = note;
31-
}
21+
import lombok.Data;
22+
import lombok.EqualsAndHashCode;
23+
import org.apache.fineract.command.core.Command;
24+
import org.apache.fineract.portfolio.note.data.NoteCreateRequest;
3225

33-
}
26+
@Data
27+
@EqualsAndHashCode(callSuper = true)
28+
public class NoteCreateCommand extends Command<NoteCreateRequest> {}

0 commit comments

Comments
 (0)