feat: 전체 멤버인 경우 '프로미스나인'으로 표시
- 백엔드: buildMemberMap, getScheduleDetail 함수에서 현재 활동 멤버 전원인 경우 "프로미스나인"으로 대체하여 반환 - 프론트엔드: getDisplayMembers 함수에서 멤버 수 계산 로직 제거 (백엔드에서 처리) - 탈퇴 멤버(is_former=1) 제외하고 현재 활동 멤버만 계산 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
ff5c168529
commit
9515db712d
3 changed files with 39 additions and 11 deletions
|
|
@ -80,8 +80,21 @@ export function formatSchedule(rawSchedule, members = []) {
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 현재 활동 멤버 수 조회
|
||||
* @param {object} db - 데이터베이스 연결
|
||||
* @returns {number} 현재 활동 멤버 수
|
||||
*/
|
||||
async function getActiveMemberCount(db) {
|
||||
const [[{ count }]] = await db.query(
|
||||
'SELECT COUNT(*) as count FROM members WHERE is_former = 0'
|
||||
);
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* 멤버 맵 조회 (일정 ID → 멤버 이름 배열)
|
||||
* 전체 멤버인 경우 "프로미스나인"으로 대체
|
||||
* @param {object} db - 데이터베이스 연결
|
||||
* @param {number[]} scheduleIds - 일정 ID 배열
|
||||
* @returns {object} { scheduleId: [memberName, ...] }
|
||||
|
|
@ -91,11 +104,14 @@ export async function buildMemberMap(db, scheduleIds) {
|
|||
return {};
|
||||
}
|
||||
|
||||
// 현재 활동 멤버 수 조회
|
||||
const activeMemberCount = await getActiveMemberCount(db);
|
||||
|
||||
const [scheduleMembers] = await db.query(`
|
||||
SELECT sm.schedule_id, m.name
|
||||
FROM schedule_members sm
|
||||
JOIN members m ON sm.member_id = m.id
|
||||
WHERE sm.schedule_id IN (?)
|
||||
WHERE sm.schedule_id IN (?) AND m.is_former = 0
|
||||
ORDER BY m.id
|
||||
`, [scheduleIds]);
|
||||
|
||||
|
|
@ -107,6 +123,13 @@ export async function buildMemberMap(db, scheduleIds) {
|
|||
memberMap[sm.schedule_id].push(sm.name);
|
||||
}
|
||||
|
||||
// 전체 멤버인 경우 "프로미스나인"으로 대체
|
||||
for (const scheduleId of Object.keys(memberMap)) {
|
||||
if (memberMap[scheduleId].length === activeMemberCount) {
|
||||
memberMap[scheduleId] = ['프로미스나인'];
|
||||
}
|
||||
}
|
||||
|
||||
return memberMap;
|
||||
}
|
||||
|
||||
|
|
@ -176,15 +199,23 @@ export async function getScheduleDetail(db, id, getXProfile = null) {
|
|||
|
||||
const s = schedules[0];
|
||||
|
||||
// 멤버 정보 조회
|
||||
// 현재 활동 멤버 수 조회
|
||||
const activeMemberCount = await getActiveMemberCount(db);
|
||||
|
||||
// 멤버 정보 조회 (탈퇴 멤버 제외)
|
||||
const [members] = await db.query(`
|
||||
SELECT m.id, m.name
|
||||
FROM schedule_members sm
|
||||
JOIN members m ON sm.member_id = m.id
|
||||
WHERE sm.schedule_id = ?
|
||||
WHERE sm.schedule_id = ? AND m.is_former = 0
|
||||
ORDER BY m.id
|
||||
`, [id]);
|
||||
|
||||
// 전체 멤버인 경우 "프로미스나인"으로 대체
|
||||
const formattedMembers = members.length === activeMemberCount
|
||||
? [{ id: 0, name: '프로미스나인' }]
|
||||
: members;
|
||||
|
||||
// 공통 필드
|
||||
const result = {
|
||||
id: s.id,
|
||||
|
|
@ -195,7 +226,7 @@ export async function getScheduleDetail(db, id, getXProfile = null) {
|
|||
name: s.category_name,
|
||||
color: s.category_color,
|
||||
},
|
||||
members,
|
||||
members: formattedMembers,
|
||||
createdAt: s.created_at,
|
||||
updatedAt: s.updated_at,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ Base URL: `/api`
|
|||
}
|
||||
]
|
||||
```
|
||||
※ 멤버가 5명 이상이면 `[{ "name": "프로미스나인" }]` 반환
|
||||
※ 현재 활동 멤버 전원인 경우 `[{ "name": "프로미스나인" }]` 반환 (탈퇴 멤버 제외)
|
||||
|
||||
**검색 응답:**
|
||||
```json
|
||||
|
|
|
|||
|
|
@ -73,16 +73,13 @@ export function getMemberList(schedule) {
|
|||
}
|
||||
|
||||
/**
|
||||
* 멤버 표시 이름 가져오기 (5명 이상이면 '프로미스나인')
|
||||
* 멤버 표시 이름 가져오기
|
||||
* 백엔드에서 전체 멤버인 경우 '프로미스나인'으로 처리함
|
||||
* @param {object} schedule - 스케줄 객체
|
||||
* @returns {string[]} 표시할 멤버 이름 배열
|
||||
*/
|
||||
export function getDisplayMembers(schedule) {
|
||||
const memberList = getMemberList(schedule);
|
||||
if (memberList.length >= 5) {
|
||||
return ['프로미스나인'];
|
||||
}
|
||||
return memberList;
|
||||
return getMemberList(schedule);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue