Skip to content

candidate flow

Kim DongHyun edited this page Feb 24, 2025 · 1 revision

후보일정 검색 flow chart

데이터 블록

flowchart TD
    A[Data Block <br>discussionId:mintuteKey:data]
    B[Key]
    C[Value]
    D[discussion ID]
    E[Minute Key: 시간대 정보 <br>-> 30분 단위]
    F[16 bit data<br>-> 참여자 당 고유 1 bit 할당]
    G[각 bit: 해당 참여자의 일정이 해당 시간대에 존재하는지<br> 1: 일정 있음, 0: 없음]
    
    A --> B
    A --> C
    B --> D
    B --> E
    C --> F
    F --> G

Loading

후보 일정 산출 flow

flowchart TD
    A([후보 일정 조회 요청])
    B[전처리]
    C[Redis]
    D[조회]
    E[개인 일정 변경]
    H[후보 일정 산출]
    I[후보 일정 정렬<br>1. 조정 필요 인원 ASC<br>2. 총 조정 시간 ASC<br>3. 시작 시간 ASC]
    J[후보 일정 개수 제한<br>: 상위 n개 <br> n = 6, 2d, 30]
    K[응답: 정렬된 후보 일정 리스트<br>• 시작/종료 시간<br>• 조율 필요 유저 정보]
    
    A --> H
    E --> B --> C
    H --> D --> C
    H --> I
    I --> J
    J --> K

Loading

전처리

flowchart TD
    A[Personal Event]
    B[30분 단위 Data Block 생성]
    D[시간대 가공 <br>• 시작 시간 내림<br>•  종료 시간 올림]
    E[Data Block 수정]
    F[Data Block]
    G[Discussion<br>• 날짜 범위<br>• 시간 범위]
    H[User]
    I[고유 index<br>: bit offset]
    J[시간대에 해당하는 Block]
    

    G --> B --> F
    A --> D --> J --> E --> F
    H --> I --> E
    H --> A

Loading

산출

flowchart TD
    A([후보 일정 산출 요청])
    B[필요 블록 수 계산 <br> 2시간 → 4블록]
    C[각 후보 일정 시간대<br>: 연속된 4개의 Block]
    D[Data Block 1]
    J[Data Block 2]
    K[Data Block 3]
    L[Data Block 4]
    E(OR 연산 <br>-> 해당 시간대에 조정해야 하는 인원, 유저 정보)
    F([연산 진행])
    G(Block 당 1의 개수 합산<br>-> 총 조정 시간)
    H[User Filter 적용 <br>: AND 연산]
    I[출력: 후보 일정 정보 <br>• 시작 / 종료 시간<br>• 조정 필요 인원<br>• 총 조정 시간<br>• 조정 필요 유저 리스트]
    M[Filter]
    N[Filter]
    O[Filter]
    
    A --> B --> C
    C --> D --> H --> F
    C --> K --> N --> F
    C --> L --> O --> F
    C --> J --> M --> F
    F --> E --> I
    F --> G --> I

Loading

Clone this wiki locally