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 → 멤버 이름 배열)
|
* 멤버 맵 조회 (일정 ID → 멤버 이름 배열)
|
||||||
|
* 전체 멤버인 경우 "프로미스나인"으로 대체
|
||||||
* @param {object} db - 데이터베이스 연결
|
* @param {object} db - 데이터베이스 연결
|
||||||
* @param {number[]} scheduleIds - 일정 ID 배열
|
* @param {number[]} scheduleIds - 일정 ID 배열
|
||||||
* @returns {object} { scheduleId: [memberName, ...] }
|
* @returns {object} { scheduleId: [memberName, ...] }
|
||||||
|
|
@ -91,11 +104,14 @@ export async function buildMemberMap(db, scheduleIds) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 현재 활동 멤버 수 조회
|
||||||
|
const activeMemberCount = await getActiveMemberCount(db);
|
||||||
|
|
||||||
const [scheduleMembers] = await db.query(`
|
const [scheduleMembers] = await db.query(`
|
||||||
SELECT sm.schedule_id, m.name
|
SELECT sm.schedule_id, m.name
|
||||||
FROM schedule_members sm
|
FROM schedule_members sm
|
||||||
JOIN members m ON sm.member_id = m.id
|
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
|
ORDER BY m.id
|
||||||
`, [scheduleIds]);
|
`, [scheduleIds]);
|
||||||
|
|
||||||
|
|
@ -107,6 +123,13 @@ export async function buildMemberMap(db, scheduleIds) {
|
||||||
memberMap[sm.schedule_id].push(sm.name);
|
memberMap[sm.schedule_id].push(sm.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 전체 멤버인 경우 "프로미스나인"으로 대체
|
||||||
|
for (const scheduleId of Object.keys(memberMap)) {
|
||||||
|
if (memberMap[scheduleId].length === activeMemberCount) {
|
||||||
|
memberMap[scheduleId] = ['프로미스나인'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return memberMap;
|
return memberMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -176,15 +199,23 @@ export async function getScheduleDetail(db, id, getXProfile = null) {
|
||||||
|
|
||||||
const s = schedules[0];
|
const s = schedules[0];
|
||||||
|
|
||||||
// 멤버 정보 조회
|
// 현재 활동 멤버 수 조회
|
||||||
|
const activeMemberCount = await getActiveMemberCount(db);
|
||||||
|
|
||||||
|
// 멤버 정보 조회 (탈퇴 멤버 제외)
|
||||||
const [members] = await db.query(`
|
const [members] = await db.query(`
|
||||||
SELECT m.id, m.name
|
SELECT m.id, m.name
|
||||||
FROM schedule_members sm
|
FROM schedule_members sm
|
||||||
JOIN members m ON sm.member_id = m.id
|
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
|
ORDER BY m.id
|
||||||
`, [id]);
|
`, [id]);
|
||||||
|
|
||||||
|
// 전체 멤버인 경우 "프로미스나인"으로 대체
|
||||||
|
const formattedMembers = members.length === activeMemberCount
|
||||||
|
? [{ id: 0, name: '프로미스나인' }]
|
||||||
|
: members;
|
||||||
|
|
||||||
// 공통 필드
|
// 공통 필드
|
||||||
const result = {
|
const result = {
|
||||||
id: s.id,
|
id: s.id,
|
||||||
|
|
@ -195,7 +226,7 @@ export async function getScheduleDetail(db, id, getXProfile = null) {
|
||||||
name: s.category_name,
|
name: s.category_name,
|
||||||
color: s.category_color,
|
color: s.category_color,
|
||||||
},
|
},
|
||||||
members,
|
members: formattedMembers,
|
||||||
createdAt: s.created_at,
|
createdAt: s.created_at,
|
||||||
updatedAt: s.updated_at,
|
updatedAt: s.updated_at,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ Base URL: `/api`
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
※ 멤버가 5명 이상이면 `[{ "name": "프로미스나인" }]` 반환
|
※ 현재 활동 멤버 전원인 경우 `[{ "name": "프로미스나인" }]` 반환 (탈퇴 멤버 제외)
|
||||||
|
|
||||||
**검색 응답:**
|
**검색 응답:**
|
||||||
```json
|
```json
|
||||||
|
|
|
||||||
|
|
@ -73,16 +73,13 @@ export function getMemberList(schedule) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 멤버 표시 이름 가져오기 (5명 이상이면 '프로미스나인')
|
* 멤버 표시 이름 가져오기
|
||||||
|
* 백엔드에서 전체 멤버인 경우 '프로미스나인'으로 처리함
|
||||||
* @param {object} schedule - 스케줄 객체
|
* @param {object} schedule - 스케줄 객체
|
||||||
* @returns {string[]} 표시할 멤버 이름 배열
|
* @returns {string[]} 표시할 멤버 이름 배열
|
||||||
*/
|
*/
|
||||||
export function getDisplayMembers(schedule) {
|
export function getDisplayMembers(schedule) {
|
||||||
const memberList = getMemberList(schedule);
|
return getMemberList(schedule);
|
||||||
if (memberList.length >= 5) {
|
|
||||||
return ['프로미스나인'];
|
|
||||||
}
|
|
||||||
return memberList;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue