Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature/#118 DB 쿼리 작성 #121

Merged
merged 7 commits into from
Dec 1, 2024
57 changes: 57 additions & 0 deletions aics-api/src/main/resources/db/data.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
INSERT INTO about (content, detail_category, main_category, sub_category)
VALUES ('학과 소개 내용입니다.', NULL, 'DEPT_INTRO', 'DEPT_INTRO'),
('커리큘럼 설명입니다.', '2019', 'EDU_ACTIVITIES', 'CURRICULUM'),
('연혁 더미데이터입니다.', NULL, 'DEPT_INTRO', 'HISTORY');

INSERT INTO lab (name, loc, site)
VALUES ('Lab A', '8500', 'http://lab1.kyonggi.ac.kr'),
('Lab B', '8520', 'https://lab2.kyonggi.ac.kr'),
('Lab C', '제2공학관 200', 'http://research.kyonggi.ac.kr');
LeeShinHaeng marked this conversation as resolved.
Show resolved Hide resolved

-- password: password1234!
INSERT INTO "user" (id, password, name, email, phone, major, role, created_at, updated_at)
VALUES ('202412346', '$2a$10$NkQj6yk0Xh4QhKevjrOkouQBymXUgpKqmHQFnTUKRaVhDrRZf5OTG', '이한음', '[email protected]', '010-2345-6789', 'AIT', 'SUPER', CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP),
('202412347', '$2a$10$NkQj6yk0Xh4QhKevjrOkouQBymXUgpKqmHQFnTUKRaVhDrRZf5OTG', '박민준', '[email protected]', '010-1234-8765', 'CSE', 'USER', CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP),
('202412348', '$2a$10$NkQj6yk0Xh4QhKevjrOkouQBymXUgpKqmHQFnTUKRaVhDrRZf5OTG', '이신행', '[email protected]', '010-3456-7890', 'SSS', 'ADMIN', CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP);

INSERT INTO professor (name, contact, email, role)
VALUES ('김교수', '010-1111-2222', '[email protected]', 'PROFESSOR'),
('이조교', '010-3333-4444', '[email protected]', 'ASSISTANT'),
('박교수', '010-5555-6666', '[email protected]', 'PROFESSOR');
LeeShinHaeng marked this conversation as resolved.
Show resolved Hide resolved

INSERT INTO file_entity (logical_name, physical_path)
VALUES ('학과소개파일', '/files/about/dept_intro.pdf'),
('교육활동파일', '/files/edu/activities.pdf'),
('커리큘럼파일', '/files/edu/curriculum.pdf'),
('연구 성과 이미지', '/files/carousel/research_results.jpg'),
('학과 행사 이미지', '/files/carousel/department_event.jpg'),
('동아리 활동 이미지', '/files/carousel/club_activity.jpg'),
('캠퍼스 전경 이미지', '/files/carousel/campus_view.jpg'),
('졸업식 이미지', '/files/carousel/graduation_ceremony.jpg');

INSERT INTO carousel (file_id, text, link)
VALUES (4, '최신 연구 성과를 확인하세요.', 'https://kyonggi.ac.kr/research'),
(5, '학과 행사 사진입니다.', 'https://kyonggi.ac.kr/events'),
(6, '동아리 활동을 소개합니다.', 'https://kyonggi.ac.kr/clubs'),
(7, '아름다운 캠퍼스를 감상하세요.', 'https://kyonggi.ac.kr/campus');


INSERT INTO post (title, content, category, file_id, author_id)
VALUES ('2024학년도 학과 소개 일정 안내',
'2024학년도 학과 소개가 아래와 같은 일정으로 진행됩니다. 참여를 원하시는 분들은 해당 일정을 참고하여 신청해 주시기 바랍니다.',
'DEPT_INFO', 3, '202412346'),
('동계 방학 중 실습실 사용 안내',
'동계 방학 기간 동안 실습실 사용 신청을 받고 있습니다. 자세한 신청 방법과 이용 규정을 확인해 주세요.',
'LESSON_INFO', NULL, '202412346'),
('취업 설명회 개최 안내',
'졸업 예정자 및 재학생을 대상으로 취업 설명회를 개최합니다. 기업 소개, 취업 전략 및 질의응답 시간이 준비되어 있으니 많은 참여 바랍니다.',
'EMPLOY_INFO', NULL, '202412346'),
('학과 뉴스 - 최신 연구 성과 발표',
'우리 학과에서는 최근 AI 기반 의료 데이터 분석 연구 성과를 발표하였습니다. 자세한 내용은 연구 성과 페이지를 참고하세요.',
'DEPT_NEWS', 5, '202412347'),
('졸업생 수상 소식',
'우리 학과 졸업생이 국내 최고 권위의 학회에서 우수 논문상을 수상하였습니다. 졸업생들의 뛰어난 활약을 소개합니다.',
'AWARDED', 8, '202412347');
141 changes: 141 additions & 0 deletions aics-api/src/main/resources/db/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
-- 테이블 생성
-- about
CREATE TABLE about (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL,
LeeShinHaeng marked this conversation as resolved.
Show resolved Hide resolved
content TEXT NOT NULL,
detail_category VARCHAR(100),
main_category VARCHAR(50) NOT NULL
CONSTRAINT about_main_category_check
CHECK ((main_category)::TEXT = ANY (ARRAY['DEPT_INTRO', 'EDU_ACTIVITIES'])),
sub_category VARCHAR(50) NOT NULL
CONSTRAINT about_sub_category_check
CHECK ((sub_category)::TEXT = ANY (ARRAY['DEPT_INTRO', 'HISTORY', 'EDU_ENVIRONMENT', 'EDU_OBJECTIVES', 'CURRICULUM', 'LEARNING_ACTIVITIES', 'CLUB_INTRO']))
);

-- lab
CREATE TABLE lab (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(16) NOT NULL,
loc VARCHAR(10) NOT NULL,
site VARCHAR(50) NOT NULL,
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL
);

-- professor
CREATE TABLE professor (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(10) NOT NULL,
contact VARCHAR(15) NOT NULL UNIQUE,
email VARCHAR(50) NOT NULL UNIQUE,
role VARCHAR(20) NOT NULL
CONSTRAINT professor_role_check
CHECK ((role)::TEXT = ANY (ARRAY['PROFESSOR', 'ASSISTANT'])),
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL
);

-- file_entity
CREATE TABLE file_entity (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
logical_name VARCHAR(100) NOT NULL,
physical_path VARCHAR(2083) NOT NULL UNIQUE,
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL
);

-- carousel
CREATE TABLE carousel (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
file_id BIGINT NOT NULL UNIQUE,
text VARCHAR(500) NOT NULL,
link VARCHAR(2083) NOT NULL,
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL,
CONSTRAINT fk_carousel_file FOREIGN KEY (file_id) REFERENCES file_entity (id)
ON DELETE SET NULL
);

-- user
CREATE TABLE "user" (
id VARCHAR(10) NOT NULL PRIMARY KEY,
name VARCHAR(10) NOT NULL,
phone VARCHAR(15) NOT NULL UNIQUE,
email VARCHAR(50) NOT NULL UNIQUE,
major VARCHAR(50) NOT NULL
CONSTRAINT user_major_check
CHECK ((major)::TEXT = ANY (ARRAY['CSE', 'AIT', 'SSS'])),
password VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL
CONSTRAINT user_role_check
CHECK ((role)::TEXT = ANY (ARRAY['USER', 'ADMIN', 'SUPER'])),
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL
);
LeeShinHaeng marked this conversation as resolved.
Show resolved Hide resolved

-- post
CREATE TABLE post (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
views INTEGER NOT NULL DEFAULT 0,
is_pinned BOOLEAN NOT NULL DEFAULT FALSE,
category VARCHAR(50)
CONSTRAINT post_category_check
CHECK ((category)::TEXT = ANY (ARRAY['DEPT_INFO', 'LESSON_INFO', 'EMPLOY_INFO', 'DEPT_NEWS', 'GOOD_WORKS', 'AWARDED'])),
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL,
file_id BIGINT UNIQUE,
author_id VARCHAR(10),
CONSTRAINT fk_post_file FOREIGN KEY (file_id) REFERENCES file_entity (id)
ON DELETE SET NULL,
CONSTRAINT fk_post_author FOREIGN KEY (author_id) REFERENCES "user" (id)
ON DELETE SET NULL ON UPDATE CASCADE
);

-- comment
CREATE TABLE comment (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
content VARCHAR(500) NOT NULL,
created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP(6) DEFAULT NULL,
post_id BIGINT NOT NULL,
author_id VARCHAR(10) NOT NULL,
CONSTRAINT fk_comment_post FOREIGN KEY (post_id) REFERENCES post (id)
ON DELETE CASCADE,
CONSTRAINT fk_comment_author FOREIGN KEY (author_id) REFERENCES "user" (id)
ON DELETE CASCADE ON UPDATE CASCADE
);


-- 인덱스 추가
-- about
CREATE INDEX idx_about_main_category ON about(main_category);
CREATE INDEX idx_about_sub_category ON about(sub_category);

-- carousel
CREATE INDEX idx_carousel_file_id ON carousel (file_id);


-- comment
CREATE INDEX idx_comment_post_id ON comment (post_id);
CREATE INDEX idx_comment_author_id ON comment (author_id);

-- lab
CREATE INDEX idx_lab_name ON lab (name);
CREATE INDEX idx_lab_site ON lab (site);

-- post
CREATE INDEX idx_post_title ON post (title);
CREATE INDEX idx_post_category ON post (category);
CREATE INDEX idx_post_author_id ON post (author_id);
LeeShinHaeng marked this conversation as resolved.
Show resolved Hide resolved