# 페이지 설정

# Path 설정

메뉴에 맞는 페이지를 추가합니다.

select-configuration:
  # ...
  pages:
    - path: users/list
    - path: users/kakao
  # ...
1
2
3
4
5
6

# Block 기본 구조

path에는 여러개 block이 들어갑니다.

1개의 블록을 넣거나

select-configuration:
  # ...
  pages:
    # ...
    - path: users/list
      blocks:
        - type: query
          resource: mysql.qa
          name: 회원목록
          sql: > 
            SELECT *
            FROM user
            ORDER BY id DESC
            LIMIT 100
1
2
3
4
5
6
7
8
9
10
11
12
13
14

여러개 블록을 넣을 수 있습니다.

select-configuration:
  # ...
  pages:
    # ...
    - path: users/list
      blocks:
        - type: query
          resource: mysql.qa
          name: 회원목록
          autoload: true
          sql: > 
            SELECT *
            FROM user
            ORDER BY id DESC
            LIMIT 100

        - type: query
          resource: mysql.qa
          name: 회원목록 통계
          autoload: true
          sql: > 
            SELECT 
              COUNT(id) AS '전체가입자', 
              COUNT(provider_kakao_id) AS '카카오 가입자',
              (
                SELECT COUNT(id) FROM user
                WHERE created_at > NOW() - INTERVAL 7 DAY
              ) AS '최근 7일 가입자'
            FROM user
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

여러개 블록인 경우에 name에 따라 결과물이 표시됩니다.

# Block Table UI

array 결과물을 자동으로 테이블로 표시합니다.

각 컬럼을 클릭하여 정렬 가능합니다. (client-side)

숫자 데이터의 경우 우측정렬을 하고있습니다.

server-side sort, pagination 지원 예정

# Query Block

# resource

설정한 리소스를 입력하면 해당 데이터베이스에 쿼리합니다.

- type: query
  resource: mysql.dev
  name: 회원목록
  sql: SELECT * FROM user LIMIT 100
1
2
3
4

# sql

입력한 쿼리를 실행하여 결과값을 표시합니다.

여러줄 입력 가능합니다.

- type: query
  resource: mysql.dev
  name: 회원목록
  sql: > 
    SELECT * 
    FROM user 
    LIMIT 100
1
2
3
4
5
6
7

MultipleStatements, Transaction은 지원 예정

# params

파라메터를 입력받아서 조건에 이용합니다. (자세한 옵션은 아래 내용에 계속됩니다.)

여러개 추가 가능합니다. (key가 겹치지 않게 순서를 유의해주세요.)

- type: query
  resource: mysql.qa
  sql: >
    SELECT * FROM user 
    WHERE id = :uid
  name: 회원개별조회
  params:
    - key: uid
      label: 'ID'
      format: 'number'
1
2
3
4
5
6
7
8
9
10

# autoload

메뉴 진입시 바로 데이터를 불러오지 않고, 조회를 눌러야 불러오게 합니다.

autoload: true 켜져있는경우 '조회' 버튼은 감추어집니다.

- type: query
  resource: mysql.dev
  # autoload: true
  # autoload: false (default)
  name: 회원목록
  sql: SELECT * FROM user LIMIT 100
1
2
3
4
5
6

# Query Block에 parameter 넣기

- path: users/dm
  blocks:
    - type: query
      resource: mysql.qa
      sql: >
        SELECT id, 
          workspace_id AS '업체ID', 
          chat_id AS '채팅ID', 
          label AS '구분코드', 
          user_id AS '사용자ID', 
          created_at AS '시작일'
        FROM chat_message
        ORDER BY id DESC
        LIMIT 1000
    - type: query
      resource: mysql.qa
      sql: >
        SELECT id, 
          workspace_id AS '업체ID', 
          chat_id AS '채팅ID', 
          label AS '구분코드', 
          user_id AS '사용자ID', 
          created_at AS '시작일'
        FROM chat_message
        WHERE label = :l
        ORDER BY id DESC
      params:
        - key: l
          label: 분류코드
          # datalist:
          #   - CUS
          #   - EMP
          #   - NOTE
          dropdown:
            - CUS
            - EMP
            - NOTE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# datalist

# 페이지 검색조건을 여러개 쿼리에 이용하기

params를 페이지에 넣으면 됩니다. (쿼리 블록안에 넣으면 해당 블록에만 적용)

- path: workspaces/state
  params:
    - key: wid
      label: 'ID'
      format: 'number'
  blocks:
    - type: query
      resource: mysql.qa
      name: general info
      showSubmitButton: false
      sql: > 
        select id, name, created_at, public_domain, public_name from workspace
        where id = :wid
          
    - type: query
      resource: mysql.qa
      name: log
      showSubmitButton: false
      sql: > 
        select * from workspace_log
        where wid = :wid

    - type: query
      resource: mysql.qa
      name: profile
      showSubmitButton: false
      sql: > 
        select * from workspace_profile
        where workspace_id = :wid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# Query Block - INSERT

폼 입력을 받아 쿼리를 실행합니다.

- type: query
  resource: mysql.qa
  name: 추가
  sql: >
    INSERT INTO user
    SET email = :email, created_at = NOW()
  params:
    - key: email
1
2
3
4
5
6
7
8

# Query Block - UPDATE

폼 입력을 받아 쿼리를 실행합니다.

선택한 항목에 대해 쿼리가 필요한 경우 매번 ID를 직접 입력해야하기 때문에 '모달(팝업)'을 권장합니다.

- type: query
  resource: mysql.qa
  name: 쿠폰 이용기간 변경
  sql: >
    UPDATE user
    SET created_at = :c
    WHERE id = :id
  params:
    - key: c
      label: 만료날짜 (0000-00-00)
    - key: id
      label: 쿠폰ID
1
2
3
4
5
6
7
8
9
10
11
12

# Markdown Block

- path: subscriptions
  blocks:
    - type: markdown
      content: >
        1.  List item one.

            List item one continued with a second paragraph followed by an
            Indented block.

                $ ls *.sh
                $ mv *.sh ~/tmp

            List item continued with a third paragraph.

        2.  List item two continued with an open block.

            This paragraph is part of the preceding list item.

            1. This list is nested and does not require explicit item continuation.

              This paragraph is part of the preceding list item.

            2. List item b.

            This paragraph belongs to item two of the outer list.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# HTTP API Block

- type: http
  axios:
    method: GET
    url: https://gist.githubusercontent.com/eces/c267436ddeec8917b47ee666b0d5e955/raw/892877e7035c4f61e946848a3f6da7e9983cab15/test.json
  rowsPath: rows
1
2
3
4
5

# rowsPath

테이블에 표시할 array를 지정합니다.

{
  "message": "ok",
  "rows": [{
    "id": 1000,
    "name": "John"
  }, {
    "id": 1001,
    "name": "Kelly"
  }]
}
1
2
3
4
5
6
7
8
9
10

# POST parameter

querystring과 body json value에 파라메터가 입력됩니다.

- type: http
  axios:
    method: POST
    url: https://httpbin.org/anything?cid={{id}}
    data:
      '고객아이디': customer-{{id}}
  params:
    - key: id
      label: '고객ID (수신거부 대상자 처리)'
      format: 'number'
1
2
3
4
5
6
7
8
9
10

중첩된 키에 대해서도 파라메터가 입력됩니다.

- type: http
  name: POST yml request + yml params <String> replacement
  axios:
    method: POST
    url: https://httpbin.org/anything
    data:
      id: "{{id}}"
      rows: 
        - id: id-{{id}}
        - paramsInKey{{id}}: value
    headers:
      X-Custom-Header: Token {{id}}
    params:
      added_cid: added-{{id}}
  params:
    - key: id
      label: '고객ID (수신거부 대상자 처리)'
      format: 'number'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# JSON parameter

YAML 포맷이 아닌 JSON을 입력해도 파라메터가 입력됩니다.

- type: http
  name: POST yml request + json params <String> replacement
  axios:
    method: POST
    url: https://httpbin.org/anything
    data: >
      {
        "id": "{{id}}"
      }
    headers: >
      {
        "X-Custom-Header": "Token {{id}}"
      }
    params: >
      { 
        "added_cid": "added-{{id}}"
      }
  params:
    - key: id
      label: '고객ID (수신거부 대상자 처리)'
      format: 'number'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# JSON 에러표시

구문에러 Syntax Error는 아래와 같이 표시됩니다.

입력값이 숫자가 아닌 경우 아래와 같이 표시됩니다. param.format = number