@devsisters/flex-workblock
FLEX의 근무시간을 Block과 BlockBundle이라는 개념으로 재구성하여, 각종 근무시간 계산을 도와줍니다!
설명
- 위의 청록색 블럭은 FLEX의 근무시간 탭에서 볼 수 있는
근무내역
입니다. - FLEX 공식 api은 위
근무내역
을 지원하지 않으며, 현재 사내에서 아래 방법들로 이용중입니다.
- FLEX에서 제공하는 근무 리포트 다운로드로 csv 파일로 받아올 수 있습니다.
- 리버스 엔지니어링을 통해 분석하고 있습니다.
- 이렇게 받아오는 데이터들은 방법마다 다른 스키마를 갖고 있으며, 심지어는 FLEX가 업데이트를 통해 스키마가 갑자기 변경되기도 합니다.
- FLEX의 버그인지 비직관적인 데이터가 내려오기도 합니다.
- 그래서 이
근무내역
들을 우리만의 Block
과 BlockBundle
이라는 개념으로 재정의하고, 근무시간 관련 계산을 돕는 모듈들을 이 패키지에서 제공합니다.
제공하는 모듈
Block
- XX:XX ~ XX:XX 사이의 근무내역을 담는 블럭입니다.
- None(비근무), Work(근무), Rest(휴게) 3가지 타입이 있습니다.
export declare class Block {
startAt: Date;
endAt: Date;
type: BlockType;
constructor(startAt: Date, endAt: Date, type: BlockType);
get duration(): Duration;
overlappedDuration(interval: Interval): Duration;
get subtype(): BlockSubtype | null;
}
BlockBundle
- Block들을 빈틈없이, 순서대로 관리해주는 BlockBundle이라는 개념입니다
- BlockBundle에 addBlock, addBlocks로 Block을 추가해주면, 항상 이 BlockBundle 속의 Block들이 정돈된 상태로 유지됩니다.
예시
-
BlockBundle을 처음 생성하였을때 (06:00~18:00)
- blocks: [
06:00~18:00 미근무 블럭
]
-
BlockBundle.addBlock(09:00~17:00 근무 블럭
) 실행시
- blocks: [
06:00~09:00 미근무 블럭
, 09:00~17:00 근무 블럭
, 17:00~18:00 미근무 블럭
]
-
- BlockBundle.addBlock(
12:00~13:00 근무 블럭
) 실행시
-
blocks: [06:00~09:00 미근무 블럭
, 09:00~12:00 근무 블럭
, 12:00~13:00 휴게 블럭
, 13:00~17:00 근무 블럭
, 17:00~18:00 미근무 블럭
]
-
이런식으로 정렬됩니다.
export declare class BlockBundle {
startAt: Date;
endAt: Date;
blocks: Block[];
constructor(startAt: Date, endAt: Date);
addBlock(block: Block): void;
addBlocks(blocks: Block[]): void;
popBlock(indexOf: number): void;
popBlocks(indexFrom: number, count: number): void;
getBlockAt(date: Date): Block;
getBlocksBetween(from: Date, to: Date): Block[];
get didWork(): boolean;
}
계산 함수들
declare const _default: {
durationToMinutes(duration: Duration): number;
getMissedCoreTime(bundle: BlockBundle, coretimeStartAt: Date, coretimeEndAt: Date): Duration;
getLateInfo(bundle: BlockBundle, coretimeStartAt: Date, coretimeEndAt: Date): functions.LateInfo;
};