Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MODDCB-81 Optional DCBTransaction fields fields should be nullable #61

Merged
merged 6 commits into from
Dec 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

@FeignClient(name = "request-storage", configuration = FeignClientConfiguration.class)
public interface CirculationRequestClient {
@GetMapping("/requests/{circulationItemId}")
CirculationRequest fetchRequestById(@PathVariable("circulationItemId") String circulationItemId);
@GetMapping("/requests/{requestId}")
CirculationRequest fetchRequestById(@PathVariable("requestId") String requestId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,12 @@ public class TransactionEntity extends AuditableEntity implements Serializable {
private String servicePointId;
private String servicePointName;
private String materialType;
private String pickupLibraryName;
private String pickupLibraryCode;
private String lendingLibraryCode;
@Convert(converter = UUIDConverter.class)
private String patronId;
private String patronGroup;
private String patronBarcode;
private String borrowingLibraryCode;
private UUID requestId;
@Enumerated(EnumType.STRING)
private StatusEnum status;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,9 @@ public TransactionEntity mapToEntity(String transactionId, DcbTransaction dcbTra
.servicePointId(pickup.getServicePointId())
.servicePointName(pickup.getServicePointName())
.pickupLibraryCode(pickup.getLibraryCode())
.pickupLibraryName(pickup.getLibraryName())
.patronBarcode(patron.getBarcode())
.patronId(patron.getId())
.patronGroup(patron.getGroup())
.borrowingLibraryCode(patron.getBorrowingLibraryCode())

.role(dcbTransaction.getRole())
.build();
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/folio/dcb/service/LibraryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public interface LibraryService {
* @param dcbTransaction - dcbTransaction Entity
* @return TransactionStatusResponse
*/
TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction, String pickupServicePointId);
TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction);

/**
* Update transaction status based on transactionEntity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.folio.dcb.domain.dto.DcbTransaction;
import org.folio.dcb.domain.dto.ServicePointRequest;
import org.folio.dcb.domain.dto.TransactionStatus;
import org.folio.dcb.domain.dto.TransactionStatusResponse;
import org.folio.dcb.domain.entity.TransactionEntity;
import org.folio.dcb.repository.TransactionRepository;
import org.folio.dcb.service.CirculationService;
import org.folio.dcb.service.LibraryService;
import org.folio.dcb.service.ServicePointService;
import org.springframework.stereotype.Service;
import java.util.UUID;

Expand All @@ -28,10 +30,11 @@ public class BorrowingLibraryServiceImpl implements LibraryService {
private final CirculationService circulationService;
private final TransactionRepository transactionRepository;
private final BaseLibraryService libraryService;

private final ServicePointService servicePointService;
@Override
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction, String pickupServicePointId) {
return libraryService.createBorrowingLibraryTransaction(dcbTransactionId, dcbTransaction, pickupServicePointId);
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction) {
ServicePointRequest pickupServicePoint = servicePointService.createServicePoint(dcbTransaction.getPickup());
return libraryService.createBorrowingLibraryTransaction(dcbTransactionId, dcbTransaction, pickupServicePoint.getId());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public class BorrowingPickupLibraryServiceImpl implements LibraryService {
private final BaseLibraryService baseLibraryService;

@Override
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction, String pickupServicePointId) {
return baseLibraryService.createBorrowingLibraryTransaction(dcbTransactionId, dcbTransaction, pickupServicePointId);
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction) {
return baseLibraryService.createBorrowingLibraryTransaction(dcbTransactionId, dcbTransaction, dcbTransaction.getPickup().getServicePointId());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@
import lombok.extern.log4j.Log4j2;
import org.folio.dcb.domain.dto.CirculationRequest;
import org.folio.dcb.domain.dto.DcbTransaction;
import org.folio.dcb.domain.dto.ServicePointRequest;
import org.folio.dcb.domain.dto.TransactionStatus;
import org.folio.dcb.domain.dto.TransactionStatusResponse;
import org.folio.dcb.domain.entity.TransactionEntity;
import org.folio.dcb.repository.TransactionRepository;
import org.folio.dcb.service.CirculationService;
import org.folio.dcb.service.LibraryService;
import org.folio.dcb.service.RequestService;
import org.folio.dcb.service.ServicePointService;
import org.folio.dcb.service.UserService;
import org.springframework.stereotype.Service;

Expand All @@ -32,8 +34,10 @@ public class LendingLibraryServiceImpl implements LibraryService {
private final TransactionRepository transactionRepository;
private final CirculationService circulationService;
private final BaseLibraryService baseLibraryService;
private final ServicePointService servicePointService;

@Override
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction, String pickupServicePointId) {
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction) {
log.debug("createTransaction:: creating a new transaction with dcbTransactionId {} , dcbTransaction {}",
dcbTransactionId, dcbTransaction);

Expand All @@ -42,7 +46,8 @@ public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbT

var user = userService.fetchOrCreateUser(patron);
baseLibraryService.checkUserTypeAndThrowIfMismatch(user.getType());
CirculationRequest pageRequest = requestService.createPageItemRequest(user, item, pickupServicePointId);
ServicePointRequest pickupServicePoint = servicePointService.createServicePoint(dcbTransaction.getPickup());
CirculationRequest pageRequest = requestService.createPageItemRequest(user, item, pickupServicePoint.getId());
baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, pageRequest.getId());

return TransactionStatusResponse.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,16 @@ public class PickupLibraryServiceImpl implements LibraryService {
private final BaseLibraryService baseLibraryService;

@Override
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction, String pickupServicePointId) {
public TransactionStatusResponse createCirculation(String dcbTransactionId, DcbTransaction dcbTransaction) {
var itemVirtual = dcbTransaction.getItem();
var patron = dcbTransaction.getPatron();

var user = userService.fetchOrCreateUser(patron);
baseLibraryService.checkUserTypeAndThrowIfMismatch(user.getType());
baseLibraryService.checkItemExistsInInventoryAndThrow(itemVirtual.getBarcode());
circulationItemService.checkIfItemExistsAndCreate(itemVirtual, pickupServicePointId);
circulationItemService.checkIfItemExistsAndCreate(itemVirtual, dcbTransaction.getPickup().getServicePointId());

CirculationRequest holdRequest = requestService.createHoldItemRequest(user, itemVirtual, pickupServicePointId);
CirculationRequest holdRequest = requestService.createHoldItemRequest(user, itemVirtual, dcbTransaction.getPickup().getServicePointId());
baseLibraryService.saveDcbTransaction(dcbTransactionId, dcbTransaction, holdRequest.getId());

return TransactionStatusResponse.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ public ServicePointRequest createServicePoint(DcbPickup pickupServicePoint) {

ServicePointRequest servicePointRequest = createServicePointRequest(
pickupServicePoint.getServicePointId(),
getServicePointName(pickupServicePoint.getLibraryName(), pickupServicePoint.getServicePointName()),
getServicePointCode(pickupServicePoint.getLibraryName(), pickupServicePoint.getServicePointName())
getServicePointName(pickupServicePoint.getLibraryCode(), pickupServicePoint.getServicePointName()),
getServicePointCode(pickupServicePoint.getLibraryCode(), pickupServicePoint.getServicePointName())
);

try{
Expand All @@ -52,11 +52,11 @@ private ServicePointRequest createServicePointRequest(String id, String name, St
.build();
}

private String getServicePointName(String libraryName, String servicePointName){
return String.format("DCB_%s_%s", libraryName, servicePointName);
private String getServicePointName(String libraryCode, String servicePointName){
return String.format("DCB_%s_%s", libraryCode, servicePointName);
}

private String getServicePointCode(String libraryName, String servicePointName){
return String.format("DCB_%s_%s", libraryName, servicePointName).replaceAll("\\s+","").toUpperCase();
private String getServicePointCode(String libraryCode, String servicePointName){
return String.format("DCB_%s_%s", libraryCode, servicePointName).replaceAll("\\s+","").toUpperCase();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@

import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.folio.dcb.domain.dto.ServicePointRequest;
import org.folio.dcb.domain.dto.DcbTransaction;
import org.folio.dcb.domain.dto.TransactionStatus;
import org.folio.dcb.domain.dto.TransactionStatusResponse;
import org.folio.dcb.domain.entity.TransactionEntity;
import org.folio.dcb.exception.ResourceAlreadyExistException;
import org.folio.dcb.repository.TransactionRepository;
import org.folio.dcb.service.LibraryService;
import org.folio.dcb.service.ServicePointService;
import org.folio.dcb.service.TransactionsService;
import org.folio.spring.exception.NotFoundException;
import org.springframework.beans.factory.annotation.Qualifier;
Expand All @@ -30,19 +28,17 @@ public class TransactionsServiceImpl implements TransactionsService {
@Qualifier("borrowingLibraryService")
private final LibraryService borrowingLibraryService;
private final TransactionRepository transactionRepository;
private final ServicePointService servicePointService;

@Override
public TransactionStatusResponse createCirculationRequest(String dcbTransactionId, DcbTransaction dcbTransaction) {
log.debug("createCirculationRequest:: creating new transaction request for role {} ", dcbTransaction.getRole());
checkTransactionExistsAndThrow(dcbTransactionId);
ServicePointRequest pickupServicePoint = servicePointService.createServicePoint(dcbTransaction.getPickup());

return switch (dcbTransaction.getRole()) {
case LENDER -> lendingLibraryService.createCirculation(dcbTransactionId, dcbTransaction, pickupServicePoint.getId());
case BORROWING_PICKUP -> borrowingPickupLibraryService.createCirculation(dcbTransactionId, dcbTransaction, pickupServicePoint.getId());
case PICKUP -> pickupLibraryService.createCirculation(dcbTransactionId, dcbTransaction, pickupServicePoint.getId());
case BORROWER -> borrowingLibraryService.createCirculation(dcbTransactionId, dcbTransaction, pickupServicePoint.getId());
case LENDER -> lendingLibraryService.createCirculation(dcbTransactionId, dcbTransaction);
case BORROWING_PICKUP -> borrowingPickupLibraryService.createCirculation(dcbTransactionId, dcbTransaction);
case PICKUP -> pickupLibraryService.createCirculation(dcbTransactionId, dcbTransaction);
case BORROWER -> borrowingLibraryService.createCirculation(dcbTransactionId, dcbTransaction);
};
}

Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/db/changelog/changelog-master.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@
<include file="changes/create-transaction-table.xml" relativeToChangelogFile="true"/>
<include file="changes/create-audit-table.xml" relativeToChangelogFile="true"/>
<include file="changes/add-request-to-transaction.xml" relativeToChangelogFile="true"/>
<include file="changes/set-optional-fields-nullable.xml" relativeToChangelogFile="true"/>

</databaseChangeLog>
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,35 @@
<changeSet id="createStatusEnum" author="singhAdesh">
<sql>
<![CDATA[
CREATE TYPE StatusEnum as ENUM ('CREATED', 'OPEN', 'AWAITING_PICKUP', 'ITEM_CHECKED_OUT', 'ITEM_CHECKED_IN', 'CLOSED');
]]>
CREATE TYPE StatusEnum as ENUM ('CREATED', 'OPEN', 'AWAITING_PICKUP', 'ITEM_CHECKED_OUT', 'ITEM_CHECKED_IN', 'CLOSED');
]]>
</sql>
</changeSet>

<!-- Create CAST for character varying to StatusEnum -->
<changeSet id="createCast" author="singhAdesh">
<sql>
<![CDATA[
CREATE CAST (character varying as StatusEnum) WITH INOUT AS IMPLICIT;
]]>
CREATE CAST (character varying as StatusEnum) WITH INOUT AS IMPLICIT;
]]>
</sql>
</changeSet>

<!-- Create RoleEnum ENUM -->
<changeSet id="createRoleEnum" author="singhAdesh">
<sql>
<![CDATA[
CREATE TYPE RoleEnum as ENUM ('BORROWER', 'LENDER', 'PICKUP', 'BORROWING_PICKUP');
]]>
CREATE TYPE RoleEnum as ENUM ('BORROWER', 'LENDER', 'PICKUP', 'BORROWING_PICKUP');
]]>
</sql>
</changeSet>

<!-- Create CAST for character varying to StatusEnum -->
<changeSet id="createRoleCast" author="singhAdesh">
<sql>
<![CDATA[
CREATE CAST (character varying as RoleEnum) WITH INOUT AS IMPLICIT;
]]>
CREATE CAST (character varying as RoleEnum) WITH INOUT AS IMPLICIT;
]]>
</sql>
</changeSet>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

<changeSet id="setOptionalFieldsNullable" author="magzhanArtykov">
<sql>
<![CDATA[
ALTER TABLE transactions ALTER COLUMN item_title DROP NOT NULL;
ALTER TABLE transactions ALTER COLUMN service_point_name DROP NOT NULL;
ALTER TABLE transactions ALTER COLUMN pickup_library_code DROP NOT NULL;
ALTER TABLE transactions ALTER COLUMN lending_library_code DROP NOT NULL;
ALTER TABLE transactions ALTER COLUMN patron_group DROP NOT NULL;
ALTER TABLE transactions ALTER COLUMN material_type DROP NOT NULL;
]]>
</sql>
</changeSet>

<changeSet id="deleteColumns" author="magzhanArtykov">
<dropColumn tableName="transactions" columnName="pickup_library_name"/>
<dropColumn tableName="transactions" columnName="borrowing_library_code"/>
</changeSet>

</databaseChangeLog>
3 changes: 0 additions & 3 deletions src/main/resources/swagger.api/schemas/dcbPatron.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,3 @@ DcbPatron:
barcode:
description: The barcode of the patron
type: string
borrowingLibraryCode:
description: The code which identifies the borrowing library
type: string
3 changes: 0 additions & 3 deletions src/main/resources/swagger.api/schemas/dcbPickup.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ DcbPickup:
description: Pickup Location metadata required for the pickup service point
type: object
properties:
libraryName:
description: The name of the pickup library
type: string
libraryCode:
description: The code which identifies the pickup library
type: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.OPEN;
import static org.folio.dcb.utils.EntityUtils.DCB_TRANSACTION_ID;
import static org.folio.dcb.utils.EntityUtils.PICKUP_SERVICE_POINT_ID;
import static org.folio.dcb.utils.EntityUtils.createDcbPickup;
import static org.folio.dcb.utils.EntityUtils.createDcbTransactionByRole;
import static org.folio.dcb.utils.EntityUtils.createServicePointRequest;
import static org.folio.dcb.utils.EntityUtils.createTransactionEntity;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;


@ExtendWith(MockitoExtension.class)
Expand All @@ -39,6 +42,10 @@ class BorrowingLibraryServiceTest {
@Mock
private BaseLibraryService baseLibraryService;

@Mock
private ServicePointService servicePointService;


@Test
void testTransactionStatusUpdateFromOpenToAwaitingPickup() {
var transactionEntity = createTransactionEntity();
Expand Down Expand Up @@ -72,7 +79,8 @@ void testTransactionStatusUpdateWithIncorrectStatus() {

@Test
void createTransactionTest() {
borrowingLibraryService.createCirculation(DCB_TRANSACTION_ID, createDcbTransactionByRole(BORROWER), PICKUP_SERVICE_POINT_ID);
when(servicePointService.createServicePoint(createDcbPickup())).thenReturn(createServicePointRequest());
borrowingLibraryService.createCirculation(DCB_TRANSACTION_ID, createDcbTransactionByRole(BORROWER));

verify(baseLibraryService).createBorrowingLibraryTransaction(DCB_TRANSACTION_ID, createDcbTransactionByRole(BORROWER), PICKUP_SERVICE_POINT_ID);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@
import static org.folio.dcb.utils.EntityUtils.PICKUP_SERVICE_POINT_ID;
import static org.folio.dcb.utils.EntityUtils.createCirculationRequest;
import static org.folio.dcb.utils.EntityUtils.createDcbItem;
import static org.folio.dcb.utils.EntityUtils.createDcbPickup;
import static org.folio.dcb.utils.EntityUtils.createDefaultDcbPatron;
import static org.folio.dcb.utils.EntityUtils.createDcbTransactionByRole;
import static org.folio.dcb.utils.EntityUtils.createServicePointRequest;
import static org.folio.dcb.utils.EntityUtils.createTransactionEntity;
import static org.folio.dcb.utils.EntityUtils.createTransactionStatus;
import static org.folio.dcb.utils.EntityUtils.createUser;
Expand Down Expand Up @@ -53,6 +55,8 @@ class LendingLibraryServiceTest {
private CirculationServiceImpl circulationService;
@Mock
private BaseLibraryService baseLibraryService;
@Mock
private ServicePointService servicePointService;

@Test
void createTransactionTest() {
Expand All @@ -62,10 +66,11 @@ void createTransactionTest() {

when(userService.fetchOrCreateUser(any()))
.thenReturn(user);
when(servicePointService.createServicePoint(createDcbPickup())).thenReturn(createServicePointRequest());
when(requestService.createPageItemRequest(any(), any(), anyString())).thenReturn(createCirculationRequest());
doNothing().when(baseLibraryService).saveDcbTransaction(any(), any(), any());

var response = lendingLibraryService.createCirculation(DCB_TRANSACTION_ID, createDcbTransactionByRole(LENDER), PICKUP_SERVICE_POINT_ID);
var response = lendingLibraryService.createCirculation(DCB_TRANSACTION_ID, createDcbTransactionByRole(LENDER));
verify(userService).fetchOrCreateUser(patron);
verify(requestService).createPageItemRequest(user, item, PICKUP_SERVICE_POINT_ID);
verify(baseLibraryService).saveDcbTransaction(DCB_TRANSACTION_ID, createDcbTransactionByRole(LENDER), CIRCULATION_REQUEST_ID);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ void createTransactionTest() {
doNothing().when(circulationItemService).checkIfItemExistsAndCreate(any(), any());
doNothing().when(baseLibraryService).saveDcbTransaction(any(), any(), any());

var response = pickupLibraryService.createCirculation(DCB_TRANSACTION_ID, createDcbTransactionByRole(PICKUP), PICKUP_SERVICE_POINT_ID);
var response = pickupLibraryService.createCirculation(DCB_TRANSACTION_ID, createDcbTransactionByRole(PICKUP));
verify(userService).fetchOrCreateUser(patron);
verify(circulationItemService).checkIfItemExistsAndCreate(item, PICKUP_SERVICE_POINT_ID);
verify(requestService).createHoldItemRequest(user, item, PICKUP_SERVICE_POINT_ID);
Expand Down
Loading