아웃라인
- 게시판에 붙여서도 쓸 수 있고, 스탠드얼론으로도 쓸 수 있게끔 실제 애플리케이션 로직은 추상화해서 빼낸다. 붙여 쓰는 쪽의 컨트롤러에서 라이브러리를 써서 결과값을 받은 뒤 알아서 렌더링하는 방식으로. 템플릿 라이브러리 친화적인 결과값으로 해서.. 딱히 그 값을 직접 다루고 싶지 않으면 디폴트로 따라오는 뷰에 라이브러리 결과값을 넘겨주면 html 이 튀어나오는 설정으로. Doctrine ORM 같은 걸 써서 SQL layer 를 추상화하고 싶은 생각도 있는데 이게 할만한 가치가 있는 일일까 .. -_-;
- 스탠드얼론 프론트엔드는 자체 사용자 관리 모듈을 지원.
- 문제 목록 모듈과 대회 모듈로 나뉘어짐 -- 어느 한 쪽만 켤 수 있다.
- 스탠드얼론 + 로컬 백엔드 사용하면 교내 대회 주최용 등등으로도 사용 가능하도록.
문제 관리 모듈
- 필요한 테이블: 문제 목록, 서브미션 목록, 답안 목록, 채점 데이터 및 첨부파일 목록
- 문제 탐색 기능: 문제 번호 순 검색 말고 분류별 검색 (연습문제/기출문제 구분). 기출 대회별 탐색 등을 메인으로 지원. 문제 번호 순 검색은 어디까지나 여분으로만.
- 문제 검색 기능: 본문 검색.
- 문제 관리 기능: 모두 자신만의 문제를 올릴 수 있는 것은 그대로. (셋업에 따라 관리자만 가능하도록 하게 할 수도 있다) 단 개인이 올린 문제는 공개 문제 셋과 아예 별도의 풀에 관리된다. (공개 안 된 문제가 문제 번호 차지하거나 스탯에 나오는 게 싫어서.. -_-) 개인 풀에 올라온 문제들은 자신이나 운영자만 채점받을 수 있고, 문제 수나 각종 스탯에 카운트되지 않는다. 공개 풀로 옮기는 것은 운영자만 할 수 있다. 공개 풀로 옮겨진 이후에는 원래 문제 올린 사람도 권한을 잃는다. (원래 문제 올린 사람 정보를 저장하긴 해야 한다. 아래 목적 때문에) 공개 풀로 옮겨진 문제들은 처음에는 숨김 처리 되어 있고, 관리자나 컨테스트 모듈에 의해 숨김 처리가 해제되어야 서브미션을 받을 수 있다.
컨테스트 모듈
- 페이지 목록
- Contest List
- Contest Home
- Problem Set
- Scoreboard (Virtual Scoreboard)
- Submit Solution
- Submit / View Clarification
- Contest Administration -- 문제 목록 관리, View / Answer Clarification, Send Broadcast, Ban Contestant
- 필요한 테이블: 컨테스트 목록, 컨테스트별 랭크리스트 및 서브미션 정보 테이블 (버추얼 컨테스트용), 버추얼 컨테스트 세션 목록.. 에 아직 잘 모르겠다. -.-
- clarification 기능 지원. clarification + reply, broadcast
- 컨테스트 추가 및 관리는 운영자만 가능하도록 한다. 공개 풀에 있는 문제 중, 자신이 추가한 숨김 문제 혹은 공개 문제를 추가할 수 있다. 컨테스트 시작시에는 해당 문제들은 자동으로 공개 처리된다. 따라서 실제로 대회 시작시에는 항상 공개 풀에 있는 문제를 푸는 셈이 된다. 단, 컨테스트 모듈에서 서브미션을 해야 컨테스트 랭크리스트에 포함될 수 있다. (div1, div2 나뉘어서 할 수도 있으니 흠)
- 버추얼 컨테스트 모드 지원: 끝난 대회에서만 지원한다.