단순히 유저에 팀을 추가하고 끝나는 서비스라면
서비스 계층에서 단순히 UserTeam 인스턴스를 생성하고 트랜잭션을 커밋하는 방식으로 구현한다.
유저에 추가된 팀이 여러개라면 여러개의 UserTeam 인스턴스를 생성하고 트랜잭션을 커밋한다.
인스턴스 하나 생성할 때 마다 flush 할 필요는 없다고 생각된다.
이후에 진행될 로직이 추가적인 UserTeam 인스턴스를 생성하는 것이다.
flush 를 해줄 이유는 User나 Team 데이터를 사용할때 UserTeam 데이터와 일치하지 않을 수 있기 때문인데 이후 User 나 Team 데이터를 사용하지 않고 UserTeam 인스턴스만 추가로 생성하고 트랜잭션을 커밋하기 때문에 해당 로직을 모두 수행하고 트랜잭션 커밋해도 문제가 없다.
단순히 유저의 팀을 삭제하고 끝나는 서비스라면
마찬가지로 서비스 계층에서 UserTeam 인스턴스를 삭제해주면된다.
여러개의 팀을 삭제한다면 여러개의 UserTeam 인스턴스를 삭제한 뒤에 트랜잭션 커밋을 해주면 된다.
이유는 팀 추가 로직과 동일하다.
유저의 팀을 추가 삭제할 때는 위의 서비스를 이용하도록 한다면 문제가 없을 것이다.
유저가 소속된 팀이 추가 제거 되는 것을 어떻게 감시할 것인가??
유저가 소속된 팀을 추가 제거시 우리 서버에서는 즉시 확인할 수가 없고 solved ac 에 API 요청을 해야만 확인 가능하다.
이 방식은 주기적 혹은 갱신 전까지 데이터가 실제와 불일치하는 문제가 있을 수 있다.
유저가 우리 서비스에서 그룹을 변경하는 것이 아니기 때문에 다른 방법은 없는거 같다.
회의할 때 안건으로 이야기 해봐야겠다.