아직 부캐 길드 관련 로직을 구현하지 못해서 조금이나마 불편함을 덜기 위해 관리자 페이지의 길드 컨텐츠 기록 테이블에 해당 캐릭터의 본캐릭명이 출력되도록 했다.

일단 recordController에서 main_character_name도 클라이언트로 같이 전송해주도록 코드를 수정했다.

// recordController.js

const getRecordsController = async (req, res) => {
 
		...

   const characters = await CharacterService.getCharactersByGuild(guildName, worldName);
    const charactersMap = characters.reduce((acc, character) => {
      acc[character.id] = character;
      return acc;
    }, {});

    const charactersRecords = await Promise.all(
      characters.map(async (character) => {
        const records = await RecordService.getRecordsByCharacterId(character.id, week);
        return records.map((record) => ({
          ...record.toJSON(),
          character_name: character.name,
          main_character_name: character.main_character_name,
        }));
      })
    );
    const response = charactersRecords.flat();

    res.json(response);

   ...
};

클라이언트에서 main_character_name을 잘 받아온다.

Untitled

Untitled

그 후 닉네임으로 필터링 하는 부분에 본캐릭명도 같이 조회가 되도록 추가하였다.

api 조회가 불가능 한 23년 12월 21일 이후 미 접속 캐릭의 경우 본캐릭명 값이 null이기 때문에 null check가 필수였다.

const getFilteredRowIds = () => {
    return tableData.filter((row) => {
      const characterName = filters.character_name.toLowerCase(); // 대소문자 구분 없애기 위해 소문자로 변경
      const suroScore = filters.suro_score.value;
      const flagScore = filters.flag_score.value;

      const characterNameCondition =
        characterName === "" ||
        row.character_name.toLowerCase().includes(characterName) ||
        (row.main_character_name && row.main_character_name.toLowerCase().includes(characterName));

      const suroCondition =
        suroScore === undefined ||
        (filters.suro_score.operator === "max"
          ? row.suro_score <= suroScore
          : row.suro_score >= suroScore);
      const flagCondition =
        flagScore === undefined ||
        (filters.flag_score.operator === "max"
          ? row.flag_score <= flagScore
          : row.flag_score >= flagScore);

      if (filters.logical_operator === "and") {
        return (suroCondition && flagCondition) && characterNameCondition;
      } else {
        return (suroCondition || flagCondition) && characterNameCondition;
      }
    });
  };

완성! 제대로 잘 필터링 돼서 나온다!

Untitled

Untitled

++ 팀원은 본캐릭명이 안 보이길 원해서 본캐릭명 보이기 / 숨기기 버튼을 추가했다.

 const [isHidden, setIsHidden] = useState(false);
  const toggleDisplay = () => {
    setIsHidden(!isHidden);
  };

---

<button className={styles.buttonStyle} onClick={toggleDisplay}>
          {isHidden ? '본캐릭명 보이기' : '본캐릭명 숨기기'}
</button>