Search
moon
sun

사용자 흐름에 대응되는 엔드포인트

•
운영진이 어드민 화면을 열고 동아리를 만든다. → /api/clubs
◦
논의가 필요한 점
▪
관리자 사용자는 어떻게 추가해줄지(현재 구현: 아무것도 되어있지 않음)
•
1안: 동아리 만드는 순간 어드민 계정을 자동으로 만들어주고, 이후에 어드민 계정의 이름을 수정해주는 방식
•
동아리를 만들고 사람들을 추가한다. → /api/clubs/{club_id}/members
◦
논의가 필요한 점
▪
사람들을 식별하기 위해 어떤 정보까지 받을 것인지
•
고려해야 할 점 (1) 실제로 현서님이 제공한 4개의 스프레드시트 중 1개에 동명이인이 포함됨 (2) 기수를 기준으로 정렬한 시트가 있음(현재 구현: /api/clubs/{club_id}/members에 이름, 기수를 필수적으로 받도록 되어 있음, 기수는 string타입 - 왜냐하면 시트에 ‘OP’기수가 있기 때문)
{ "members": [ { "name": "김태은", "generation": "32" }, { "name": "박연우", "generation": "31", "contact": "010 1234 1234" } ] }
Plain Text
복사
▪
멤버 추가 작업이 전체 플로우 중 어느 단계에서 이루어질 것인지, 엑셀파일을 처리하는 것이 합리적인지
•
엑셀파일 업로드를 지원하는 경우 엑셀파일의 스키마를 맞추고, 이를 다운로드받아야하는 등의 불편함이 있음, 과거와 같이 ‘그냥 링크만 공유하는 방식’으로 하고, 링크에 접속하는 사람이 자신의 정보를 입력하면 자동으로 해당 동아리의 새로운 구성원으로 추가되는 방식도 나쁘지 않음.
▪
엑셀파일을 처리한다고 했는데 파싱은 프론트엔드가 할지 백엔드가 할지(현재 /api/clubs/{club_id}/members 에 프론트엔드에서 파싱을 하고 백엔드로 데이터만 전송한다는 것을 전제로 구현되어 있음. 엑셀파일 처리를 백엔드에서 처리하는 것도 가능함)
•
공연을 생성한다. → /api/performances
◦
공연명을 필수로 지정해야 하며, 나머지는 선택적 필드임. song_period_start, song_period_end은 선곡을 시작하는 시점과 선곡 마감 시점. 지정하지 않으면 상시 오픈됨. application_period_start, application_period_end은 세션 지원을 시작하는 시점과 세션 지원 마감 시점. 마찬가지로 지정하지 않으면 상시 오픈됨. performance_date는 그냥 지정할 수 있는 필드.
•
공연 링크를 공유한다.
◦
논의가 필요한 점
▪
{domain}/{performanceId}/ 와 같은 방식으로 링크를 공유해야하나? 결국 이것을 받아서 핸들링해주는 것은 프론트엔드의 몫이므로, 어떤 URL로 처리할 것인지는 약속이 필요함.
•
동아리원들이 링크에 접속하여 곡을 제안한다. → /api/performances/{performance_id}/songs
◦
곡 이름이 뭔지, 아티스트가 누군지, 어떤 세션이 있는지를 지정할 수 있음. 누가 제안했는지는 현재 시트에서도 드러나지 않듯 표시하지 않음. 개인적인 경험: 기명 제안은 초보자가 막 제안하기 어려운 느낌이 있기도 해서, 굳이 모델링하지 않음
{ "song_name": "장마전선 + 남극", "artist": "쏜애플", "youtube_link": "https://youtu.be/M3DnmCFHB6o?si=b4hqSAIcjc-jWgX_", "positions": [ { "name": "미친 보컬", "type": "Vocal", "comment": "n키업 해야함" }, { "name": "기타1", "type": "Guitar" }, { "name": "기타2", "type": "Guitar" }, { "name": "베이스", "type": "Bass Guitar" }, { "name": "드럼", "type": "Drums", "sheet_link": "https://www.akbonara.co.kr/item/31651", "comment": "노베 쌉가능, 드럼이 맛있어요." }, { "name": "키보드", "type": "Keyboard" } ], "notes": "유튜브 35:27~44:55 참고. 불구경버전 어려우면 원곡대로 가도 좋아요~! n키업 해야됨" }
JSON
복사
{ "song_name": "개화", "artist": "루시", "positions": [ { "name": "보컬", "type": "Vocal" }, { "name": "기타1", "type": "Guitar" }, { "name": "기타2", "type": "Guitar" }, { "name": "베이스", "type": "Bass Guitar" }, { "name": "드럼", "type": "Drums" }, { "name": "키보드", "type": "Keyboard" }, { "name": "바이올린", "type": "etc" } ], "notes": "투기타입니다! 바이올린 있으면 좋을 듯요" }
JSON
복사
◦
각 선곡에는 현재 스프레드시트에서 장난을 치듯 댓글을 작성할 수 있음 → /api/comments
▪
target_id에는 선곡 id를 넣으면 됨
▪
복잡한 기능은 없음. 그냥 한마디씩 던질 수 있는 공간임
{ "target_id": "01K2XXNPEM5DG37SCMZC7JTZ2X", "author_id": "01K2XZZN6BZT47MJEGTA4YD0W8", "content": "바이올린.. 집에 있어서.. 필요하다면 악보 보고 연습할 수 있을 것 같습니다...!" }
JSON
복사
김가연
{ "target_id": "01K2XXNPEM5DG37SCMZC7JTZ2X", "author_id": "01K2XZZN6BZT47MJEGTA4YD0W8", "content": "핀마이크 필요해요!" }
JSON
복사
김가연
{ "target_id": "01K2XXNPEM5DG37SCMZC7JTZ2X", "author_id": "01K2X873NC2RYEQGFWPXWSQ3ER", "content": "기타랑 보컬 할 사람!! 부탁드립니다" }
JSON
복사
김태은(임의 지정)
{ "target_id": "01K2XXNPEM5DG37SCMZC7JTZ2X", "author_id": "01K2X873NC7JCR68JN0FRYYRXJ", "content": "기타 23~24프렛 나오는듯?" }
JSON
복사
박연우(임의 지정)
{ "target_id": "01K2XXNPEM5DG37SCMZC7JTZ2X", "author_id": "01K2XA1BXVG6DW6VKY5FJ3XWNN", "content": "바이올린 들어가면 지릴듯" }
JSON
복사
배주영(임의 지정)
{ "target_id": "01K2XXNPEM5DG37SCMZC7JTZ2X", "author_id": "01K2XZZN6BGFY23T59CSZR7M4S", "content": "저도 바이올린하고싶어요" }
JSON
복사
이현준
•
동아리원들이 링크에 접속하여 자신이 지원하고 싶은 곡을 선택한다.
•
동아리원들이 링크에 접속하여 자신의 가용 시간을 입력한다. → /api/members/{member_id}/availability
◦
available_times, unavailable_times, available_but_not_preferred_times 각각에 타임 슬롯들을 지정할 수 있음. 모든 타임 슬롯들은 서로 ME(상호배타적)임.
◦
연속된 동일 상태 타임슬롯을 다시 시간구간으로 병합하는 방식으로 작동함. 예를 들어 첫 번째 요청에서 available_times를 1시~2시로 넣고 두 번째 요청에서 available_times를 2시~3시로 넣었다면 1시~3시를 반환함.
기타 생각났던 것 - ‘애매한 시간’에 대한 표현 니즈