Skip to content

BlockBlockYonsei/BlockBlockOrganization

Repository files navigation

BlockBlock 프로젝트 요약

이 프로젝트는 동아리 운영을 온체인에서 관리하기 위한 서비스입니다.
기수별 클럽 상태, 멤버 등록, 출석 관리, 그리고 기수 전환 절차를 Move 스마트컨트랙트로 정의하고, 프론트엔드(React/TypeScript)에서 회장/운영진/일반 부원이 각 역할에 맞는 업무를 수행합니다.

핵심 목표는 아래 세 가지입니다.

  1. 기수별 동아리 상태의 단일 소스화
    BlockBlockRegistry가 현재 기수와 클럽 ID를 기준점으로 제공하고, 모든 레지스트리는 이 기준을 따라갑니다.

  2. 운영 프로세스의 명시적 단계화
    멤버 등록 → 출석 관리 → 시트 저장 → 기수 종료/전환을 레지스트리 단위의 단계로 분리했습니다.

  3. 프론트와 온체인의 지속 동기화
    레지스트리 ID는 이벤트 기반으로 갱신되어, 새로고침 시에도 최신 상태로 복구됩니다.


1) 서비스 구조 (큰 흐름)

  1. 클럽 생성 및 상태 보관
    BlockBlockRegistry가 현재 기수/클럽 ID를 관리합니다.

  2. 멤버 등록 단계
    회장이 MemberRegistry를 생성 → 부원이 MemberInfo를 제출 → 회장이 검토 후 클럽에 반영합니다.

  3. 출석 관리 단계
    회장이 AttendanceRegistry를 생성 → 부원이 출석 등록 → 마감 후 지각/결석/병결 분류 → 출석 시트 저장.

  4. 기수 전환 단계
    회장단이 현재 클럽 종료 투표 → 다음 회장 지정 → 기수 전환 레지스트리 생성 및 투표 → 다음 기수 클럽 생성.


2) Move 모듈 구조 (역할/책임)

blockblock::blockblock

핵심 오브젝트와 역할 등록 로직을 담습니다.

  • BlockBlockYonsei: 동아리 상징 (Immutable)
  • BlockBlockRegistry: 현재/이전 기수 및 클럽 상태 저장
  • BlockBlockClub: 특정 기수 클럽 오브젝트
  • 역할 등록: register_vice_president, register_treasurer, register_planning_team_member, register_marketing_team_member
  • 출석 시트 저장: store_attendance_sheet_to_blockblockclub

blockblock::members

멤버 정보 생성용 모듈입니다.

  • MemberInfo: 이름/전공/주소/기수 정보 포함
  • create_member_info, create_member_info_by_president_or_vice_president

blockblock::member_registry

멤버 등록 요청을 수집하고, 검증된 주소를 클럽에 반영합니다.

  • MemberRegistryclub_id 포함
  • 생성/삭제 이벤트 emit (프론트에서 ID 동기화에 사용)

blockblock::attendance_registry

출석 등록/마감/분류를 담당합니다.

  • AttendanceRegistryclub_id 포함
  • 생성/삭제 이벤트 emit
  • 출석 시트로 변환 후 클럽에 저장

blockblock::next_term_registry

클럽 종료와 기수 전환을 담당합니다.

  • ClosingCurrentClubVoteRegistry: 현재 클럽 종료 투표
  • NextTermRegistry: 다음 기수 전환 투표
  • 생성/삭제 이벤트 emit

3) 프론트엔드 구조 (페이지별 역할)

Dashboard

  • 현재 클럽 역할 요약
  • 출석 시트 목록(날짜/세션 기준, 접기/펼치기)
  • 멤버/출석 레지스트리 생성 등 빠른 작업

MemberRegistration

  • 부원이 멤버 등록 요청 제출
  • 회장 검토 후 클럽 반영
  • 운영진 등록(부회장/총무/기획/홍보)

Attendance

  • 회장이 출석 레지스트리 생성
  • 부원이 출석 등록(이름/전공 포함)
  • 회장이 마감 후 지각/결석/병결 분류
  • 출석 시트 저장

TermTransition

  • 현재 클럽 종료 투표/종료
  • 기수 전환 레지스트리 생성 및 투표
  • 다음 기수 클럽 생성

4) 이벤트 기반 ID 동기화

프론트는 queryEvents를 이용해 레지스트리 ID를 최신으로 유지합니다.

  • 대상: MemberRegistry, AttendanceRegistry, NextTermRegistry, ClosingCurrentClubVoteRegistry
  • BlockBlockRegistry.current_club 기준으로 club_id 필터링
  • 삭제 이벤트 감지 시 해당 ID를 자동 초기화

5) 최신 배포 ID

src/constants.ts에 최신 패키지 및 오브젝트 ID가 반영됩니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages