dock
This module provides functionality to search and retrieve dock information from the Smart1 SDK API.
Overview
The dock module allows you to:
Search docks with pagination
Filter docks by multiple criteria (status, fleet, load type, etc.)
Sort dock results by various properties
Retrieve specific dock fields to optimize API calls
Filter by dynamic additional information fields
Main Components
GetAndSearchDocksByPage
Main use case for retrieving docks from the API with advanced filtering and pagination.
Models
Dock
Represents a dock entity with comprehensive information.
Properties:
id: Int- Unique dock identifiername: String- Dock namepickupTime: String- Pickup time (HH:MM:SS format)deliveryTime: String- Delivery time (HH:MM:SS format)objectId: Int- Related object ID for additional informationportId: Int- Related port IDliftTruck: Int- Number of lift trucksadditionalInfo: JsonObject- Dynamic additional informationskillIds: List<Int>- Assigned skill IDsstatus: PlaceStatusType- Dock statusfleet: FleetType- Fleet typeloadType: LoadType- Load typecompanyId: Int- Related company IDaddedOnDate: String- Creation date (YYYY-MM-DD'T'HH:MM:SS)updateOnDate: String- Last update date (YYYY-MM-DD'T'HH:MM:SS)
DockFilters
Filters to apply when searching docks.
Properties:
ids: List<Int>?- Filter by dock IDsnames: List<String>?- Filter by dock namespickupTimes: List<String>?- Filter by pickup timesdeliveryTimes: List<String>?- Filter by delivery timesobjectIds: List<Int>?- Filter by object IDsportIds: List<Int>?- Filter by port IDsliftTrucks: List<Int>?- Filter by lift truck countadditionalInfo: List<JsonObject>?- Filter by additional info (dynamic structure)skillIds: List<Int>?- Filter by skill IDsstatus: List<PlaceStatusType>?- Filter by statusfleet: List<FleetType>?- Filter by fleet typeloadType: List<LoadType>?- Filter by load typecompanyIds: List<Int>?- Filter by company IDsaddedOnDates: List<String>?- Filter by creation datesupdateOnDates: List<String>?- Filter by update dates
DockOrderSort
Sorting configuration for dock results.
Properties: All dock properties can be sorted (ASC/DESC). Set to null to skip sorting by that property.
Types
DockProperty
Enum representing available dock properties for field selection.
Values:
ID,NAME,PICKUP_TIME,DELIVERY_TIME,OBJECT_ID,PORT_ID,LIFT_TRUCKADDITIONAL_INFO,SKILL_IDS,STATUS,FLEET,LOAD_TYPE,COMPANY_IDADDED_ON_DATE,UPDATE_ON_DATE
Usage Examples
Basic Search - Get All Docks
import com.servinformacion.smart1sdk.android.dock.GetAndSearchDocksByPage
import com.servinformacion.smart1sdk.android.core.ResultS1SDK
class DockViewModel : ViewModel() {
private val getDocks = GetAndSearchDocksByPage()
fun loadDocks() {
viewModelScope.launch {
val result = getDocks(
page = 1,
pageQuantity = 20
)
when (result) {
is ResultS1SDK.Success -> {
val docks = result.data.data
val totalPages = result.data.paginationInfo.totalPages
// Handle success
}
is ResultS1SDK.Error -> {
// Handle error
}
}
}
}
}Search with Status Filter
import com.servinformacion.smart1sdk.android.dock.model.DockFilters
import com.servinformacion.smart1sdk.android.core.types.PlaceStatusType
suspend fun getActiveDocks() {
val getDocks = GetAndSearchDocksByPage()
val result = getDocks(
filters = DockFilters(
status = listOf(PlaceStatusType.ACTIVE)
),
page = 1
)
// Handle result
}Search by Fleet and Load Type
import com.servinformacion.smart1sdk.android.core.types.FleetType
import com.servinformacion.smart1sdk.android.core.types.LoadType
import com.servinformacion.smart1sdk.android.core.types.ApiLogicalOperator
suspend fun getDocksByFleetAndLoad() {
val getDocks = GetAndSearchDocksByPage()
val result = getDocks(
filters = DockFilters(
fleet = listOf(FleetType.INTERNAL),
loadType = listOf(LoadType.FULL, LoadType.PARTIAL)
),
logicalOperator = ApiLogicalOperator.AND,
page = 1
)
// Handle result
}Search with Sorting
import com.servinformacion.smart1sdk.android.dock.model.DockOrderSort
import com.servinformacion.smart1sdk.android.core.types.ApiSortType
suspend fun getDocksSortedByName() {
val getDocks = GetAndSearchDocksByPage()
val result = getDocks(
orderSort = DockOrderSort(
name = ApiSortType.ASC,
addedOnDate = ApiSortType.DESC
),
page = 1
)
// Handle result
}Optimized Field Selection
Request only the fields you need:
import com.servinformacion.smart1sdk.android.dock.types.DockProperty
suspend fun getDockBasicInfo() {
val getDocks = GetAndSearchDocksByPage()
val result = getDocks(
fields = listOf(
DockProperty.ID,
DockProperty.NAME,
DockProperty.STATUS,
DockProperty.PORT_ID
),
page = 1,
pageQuantity = 50
)
// Handle result
}Search by Company
suspend fun getDocksByCompany(companyId: Int) {
val getDocks = GetAndSearchDocksByPage()
val result = getDocks(
filters = DockFilters(
companyIds = listOf(companyId)
),
page = 1
)
// Handle result
}Advanced Search with Multiple Filters
import com.servinformacion.smart1sdk.android.core.types.ApiSearchType
suspend fun advancedDockSearch() {
val getDocks = GetAndSearchDocksByPage()
val result = getDocks(
fields = listOf(
DockProperty.ID,
DockProperty.NAME,
DockProperty.STATUS,
DockProperty.FLEET,
DockProperty.LOAD_TYPE
),
filters = DockFilters(
names = listOf("Dock A", "Dock B"),
status = listOf(PlaceStatusType.ACTIVE),
fleet = listOf(FleetType.INTERNAL),
companyIds = listOf(1, 2, 3)
),
logicalOperator = ApiLogicalOperator.AND,
orderSort = DockOrderSort(
name = ApiSortType.ASC
),
searchType = ApiSearchType.CONTAINS,
page = 1,
pageQuantity = 20
)
when (result) {
is ResultS1SDK.Success -> {
val dataSet = result.data
println("Total docks: ${dataSet.paginationInfo.totalRecords}")
dataSet.data.forEach { dock ->
println("Dock: ${dock.name} - Status: ${dock.status}")
}
}
is ResultS1SDK.Error -> {
println("Error: ${result.error}")
}
}
}Filter by Additional Info (Dynamic Fields)
The additionalInfo property supports dynamic filtering based on custom object configuration:
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonArray
suspend fun filterByAdditionalInfo() {
val getDocks = GetAndSearchDocksByPage()
// Single value filtering
val singleValueFilter = buildJsonObject {
put("custom_field_name", "value")
put("custom_boolean_field", true)
put("custom_number_field", 42)
}
// Multiple values filtering
val multiValueFilter = buildJsonObject {
putJsonArray("custom_field_name") {
add("value1")
add("value2")
}
}
val result = getDocks(
filters = DockFilters(
additionalInfo = listOf(singleValueFilter)
),
page = 1
)
// Handle result
}Important Notes
Required Field: Always include
DockProperty.IDin the fields list. The API requires this field.Field Selection: Request only the fields you need for better performance and reduced bandwidth.
Pagination: Results are paginated. Use
DataSet.paginationInfoto navigate pages.Logical Operators:
ApiLogicalOperator.AND- All filters must matchApiLogicalOperator.OR- Any filter can matchSearch Types:
ApiSearchType.EXACT- Exact matchApiSearchType.CONTAINS- Partial match (useful for search bars)Additional Info: The
additionalInfofield has a dynamic structure that depends on object configuration. It cannot be mapped to fixed models.Status Types: Use
PlaceStatusTypeenum for filtering by dock status (ACTIVE, INACTIVE, etc.)Fleet Types: Use
FleetTypeenum for filtering by fleet (INTERNAL, EXTERNAL, etc.)Load Types: Use
LoadTypeenum for filtering by load type (FULL, PARTIAL, EMPTY, etc.)
Response Structure
The response is wrapped in a DataSet<Dock>:
data class DataSet<T>(
val data: List<T>, // List of docks
val paginationInfo: PaginationInfo, // Pagination metadata
val capacityInfo: CapacityInfo // API capacity information
)Error Handling
Common errors:
CommonError.InvalidInputData- Invalid parameters (empty fields, page <= 0, missing ID field)ApiError.ExpiredToken- Session token expired (handled automatically)ApiError.Unauthorized- Invalid or missing authenticationApiError.NotFound- No docks found matching criteria