-
Notifications
You must be signed in to change notification settings - Fork 1
TodoList API
Todo의 정보만을 담고 있는 Plain 객체 타입
id: string;
title: string;
content: string;
owner: string;
importance: number;
until: Date;
from: Date;
prev: string[];
next: string[];
elapsedTime: number;
lastPostponed: Date;
state: 'READY' | 'DONE' | 'WAIT';
Todo의 입력을 위한 최소 프로퍼티 조건만을 가지고 있는 입력용 타입
id?: string;
title?: string;
content?: string;
owner?: string;
importance?: number;
until?: Date | string;
from?: Date | string;
prev?: string[];
next?: string[];
elapsedTime?: number;
lastPostponed?: Date | string;
state?: 'READY' | 'DONE' | 'WAIT';
type: 'imminence' | 'until' | 'importance' | 'lastPostponed' | 'title';
direction: 'ASCEND' | 'DESCEND' | 'NONE';
-
정렬 타입
-
imminence
: Todo를 마감일이 오늘 이전, 오늘, 오늘 이후인지에 따라 그룹으로 묶은 뒤 그룹 순으로 정렬합니다. -
until
: Todo를 마감일 순으로 정렬합니다. -
importance
: Todo를 중요도 순으로 정렬합니다. -
lastPostponed
: Todo를 마지막으로 미룬(미룬적이 없다면 생성된) 일자 순으로 정렬합니다. -
title
: Todo를 제목순으로 정렬합니다.
-
-
OaO 기본 정렬
const defaultCompareFunctions: SortCommand[] = [ { type: 'imminence', direction: 'ASCEND' }, { type: 'importance', direction: 'DESCEND' }, { type: 'until', direction: 'ASCEND' }, { type: 'lastPostponed', direction: 'ASCEND' }, ];
- 마감일이 오늘 이전인지, 오늘인지, 오늘 이후인지의 순서에 따라 정렬합니다.
- 선행하는 정렬에서 같은 우선순위를 가진다면, 중요도가 높은 순서대로 정렬합니다.
- 선행하는 정렬에서 같은 우선순위를 가진다면, 마감일이 가까운 순서대로 정렬합니다.
- 선행하는 정렬에서 같은 우선순위를 가진다면, 미룬 일자(혹은 생성된 일자)가 가장 이른 순서대로 정렬합니다.
createTodoList(dbType [, defaultTodoList]);
-
매개변수
dbType
: Todo들의 정보를 저장할 DB Type을 나타내는 문자열. ("MemoryDB"와 "IndexedDB" 중 택 1)defaultTodoList
: (optional) 초기값으로 대입할 todo들 정보가 들어있는 PlainTodo 배열 (MemoryDB
를 사용하는 경우 초기값을 완전히 대체하며,IndexedDB
의 경우 로컬에 저장된 데이터에 인자값을 추가 삽입합니다.) -
반환값
TodoList 인스턴스
-
예시
- MemoryDB를 사용하는 경우
import {createTodoList} from '@todo/todoList'; const todoList = await createTodoList("MemoryDB", defaultTodoList);
- IndexedDB를 사용하는 경우
import {createTodoList} from '@todo/todoList'; const todoList = await createTodoList("IndexedDB", defaultTodoList);
주의) 이 메서드는 클래스 생성자로, DB 생성과 초기화 과정이 자동으로 이루어지지 않습니다. DB생성과 초기화 과정이 완료된 TodoList 인스턴스를 바로 얻으러면
createTodoList()
함수를 대신 사용하세요. DB 생성에 대해서는 문서 최하단의 더 알아보기 이후의 DB Class 설명을 참조해주세요.
새로운 TodoList 클래스 인스턴스를 반환합니다.
인자로 넘기는 todoArr는 메모리에만 초기에 일시적으로 올라가는 데이터로, DB에 접속해 todoList.init()
혹은 기타 update 메서드로 새로운 TodoList를 반환받을 때까지 임시로 todoArr의 데이터를 사용한다.
new TodoList(db [, todoArr])
-
매개변수
db
: Todo들의 정보를 저장하는 DB (ITodoListDataBase의 구현체)todoArr
: (optional) Todo 객체들이 들어있는 배열 -
반환값
TodoList 인스턴스
-
예시
- MemoryDB를 사용하는 경우
const mdb = new MemoryDB(); const todoList = new todoList(mdb); todoList.init().then(value => setTodoList(value));
- IndexedDB를 사용하는 경우
const idbFactory = new IndexedDBFactory(); const idb = await idbFactory.init(); const todoList = new todoList(idb); todoList.init().then(value => setTodoList(value));
Active Todo (= 현재 실행해야 하는 Todo ) 객체를 반환합니다.
todoList.getActiveTodo()
-
매개변수
없음
-
반환값
Active Todo의 PlainTodo 객체
해당 id를 가지는 Todo를 반환합니다.
todoList.getTodoById(id)
-
매개변수
id
: Todo의 id -
반환값
Todo의 PlainTodo 객체 혹은
undefined
Active Todo의 from 프로퍼티를 내일 00시 00분 00초
로 변경하고, 해당 변경사항이 적용된 TodoList를 새로 반환합니다. 이 메서드를 호출하면 현재의 Active Todo의 상태가 From 값 변화에 따라 자동으로 WAIT
으로 바뀌고, 다음날까지 다시는 todoList.getActiveTodo()
로 반환되지 않습니다.
todoList.postponeForToday()
-
매개변수
없음
-
반환값
새로운 TodoList 인스턴스
Active Todo의 lastPostponed 값을 현재로 변경하고, 해당 변경사항이 적용된 TodoList를 새로 반환합니다. 이 메서드에 이어 todoList.getActiveTodo()
를 호출하면, 기존의 Active Todo와 Deadline, Importance 값이 같은 다른 Todo가 반환됩니다.
todoList.postponeTemporally()
-
매개변수
없음
-
반환값
새로운 TodoList 인스턴스
Active Todo의 Deadline 값을 하루 증가시키고, 해당 변경사항이 적용된 TodoList를 새로 반환합니다.
todoList.postponeDeadline()
-
매개변수
없음
-
반환값
새로운 TodoList 인스턴스
Active Todo의 Importance 값을 한단계 낮추고, 해당 변경사항이 적용된 TodoList를 새로 반환합니다. 만약 Importance 값이 이미 최저값이라면 아무런 변경도 이루어지지 않습니다.
todoList.lowerImportance()
-
매개변수
없음
-
반환값
새로운 TodoList 인스턴스
Active Todo의 상태를 DONE
으로 변경하고, 해당 변경사항이 적용된 TodoList를 새로 반환합니다.
todoList.setDone()
-
매개변수
없음
-
반환값
새로운 TodoList 인스턴스
updateElapsedTime()
메서드는 Active Todo의 ElapsedTime 값을 인자로 주어진 값으로 변경하고, 해당 변경사항이 적용된 TodoList를 새로 반환합니다.
todoList.updateElapsedTime(elapsedTime)
-
매개변수
elapsedTime
: milliSecond로 표현된 Active Todo의 현재 소요시간 -
반환값
새로운 TodoList 인스턴스
getSortedList()
메서드는 인자로 넘긴 타입의 Todo들을 비교함수 배열 순서에 따라 정렬하여 배열에 담아 반환합니다.
todoList.getSortedList(type, compareArr)
-
매개변수
type
: 반환할 Todo 배열의 목적 상태값.DONE
,WAIT
,READY
중 하나.compareArr
: 반환한 Todo 배열의 정렬에 사용할 비교 함수들이 SortCommand 타입으로 들어있는 배열. index가 작은 비교함수가 더 우선순위가 높은 정렬 방식이 됩니다. 빈 배열이 입력되면, OaO 서비스의 기본 정렬방식을 사용해 정렬합니다. -
반환값
정렬된 Todo들의 PlainTodo 배열
getSortedListWithFilter()
메서드는 인자로 필터링 함수에 맞는 Todo들을 비교함수 배열 순서에 따라 정렬하여 배열에 담아 반환합니다.
todoList.getSortedListWithFilter(filter, compareArr)
-
매개변수
filter
: Todo를 인자로 받아 boolean을 반환하는 필터링 함수. filter 대입시 true가 반환되는 Todo만이 선별되어 최종 반환값에 포함됩니다.compareArr
: 반환한 Todo 배열의 정렬에 사용할 비교 함수의 SortCommand 타입으로 들어있는 배열. index가 작은 비교함수가 더 우선순위가 높은 정렬 방식이 됩니다. 빈 배열이 입력되면, OaO 서비스의 기본 정렬방식을 사용해 정렬합니다. -
반환값
정렬된 Todo들의 PlainTodo 배열
add()
메서드는 인자로 전달된 todo 정보를 토대로 새로운 Todo 인스턴스를 생성하여 전체 Todo 배열에 삽입하고, 해당 변경사항이 적용된 TodoList를 새로 반환합니다.
todoList.add(todo)
-
매개변수
todo
: 새로 생성할 todo의 정보를 담고 있는 객체. -
반환값
새로운 TodoList 인스턴스
edit()
메서드는 인자로 전달된 id의 Todo의 값들을 마찬가지로 인자로 전달한 todo 정보를 토대로 변경합니다. 이후 해당 변경사항이 적용된 TodoList를 새로 반환합니다.
todoList.edit(id, todo)
-
매개변수
id
: 변경할 Todo의 id 값todo
: 변경할 todo 정보를 담고 있는 객체. -
반환값
새로운 TodoList 인스턴스
인자로 전달된 id의 Todo를 TodoList에서 삭제합니다. 해당 Todo가 삭제된 새로운 TodoList를 반환합니다.
todoList.remove(id)
-
매개변수
id
: 삭제할 Todo의 id 값 -
반환값
새로운 TodoList 인스턴스
TodoList의 각종 메타데이터를 요약하여 객체로 반환합니다.
todoList.summary()
-
매개변수
없음
-
반환값
메타데이터가 담긴 객체
TodoList에 주입해서 사용 가능한 Memory를 이용하는 자체 DB 시스템 (ITodoListDataBase의 구현체)
클라이언트의 메모리를 사용하므로, 스크립트 종료 시 저장된 데이터는 휘발된다.
Memory DB를 생성한다. 인자 없이 생성할 수도 있으나, PlainTodo 배열을 인자로 넘기면 해당 인자값을 기본적으로 저장하고 있는 DB를 반환한다.
new MemoryDB([,todoList])
-
매개변수
todoList
: (optional) 초기값으로 대입할 todo들 정보가 들어있는 PlainTodo 배열 -
반환값
MemoryDB 인스턴스
TodoList에 주입해서 사용 가능한 IndexedDB API DB 시스템 (ITodoListDataBase의 구현체)
클라이언트의 디스크를 사용하므로, 스크립트를 종료해도 사용자의 로컬 환경에 데이터를 저장하고, 이후 사용시 자동으로 저장된 데이터를 불러온다.
IndexedDB 인스턴스를 생성하기 위한 팩토리 클래스를 생성한다.
IndexDB 생성을 위해서는 비동기적으로 동작하는 indexedDBFactory.createDB()
를 호출해서 반환값을 사용해야한다.
new IndexedDBFactory([,todoList])
-
매개변수
없음
-
반환값
IndexedDBFactory 인스턴스
IndexedDB 인스턴스를 생성해 리턴하는 비동기 메서드.
인자값이 없는 경우, 우선 기존에 로컬 디스크에 저장된 데이터를 탐색하고, 있다면 해당 데이터에 연결된다. 로컬에 저장된 데이터가 없다면 디스크에 위치를 확보하고, 비어있는 데이터베이스를 생성한다. 인자값을 넣어 호출하는 경우, 기존에 저장된 데이터를 유지한 채 새로 넣은 인자를 데이터베이스에 추가한다.
indexedDBFactory.createDB([,todoList])
-
매개변수
todoList
: (optional) 초기값으로 대입할 todo들 정보가 들어있는 PlainTodo 배열 -
반환값
IndexedDB 인스턴스
- OaO 환경설정 A to Z
- CRLF 너가 뭔데 날 힘들게 해?
- Github Issue 똑똑하게 사용하기
- OAO! CI CD 적용기 with release 자동화
- 매번 다른 import문
- 못생긴 상대경로에서 간zlzl존 절대경로로😎
- TodoList API 개발기
- 의존성 주입으로 DB를 바꿔보자
- 렌더링 최적화 서막: useNavigate를 추가한 순간 리렌더 범위가 확장된 건에 대하여
- 렌더링 최적화 1탄: 렌더링 범위에 대하여 (by 최적화무새)
- 렌더링 최적화 2탄: 잘못된 custom hook 사용,, 전체 리렌더링을 부르다,,
- 렌더링 최적화 3탄: Todo 상세 좀 봤다고 테이블 전체가 재렌더링 되는건을 고치기😌
- 렌더링 최적화 4탄: 다이어그램 편
- 🐁 마우스 상대위치 계산은 이상해
- React 컴포넌트에 애니메이션을 적용해보자 🏃🏻💨
- 컴포넌트 재사용성을 높여보자: Modal 분리기 🌹
- 선후관계를 자동완성으로 추가해보자 🔎