В JavaScript вызов RPC обрабатывает данные и возвращает ответ ДБ


У меня служба в больший набор микросервисов, что обработка вызова RPC. Моя функция в основном только разбирает по запросу, использует данные, чтобы вставить данные в нашей базе данных MongoDB, а затем возвращает данные, которые получил, хранящихся в базе данных (должны быть идемпотентными).

Функция Конечной Точки

type GAPFType = {
  facultyId: number,
  created: number,
  lastModified: number,
  status: Status,
  attachedDocuments: Array<DocumentType>
};

type CallbackType = {
  error: ?string,
  payload: ?GAPFType
};

const submitGAPFBackend = async (
  gapfRequest: GAPFType
): Promise<CallbackType> => {
  logger.info("Enter submitGAPFBackend with request body %j", gapfRequest);

  const { facultyId } = gapfRequest;
  if (facultyId === undefined) {
    logger.error("facultyId missing from request body: %j", gapfRequest);
    return invalidSubmitGAPFCallError;
  }

  const gapf = createSubmitGAPFObject(gapfRequest);
  logger.info("Request GAPF object: %j", gapf);

  try {
    const submittedForm = await GAPFApplication.submit(gapf);
    const submittedData = getSubmittedGAPF(submittedForm);
    logger.info("DB response with filtered data: %j", submittedData);

    const payload = GAPF.create(submittedData);
    logger.info("Response payload data: %j", payload);
    return { error: null, payload: payload };
  } catch (error) {
    logger.error("Error: %j", error.message);
    return { error: error, payload: null };
  }
};

Вспомогательные Функции

export const createSubmitGAPFObject = gapfRequest => {
  const now = getUNIXTimestamp();
  const {
    facultyId,
    status = "SUBMITTED",
    created = now,
    attachedDocuments = [{}]
  } = gapfRequest;

  return {
    facultyId: facultyId,
    created: created,
    lastModified: now,
    status: status,
    attachedDocuments: attachedDocuments
  };
};

export const getSubmittedGAPF = submittedForm => {
  return {
    facultyId: submittedForm.facultyId,
    created: submittedForm.created,
    lastModified: submittedForm.lastModified,
    status: submittedForm.status,
    attachedDocuments: submittedForm.attachedDocuments.map(doc => {
      // removing _id from document data
      return {
        name: doc.name,
        link: doc.link,
        attachedDate: doc.attachedDate
      };
    })
  };
};

export const invalidSubmitGAPFCallError = {
  error: {
    message: "facultyId missing from request body",
    status: grpc.status.INVALID_ARGUMENT
  },
  payload: null
};

export const getUNIXTimestamp = () => {
  return Math.floor(Date.now() / 1000);
};

Я не часто программы на JavaScript, так что я надеялся получить некоторую обратную связь на написание чище или более идиоматические код. Исходный код имеет комментарии, но я оставила их для краткости. И типа аннотации от потока.



Комментарии