From edeee8b68dd518d76379317cb22d91b70f02fc28 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Fri, 23 Dec 2022 01:41:16 +0900 Subject: [PATCH] #29 pass: database setting --- pass-batch/Makefile | 5 ++ pass-batch/db/conf.d/custom.cnf | 5 ++ pass-batch/db/initdb.d/create_table.sql | 108 ++++++++++++++++++++++++ pass-batch/db/initdb.d/insert_data.sql | 25 ++++++ pass-batch/docker-compose.yml | 17 ++++ 5 files changed, 160 insertions(+) create mode 100644 pass-batch/Makefile create mode 100644 pass-batch/db/conf.d/custom.cnf create mode 100644 pass-batch/db/initdb.d/create_table.sql create mode 100644 pass-batch/db/initdb.d/insert_data.sql create mode 100644 pass-batch/docker-compose.yml diff --git a/pass-batch/Makefile b/pass-batch/Makefile new file mode 100644 index 00000000..d49cdcb6 --- /dev/null +++ b/pass-batch/Makefile @@ -0,0 +1,5 @@ +db-up: + docker-compose up -d --force-recreate + +db-down: + docker-compose down -v \ No newline at end of file diff --git a/pass-batch/db/conf.d/custom.cnf b/pass-batch/db/conf.d/custom.cnf new file mode 100644 index 00000000..1f1dbefa --- /dev/null +++ b/pass-batch/db/conf.d/custom.cnf @@ -0,0 +1,5 @@ +[client] +default-character-set = utf8mb4 + +[mysqld] +authentication-policy = mysql_native_password \ No newline at end of file diff --git a/pass-batch/db/initdb.d/create_table.sql b/pass-batch/db/initdb.d/create_table.sql new file mode 100644 index 00000000..9e882eec --- /dev/null +++ b/pass-batch/db/initdb.d/create_table.sql @@ -0,0 +1,108 @@ +/* + id varchar(20) + status, event varchar(10) - enum + 그 외 varchar(50) + */ + +CREATE TABLE `package` +( + `package_seq` int NOT NULL AUTO_INCREMENT COMMENT '패키지 순번', + `package_name` varchar(50) NOT NULL COMMENT '패키지 이름', + `count` int DEFAULT NULL COMMENT '이용권 수, NULL인 경우 무제한', + `period` int DEFAULT NULL COMMENT '기간(일), NULL인 경우 무제한', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', + `modified_at` timestamp DEFAULT NULL COMMENT '수정 일시', + PRIMARY KEY (`package_seq`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='패키지'; + +CREATE TABLE `pass` +( + `pass_seq` int NOT NULL AUTO_INCREMENT COMMENT '이용권 순번', + `package_seq` int NOT NULL COMMENT '패키지 순번', + `user_id` varchar(20) NOT NULL COMMENT '사용자 ID', + `status` varchar(10) NOT NULL COMMENT '상태', + `remaining_count` int DEFAULT NULL COMMENT '잔여 이용권 수, NULL인 경우 무제한', + `started_at` timestamp NOT NULL COMMENT '시작 일시', + `ended_at` timestamp DEFAULT NULL COMMENT '종료 일시, NULL인 경우 무제한', + `expired_at` timestamp DEFAULT NULL COMMENT '만료 일시', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', + `modified_at` timestamp DEFAULT NULL COMMENT '수정 일시', + PRIMARY KEY (`pass_seq`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='이용권'; + +CREATE TABLE `bulk_pass` +( + `bulk_pass_seq` int NOT NULL AUTO_INCREMENT COMMENT '대량 이용권 순번', + `package_seq` int NOT NULL COMMENT '패키지 순번', + `user_group_id` varchar(20) NOT NULL COMMENT '사용자 그룹 ID', + `status` varchar(10) NOT NULL COMMENT '상태', + `count` int DEFAULT NULL COMMENT '이용권 수, NULL인 경우 무제한', + `started_at` timestamp NOT NULL COMMENT '시작 일시', + `ended_at` timestamp DEFAULT NULL COMMENT '종료 일시, NULL인 경우 무제한', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', + `modified_at` timestamp DEFAULT NULL COMMENT '수정 일시', + PRIMARY KEY (`bulk_pass_seq`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='대량 이용권, 다수의 이용자에게 이용권을 지급하기 위함'; + +CREATE TABLE `booking` +( + `booking_seq` int NOT NULL AUTO_INCREMENT COMMENT '예약 순번', + `pass_seq` int NOT NULL COMMENT '이용권 순번', + `user_id` varchar(20) NOT NULL COMMENT '사용자 ID', + `status` varchar(10) NOT NULL COMMENT '상태', + `used_pass` tinyint(1) NOT NULL DEFAULT '0' COMMENT '이용권 사용 여부', + `attended` tinyint(1) NOT NULL DEFAULT '0' COMMENT '출석 여부', + `started_at` timestamp NOT NULL COMMENT '시작 일시', + `ended_at` timestamp NOT NULL COMMENT '종료 일시', + `cancelled_at` timestamp DEFAULT NULL COMMENT '취소 일시', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', + `modified_at` timestamp DEFAULT NULL COMMENT '수정 일시', + PRIMARY KEY (`booking_seq`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='예약'; + +CREATE TABLE `user` +( + `user_id` varchar(20) NOT NULL COMMENT '사용자 ID', + `user_name` varchar(50) NOT NULL COMMENT '사용자 이름', + `status` varchar(10) NOT NULL COMMENT '상태', + `phone` varchar(50) DEFAULT NULL COMMENT '연락처', + `meta` TEXT DEFAULT NULL COMMENT '메타 정보, JSON', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', + `modified_at` timestamp DEFAULT NULL COMMENT '수정 일시', + PRIMARY KEY (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='사용자'; + +CREATE TABLE `user_group_mapping` +( + `user_group_id` varchar(20) NOT NULL COMMENT '사용자 그룹 ID', + `user_id` varchar(20) NOT NULL COMMENT '사용자 ID', + `user_group_name` varchar(50) NOT NULL COMMENT '사용자 그룹 이름', + `description` varchar(50) NOT NULL COMMENT '설명', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', + `modified_at` timestamp DEFAULT NULL COMMENT '수정 일시', + PRIMARY KEY (`user_group_id`, `user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='사용자 그룹 매핑'; + +CREATE TABLE `notification` +( + `notification_seq` int NOT NULL AUTO_INCREMENT COMMENT '알람 순번', + `uuid` varchar(20) NOT NULL COMMENT '사용자 uuid (카카오톡)', + `event` varchar(10) NOT NULL COMMENT '이벤트', + `text` varchar(1000) NOT NULL COMMENT '알람 내용', + `sent` tinyint(1) NOT NULL DEFAULT '0' COMMENT '발송 여부', + `sent_at` timestamp DEFAULT NULL COMMENT '발송 일시', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', + `modified_at` timestamp DEFAULT NULL COMMENT '수정 일시', + PRIMARY KEY (`notification_seq`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='알람'; + +CREATE TABLE `statistics` +( + `statistics_seq` int NOT NULL AUTO_INCREMENT COMMENT '통계 순번', + `statistics_at` timestamp NOT NULL COMMENT '통계 일시', + `all_count` int NOT NULL DEFAULT 0 COMMENT '전체 횟수', + `attended_count` int NOT NULL DEFAULT 0 COMMENT '출석 횟수', + `cancelled_count` int NOT NULL DEFAULT 0 COMMENT '취소 횟수', + PRIMARY KEY (`statistics_seq`), + INDEX idx_statistics_at (`statistics_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='통계'; \ No newline at end of file diff --git a/pass-batch/db/initdb.d/insert_data.sql b/pass-batch/db/initdb.d/insert_data.sql new file mode 100644 index 00000000..53b8002e --- /dev/null +++ b/pass-batch/db/initdb.d/insert_data.sql @@ -0,0 +1,25 @@ +INSERT INTO package (package_name, count, period, created_at) +VALUES ('Starter PT 10회', 10, 60, '2022-08-01 00:00:00'), + ('Starter PT 20회', 20, 120, '2022-08-01 00:00:00'), + ('Starter PT 30회', 30, 180, '2022-08-01 00:00:00'), + ('무료 이벤트 필라테스 1회', 1, NULL, '2022-08-01 00:00:00'), + ('바디 챌린지 PT 4주', NULL, 28, '2022-08-01 00:00:00'), + ('바디 챌린지 PT 8주', NULL, 48, '2022-08-01 00:00:00'), + ('인바디 상담', NULL, NULL, '2022-08-01 00:00:00'); + +INSERT INTO `user` (user_id, user_name, status, phone, meta, created_at) +VALUES ('A1000000', '우영우', 'ACTIVE', '01011112222', NULL, '2022-08-01 00:00:00'), + ('A1000001', '최수연', 'ACTIVE', '01033334444', NULL, '2022-08-01 00:00:00'), + ('A1000002', '이준호', 'INACTIVE', '01055556666', NULL, '2022-08-01 00:00:00'), + ('B1000010', '권민우', 'ACTIVE', '01077778888', NULL, '2022-08-01 00:00:00'), + ('B1000011', '동그라미', 'INACTIVE', '01088889999', NULL, '2022-08-01 00:00:00'), + ('B2000000', '한선영', 'ACTIVE', '01099990000', NULL, '2022-08-01 00:00:00'), + ('B2000001', '태수미', 'ACTIVE', '01000001111', NULL, '2022-08-01 00:00:00'); + +INSERT INTO user_group_mapping (user_group_id, user_id, user_group_name, description, created_at) +VALUES ('HANBADA', 'A1000000', '한바다', '한바다 임직원 그룹', '2022-08-01 00:00:00'), + ('HANBADA', 'A1000001', '한바다', '한바다 임직원 그룹', '2022-08-01 00:00:00'), + ('HANBADA', 'A1000002', '한바다', '한바다 임직원 그룹', '2022-08-01 00:00:00'), + ('HANBADA', 'B1000010', '한바다', '한바다 임직원 그룹', '2022-08-01 00:00:00'), + ('HANBADA', 'B2000000', '한바다', '한바다 임직원 그룹', '2022-08-01 00:00:00'), + ('TAESAN', 'B2000001', '태산', '태산 임직원 그룹', '2022-08-01 00:00:00'); \ No newline at end of file diff --git a/pass-batch/docker-compose.yml b/pass-batch/docker-compose.yml new file mode 100644 index 00000000..f47d6897 --- /dev/null +++ b/pass-batch/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3.8' + +services: + mysql: + container_name: mysql_local + image: mysql:8.0.30 + volumes: + - ./db/conf.d:/etc/mysql/conf.d + - ./db/initdb.d:/docker-entrypoint-initdb.d + ports: + - "13306:3306" + environment: + - MYSQL_DATABASE=pass_local + - MYSQL_USER=pass_local_user + - MYSQL_PASSWORD=test1234 + - MYSQL_ROOT_PASSWORD=test1234 + - TZ=Asia/Seoul \ No newline at end of file