Pack Jobs Client
The Pack Jobs client provides access to packing operations in the fulfillmenttools platform. A pack job represents the task of consolidating picked articles into parcels for shipment or collection.
Basic Usage
import de.joesst.dev.fulfillmenttools.id.PackJobId;
import de.joesst.dev.fulfillmenttools.packjobs.PackJob;
import de.joesst.dev.fulfillmenttools.NotFoundException;
import de.joesst.dev.fulfillmenttools.FulfillmenttoolsException;
// Get a pack job by ID
try {
PackJob job = client.packing().get(PackJobId.builder().value("packjob-001").build());
System.out.println("Status: " + job.status());
System.out.println("Facility: " + job.facilityRef().value());
} catch (NotFoundException e) {
System.out.println("Pack job not found");
} catch (FulfillmenttoolsException e) {
System.out.println("Request failed: " + e.getMessage());
}Listing Pack Jobs
List pack jobs with pagination:
import de.joesst.dev.fulfillmenttools.model.Page;
import de.joesst.dev.fulfillmenttools.packjobs.PackJobListRequest;
Page<PackJob> page = client.packing().list(
PackJobListRequest.builder()
.size(50)
.build()
);
for (PackJob job : page.items()) {
System.out.println(job.id().value() + " — " + job.status());
}Iterate through all pages automatically:
Iterable<PackJob> allJobs = client.packing().listAll(
PackJobListRequest.builder()
.size(100)
.build()
);
for (PackJob job : allJobs) {
System.out.println(job.id().value());
}Manual pagination using nextCursor():
Page<PackJob> page = client.packing().list(PackJobListRequest.builder().size(20).build());
while (page.hasMore()) {
page = client.packing().list(
PackJobListRequest.builder()
.size(20)
.startAfterId(page.nextCursor())
.build()
);
for (PackJob job : page.items()) {
System.out.println(job.id().value());
}
}Filtering Pack Jobs
PackJobListRequest supports many optional filters:
import de.joesst.dev.fulfillmenttools.id.FacilityId;
import java.util.List;
// Filter by facility and status
Page<PackJob> openJobs = client.packing().list(
PackJobListRequest.builder()
.facilityRef(FacilityId.builder().value("fac-001").build())
.status(List.of("OPEN", "IN_PROGRESS"))
.size(50)
.build()
);
// Filter by delivery channel and sort order
Page<PackJob> shippingJobs = client.packing().list(
PackJobListRequest.builder()
.channel("SHIPPING")
.orderBy("created,desc")
.size(50)
.build()
);
// Filter by associated pick job
import de.joesst.dev.fulfillmenttools.id.PickJobId;
Page<PackJob> results = client.packing().list(
PackJobListRequest.builder()
.pickJobRef(PickJobId.builder().value("pjob-001").build())
.size(20)
.build()
);Updating a Pack Job
import de.joesst.dev.fulfillmenttools.packjobs.UpdatePackJobRequest;
PackJob job = client.packing().get(PackJobId.builder().value("packjob-001").build());
PackJob updated = client.packing().update(
PackJobId.builder().value("packjob-001").build(),
UpdatePackJobRequest.builder()
.version(job.version())
.status("IN_PROGRESS")
.build()
);
System.out.println("Updated status: " + updated.status());Async Usage
All methods have async variants returning CompletableFuture:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
CompletableFuture<PackJob> future = client.packing().getAsync(
PackJobId.builder().value("packjob-001").build()
);
future.whenComplete((job, ex) -> {
if (ex != null) {
Throwable cause = ex instanceof CompletionException && ex.getCause() != null
? ex.getCause() : ex;
System.out.println("Error: " + cause.getMessage());
} else {
System.out.println("Status: " + job.status());
}
});API Reference
get(PackJobId)
Get a pack job by ID.
Parameters:
packJobId: PackJobId— The pack job identifier
Returns: PackJob
Throws: NotFoundException (404), FulfillmenttoolsException if the request fails
getAsync(PackJobId)
Get a pack job by ID asynchronously.
Parameters:
packJobId: PackJobId— The pack job identifier
Returns: CompletableFuture<PackJob>
list(PackJobListRequest)
List pack jobs with pagination.
Parameters:
request: PackJobListRequest— List request with filter and pagination parameters
Returns: Page<PackJob>
Throws: FulfillmenttoolsException if the request fails
listAsync(PackJobListRequest)
List pack jobs asynchronously.
Parameters:
request: PackJobListRequest— List request
Returns: CompletableFuture<Page<PackJob>>
listAll(PackJobListRequest)
List all pack jobs, automatically iterating through pages.
Parameters:
request: PackJobListRequest— List request
Returns: Iterable<PackJob>
update(PackJobId, UpdatePackJobRequest)
Update a pack job. The version field in the request is required for optimistic locking.
Parameters:
packJobId: PackJobId— The pack job identifierrequest: UpdatePackJobRequest— Update request with new values and current version
Returns: PackJob
Throws: FulfillmenttoolsException if the request fails or a version conflict occurs
updateAsync(PackJobId, UpdatePackJobRequest)
Update a pack job asynchronously.
Parameters:
packJobId: PackJobId— The pack job identifierrequest: UpdatePackJobRequest— Update request
Returns: CompletableFuture<PackJob>