코드: https://github.com/ddalkyTokky/KotlinSpring_TODO_Backend
1. USE CASE
1. 파란색 원들은 로그인 없이도 가능한 작업, 보라색 원들은 로그인이 되어야만 가능한 작업이다.
2. 할일 등록하기를 제외한 나머지 보라색 원들은 할일 상세 보기 작업을 전제로 수행되어야 한다.
2. DBMS
2-1. Tables
1. Todo
작성자의 이름을 불러오기 위해 member_id 를 FK로 삼고 있다.
2. Reply
원래 순수 ERD 대로라면, (member_id, todo_id) 복합키를 PK 삼아 테이블을 완성할 수 있을 것이다. 하지만, 실제 물리 DB에서는 Reply row들을 하나씩 구분해야할 필요가 있기에, (member_id, todo_id) 로만으로는 부족하다. 이에 따라 PK는 따로 두고, 두 키는 FK 로 구현된다.
(ERD를 물리 테이블에 구현할때는 그 구조가 완벽히 동일하지 않을 수 있다는 것을 명심하자.)
3. Member
비밀번호는 해시함수 (sha256)을 사용하여 암호화 될것이다. 그리고, 이에 256길이의 secret이 사용된다. secret은 회원가입 시점마다 랜덤하게 생성되는 무작위 문자열이다.
2-2. DDL (MySQL)
CREATE TABLE `member` (
`id` bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(16) NOT NULL UNIQUE,
`pw` VARCHAR(64) NOT NULL,
`secret` VARCHAR(256) NOT NULL
);
CREATE TABLE `todo` (
`id` bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`member_id` bigint UNSIGNED NOT NULL,
`title` VARCHAR(200) NOT NULL,
`content` VARCHAR(1000) NOT NULL,
`created_at` timestamp NOT NULL,
`status` ENUM ('WORKING', 'DONE') NOT NULL,
FOREIGN KEY (member_id) REFERENCES member(id) ON DELETE CASCADE
);
CREATE TABLE `reply` (
`id` bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`member_id` bigint UNSIGNED NOT NULL,
`todo_id` bigint UNSIGNED NOT NULL,
`content` VARCHAR(255) NOT NULL,
FOREIGN KEY (member_id) REFERENCES member(id) ON DELETE CASCADE,
FOREIGN KEY (todo_id) REFERENCES todo(id) ON DELETE CASCADE
);
ALTER TABLE `todo` ADD FOREIGN KEY (`member_id`) REFERENCES `member` (`id`);
ALTER TABLE `reply` ADD FOREIGN KEY (`member_id`) REFERENCES `member` (`id`);
ALTER TABLE `reply` ADD FOREIGN KEY (`todo_id`) REFERENCES `todo` (`id`);
3. API
3-1. Todo API
API 설명 | Method | URL | Response |
할일 생성 | POST | /todos | 생성 성공 여부 |
할일 목록 조회 | GET | /todos ?order={ascend or descend} &member={memberName} &page={0 ~ } &page-size={0 ~ } |
할일 목록 |
할일 상세 조회 | GET | /todos/{todoId} | 할일 상세 정보 |
할일 수정 | PUT | todos/{todoId} | 업데이트 성공 여부 |
할일 완료 | PATCH | /todos/{todoId} | 업데이트 성공 여부 |
할일 삭제 | DELETE | /todos/{todoId} | 삭제 성공 여부 |
3-2. Reply API
API 설명 | Method | URL | Response |
댓글 생성 | POST | /reply/{todoId} | 생성 성공 여부 |
댓글 수정 | PUT | /reply/{replyId} | 수정 성공 여부 |
댓글 삭제 | DELETE | /reply/{replyId} | 삭제 성공 여부 |
3-3. Member API
API 설명 | Method | URL | Response |
회원 가입 | POST | /member/new | 가입 성공 여부 |
로그인 | POST | /member/signin | 토큰등 식별자 |
'스파르타 코딩클럽' 카테고리의 다른 글
[스파르타 코딩클럽] TODO 서버 로그인 기능 (0) | 2024.05.24 |
---|---|
[스파르타 코딩클럽] 후위연산식과 계산기 (1) | 2024.04.25 |