지역 선택에 관해서 고민했지만

여러 지역 선택을 관리하기 위해서는 트리거로 문자열로 변경하지 않으면

포뮬러로는 비교 선택 대상 데이터로 사용할 수 없기 때문에

어제 테스트했던 각 지역별 true/false로 진행하기로 했다.

 

그나마 장점이라면 추가할 때 각 권한 설정과 그룹만 추가한다면

확장 자체에는 큰 문제가 없을 것 같고

입력할 때 조금 지저분해 보이지만

단일 선택보다는 다중 선택으로 여러 지역에 공지할 수 있다는 것이

조금 더 메리트가 있다고 생각해 이런 방향으로 진행했다.

 

트리거를 사용할 예정이기 때문에

필드, 규칙을 모두 삭제하고

공통된 규칙에 따라 지역명 + 등급명으로 그룹 이름을 작성했고

규칙 또한 지역, 등급(VIP의 경우 추가), Post를 통해

게시글을 볼 때 지역 및 등급에 따른 규칙임을 바로 알 수 있게 했다.

 

이런 저런 충돌과 권한 설정에서 문제가 발생했고

여러 계정을 생성하려고 할 때 프로필 제한이라는 벽에 부딪혀서 결국 여러개의 테스트는 불가능했다.

 

하지만 프로필 제한을 알게 되고 전반적으로 둘러보니

파트너 및 골드, 실버(실버가 더 적다..), 로그인 유저 등 여러 종류를 볼 수 있었고

가격을 보니 파트너가 15, 로그인 파트너가 10달러로

실제로 사용하기에 더 어울리는 것 같은 로그인 파트너로 사용하기로 결정한 다음

파트너 커뮤니티 로그인 프로필을 복제하고 권한을 부여해 VIP, Partner 두 가지 프로필을 생성했다.

 

트리거에서 접근하려고 하니 user에서는 바로 profile에 접근할 수 없었는데

user.ProfileId를 통해 프로필 아이디에 접근할 수 있었고

해당 값을 다시 넣어주는 방식으로 쿼리를 짜서 프로필의 이름을 가져올 수 있었다.

 

일관된 규칙을 통해 그룹명 지역명 + 프로필명으로 통일했기 때문에

groupName = location + ' ' + profileName이라는 규칙이 성립할 수 있었고

[SELECT Id FROM Group WHERE Name IN :groupNameArr]로 조회가 가능했다.

 

여기서 문제 되는 것들은 아래 세가지인데

  1. 트리거 내부에서 if, for문 사용 금지..?
  2. for문 내부에서 쿼리 금지
  3. CRUD 사용 방식 불편

일단 기능적으로 작동하는 것이 우선이기 때문에

CMD 경고는 뒤로 하고 자동 트리거 처리를 확인하기로 했다.

 

일단 트리거 해결 방법을 생각해보면

1번 문제는 클래스를 하나 생성해서 처리해주고

해당 클래스로 trigger.new를 넘겨주면 될 것 같고

2번 문제는 조금 복잡하지만 전체 쿼리에서 id만 따온 다음

해당 id에 데이터를 맵핑해서 for문이 돌 때 id로 해당 값과 연계되는 처리를 하고

CRUD 사용 방식 문제는 database()로 처리하면 해결될 것 같다.

 

중간에 처리가 되지 않아 잠깐 당황했지만

new GroupMember가 아닌 GroupMember로 처리했던 것이라 바로 해결할 수 있었다.

 

 

 

 

 

(1).백준 15236번 Dominos는 도미노 위에 1, 2, 0 세 가지가 들어갈 수 있고

각자 다른 표기 방식으로 몇 개의 숫자가 올 수 있는지를 묻는 문제였지만

문제가 조금 이상해서 제대로 이해하기는 어려웠다.

 

하지만 테스트케이스와 아웃풋을 보면 규칙이 n*(n+1)*(n+2)/2형태임을 발견할 수 있었고

해당 내용을 console로 찍어 해결했다.

const input = 15

console.log(input*(input+1)*(input+2)/2)

'회고' 카테고리의 다른 글

[수습일지] - 61  (0) 2023.05.26
[수습일지] - 60  (0) 2023.05.25
[수습일지] - 58  (0) 2023.05.23
[수습일지] - 57  (0) 2023.05.22
[수습일지] - 56(주말)  (0) 2023.05.21

+ Recent posts