UNPKG

@ckstack/ck-lib-models

Version:

ckstack default database table sequelize models

675 lines 74.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BASE_SCHEMA = void 0; const BASE_SCHEMA = { app: { name: 'tbl_app', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_app` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `name` VARCHAR(128) NOT NULL COMMENT '앱 이름', \ `package_name` VARCHAR(128) NOT NULL COMMENT '앱 구분을 위한 패키지명', \ `api_key` VARCHAR(32) NOT NULL COMMENT '앱 구분을 위한 api key', \ `api_secret` VARCHAR(32) NOT NULL COMMENT '앱 사용을 위한 비밀키', \ `terminal_type` TINYINT(3) UNSIGNED NULL DEFAULT '1' COMMENT '앱을 사용하는 터미널 타입. 1:Web, 2:Android, 3:iOS', \ `description` VARCHAR(255) NULL DEFAULT NULL COMMENT '앱 설명', \ `status` TINYINT(3) UNSIGNED NULL DEFAULT '1' COMMENT '활성화 상태. 1:Enable, 2:Pause, 3:Disable', \ `file_id` INT(11) UNSIGNED NULL DEFAULT '0' COMMENT '앱 프로필 파일', \ `delete_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '데이터 삭제 여부. 1: Yes(삭제됨), 2: No(삭제 되지 않음)', \ `gate` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '다른 앱으로 전환하는 gate app 인지 여부. 1: Yes, 2: No', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ UNIQUE INDEX `idx_api_key` USING HASH (`api_key`)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = 'Rest API 를 사용 하기 위한 App 테이블' \ ", }, appVersion: { name: 'tbl_app_version', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_app_version` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `app_id` INT(11) UNSIGNED NOT NULL COMMENT '앱 아이디. tbl_app.id', \ `version` INT UNSIGNED NOT NULL COMMENT '버전', \ `display_version` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '유저에게 보여줄 버전. 1.0.0 형태로 보여 줄 수 있게 한다.', \ `require_update` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '필수 업데이트 여부. 1:Yes, 2:No', \ `download_url` TEXT NULL DEFAULT NULL COMMENT '다운로드 가능한 URL', \ `description` TEXT NULL DEFAULT NULL COMMENT '버전 설명', \ `delete_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '데이터 삭제 여부. 1: Yes(삭제됨), 2: No(삭제 되지 않음)', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ INDEX `idx_app_id` (`app_id` ASC), \ UNIQUE INDEX `idx_version` (`app_id` ASC, `version` ASC), \ CONSTRAINT `fk_tbl_app_version` \ FOREIGN KEY (`app_id`) \ REFERENCES `tbl_app` (`id`) \ ON DELETE CASCADE) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '앱 버전 테이블' \ ", }, user: { name: 'tbl_user', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_user` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `user_id` VARCHAR(128) NOT NULL COMMENT '유저 아이디. ', \ `password` VARCHAR(128) NOT NULL COMMENT '로그인 비밀번호', \ `name` VARCHAR(128) NOT NULL COMMENT '유저 이름. full name', \ `nickname` VARCHAR(128) NULL DEFAULT NULL COMMENT '유저 별명', \ `gender` TINYINT(3) UNSIGNED NOT NULL DEFAULT '3' COMMENT '성별. 1: male, 2: female, 3: unknown, 4: no comment', \ `birth` CHAR(8) NULL DEFAULT NULL COMMENT '생일 정보. 생일은 timezone 상관 없이 동일한 날짜 여야 하기 때문에, char 타입으로 설정됨.', \ `time_zone` VARCHAR(32) NOT NULL DEFAULT 'Asia/Seoul' COMMENT 'time zone 텍스트값.', \ `country_code` VARCHAR(8) NOT NULL DEFAULT 'KR' COMMENT 'ISO 3166-1 alpha2 국가 코드. 대문자로 저장.', \ `city` VARCHAR(45) NULL DEFAULT NULL COMMENT '주소 정보중 시 정보', \ `province` VARCHAR(45) NULL DEFAULT NULL COMMENT '주소 정보중 주 정보.', \ `address1` VARCHAR(128) NULL DEFAULT NULL COMMENT '주소1', \ `address2` VARCHAR(255) NULL DEFAULT NULL COMMENT '주소2', \ `zip_code` VARCHAR(8) NULL DEFAULT NULL COMMENT '우편번호', \ `email_address` VARCHAR(128) NOT NULL COMMENT '메일 주소', \ `country_phone_number` VARCHAR(8) NULL DEFAULT '+82' COMMENT '국가 전화 번호. 앞에 + 포함해서 입력해야 한다.', \ `phone_number` VARCHAR(32) NULL DEFAULT NULL COMMENT '일반 전화 번호', \ `mobile_phone_number` VARCHAR(32) NULL DEFAULT NULL COMMENT '휴대폰 번호', \ `fax_number` VARCHAR(32) NULL DEFAULT NULL COMMENT '팩스 번호', \ `email_confirm` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT '메일 주소 확인 여부. 1:Yes, 2:No', \ `description` TEXT NULL DEFAULT NULL COMMENT '유저 설명', \ `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '활성화 상태. 1:Enable, 2:Pause, 3:Disable', \ `file_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '유저 프로필 파일 시리얼 넘버. tbl_file.id', \ `last_login_date` DATETIME NULL DEFAULT NULL COMMENT '최종 로그인 시간.', \ `change_password_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '패스워드 변경일.', \ `login_fail_count` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '로그인 연속 실패 카운트. 로그인 성공하면 0 으로 초기화 된다.', \ `template_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '템플릿 아이디', \ `extra` JSON NULL DEFAULT NULL COMMENT '유저 부가 정보. JSON 형태로 저장됨.', \ `delete_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '데이터 삭제 여부. 1: Yes(삭제됨), 2: No(삭제 되지 않음)', \ `reserve1` VARCHAR(128) NULL DEFAULT NULL COMMENT '예약 칼럼1', \ `reserve2` VARCHAR(128) NULL DEFAULT NULL COMMENT '예약 칼럼2', \ `reserve3` VARCHAR(255) NULL DEFAULT NULL COMMENT '예약 칼럼3', \ `reserve4` INT(11) NOT NULL DEFAULT '0' COMMENT '예약 칼럼4', \ `reserve5` INT(11) NOT NULL DEFAULT '0' COMMENT '예약 칼럼5', \ `reserve6` INT(11) NOT NULL DEFAULT '0' COMMENT '예약 칼럼6', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ UNIQUE INDEX `idx_user_id` USING HASH (`user_id`), \ INDEX `idx_email_address` (`email_address` ASC), \ INDEX `idx_c_date` (`c_date` ASC), \ INDEX `idx_nickname` (`nickname` ASC), \ INDEX `idx_name` (`name` ASC), \ INDEX `idx_name2` (`name` ASC, `email_address` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8mb4 \ COLLATE = utf8mb4_unicode_ci \ COMMENT = '유저 테이블' \ ", }, role: { name: 'tbl_role', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_role` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `name` VARCHAR(128) NOT NULL COMMENT '그룹명', \ `role_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '100' COMMENT 'role 구분. 1: root, 100: user', \ `default_group` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT '디폴트 그룹 여부. 아무런 선택이 없을때 디폴트로 사용할 그룹 여부. 1:Yes, 2:No', \ `description` VARCHAR(255) NULL DEFAULT NULL COMMENT '그룹 설명', \ `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '활성화 상태. 1:Enable, 3:Disable', \ `related_app_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '접속 토큰 발급시 사용하는 앱 자동 변경시 자동 변경될 앱 시리얼 넘버. tbl_app.id. 0 이면 연계된 앱 없음.', \ `delete_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '데이터 삭제 여부. 1: Yes(삭제됨), 2: No(삭제 되지 않음)', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '유저의 role 테이블. Role 의 종류, 즉 role_type 은 한정 되어 있고, 한정된 종류에서 여러개 생성 할 수 있다.' \ ", }, accessToken: { name: 'tbl_access_token', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_access_token` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `user_srl` INT(11) UNSIGNED NOT NULL COMMENT '유저 시리얼 넘버. tbl_user.id', \ `app_id` INT(11) UNSIGNED NOT NULL COMMENT '앱 시리얼 넘버. 토큰이 발급된 앱의 시리얼 넘버가 입력된다. tbl_app.id', \ `role_id` INT(11) UNSIGNED NOT NULL COMMENT '접속 토큰과 연결된 role id. tbl_role.id\n', \ `token` VARCHAR(255) NOT NULL COMMENT '접속 토큰. Jwt 형태의 토큰', \ `issue_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '토큰 발급 시간', \ `expire_date` DATETIME NOT NULL COMMENT '접속 토큰 만료 시간', \ `template_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '템플릿 아이디. tbl_template.id', \ `extra` JSON NULL COMMENT '부가 정보. json 포맷', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일. null 이면 수정된 적 없음', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` (`rid` ASC), \ INDEX `idx_user_srl` (`user_srl` ASC), \ INDEX `idx_token` (`token` ASC), \ INDEX `idx_issue_date` (`issue_date` ASC), \ INDEX `idx_app_id` (`app_id` ASC), \ INDEX `idx_role_id` (`role_id` ASC), \ INDEX `idx_user_app_role` (`user_srl` ASC, `app_id` ASC, `role_id` ASC), \ CONSTRAINT `fk_tbl_access_token_1` FOREIGN KEY (`app_id`) REFERENCES `tbl_app` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION, \ CONSTRAINT `fk_tbl_access_token_2` FOREIGN KEY (`user_srl`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION, \ CONSTRAINT `fk_tbl_access_token_3` FOREIGN KEY (`role_id`) REFERENCES `tbl_role` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '접속 토큰 관리 테이블' \ ", }, userRole: { name: 'tbl_user_role', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_user_role` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, \ `user_id` INT(11) UNSIGNED NOT NULL COMMENT '유저 시리얼 넘버. tbl_user.id', \ `role_id` INT(11) UNSIGNED NOT NULL COMMENT '사용자 권한 시리얼 넘버. tbl_role.id', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ PRIMARY KEY (`id`), \ INDEX `idx_role_id` (`role_id` ASC), \ UNIQUE INDEX `idx_user_role` (`user_id` ASC, `role_id` ASC), \ CONSTRAINT `fk_tbl_user_group` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE, \ CONSTRAINT `fk_tbl_user_group_1` FOREIGN KEY (`role_id`) REFERENCES `tbl_role` (`id`) ON DELETE CASCADE) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '유저, 그룹 매핑' \ ", }, userApps: { name: 'tbl_user_apps', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_user_apps` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `user_id` INT(11) UNSIGNED NOT NULL COMMENT 'tbl_user.id', \ `app_id` INT(11) UNSIGNED NOT NULL COMMENT 'tbl_app.id', \ `template_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '템플릿 아이디. tbl_template.id', \ `extra` JSON NULL DEFAULT NULL COMMENT '개인별 앱에 대한 부가 설정. JSON 형태로 저장되며 아래 형태를 따른다.\n{\n “name_alias”: {string} 특정 앱에서 유저를 표시하는 nick. 특별한 값을 주지 않으면 tbl_user 의 full_name 과 동일하게 사용한다.\n “noti”: {number} 앱 알림(notification) 설정. 1:수신하지 않음, 2:소리, 3:진동, 4:무음\n}', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일. null 이면 업데이트 한번도 하지 않았다는 의미', \ PRIMARY KEY (`id`), \ INDEX `idx_app_id` USING HASH (`app_id`), \ INDEX `idx_user_id` USING HASH (`user_id`), \ UNIQUE INDEX `idx_user_app` (`user_id` ASC, `app_id` ASC), \ CONSTRAINT `fk_tbl_user_apps` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE, \ CONSTRAINT `fk_tbl_user_apps_1` FOREIGN KEY (`app_id`) REFERENCES `tbl_app` (`id`) ON DELETE CASCADE) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '유저가 사용하는 앱 매핑 테이블. 이 매핑 테이블은 push 메시지 발송을 위해서 존재 한다.' \ ", }, userTerminal: { name: 'tbl_user_terminal', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_user_terminal` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `user_id` INT(11) UNSIGNED NOT NULL COMMENT '유저 시리얼 넘버. tbl_user.id', \ `app_id` INT(11) UNSIGNED NOT NULL COMMENT '앱 시리얼 넘버. tbl_app.id', \ `terminal_id` VARCHAR(64) NOT NULL COMMENT '터미널 구분 리소스 아이디. 서버에서 생성 하지 않고 터미널에서 올려 주는 값이다.', \ `terminal_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT '앱을 사용하는 터미널 구분. 1:Web, 2:Android, 3:iOS', \ `terminal_version` VARCHAR(255) NULL DEFAULT NULL COMMENT '앱 이용시 사용하는 터미널 버전. 브라우저라면 UA, 안드로이드라면 안드로이드 버전, iOS 라면 iOS 버전', \ `push_token` TEXT NOT NULL COMMENT 'push 시에 사용되는 push 토큰. android 때문에 text 형태로 크게 잡음.', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일. null 이면 업데이트 한번도 하지 않았다는 의미', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_terminal_id` USING HASH (`terminal_id`, `user_id`, `app_id`), \ INDEX `idx_user_id` (`user_id` ASC), \ INDEX `idx_app_id` (`app_id` ASC), \ CONSTRAINT `fk_tbl_user_terminal_1` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, \ CONSTRAINT `fk_tbl_user_terminal_2` FOREIGN KEY (`app_id`) REFERENCES `tbl_app` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '유저가 앱을 사용시 이용하는 터미널 종류 테이블. 이 데이터를 바탕으로 push 를 날려 줄 수 있다.' \ ", }, menus: { name: 'tbl_menus', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_menus` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `role_id` INT(11) UNSIGNED NOT NULL COMMENT 'tbl_role.id', \ `parent_menu_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Tree 구조로 메뉴가 구성 될때 상위 메뉴의 아이디, 0 이면 가장 상위 메뉴임.', \ `name` VARCHAR(255) NOT NULL COMMENT '메뉴명', \ `url_path` TEXT NOT NULL COMMENT '메뉴의 url path. query string 을 포함 할 수 있다. 예) /hello?tid=1. 앱 일 경우 페이지 아이디 또는 딥링크로 사용 하면 된다.', \ `status` TINYINT(3) UNSIGNED NULL DEFAULT '1' COMMENT '활성화 상태. 1:Enable, 3:Disable', \ `template_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Extra 에 사용되는 템플릿 아이디. tbl_template.id', \ `extra` JSON NULL DEFAULT NULL COMMENT '메뉴 부가 정보. JSON 형태로 저장됨. 메뉴 라벨을 다국어로 사용할때, {lang:{“ko-KR”: “안녕”, “en-US”: “Hello”}} 와 같이 저장 하면 된다.', \ `depth` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Tree 에서 depth. 0 부터 시작 한다.', \ `list_order` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '메뉴의 임의 위치 조정. 임의 조정은 asc 로 조정 되며, 0 이 가장 상위 메뉴임.', \ `rc_page_name` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'React 라우팅에서 패스와 매핑되는 컴포넌트명. UI 에서 생성된 페이지값만 사용 해야 한다. 즉, 우선 UI에서 페이지를 만들고 값을 정의 해야 한다.', \ `rc_icon` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '메뉴의 아이콘. 사이드바에 메뉴를 보여 줄때, 텍스트 앞에 붙을 아이콘 구별로 주로 사용 한다.', \ `is_first_page` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '접근 했을 때, 최초로 보여줄 페이지 일지 여부. 1: Yes, 2: No', \ `reserve1` VARCHAR(128) NULL DEFAULT NULL COMMENT '예약 칼럼1', \ `reserve2` VARCHAR(128) NULL DEFAULT NULL COMMENT '예약 칼럼2', \ `reserve3` VARCHAR(255) NULL DEFAULT NULL COMMENT '예약 칼럼3', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ INDEX `idx_name` (`name` ASC), \ INDEX `idx_role_id` (`role_id` ASC), \ INDEX `idx_parent_menu_id` (`parent_menu_id` ASC), \ INDEX `idx_list_order` (`list_order` ASC), \ INDEX `idx_rc_page_name` (`rc_page_name` ASC), \ INDEX `idx_rc_icon` (`rc_icon` ASC), \ CONSTRAINT `fk_tbl_menus_1` FOREIGN KEY (`role_id`) REFERENCES `tbl_role` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '메뉴 테이블. 메뉴는 role, app 별로 설정 가능 하다.' \ ", }, mqttUser: { name: 'tbl_mqtt_user', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_mqtt_user` ( \ `id` INT NOT NULL AUTO_INCREMENT COMMENT '관리용 아이디', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `username` VARCHAR(32) NOT NULL COMMENT 'Mqtt 접근 username', \ `pw` VARCHAR(512) NULL COMMENT 'Mqtt 접근 비밀번호', \ `pw_crypt` VARCHAR(512) NOT NULL COMMENT '유저에게 알려 주기 위해, aes 로 암호화 된 비밀번호', \ `pw_key` VARCHAR(32) NOT NULL COMMENT 'pw_crypt 를 만들기 위한 aes secret key', \ `super` INT(1) NULL DEFAULT 0 COMMENT 'Super 유저 여부. 1 이면 super 유저. super 값이 1 이면 acl 체크를 하지 않고, 0 이면 acl 체크를 한다.', \ `host` VARCHAR(128) NOT NULL COMMENT 'Mqtt broker IP 또는 도메인', \ `port` INT UNSIGNED NOT NULL DEFAULT 1883 COMMENT 'Mqtt broker 포트', \ `protocol` VARCHAR(8) NOT NULL DEFAULT 'mqtt' COMMENT 'Mqtt broker 연결 프로토콜. mqtt, mqtts, wss, ws 를 지원 한다.', \ `is_public` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '외부 공개 여부. 1 이면, Rest API 를 통해서 리턴 되는 mqtt broker 정보 목록에 포함 된다. 1: Yes, 2: No', \ `description` TEXT NULL COMMENT '설명', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_username` (`username` ASC), \ UNIQUE INDEX `idx_rid` (`rid` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = 'Mosquitto 연결 할 수 있는 username, password 설정 테이블' \ ", }, mqttAcl: { name: 'tbl_mqtt_acl', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_mqtt_acl` ( \ `id` INT NOT NULL AUTO_INCREMENT COMMENT '관리용 아이디', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `user` INT NOT NULL COMMENT 'users_t.id', \ `topic` VARCHAR(256) NOT NULL COMMENT '유저가 사용 할 수 있는 토픽. # 이면 모든 토픽 사용 가능', \ `rw` INT(1) NOT NULL DEFAULT 1 COMMENT '유저의 권한. rw, bitmask: 1 is read, 2 is write, 3 is readwrite, 4 is subscribe. 2진수 계산법임. 리눅스 파일 권한 형태', \ `description` TEXT NULL COMMENT '설명', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_user_topic` (`user` ASC, `topic` ASC), \ UNIQUE INDEX `idx_rid` (`rid` ASC), \ CONSTRAINT `fk_user_acl` FOREIGN KEY (`user`) REFERENCES `tbl_mqtt_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) \ ENGINE = InnoDB \ COMMENT = 'Mosquitto 연결 할 수 있는 username account의 권한' \ ", }, files: { name: 'tbl_files', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_files` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `name` VARCHAR(64) NOT NULL COMMENT '파일명. 서버에서 임의로 생성한 파일명', \ `orig_name` VARCHAR(255) NOT NULL COMMENT '클라이언트에서 받은 파일명. 확장자명 포함임', \ `content_type` VARCHAR(128) NOT NULL COMMENT '파일의 컨텐츠 타입', \ `file_path` VARCHAR(255) NOT NULL COMMENT '서버에 저장된 원본 파일 절대 경로. S3에 파일이 업로드 된다면, 파일을 삭제 하고, empty string 으로 값을 설정 한다.', \ `file_url_path` VARCHAR(255) NOT NULL COMMENT '웹에서 접근 가능한 URL 경로. URL Path 임에 주의 한다.', \ `s3_bucket` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL COMMENT '파일이 S3에 존재하면 파일이 저장된 S3 버킷명', \ `s3_obj_key` VARCHAR(255) NULL DEFAULT NULL COMMENT '파일이 S3에 존재하면 파일이 저장된 S3 object key. 이 값 앞에 S3 버킷에 할당된 도메인을 붙이면 http 로 접근 가능 하다.', \ `s3_region` VARCHAR(64) NULL COMMENT '파일이 S3에 존재하면 파일이 저장된 S3 region. Aws 접근 URL을 만들기 위해서 필요하다.', \ `file_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '원본 파일 크기 바이트 사이즈', \ `width` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '원본 파일이 이미지 일때, 이미지 너비', \ `height` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '원본 파일이 이미지 일때 이미지 높이', \ `thumbnail_path` VARCHAR(255) NULL DEFAULT NULL COMMENT '원본 파일이 이미지 일때 서버에 저장된 썸네일 파일 절대 경로. S3에 파일이 업로드 된다면, 파일을 삭제 하고, empty string 으로 값을 설정 한다.', \ `thumbnail_url_path` VARCHAR(255) NULL DEFAULT NULL COMMENT '웹에서 접근 가능한 썸네일 파일 URL 경로. URL Path 임에 주의 한다.', \ `thumbnail_s3_bucket` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL COMMENT '파일이 이미지 일때, 썸네일 이미지가 S3에 존재하면 썸네일이 이미지가 저장된 S3 버킷명', \ `thumbnail_s3_obj_key` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL COMMENT '파일이 이미지 일때, 썸네일 이미지가 S3에 존재하면 썸네일이 이미지가 저장된 S3 object key. 이 값 앞에 S3 버킷에 할당된 도메인을 붙이면 http 로 접근 가능 하다.', \ `thumbnail_s3_region` VARCHAR(64) NULL COMMENT '파일이 S3에 존재하면 파일이 저장된 S3 region. Aws 접근 URL을 만들기 위해서 필요하다.', \ `thumbnail_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '원본 파일이 이미지 일때 썸네일 파일 바이트 크기', \ `thumbnail_width` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '원본 파일이 이미지 일때 썸네일 이미지 너비', \ `thumbnail_height` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '원본 파일이 이미지 일때 썸네일 이미지 높이', \ `description` VARCHAR(255) NULL DEFAULT NULL COMMENT '이미지 파일 설명', \ `ipaddress` VARCHAR(32) NOT NULL COMMENT '파일 업로드한 클라이언트 ip 주소. 입력하는 ipaddress 가 아니기 때문에 크기를 좀 크게 준다.', \ `used` JSON NULL DEFAULT NULL COMMENT '파일이 사용되는 곳. JSON 으로 저장되며, {테이블명:[row시리얼넘버목록]} 형태로 저장된다. {tbl_user:[1]} 이면 tbl_user 테이블의 id 1 번에서 사용함.', \ `user_id` VARCHAR(128) NULL DEFAULT NULL COMMENT '파일 업로드한 유저 아이디. 추후 참고용으로 필요 할 수 있어 추가함.', \ `deleted` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT '파일 삭제 여부. 1: 삭제, 2: 삭제 아님. 데이터 존재 유무 상관 없이 삭제 값으로 설정되면 삭제 된 것으로 취급 한다.', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ INDEX `idx_user_id` (`user_id` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8mb4 \ COLLATE = utf8mb4_unicode_ci \ COMMENT = '파일 테이블' \ ", }, fcmArrivalTmp: { name: 'tbl_fcm_arrival_tmp', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_fcm_arrival_tmp` ( \ `rid` CHAR(32) NOT NULL COMMENT 'Management resource id.', \ `yyyymm` INT UNSIGNED NOT NULL COMMENT 'FCM sending Year Month. yyyymm format. It will be partitioned by this column.', \ `retry_index` INT UNSIGNED NOT NULL COMMENT 'Index sent by fcm with the same message id', \ `user_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'User ID to receive FCM', \ `broadcast_id` CHAR(32) NOT NULL DEFAULT '' COMMENT 'ID for bundling push messages included in one request when sending a broadcast', \ `with_read_flag` TINYINT(3) NOT NULL DEFAULT '0' COMMENT 'It is used to include not only arrival, but also read. 0: arrival only, 1: arrival, read all done', \ `extra` JSON NULL COMMENT 'It is a value that can be set by read, and the value to be copied to tbl_fcm_history, tbl_fcm_history_tmp as it is when data is cleaned.', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Create date. Fcm message arrival time.', \ PRIMARY KEY (`rid`, `yyyymm`, `retry_index`), \ INDEX `idx_yyyymm` (`yyyymm` ASC), \ INDEX `idx_user_msg_id` (`yyyymm` ASC, `user_id` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id2` (`yyyymm` ASC, `retry_index` ASC, `user_id` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id3` (`yyyymm` ASC, `retry_index` ASC, `broadcast_id` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = 'Table to temporarily store arrival confirmation when fcm arrival confirmation occurs before insert in tbl_fcm_history_tmp due to DB speed issue' \ ", }, fcmHistoryTmp: { name: 'tbl_fcm_history_tmp', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_fcm_history_tmp` ( \ `rid` CHAR(32) NOT NULL COMMENT 'Management resource id.', \ `yyyymm` INT UNSIGNED NOT NULL COMMENT 'FCM sending Year Month. yyyymm format. It will be partitioned by this column.', \ `retry_index` INT UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Index sent by fcm with the same message id', \ `user_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '유저 구분이 있다면 유저 아이디(tbl_user.user_id), 만일 유저 구분 없이 발송되는 메시지라면 FCM 일 경우는 fcm token md5 한 값.', \ `fcm_msg_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Message ID obtained from Firebase after sending FCM. No ID when FCM sending fails or push via mqtt', \ `fcm_send_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT 'Push seding results. 1: Success, 2: Fail', \ `fcm_err_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'When FCM sending fails, error code. In case of push using mqtt, there is no value.', \ `fcm_err_msg` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'When FCM sending fails, error message. In case of push using mqtt, there is no value.', \ `arrival_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT 'Whether the Push has reached the recipient. 1: arrival, 2: not arrival', \ `read_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT 'Whether the recipient has read the push. 1: read, 2: not read', \ `limit_retry_count` INT UNSIGNED NOT NULL DEFAULT '5' COMMENT 'Maximum number of retries to send a message.', \ `arrival_date` DATETIME NULL COMMENT 'the time the message reached the recipient. If null, not reached.', \ `read_date` DATETIME NULL COMMENT 'Time the recipient viewed the message. If null, not read.', \ `fcm_msg` JSON NULL COMMENT 'FCM MulticastMessage data for resend. Since MulticastMessage is used when sending to multiple people, MulticastMessage is also used when sending to one person. It include fcm token. You can use the FCM resending data as it is. Do not resend if there is no value. In the case of push using mqtt, the published message.', \ `broadcast_id` CHAR(32) NOT NULL DEFAULT '' COMMENT 'ID for bundling push messages included in one request when sending a broadcast', \ `extra` JSON NULL COMMENT 'Extra values. Stores specific values (message read/confirm results, etc.) received through REST API', \ `push_vendor` VARCHAR(16) NOT NULL DEFAULT 'fcm' COMMENT 'push server division. fcm: gppgle fcm, mqtt: normal mqtt broker, aws_mqtt: AWS IOT Core mqtt broker', \ `client_id` VARCHAR(64) NULL DEFAULT '' COMMENT 'In the case of fcm, the ID of the client who uploaded the fcm token. The client ID is a value generated by the client and passed to the server.', \ `user_terminal_id` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fcm 발송 결과에 따라 tbl_user_terminal 데이터를 삭제 하기 위한 아이디. tbl_user_terminal.id 이고, cron 작업으로 삭제 하면 된다. 0 이면 tbl_user_terminal 에 없는 데이터 이다.', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Create date. Fcm send date.', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Update date. If c_date same, not updated.', \ PRIMARY KEY (`rid`, `yyyymm`, `retry_index`), \ INDEX `idx_user_id` (`user_id` ASC), \ INDEX `idx_yyyymm` (`yyyymm` ASC), \ INDEX `idx_c_date` (`c_date` ASC), \ INDEX `idx_user_msg_id` (`yyyymm` ASC, `user_id` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id2` (`yyyymm` ASC, `retry_index` ASC, `user_id` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id3` (`yyyymm` ASC, `retry_index` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id4` (`rid` ASC, `yyyymm` ASC, `retry_index` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = 'Temporary table to use when sending FCM. Data is moved to the tbl_fcm_history table two days after sending the message.' \ ", }, fcmHistory: { name: 'tbl_fcm_history', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_fcm_history` ( \ `rid` CHAR(32) NOT NULL COMMENT 'Management resource id.', \ `yyyymm` INT UNSIGNED NOT NULL COMMENT 'FCM sending Year Month. yyyymm format. It will be partitioned by this column.', \ `retry_index` INT UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Index sent by fcm with the same message id', \ `user_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '유저 구분이 있다면 유저 아이디(tbl_user.user_id), 만일 유저 구분 없이 발송되는 메시지라면 FCM 일 경우는 fcm token md5 한 값.', \ `fcm_msg_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Message ID obtained from Firebase after sending FCM. No ID when FCM sending fails or push via mqtt', \ `fcm_send_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT 'Push seding results. 1: Success, 2: Fail', \ `fcm_err_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'When FCM sending fails, error code. In case of push using mqtt, there is no value.', \ `fcm_err_msg` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'When FCM sending fails, error message. In case of push using mqtt, there is no value.', \ `arrival_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT 'Whether the Push has reached the recipient. 1: arrival, 2: not arrival', \ `read_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT 'Whether the recipient has read the push. 1: read, 2: not read', \ `limit_retry_count` INT UNSIGNED NOT NULL DEFAULT '5' COMMENT 'Maximum number of retries to send a message.', \ `arrival_date` DATETIME NULL COMMENT 'the time the message reached the recipient. If null, not reached.', \ `read_date` DATETIME NULL COMMENT 'Time the recipient viewed the message. If null, not read.', \ `fcm_msg` JSON NULL COMMENT 'FCM MulticastMessage data for resend. Since MulticastMessage is used when sending to multiple people, MulticastMessage is also used when sending to one person. It include fcm token. You can use the FCM resending data as it is. Do not resend if there is no value. In the case of push using mqtt, the published message.', \ `broadcast_id` CHAR(32) NOT NULL DEFAULT '' COMMENT 'ID for bundling push messages included in one request when sending a broadcast', \ `extra` JSON NULL COMMENT 'Extra values. Stores specific values (message read/confirm results, etc.) received through REST API', \ `push_vendor` VARCHAR(16) NOT NULL DEFAULT 'fcm' COMMENT 'push server division. fcm: gppgle fcm, mqtt: normal mqtt broker, aws_mqtt: AWS IOT Core mqtt broker', \ `client_id` VARCHAR(64) NULL DEFAULT '' COMMENT 'In the case of fcm, the ID of the client who uploaded the fcm token. The client ID is a value generated by the client and passed to the server.', \ `user_terminal_id` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fcm 발송 결과에 따라 tbl_user_terminal 데이터를 삭제 하기 위한 아이디. tbl_user_terminal.id 이고, cron 작업으로 삭제 하면 된다. 0 이면 tbl_user_terminal 에 없는 데이터 이다.', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Create date. Fcm send date.', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Update date. If c_date same, not updated.', \ PRIMARY KEY (`rid`, `yyyymm`, `retry_index`), \ INDEX `idx_user_id` (`user_id` ASC), \ INDEX `idx_yyyymm` (`yyyymm` ASC), \ INDEX `idx_c_date` (`c_date` ASC), \ INDEX `idx_user_msg_id` (`yyyymm` ASC, `user_id` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id2` (`yyyymm` ASC, `retry_index` ASC, `user_id` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id3` (`yyyymm` ASC, `retry_index` ASC, `broadcast_id` ASC), \ INDEX `idx_user_msg_id4` (`rid` ASC, `yyyymm` ASC, `retry_index` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = 'Data moved from table tbl_fcm_history_tmp' \ ", }, config: { name: 'tbl_config', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_config` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 아이디', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '값 명', \ `val` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '설정값. 숫자라면 사용하는 곳에서 cast 해서 사용 하도록 한다.', \ `type` TINYINT(3) UNSIGNED NOT NULL COMMENT '설정값 종류. 1: react 페이지 컴포넌트, 2: 템플릿 그룹, 3: antd icon, 4: 언어 코드', \ `description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '설명', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` (`rid` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '간단한 설정 값들' \ ", }, authCode: { name: 'tbl_auth_code', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_auth_code` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL, \ `code` VARCHAR(16) NOT NULL COMMENT '인증 코드. 중복된 인증 코드 사용 가능 하고, 중복된 값이 있다면, 생성일 desc 로 사용 한다.', \ `mobile_phone_number` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '휴대폰 번호 인증시, 인증 코드와 엮여 있는 휴대폰 번호', \ `email_address` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '이메일 주소 인증시, 인증 코드와 엮인 이메일 주소', \ `expire_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '인증 코드 만료 시간. 설정된 시간 이후에는 인증 코드 자동으로 폐기된 것으로 취급함.', \ `state` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1 COMMENT '인증 코드 사용 단계. 1: 발급됨. 사용 이전, 2: 인증 코드 확인 완료, 3: 인증 코드 사용 완료. 1-2-3 순서대로 단계가 변경됨.', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` (`rid` ASC), \ INDEX `idx_code1` (`code` ASC, `mobile_phone_number` ASC), \ INDEX `idx_code2` (`code` ASC, `email_address` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = 'Sms 나 이메일로 인증 코드 발송 기능을 사용할때 인증 코드 저장하는 테이블' \ ", }, confirmIp: { name: 'tbl_confirm_ip', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_confirm_ip` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `role_rid` CHAR(32) NOT NULL COMMENT 'Role 리소스 아이디. tbl_role.rid', \ `cidr` VARCHAR(32) NOT NULL COMMENT '허용/차단할 CIDR. * 이면 모두 허용/차단 된다. 적용 순서는 개별을 우선하고 * 는 최종으로 적용 한다.', \ `deny` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '허용/차단 구분. 1:차단(Yes), 2:허용(No)', \ `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT 3 COMMENT '활성 여부. 1: Enable, 3: Disable', \ `description` TEXT NULL COMMENT '허용/차단된 이유', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` (`rid` ASC), \ UNIQUE INDEX `idx_role_rid` (`role_rid` ASC, `cidr` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '로그인 허용/차단 CIDR 목록. role 에 따라 다르게 처리 가능 하다. Asterica 차단이 없으면 기본적으로 모두 허용 하게 된다.' \ ", }, reservedUserId: { name: 'tbl_reserved_user_id', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_reserved_user_id` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `user_id` VARCHAR(128) NOT NULL COMMENT '예약 또는 거부된 유저 아이디', \ `created_by` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '데이터를 넣은 관리자의 유저 아이디', \ `status` TINYINT(3) UNSIGNED NOT NULL COMMENT '상태. 1: Enable, 3: Disable', \ `description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '예약 또는 거부된 이유 설명', \ `delete_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT 2 COMMENT '데이터 삭제 여부. 1: Yes(삭제됨), 2: No(삭제 되지 않음)', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` (`rid` ASC), \ UNIQUE INDEX `idx_user_id` (`user_id` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = 'API 를 통해서 가입 불가능 하도록 하기 위한 예약된 유저 아이디 또는 거부된 유저 아이디' \ ", }, sequence: { name: 'tbl_sequence', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_sequence` ( \ `name` CHAR(16) NOT NULL COMMENT '시퀀스명', \ `currval` BIGINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '시퀀스값', \ PRIMARY KEY (`name`)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '임의 Sequence' \ ", }, template: { name: 'tbl_template', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_template` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `group_name` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '템플릿 그룹 구분. tbl_config 에서 템플릿 그룹으로 등록된 val 값', \ `name` VARCHAR(128) NOT NULL COMMENT '템플릿명', \ `extra` JSON NULL DEFAULT NULL COMMENT '템플릿 내용', \ `description` TEXT NULL DEFAULT NULL COMMENT '템플릿 설명', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일. null 이면 업데이트 한번도 하지 않았다는 의미', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` (`rid` ASC), \ UNIQUE INDEX `idx_group_name` (`group_name` ASC, `name` ASC), \ FULLTEXT INDEX `idx_name` (`name`)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '데이터 템플릿 테이블. 템플릿에 대한 설명은 ms-core 의 readme.md 를 참고 한다.' \ ", }, urlKey: { name: 'tbl_url_key', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_url_key` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '리소스 아이디', \ `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '200' COMMENT '링크키 타입. 1: 이메일 인증, 2: 비밀번호 초기화(원하는 비밀번호가 아니라 임의의 값으로 초기화), 3: 비밀번호 변경(원하는 비밀번호로 변경), 200:기타', \ `expire_date` DATETIME NOT NULL COMMENT '링크키 만료일', \ `template_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '템플릿 시리얼 넘버. tbl_template.id', \ `extra` JSON NULL DEFAULT NULL COMMENT '웹페이지에서 보여줄 데이터', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일.', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일.', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` (`rid` ASC)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '회원가입시 이메일 확인, 비밀번호 초기화는 메일로 웹페이지 접근 가능한 URL 링크를 발송 하는데, 이 링크를 눌렀을때 접근하는 웹페이지와 연결된 키 저장 테이블 이다.' \ ", }, board: { name: 'tbl_board', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_board` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '외부에 공개되는 게시판 리소스 아이디. dash를 삭제 한 uuid 를 사용 한다.', \ `name` VARCHAR(128) NULL DEFAULT NULL COMMENT '게시판(depth1) 이름', \ `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '게시판 상태. 1:Enable, 3:Disable', \ `description` TEXT NULL DEFAULT NULL COMMENT '게시판 설명', \ `list_order` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '게시판 순서. Asc 순서대로 정렬.', \ `template_rid` CHAR(32) NOT NULL DEFAULT '' COMMENT '템플릿 리소스 아이디.', \ `extra` JSON NULL COMMENT '부가 정보', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일. unix timestamp', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일. null 이면 업데이트 한번도 하지 않았다는 의미', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ INDEX `idx_list_order` (`list_order` ASC), \ FULLTEXT INDEX `idx_name` (`name`)) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '게시판(depth1) 테이블. app_id 에 따라 공용 게시판, 특정 앱 사용 게시판으로 구별 된다. app_id 는 FK로 엮어 놓지 않았기 때문에 앱 삭제시 프로그램에서 삭제 해야 한다. company_id 는 FK로 엮어 놓지 않았기 때문에 회사 삭제시 프로그램에서 삭제 해야 한다. app_id, company_id 값이 모두 0 이 아니면 특정 앱, 특정 회사에서만 사용하는 게시판 이라는 의미 이다.' \ ", }, category: { name: 'tbl_category', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_category` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '외부에 공개되는 카테고리 리소스 아이디. dash를 삭제 한 uuid 를 사용 한다.', \ `board_id` INT(11) UNSIGNED NOT NULL COMMENT 'tbl_board.id. 카테고리가 속한 board 시리얼 넘버', \ `name` VARCHAR(128) NULL DEFAULT NULL COMMENT '카테고리 명', \ `link` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT '카테고리에 포함되는 게시물이 일반 게시물인지 링크 게시물인지 여부. 1:링크 게시물, 1이외의값:일반 게시물', \ `closed` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '공개 게시판 카테고리인지 폐쇄 인지 구분. 1:폐쇄형, 2:공개형. 폐쇄형은 로그인 이후에만 공개되는 카테고리임.', \ `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '카테고리 상태. 1:Enable, 3:Disable', \ `description` TEXT NULL DEFAULT NULL COMMENT '카테고리 설명', \ `list_order` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '카테고리 순서. Asc 순서대로 정렬.', \ `template_rid` CHAR(32) NOT NULL DEFAULT '', \ `extra` JSON NULL, \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일. null 이면 업데이트 한번도 하지 않았다는 의미', \ PRIMARY KEY (`id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ INDEX `idx_list_order` (`list_order` ASC), \ INDEX `idx_board_id` (`board_id` ASC), \ FULLTEXT INDEX `idx_name` (`name`), \ CONSTRAINT `fk_tbl_board_category` FOREIGN KEY (`board_id`) REFERENCES `tbl_board` (`id`) ON DELETE CASCADE) \ ENGINE = InnoDB \ DEFAULT CHARACTER SET = utf8 \ COMMENT = '게시판 카테고리 테이블. 카테고리에 포함되는 게시물은 일반 게시물, 링크 게시물로 분리 된다. 게시물을 복합적으로 포함 할 수 없다.' \ ", }, document: { name: 'tbl_document', schema: " \ CREATE TABLE IF NOT EXISTS `tbl_document` ( \ `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '관리용 id', \ `rid` CHAR(32) NOT NULL COMMENT '외부에 공개되는 게시물 리소스 아이디. dash를 삭제 한 uuid 를 사용 한다.', \ `board_id` INT(11) UNSIGNED NOT NULL COMMENT '게시물이 속한 board 시리얼 넘버. tbl_board.id', \ `category_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'tbl_board_category.id', \ `title` VARCHAR(255) NULL DEFAULT NULL COMMENT '게시물 제목', \ `document` TEXT NULL DEFAULT NULL COMMENT '게시물 내용', \ `secret` TINYINT(3) UNSIGNED NOT NULL DEFAULT '2' COMMENT '게시자의 비밀글 여부. 1:비밀글, 1이외의값:비밀글 아님', \ `read_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '게시물 조회 카운트', \ `like_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '게시물 좋아요 카운트', \ `blame_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '게시물 싫어요 카운트', \ `pin_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '게시물 pin 카운트', \ `comment_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '게시물 코맨트 갯수', \ `file_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '첨부 파일 갯수', \ `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '게시물 상태. 관리자가 문서를 block 시킬때 사용 하면 됨. 1:Enable, 3:Disable', \ `allow_comment` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '게시물 코맨트 가능 여부. 1:코맨트 가능, 1이외의값:코맨트 할 수 없는 게시물', \ `ipaddress` CHAR(32) NOT NULL COMMENT '게시물을 올린 source IP', \ `user_id` VARCHAR(128) NULL DEFAULT NULL COMMENT 'tbl_user.user_id 또는 임의의 값. 게시물을 작성한 유저의 유저 아이디. 오픈된 게시판에 포함된 게시물이면 의미 없는 값 이다.', \ `user_email_address` VARCHAR(128) NULL DEFAULT NULL COMMENT 'tbl_user.email_address 또는 임의의 값. 게시물을 작성한 유저의 메일 주소. 오픈된 게시판에 포함된 게시물이면 게시물 작성시 유저에게 입력 받는다.', \ `document_password` VARCHAR(128) NULL DEFAULT NULL COMMENT '게시물 비밀번호. 오픈된 게시판에 포함된 게시물이면 게시물 작성시 유저에게 입력 받는다.', \ `user_name` VARCHAR(128) NULL DEFAULT NULL COMMENT '게시물을 작성한 유저의 이름. 오픈된 게시물이면 유저로 부터 입력 받은 값. 오픈된 게시물이 아니면 tbl_user.full_name 값이 복사 된다.', \ `user_nickname` VARCHAR(128) NULL COMMENT '게시물을 작성한 유저 닉네임', \ `template_rid` CHAR(32) NOT NULL DEFAULT '' COMMENT '게시물 템플릿 리소스 아이디.', \ `extra` JSON NULL DEFAULT NULL COMMENT '템플릿 내용. 템플릿 구조로 부터 생성된 템플릿 내용. 템플릿을 사용하지 않으면 null 또는 empty string 이다.', \ `list_order` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '게시물 순서. 게시물 list_order 정렬은 desc 가 기본이다. 즉, list_order 값이 높을 수록 위에 보여 주도록 한다.', \ `top_list_order` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '최 상단에 글을 고정하고 싶을때, 사용 한다. desc 로 정렬 하기 때문에, 숫자가 클 수록 최 상단에 고정 된다.', \ `c_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일', \ `u_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일. null 이면 업데이트 한번도 하지 않았다는 의미', \ PRIMARY KEY (`id`), \ INDEX `idx_category_id` USING HASH (`category_id`), \ UNIQUE INDEX `idx_rid` USING HASH (`rid`), \ INDEX `idx_list_order` (`list_order` DESC), \ INDEX `idx_user_id` (`user_id` ASC), \ I