드디어 마지막 주차네요!
Chapter 11이랑 12도 있는데, 이건 BE 서버 설계/코딩이 아니라 배포에 관련한 내용이라서 따로 TS 워크북은 없을 예정이에요.
다들 지금까지 따라와주셔서 고맙고 마지막까지 힘내봐요!
이번에도 DB쪽부터 시작해서 라우터로 끝나도록 순서를 반대로 구현할게요.
우선 테이블 스키마부터 시작해보죠. 이번에도 최대한 간략화한 테이블로 진행할게요.
CREATE TABLE STORE (
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(255) NOT NULL,
ADDRESS VARCHAR(255) NOT NULL
);
CREATE TABLE STORE_REVIEW (
ID INT PRIMARY KEY AUTO_INCREMENT,
STORE_ID INT NOT NULL,
USER_ID INT NOT NULL,
RATING INT NOT NULL, // 실수로 저장하기보단 정수로 저장해놓고 변환해서 사용하는걸 추천드려요
CONTENT TEXT,
FOREIGN KEY (STORE_ID) REFERENCES STORE(ID),
FOREIGN KEY (USER_ID) REFERENCES USER(ID)
);
DTO
// models/entities/store.ts
export interface Store {
id: number,
name: string,
address: string
}
// models/entities/store-review.ts
export interface StoreReview {
id: number,
storeId: number,
userId: number,
rating: number,
content: string
}
SQL
// models/sql/store-revice.ts
export const SELECT_STORE_REVIEW_BY_STORE_ID = "SELECT "
+ "R.ID AS ID, "
+ "R.STORE_ID AS STORE_ID, "
+ "R.USER_ID AS USER_ID, "
+ "R.RATING AS RATING, "
+ "R.CONTENT AS CONTENT, "
+ "U.EMAIL AS USER_EMAIL, "
+ "U.USERNAME AS USER_NAME, "
+ "U.GENDER AS USER_GENDER "
+ "FROM STORE_REVIEW R "
+ "JOIN USER U ON R.USER_ID = U.ID "
+ "WHERE STORE_ID = ? "
+ "LIMIT ?, ?;";
DAO