package com.example.services; import com.example.services.item.Item; import com.example.services.item.ItemOption; import com.example.services.item.ItemPrice; import com.example.services.item.ItemStock; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Path("/items") public class ItemService { private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectDOTSOFT.class); @GET @Path("/{itemId}") @Produces(MediaType.APPLICATION_JSON) public Response getItemById( @PathParam("itemId") String itemId, @QueryParam("dbHost") String dbHost) { if (itemId == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build(); } else if (itemId.length() < 6) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build(); } if (dbHost == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build(); } DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) { String query = "SELECT * FROM dtv.ITM_ITEM WHERE ORGANIZATION_ID = 1 AND ITEM_ID LIKE ?"; logger.info(query); try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) { // Concatenate % to parameter itemId statement.setString(1, itemId + "%"); try (ResultSet resultSet = statement.executeQuery()) { List itemList = new ArrayList<>(); while (resultSet.next()) { Item item = mapResultSetToItem(resultSet); itemList.add(item); } ObjectMapper objectMapper = new ObjectMapper(); String jsonResponse = objectMapper.writeValueAsString(itemList); return Response.ok(jsonResponse).build(); } } } catch (SQLException e) { e.printStackTrace(); String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}"; return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build(); } catch (JsonProcessingException e) { e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build(); } } @GET @Path("/{itemId}/options") @Produces(MediaType.APPLICATION_JSON) public Response getItemOptionsById( @PathParam("itemId") String itemId, @QueryParam("dbHost") String dbHost) { if (itemId == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build(); } else if (itemId.length() < 6) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build(); } if (dbHost == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build(); } DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) { String query = "SELECT item_id,level_code,level_value,item_availability_code,tax_group_id,Vendor,season_code,create_date,create_user_id,update_date,update_user_id " + "FROM dtv.ITM_ITEM_OPTIONS " + "WHERE ORGANIZATION_ID = 1 AND ITEM_ID LIKE ?"; logger.info(query); try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) { // Concatenate % to parameter itemId statement.setString(1, itemId + "%"); try (ResultSet resultSet = statement.executeQuery()) { List itemOptionList = new ArrayList<>(); while (resultSet.next()) { ItemOption itemOption = mapResultSetToItemOptionDetails(resultSet); itemOptionList.add(itemOption); } ObjectMapper objectMapper = new ObjectMapper(); String jsonResponse = objectMapper.writeValueAsString(itemOptionList); return Response.ok(jsonResponse).build(); } } } catch (SQLException e) { e.printStackTrace(); String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}"; return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build(); } catch (JsonProcessingException e) { e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build(); } } @GET @Path("/{itemId}/price") @Produces(MediaType.APPLICATION_JSON) public Response getItemPricesById( @PathParam("itemId") String itemId, @QueryParam("dbHost") String dbHost) { if (itemId == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build(); } else if (itemId.length() < 6) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build(); } if (dbHost == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build(); } DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) { String query = "SELECT item_id, level_code, level_value, itm_price_property_code, effective_date, expiration_date, price, price_qty, external_id, external_system, create_date, create_user_id, update_date, update_user_id " + "FROM dtv.itm_item_prices " + "WHERE organization_id = 1 AND item_id LIKE ?"; logger.info(query); try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) { // Concatenate % to parameter itemId statement.setString(1, itemId + "%"); try (ResultSet resultSet = statement.executeQuery()) { List itemPriceList = new ArrayList<>(); while (resultSet.next()) { ItemPrice itemPrice = mapResultSetToItemPriceDetails(resultSet); itemPriceList.add(itemPrice); } ObjectMapper objectMapper = new ObjectMapper(); String jsonResponse = objectMapper.writeValueAsString(itemPriceList); return Response.ok(jsonResponse).build(); } } } catch (SQLException e) { e.printStackTrace(); String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}"; return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build(); } catch (JsonProcessingException e) { e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build(); } } @GET @Path("/{itemId}/stock") @Produces(MediaType.APPLICATION_JSON) public Response getItemStocksById( @PathParam("itemId") String itemId, @QueryParam("dbHost") String dbHost) { if (itemId == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build(); } else if (itemId.length() < 6) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build(); } if (dbHost == null) { return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build(); } DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) { String query = "SELECT organization_id,rtl_loc_id,inv_location_id,bucket_id,item_id, unitcount,inventory_value,create_date, create_user_id,update_date , update_user_id " + "FROM dtv.inv_stock_ledger_acct " + "WHERE organization_id = 1 AND item_id LIKE ?"; logger.info(query); try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) { // Concatenate % to parameter itemId statement.setString(1, itemId + "%"); try (ResultSet resultSet = statement.executeQuery()) { List itemStockList = new ArrayList<>(); while (resultSet.next()) { ItemStock itemStock = mapResultSetToItemStockDetails(resultSet); itemStockList.add(itemStock); } ObjectMapper objectMapper = new ObjectMapper(); String jsonResponse = objectMapper.writeValueAsString(itemStockList); return Response.ok(jsonResponse).build(); } } } catch (SQLException e) { e.printStackTrace(); String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}"; return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build(); } catch (JsonProcessingException e) { e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build(); } } private Item mapResultSetToItem(ResultSet resultSet) throws SQLException { Item item = new Item(); item.setOrganizationId(resultSet.getLong("ORGANIZATION_ID")); item.setItemId(resultSet.getString("ITEM_ID")); item.setOrgCode(resultSet.getString("ORG_CODE")); item.setOrgValue(resultSet.getString("ORG_VALUE")); item.setName(resultSet.getString("NAME")); item.setDescription(resultSet.getString("DESCRIPTION")); item.setMerchLevel1(resultSet.getString("MERCH_LEVEL_1")); item.setMerchLevel2(resultSet.getString("MERCH_LEVEL_2")); item.setMerchLevel3(resultSet.getString("MERCH_LEVEL_3")); item.setMerchLevel4(resultSet.getString("MERCH_LEVEL_4")); item.setListPrice(resultSet.getInt("LIST_PRICE")); item.setMeasureReqFlag(resultSet.getInt("MEASURE_REQ_FLAG")); item.setItemLevelCode(resultSet.getString("ITEM_LVLCODE")); item.setParentItemId(resultSet.getString("PARENT_ITEM_ID")); item.setNotInventoriedFlag(resultSet.getInt("NOT_INVENTORIED_FLAG")); item.setSerializedItemFlag(resultSet.getInt("SERIALIZED_ITEM_FLAG")); item.setItemTypeCode(resultSet.getString("ITEM_TYPCODE")); item.setDtvClassName(resultSet.getString("DTV_CLASS_NAME")); item.setDimensionSystem(resultSet.getString("DIMENSION_SYSTEM")); item.setDisallowMatrixDisplayFlag(resultSet.getInt("DISALLOW_MATRIX_DISPLAY_FLAG")); item.setItemMatrixColor(resultSet.getString("ITEM_MATRIX_COLOR")); item.setDimension1(resultSet.getString("DIMENSION1")); item.setDimension2(resultSet.getString("DIMENSION2")); item.setDimension3(resultSet.getString("DIMENSION3")); item.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM")); item.setCreateDate(resultSet.getDate("CREATE_DATE")); item.setCreateUserId(resultSet.getString("CREATE_USER_ID")); item.setUpdateDate(resultSet.getDate("UPDATE_DATE")); item.setUpdateUserId(resultSet.getString("UPDATE_USER_ID")); return item; } private ItemOption mapResultSetToItemOptionDetails(ResultSet resultSet) throws SQLException { ItemOption itemOption = new ItemOption(); itemOption.setItemId(resultSet.getString("ITEM_ID")); itemOption.setLevelCode(resultSet.getString("LEVEL_CODE")); itemOption.setLevelValue(resultSet.getString("LEVEL_VALUE")); itemOption.setItemAvailabilityCode(resultSet.getString("ITEM_AVAILABILITY_CODE")); itemOption.setTaxGroupId(resultSet.getString("TAX_GROUP_ID")); itemOption.setVendor(resultSet.getString("VENDOR")); itemOption.setSeasonCode(resultSet.getString("SEASON_CODE")); itemOption.setCreateDate(resultSet.getDate("CREATE_DATE")); itemOption.setCreateUserId(resultSet.getString("CREATE_USER_ID")); itemOption.setUpdateDate(resultSet.getDate("UPDATE_DATE")); itemOption.setUpdateUserId(resultSet.getString("UPDATE_USER_ID")); return itemOption; } private ItemPrice mapResultSetToItemPriceDetails(ResultSet resultSet) throws SQLException { ItemPrice itemPrices = new ItemPrice(); itemPrices.setItemId(resultSet.getString("ITEM_ID")); itemPrices.setLevelCode(resultSet.getString("LEVEL_CODE")); itemPrices.setLevelValue(resultSet.getString("LEVEL_VALUE")); itemPrices.setItmPricePropertyCode(resultSet.getString("ITM_PRICE_PROPERTY_CODE")); itemPrices.setEffectiveDate(resultSet.getDate("EFFECTIVE_DATE")); itemPrices.setExpirationDate(resultSet.getDate("EXPIRATION_DATE")); itemPrices.setPrice(resultSet.getDouble("PRICE")); itemPrices.setPriceQty(resultSet.getDouble("PRICE_QTY")); itemPrices.setExternalId(resultSet.getString("EXTERNAL_ID")); itemPrices.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM")); itemPrices.setCreateDate(resultSet.getDate("CREATE_DATE")); itemPrices.setCreateUserId(resultSet.getString("CREATE_USER_ID")); itemPrices.setUpdateDate(resultSet.getDate("UPDATE_DATE")); itemPrices.setUpdateUserId(resultSet.getString("UPDATE_USER_ID")); return itemPrices; } private ItemStock mapResultSetToItemStockDetails(ResultSet resultSet) throws SQLException { ItemStock itemStock = new ItemStock(); itemStock.setOrganizationId(resultSet.getString("ORGANIZATION_ID")); itemStock.setRtlLocId(resultSet.getString("RTL_LOC_ID")); itemStock.setInvLocationId(resultSet.getString("INV_LOCATION_ID")); itemStock.setBucketId(resultSet.getString("BUCKET_ID")); itemStock.setItemId(resultSet.getString("ITEM_ID")); itemStock.setUnitCount(resultSet.getInt("UNITCOUNT")); itemStock.setInventoryValue(resultSet.getDouble("INVENTORY_VALUE")); itemStock.setCreateDate(resultSet.getDate("CREATE_DATE")); itemStock.setCreateUserId(resultSet.getString("CREATE_USER_ID")); itemStock.setUpdateDate(resultSet.getDate("UPDATE_DATE")); itemStock.setUpdateUserId(resultSet.getString("UPDATE_USER_ID")); return itemStock; } }