Untitled

 avatar
unknown
javascript
a month ago
3.2 kB
6
Indexable
async function getAllWarehouses(limit, lastEvaluatedKey, user_id, user_role) {
  if (!user_id || !user_role) {
    return {
      statusCode: 400,
      body: JSON.stringify({ message: "Missing user_id or user_role" }),
      headers
    };
  }
  try {
    let items = [];
    let params;
    let req;
    const lastEval = lastEvaluatedKey ? JSON.parse(decodeURIComponent(lastEvaluatedKey)) : null;
    if (user_role === "admin") {
      params = {
        TableName: process.env.WAREHOUSE_TABLE,
        Limit: limit,
        ExclusiveStartKey: lastEval
      };
      req = new import_client_dynamodb.ScanCommand(params);
      const res = await dynamodb.send(req);
      items = res.Items || [];
      const response = {
        items,
        lastEvaluatedKey: res.LastEvaluatedKey || null,
        user_id,
        user_role
      };
      return {
        statusCode: 200,
        body: JSON.stringify(response),
        headers
      };
    } else {
      if (user_role === "manager") {
        params = {
          TableName: process.env.MANAGER,
          KeyConditionExpression: "user_id = :user_id",
          ExpressionAttributeValues: {
            ":user_id": { S: user_id },
          },
          Limit: limit,
          ExclusiveStartKey: lastEval
        };
        req = new import_client_dynamodb.QueryCommand(params);
      }else if (user_role === "owner") {
        params = {
          TableName: process.env.WAREHOUSE_OWNER_TABLE,
          KeyConditionExpression: "user_id = :user_id",
          ExpressionAttributeValues: {
            ":user_id": { S: user_id },
          },
          Limit: limit,
          ExclusiveStartKey: lastEval,
        };
        req = new import_client_dynamodb.QueryCommand(params); 
      } else {
        return {
          statusCode: 400,
          body: JSON.stringify({ message: "Invalid user role" }),
          headers
        };
      }
      const res = await dynamodb.send(req);
      const resItem = res.Items || [];
      for (const warehouse of resItem[0]?.warehouse_ids?.L || []) {
        const warehouse_id = warehouse.S;
        if (!warehouse_id) {
          continue;
        }
        const warehouseParams = {
          TableName: process.env.WAREHOUSE_TABLE,
          KeyConditionExpression: "warehouse_id = :warehouse_id",
          ExpressionAttributeValues: {
            ":warehouse_id": { S: warehouse_id }
          }
        };
        const warehouseReq = new import_client_dynamodb.QueryCommand(warehouseParams);
        const warehouseResp = await dynamodb.send(warehouseReq);
        items = items.concat(warehouseResp.Items || []);
      }
      const response = {
        items,
        lastEvaluatedKey: res.LastEvaluatedKey || null,
        user_id,
        user_role
      };
      return {
        statusCode: 200,
        body: JSON.stringify(response),
        headers
      };
    }
  } catch (error) {
    console.error("Error scanning warehouse table:", error);
    return {
      statusCode: 500,
      body: JSON.stringify({ message: "Could not fetch data. " + error }),
      headers
    };
  }
}
Editor is loading...
Leave a Comment