5주차 jwt, 소셜 로그인 구현(kakao)

sua·2022년 8월 13일

Rising Camp 8기 Server

목록 보기
4/9
post-thumbnail

jwt를 이용한 회원용 API로 바꾸기

※ 넷플릭스는 회원가입을 제외하고는 모두 회원용 API이기 때문에 모두 처리해줘야 함

  • PostUserRes에 jwt 삭제하여 회원가입이 아닌 로그인 시에만 jwt 토큰 발급하게 구현
  • Secret.java의 JWT_SECRET_KEY를 임의로 변경
  1. 회원가입 API
    • 포스트맨 성공 화면
  1. 로그인 API
    • 포스트맨 성공 화면
  1. 회원 비밀번호 변경 API

    • 변경 전 DB
    • 포스트맨 Headers 설정 화면
    • 포스트맨 body 및 성공 화면
    • 변경 된 DB 모습
    • jwt 토큰을 입력하지 않은 경우
    • jwt 토큰을 잘못 입력한 경우
    • jwt 토큰의 userIdx와 body의 userIdx가 다른 경우
  2. 프로필 생성 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 Body 설정 및 성공 화면
  1. 프로필 비밀번호 설정 API

    • 설정 전 DB
    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 Body 설정 및 성공 화면
    • 설정 된 DB 모습
    • 비밀번호 4자리 보다 길게 입력한 경우
  2. 회원 전체 프로필 조회 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 성공 화면
  3. 프로필 비밀번호 검증 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 Body 설정 및 성공 화면
    • 비밀번호가 틀렸을 때
  1. 프로필 설정 변경 API

    • 변경 전 DB
    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 Body 설정 및 성공 화면
    • 변경 된 DB 모습
  2. 내가 찜한 콘텐츠 조회 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 성공 화면
  3. 최다 검색 조회 API

  • 포스트맨 Params 설정 화면
  • 포스트맨 Headers 설정 화면
  • 포스트맨 성공 화면

  1. 메인 카테고리 조회 API
  • 포스트맨 Params 설정 화면
  • 포스트맨 Headers 설정 화면
  • 포스트맨 성공 화면


  1. 시리즈 카테고리 조회 API
  • 포스트맨 Params 설정 화면
  • 포스트맨 Headers 설정 화면
  • 포스트맨 성공 화면

  1. 영화 카테고리 조회 API
  • 포스트맨 Params 설정 화면
  • 포스트맨 Headers 설정 화면
  • 포스트맨 성공 화면


  1. 콘텐츠 평가 및 취소 API
    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 Body 설정 및 성공 화면 (처음 해당 콘텐츠를 평가하는 경우 - likes가 3일 때 최고예요)
    • 이미 평가했던 콘텐츠의 평가를 취소하는 경우 - likes가 0일 때 취소
    • 취소한 평가를 다시 좋아요로 평가하기 - likes가 2일 때 좋아요
  1. 모두의 인기 콘텐츠 조회 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 성공 화면

  2. Top 10 시리즈 조회 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 성공 화면





  3. Top 10 영화 조회 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 성공 화면




  4. 영화 상세 페이지 조회 API

    • 포스트맨 Params 설정 화면
    • 포스트맨 Headers 설정 화면
    • 포스트맨 성공 화면

  5. 시리즈 상세 페이지 조회 API

    • 포스트맨 Headers 설정 화면

[몇 season인지 선택하지 않았을 때, 즉 상세 페이지 처음 들어왔을 때]

  • 포스트맨 Params 설정 화면
  • 포스트맨 성공 화면



[몇 season인지 선택했을 때 - 시즌 2]

  • 포스트맨 Params 설정 화면
  • 포스트맨 성공 화면



[몇 season인지 선택했을 때 - 시즌 3]

  • 포스트맨 Params 설정 화면
  • 포스트맨 성공 화면





트랜잭션 처리 및 보완

  1. 각각의 도메인의 service와 provider에 @Transactional 어노테이션 추가로 트랜잭션 자동 처리되게 함

  2. 콘텐츠 평가 및 취소 API에서 response로 evaluateIdx 주지 않게 수정

  3. 콘텐츠 평가 조회 API는 상세 페이지 조회 API가 있으므로 필요하지 않아 삭제

  4. Top 10 시리즈 조회 API에서 /app/topSeries/:profileIdx로 카멜표기법으로 되어있던 것을 /app/topseries/:profileIdx로 변경 (카멜표기법 x)

  5. Top 10 영화 조회 API에서 /app/topMovies/:profileIdx로 카멜표기법으로 되어있던 것을 /app/topmovies/:profileIdx로 변경 (카멜표기법 x)



소셜 로그인 구현 (kakao)

  1. Kakao Developers에서 내 애플리케이션 생성 후 REST API 키 필요
  2. 카카오 로그인 활성화 ON 시키기
  3. Redirect URI 추가하기 (http://localhost:9000/kakao/callback)
  4. Redirect URI 요청 API (/app/kakao/oauth)
  5. 인증 코드 요청 & 발급 + accessToken 발급 + 사용자 정보 받아 유저 생성 or 로그인 API (/app/kakao/callback)
    1. 인증 코드로 accessToken 발급 받는 메소드 작성
    2. accessToken으로 사용자 정보 받는 메소드 작성
    3. User 테이블에 kakaoId 칼럼 추가, membershipIdx와 cardIdx의 Not Null을 Null 허용으로 바꿔주기(카카오 유저 생성할 때는 kakaoId만 해야되기 때문)
    4. 사용자 정보인 kakaoId가 User 테이블에 존재하면 response의 isSignup이 0, 존재하지 않으면 User테이블에 사용자 정보인 kakaoId를 가지는 데이터 삽입(사용자 생성)하고 response의 isSingup을 1로 보냄. 공통적으로는 userIdx와 jwt 토큰을 응답값으로 보냄
    5. isSignup이 0인 경우 클라이언트는 바로 jwt 토큰으로 회원용 API 사용 가능, isSignup이 1인 경우 회원가입 진행
  6. 카카오 로그인 사용자를 위한 회원 가입하기 API (/app/kakao [POST])

소셜 로그인 테스트
1. 테스트 전 User 테이블 모습

2. 포스트맨 테스트 화면 : redirect url 나옴

3. 해당 url 주소로 접속 → 카카오 로그인 페이지 뜸

  • 포스트맨으로 접속시
  1. 확인하고 계속하기 누르기 → 카카오 로그인 성공한 모습

  2. DB에서 User 테이블에 사용자 데이터 생성 되었는지 확인 → 생성됨

  3. 현재 사용자의 kakaoId 외에는 아무런 정보도 없으며, 응답에서 isSignup이 1임을 알 수 있음 따라서, 별도의 회원가입 진행해야함.

  4. 회원가입 포스트맨 테스트

    • 포스트맨 headers 설정 화면 (아까 카카오 로그인 성공했을 때 받은 jwt 토큰을 넣음)
    • 포스트맨 body 설정 및 성공 화면
  5. DB에서 User 테이블의 데이터 변경 확인 → 정상적으로 데이터가 저장 됐음을 확인

  6. 해당 사용자의 jwt 토큰으로 다른 회원용 API 잘 동작하는지 확인
    [프로필 생성]

    • 포스트맨 params 설정 화면
    • 포스트맨 headers 설정 화면
    • 포스트맨 body 설정 및 성공 화면
    • DB에 반영된 모습

[모두의 인기 콘텐츠 조회]

  • 포스트맨 params 설정 화면
  • 포스트맨 headers 설정 화면
  • 포스트맨 성공 화면



최종 데이터베이스 SQL 스크립트

-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema test
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `test` ;

-- -----------------------------------------------------
-- Schema test
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8 ;
USE `test` ;

-- -----------------------------------------------------
-- Table `test`.`Actor`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Actor` ;

CREATE TABLE IF NOT EXISTS `test`.`Actor` (
  `actorIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`actorIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Content`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Content` ;

CREATE TABLE IF NOT EXISTS `test`.`Content` (
  `contentIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `label` VARCHAR(45) NULL DEFAULT NULL,
  `info` VARCHAR(100) NULL DEFAULT NULL,
  `canDownload` INT NULL DEFAULT '0',
  `age` INT NULL DEFAULT NULL,
  `playtime` TIME NULL DEFAULT NULL,
  `previewUrl` TEXT NULL DEFAULT NULL,
  `title` VARCHAR(45) NOT NULL,
  `releasedAt` VARCHAR(4) NULL DEFAULT NULL,
  `quality` VARCHAR(10) NULL DEFAULT 'HD',
  `videoUrl` TEXT NULL DEFAULT NULL,
  `thumbnail` TEXT NULL DEFAULT NULL,
  `createdAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `status` VARCHAR(10) NULL DEFAULT 'ACTIVE',
  PRIMARY KEY (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`LanguagePack`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`LanguagePack` ;

CREATE TABLE IF NOT EXISTS `test`.`LanguagePack` (
  `languagePackIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `nation` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`languagePackIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`PresentLang`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`PresentLang` ;

CREATE TABLE IF NOT EXISTS `test`.`PresentLang` (
  `presentLangIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `languagePackIdx` BIGINT NOT NULL,
  PRIMARY KEY (`presentLangIdx`),
  INDEX `fk_PresentLang_LanguagePack1_idx` (`languagePackIdx` ASC) VISIBLE,
  CONSTRAINT `fk_PresentLang_LanguagePack1`
    FOREIGN KEY (`languagePackIdx`)
    REFERENCES `test`.`LanguagePack` (`languagePackIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Card`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Card` ;

CREATE TABLE IF NOT EXISTS `test`.`Card` (
  `cardIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `cardNumber` VARCHAR(45) NULL DEFAULT NULL,
  `name` VARCHAR(45) NULL DEFAULT NULL,
  `yymm` VARCHAR(4) NULL DEFAULT NULL,
  `birthYear` VARCHAR(4) NULL DEFAULT NULL,
  `birthMonth` VARCHAR(2) NULL DEFAULT NULL,
  `birthDay` VARCHAR(2) NULL DEFAULT NULL,
  `phone` VARCHAR(20) NULL DEFAULT NULL,
  PRIMARY KEY (`cardIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Membership`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Membership` ;

CREATE TABLE IF NOT EXISTS `test`.`Membership` (
  `membershipIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `status` VARCHAR(10) NULL DEFAULT NULL,
  `type` VARCHAR(45) NULL DEFAULT NULL,
  `cost` INT NULL DEFAULT NULL,
  PRIMARY KEY (`membershipIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`User`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`User` ;

CREATE TABLE IF NOT EXISTS `test`.`User` (
  `userIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL DEFAULT NULL,
  `password` TEXT NULL DEFAULT NULL,
  `status` VARCHAR(10) NULL DEFAULT 'ACTIVE',
  `createdAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `membershipIdx` BIGINT NULL DEFAULT NULL,
  `cardIdx` BIGINT NULL DEFAULT NULL,
  `kakaoId` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`userIdx`),
  INDEX `fk_user_Membership_idx` (`membershipIdx` ASC) VISIBLE,
  INDEX `fk_User_Card1_idx` (`cardIdx` ASC) VISIBLE,
  CONSTRAINT `fk_User_Card1`
    FOREIGN KEY (`cardIdx`)
    REFERENCES `test`.`Card` (`cardIdx`),
  CONSTRAINT `fk_user_Membership`
    FOREIGN KEY (`membershipIdx`)
    REFERENCES `test`.`Membership` (`membershipIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Profile`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Profile` ;

CREATE TABLE IF NOT EXISTS `test`.`Profile` (
  `profileIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL DEFAULT NULL,
  `image` TEXT NULL DEFAULT NULL,
  `password` VARCHAR(4) NULL DEFAULT NULL,
  `status` VARCHAR(10) NULL DEFAULT 'ACTIVE',
  `createdAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `isKids` INT NULL DEFAULT '0',
  `isNext` INT NULL DEFAULT '0',
  `isPreview` INT NULL DEFAULT '0',
  `userIdx` BIGINT NOT NULL,
  `presentLangIdx` BIGINT NOT NULL,
  PRIMARY KEY (`profileIdx`),
  INDEX `fk_profile_user1_idx` (`userIdx` ASC) VISIBLE,
  INDEX `fk_Profile_PresentLang1_idx` (`presentLangIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Profile_PresentLang1`
    FOREIGN KEY (`presentLangIdx`)
    REFERENCES `test`.`PresentLang` (`presentLangIdx`),
  CONSTRAINT `fk_profile_user1`
    FOREIGN KEY (`userIdx`)
    REFERENCES `test`.`User` (`userIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Alarm`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Alarm` ;

CREATE TABLE IF NOT EXISTS `test`.`Alarm` (
  `alarmIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(45) NULL DEFAULT NULL,
  `profileIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`alarmIdx`),
  INDEX `fk_Alarm_profile1_idx` (`profileIdx` ASC) VISIBLE,
  INDEX `fk_Alarm_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Alarm_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_Alarm_profile1`
    FOREIGN KEY (`profileIdx`)
    REFERENCES `test`.`Profile` (`profileIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Category`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Category` ;

CREATE TABLE IF NOT EXISTS `test`.`Category` (
  `categoryIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`categoryIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentActor`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentActor` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentActor` (
  `contentActorIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `actorIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`contentActorIdx`),
  INDEX `fk_ContentActor_Actor1_idx` (`actorIdx` ASC) VISIBLE,
  INDEX `fk_ContentActor_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentActor_Actor1`
    FOREIGN KEY (`actorIdx`)
    REFERENCES `test`.`Actor` (`actorIdx`),
  CONSTRAINT `fk_ContentActor_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Genre`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Genre` ;

CREATE TABLE IF NOT EXISTS `test`.`Genre` (
  `genreIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`genreIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentGenre`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentGenre` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentGenre` (
  `contentGenreIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  `genreIdx` BIGINT NOT NULL,
  PRIMARY KEY (`contentGenreIdx`),
  INDEX `fk_ContentGenre_Content1_idx` (`contentIdx` ASC) VISIBLE,
  INDEX `fk_ContentGenre_Genre1_idx` (`genreIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentGenre_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_ContentGenre_Genre1`
    FOREIGN KEY (`genreIdx`)
    REFERENCES `test`.`Genre` (`genreIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`MainCategory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`MainCategory` ;

CREATE TABLE IF NOT EXISTS `test`.`MainCategory` (
  `idx` BIGINT NOT NULL AUTO_INCREMENT,
  `categoryIdx` BIGINT NOT NULL,
  PRIMARY KEY (`idx`),
  INDEX `fk_MainCategory_Category1_idx` (`categoryIdx` ASC) VISIBLE,
  CONSTRAINT `fk_MainCategory_Category1`
    FOREIGN KEY (`categoryIdx`)
    REFERENCES `test`.`Category` (`categoryIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentMainCategory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentMainCategory` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentMainCategory` (
  `cMainCategoryIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `mainCategoryIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`cMainCategoryIdx`),
  INDEX `fk_ContentMainCategory_MainCategory1_idx` (`mainCategoryIdx` ASC) VISIBLE,
  INDEX `fk_ContentMainCategory_Content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentMainCategory_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_ContentMainCategory_MainCategory1`
    FOREIGN KEY (`mainCategoryIdx`)
    REFERENCES `test`.`MainCategory` (`idx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`MovieCategory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`MovieCategory` ;

CREATE TABLE IF NOT EXISTS `test`.`MovieCategory` (
  `movieCategoryIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `categoryIdx` BIGINT NOT NULL,
  PRIMARY KEY (`movieCategoryIdx`),
  INDEX `fk_MovieCategory_Category1_idx` (`categoryIdx` ASC) VISIBLE,
  CONSTRAINT `fk_MovieCategory_Category1`
    FOREIGN KEY (`categoryIdx`)
    REFERENCES `test`.`Category` (`categoryIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentMovieCategory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentMovieCategory` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentMovieCategory` (
  `cMovieCategoryIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `movieCategoryIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`cMovieCategoryIdx`),
  INDEX `fk_ContentMovieCategory_MovieCategory1_idx` (`movieCategoryIdx` ASC) VISIBLE,
  INDEX `fk_ContentMovieCategory_Content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentMovieCategory_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_ContentMovieCategory_MovieCategory1`
    FOREIGN KEY (`movieCategoryIdx`)
    REFERENCES `test`.`MovieCategory` (`movieCategoryIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Producer`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Producer` ;

CREATE TABLE IF NOT EXISTS `test`.`Producer` (
  `producerIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`producerIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentProducer`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentProducer` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentProducer` (
  `contentProducerIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `producerIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`contentProducerIdx`),
  INDEX `fk_ContentProducer_Producer1_idx` (`producerIdx` ASC) VISIBLE,
  INDEX `fk_ContentProducer_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentProducer_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_ContentProducer_Producer1`
    FOREIGN KEY (`producerIdx`)
    REFERENCES `test`.`Producer` (`producerIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`SeriesCategory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`SeriesCategory` ;

CREATE TABLE IF NOT EXISTS `test`.`SeriesCategory` (
  `seriesCategoryIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `categoryIdx` BIGINT NOT NULL,
  PRIMARY KEY (`seriesCategoryIdx`),
  INDEX `fk_SeriesCategory_Category1_idx` (`categoryIdx` ASC) VISIBLE,
  CONSTRAINT `fk_SeriesCategory_Category1`
    FOREIGN KEY (`categoryIdx`)
    REFERENCES `test`.`Category` (`categoryIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentSeriesCategory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentSeriesCategory` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentSeriesCategory` (
  `cSeriesCategoryIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `seriesCategoryIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`cSeriesCategoryIdx`),
  INDEX `fk_ContentSeriesCategory_SeriesCategory1_idx` (`seriesCategoryIdx` ASC) VISIBLE,
  INDEX `fk_ContentSeriesCategory_Content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentSeriesCategory_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_ContentSeriesCategory_SeriesCategory1`
    FOREIGN KEY (`seriesCategoryIdx`)
    REFERENCES `test`.`SeriesCategory` (`seriesCategoryIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`VideoGrade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`VideoGrade` ;

CREATE TABLE IF NOT EXISTS `test`.`VideoGrade` (
  `videoGradeIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `category` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`videoGradeIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentVideoGrade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentVideoGrade` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentVideoGrade` (
  `idx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  `videoGradeIdx` BIGINT NOT NULL,
  PRIMARY KEY (`idx`),
  INDEX `fk_ContentVideoGrade_content1_idx` (`contentIdx` ASC) VISIBLE,
  INDEX `fk_ContentVideoGrade_VideoGrade1_idx` (`videoGradeIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentVideoGrade_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_ContentVideoGrade_VideoGrade1`
    FOREIGN KEY (`videoGradeIdx`)
    REFERENCES `test`.`VideoGrade` (`videoGradeIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Writer`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Writer` ;

CREATE TABLE IF NOT EXISTS `test`.`Writer` (
  `writerIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`writerIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`ContentWriter`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`ContentWriter` ;

CREATE TABLE IF NOT EXISTS `test`.`ContentWriter` (
  `contentWriterIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `writerIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`contentWriterIdx`),
  INDEX `fk_ContentWriter_Writer1_idx` (`writerIdx` ASC) VISIBLE,
  INDEX `fk_ContentWriter_Content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_ContentWriter_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_ContentWriter_Writer1`
    FOREIGN KEY (`writerIdx`)
    REFERENCES `test`.`Writer` (`writerIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Credit`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Credit` ;

CREATE TABLE IF NOT EXISTS `test`.`Credit` (
  `creditIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `createdAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `cost` INT NULL DEFAULT NULL,
  `unit` VARCHAR(10) NULL DEFAULT NULL,
  `tax` INT NULL DEFAULT NULL,
  `userIdx` BIGINT NOT NULL,
  `cardIdx` BIGINT NOT NULL,
  `info` VARCHAR(45) NULL DEFAULT NULL,
  `period` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`creditIdx`),
  INDEX `fk_Credit_user_idx` (`userIdx` ASC) VISIBLE,
  INDEX `fk_Credit_Card1_idx` (`cardIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Credit_Card1`
    FOREIGN KEY (`cardIdx`)
    REFERENCES `test`.`Card` (`cardIdx`),
  CONSTRAINT `fk_Credit_user`
    FOREIGN KEY (`userIdx`)
    REFERENCES `test`.`User` (`userIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`DetailContent`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`DetailContent` ;

CREATE TABLE IF NOT EXISTS `test`.`DetailContent` (
  `dtContentIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `season` VARCHAR(45) NULL DEFAULT NULL,
  `episode` INT NOT NULL,
  `playtime` TIME NULL DEFAULT NULL,
  `title` VARCHAR(45) NOT NULL,
  `info` VARCHAR(100) NULL DEFAULT NULL,
  `canDownload` INT NULL DEFAULT '0',
  `status` VARCHAR(10) NULL DEFAULT 'ACTIVE',
  `createdAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `quality` VARCHAR(10) NULL DEFAULT 'HD',
  `videoUrl` TEXT NULL DEFAULT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`dtContentIdx`),
  INDEX `fk_detailcontent_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_detailcontent_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`SettingLang`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`SettingLang` ;

CREATE TABLE IF NOT EXISTS `test`.`SettingLang` (
  `settingLangIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `languagePackIdx` BIGINT NOT NULL,
  `profileIdx` BIGINT NOT NULL,
  PRIMARY KEY (`settingLangIdx`),
  INDEX `fk_SettingLang_LanguagePack1_idx` (`languagePackIdx` ASC) VISIBLE,
  INDEX `fk_SettingLang_profile1_idx` (`profileIdx` ASC) VISIBLE,
  CONSTRAINT `fk_SettingLang_LanguagePack1`
    FOREIGN KEY (`languagePackIdx`)
    REFERENCES `test`.`LanguagePack` (`languagePackIdx`),
  CONSTRAINT `fk_SettingLang_profile1`
    FOREIGN KEY (`profileIdx`)
    REFERENCES `test`.`Profile` (`profileIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Dubbing`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Dubbing` ;

CREATE TABLE IF NOT EXISTS `test`.`Dubbing` (
  `dubbingIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `settingLangIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`dubbingIdx`),
  INDEX `fk_Dubbing_SettingLang1_idx` (`settingLangIdx` ASC) VISIBLE,
  INDEX `fk_Dubbing_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Dubbing_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_Dubbing_SettingLang1`
    FOREIGN KEY (`settingLangIdx`)
    REFERENCES `test`.`SettingLang` (`settingLangIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Evaluate`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Evaluate` ;

CREATE TABLE IF NOT EXISTS `test`.`Evaluate` (
  `evaluateIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `likes` INT NULL DEFAULT NULL,
  `profileIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`evaluateIdx`),
  INDEX `fk_Evaluate_profile1_idx` (`profileIdx` ASC) VISIBLE,
  INDEX `fk_Evaluate_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Evaluate_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_Evaluate_profile1`
    FOREIGN KEY (`profileIdx`)
    REFERENCES `test`.`Profile` (`profileIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Feature`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Feature` ;

CREATE TABLE IF NOT EXISTS `test`.`Feature` (
  `featureIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`featureIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`History`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`History` ;

CREATE TABLE IF NOT EXISTS `test`.`History` (
  `historyIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `watchTime` TIME NULL DEFAULT NULL,
  `status` VARCHAR(10) NULL DEFAULT 'ACTIVE',
  `profileIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`historyIdx`),
  INDEX `fk_history_profile1_idx` (`profileIdx` ASC) VISIBLE,
  INDEX `fk_history_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_history_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_history_profile1`
    FOREIGN KEY (`profileIdx`)
    REFERENCES `test`.`Profile` (`profileIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Hot`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Hot` ;

CREATE TABLE IF NOT EXISTS `test`.`Hot` (
  `hotIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`hotIdx`),
  INDEX `fk_Hot_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Hot_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`LikeContent`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`LikeContent` ;

CREATE TABLE IF NOT EXISTS `test`.`LikeContent` (
  `likeContentIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  `profileIdx` BIGINT NOT NULL,
  PRIMARY KEY (`likeContentIdx`),
  INDEX `fk_LikeContent_content1_idx` (`contentIdx` ASC) VISIBLE,
  INDEX `fk_LikeContent_profile1_idx` (`profileIdx` ASC) VISIBLE,
  CONSTRAINT `fk_LikeContent_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_LikeContent_profile1`
    FOREIGN KEY (`profileIdx`)
    REFERENCES `test`.`Profile` (`profileIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`MostSearch`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`MostSearch` ;

CREATE TABLE IF NOT EXISTS `test`.`MostSearch` (
  `mostSearchIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`mostSearchIdx`),
  INDEX `fk_MostSearch_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_MostSearch_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`MovieFeature`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`MovieFeature` ;

CREATE TABLE IF NOT EXISTS `test`.`MovieFeature` (
  `movieFeatureIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  `featureIdx` BIGINT NOT NULL,
  PRIMARY KEY (`movieFeatureIdx`),
  INDEX `fk_MovieFeature_Content1_idx` (`contentIdx` ASC) VISIBLE,
  INDEX `fk_MovieFeature_Feature1_idx` (`featureIdx` ASC) VISIBLE,
  CONSTRAINT `fk_MovieFeature_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_MovieFeature_Feature1`
    FOREIGN KEY (`featureIdx`)
    REFERENCES `test`.`Feature` (`featureIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`NewHotFeature`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`NewHotFeature` ;

CREATE TABLE IF NOT EXISTS `test`.`NewHotFeature` (
  `nhFeatureIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `featureIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`nhFeatureIdx`),
  INDEX `fk_NewHotFeature_Feature1_idx` (`featureIdx` ASC) VISIBLE,
  INDEX `fk_NewHotFeature_Content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_NewHotFeature_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_NewHotFeature_Feature1`
    FOREIGN KEY (`featureIdx`)
    REFERENCES `test`.`Feature` (`featureIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`News`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`News` ;

CREATE TABLE IF NOT EXISTS `test`.`News` (
  `newIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `openDate` VARCHAR(45) NULL DEFAULT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`newIdx`),
  INDEX `fk_New_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_New_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Recommend`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Recommend` ;

CREATE TABLE IF NOT EXISTS `test`.`Recommend` (
  `recommendIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(45) NULL DEFAULT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`recommendIdx`),
  INDEX `fk_recommend_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_recommend_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`SaveContent`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`SaveContent` ;

CREATE TABLE IF NOT EXISTS `test`.`SaveContent` (
  `saveContentIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `profileIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  `status` VARCHAR(10) NULL DEFAULT 'ACTIVE',
  PRIMARY KEY (`saveContentIdx`),
  INDEX `fk_SaveContent_profile1_idx` (`profileIdx` ASC) VISIBLE,
  INDEX `fk_SaveContent_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_SaveContent_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_SaveContent_profile1`
    FOREIGN KEY (`profileIdx`)
    REFERENCES `test`.`Profile` (`profileIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`SeriesFeature`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`SeriesFeature` ;

CREATE TABLE IF NOT EXISTS `test`.`SeriesFeature` (
  `seriesFeatureIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  `featureIdx` BIGINT NOT NULL,
  PRIMARY KEY (`seriesFeatureIdx`),
  INDEX `fk_SeriesFeature_Content1_idx` (`contentIdx` ASC) VISIBLE,
  INDEX `fk_SeriesFeature_Feature1_idx` (`featureIdx` ASC) VISIBLE,
  CONSTRAINT `fk_SeriesFeature_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_SeriesFeature_Feature1`
    FOREIGN KEY (`featureIdx`)
    REFERENCES `test`.`Feature` (`featureIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Subtitle`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Subtitle` ;

CREATE TABLE IF NOT EXISTS `test`.`Subtitle` (
  `subtitleIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `settingLangIdx` BIGINT NOT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`subtitleIdx`),
  INDEX `fk_Subtitle_SettingLang1_idx` (`settingLangIdx` ASC) VISIBLE,
  INDEX `fk_Subtitle_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Subtitle_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`),
  CONSTRAINT `fk_Subtitle_SettingLang1`
    FOREIGN KEY (`settingLangIdx`)
    REFERENCES `test`.`SettingLang` (`settingLangIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Top10Movie`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Top10Movie` ;

CREATE TABLE IF NOT EXISTS `test`.`Top10Movie` (
  `top10MovieIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `ranking` INT NULL DEFAULT NULL,
  `contentIdx` BIGINT NOT NULL,
  PRIMARY KEY (`top10MovieIdx`),
  INDEX `fk_Top10Movie_Content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Top10Movie_Content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


-- -----------------------------------------------------
-- Table `test`.`Top10Series`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`Top10Series` ;

CREATE TABLE IF NOT EXISTS `test`.`Top10Series` (
  `top10SeriesIdx` BIGINT NOT NULL AUTO_INCREMENT,
  `contentIdx` BIGINT NOT NULL,
  `ranking` INT NULL DEFAULT NULL,
  PRIMARY KEY (`top10SeriesIdx`),
  INDEX `fk_Top10_content1_idx` (`contentIdx` ASC) VISIBLE,
  CONSTRAINT `fk_Top10_content1`
    FOREIGN KEY (`contentIdx`)
    REFERENCES `test`.`Content` (`contentIdx`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb3;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;



API 명세서 (구글 스프레드시트) - 최종 22개

https://docs.google.com/spreadsheets/d/1WjskdpspvkHjqqgWzxLSvAau8WobkimmFZqJTDu7kxs/edit#gid=0


  1. userIdx를 쿼리스트링말고 pathvariable로 받기
  2. Top10 시리즈 보기에서 매주 목요일 새로운 에피소드 공개 도 보여주기 isNew가 yes이면 목요일 보내주고 isNew가 no이면 요일 안보내줌
  3. api 더 만들어보면서 어떻게 하면 시간을 단축해서 만들수 있을지 고민해보기

데이터 한정 - Path variable ex) 게시글 1개로 고정, userIdx 1번유저가 좋아요한게시글

querystring : 필터(데이터를 다 부르고 여기서 걸러주는역할), paging, 넷플릭스 시즌선택은 쿼리스트링(화면은 똑같고 데이터만 시즌별로 다른것이기때문에)

profile
가보자고

0개의 댓글