검색조건 날짜 이용시 기간 최대일자 제한

날짜 기간을 설정하여 데이터를 조회할때가 있습니다.

이때 기간의 최대일자를 제한하고 싶다면 아래와 같이 사용하실 수 있습니다.

사용한 주요 기능

  • requestSubmitFn
  • blocks.id
  • blocks.hidden
  • defaultValueFn
  • resetButton

예제 YAML

menus:
- path: pages/apDTBK
  name: 기간 범위 초과시 조회 중지
pages:
- path: pages/apDTBK
  blocks:
    - type: query
      resource: mysql.qa
      id: query2
      sqlType: select
      sql: >
        SELECT :created_at1, :created_at2
      hidden: true
      params:
      - key: created_at1
        hidden: true
      - key: created_at2
        hidden: true      

    - type: query 
      resource: mysql.qa
      id: query1
      sqlType: select
      sql: >
        SELECT * FROM properties WHERE created_at >= :created_at1 and created_at < :created_at2
      params:
      - key: created_at1
        format: date
        defaultValueFn: |
          return moment().add(-14, 'days').format('YYYY-MM-DD')
      - key: created_at2
        format: date
        defaultValueFn: |
          return DateTime.now().toFormat('yyyy-MM-dd')
      resetButton: 
        label: 초기화
      requestSubmitFn: |
        // query2에서 받은 값을 가져옴
        const createdAt1 = new Date(query2.params.created_at1.value);
        const createdAt2 = new Date(query2.params.created_at2.value);

        // 날짜 차이를 계산 (밀리초 단위 -> 일 단위로 변환)
        const dateDiff = (createdAt2 - createdAt1) / (1000 * 60 * 60 * 24);

        // 180일 이상일 경우 에러 발생 및 쿼리 중지
        if (dateDiff > 180) {
          throw new Error('조회시 기간은 180일까지만 가능합니다.');
        }

        // query1 실행
        return true;

이외에 참고하실만한 자료 함께 공유드립니다.

관련하여 도움이 필요하시면 문의주세요.
감사합니다.