public interface UserService {
Long createUser(UserDto userDto);
void updateUser(UserDto userDto);
}
@Service
public class UserServiceImpl implements UserService {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Autowired
private UsersRepository usersRepository;
@Autowired
private KafkaTemplate<Long, String> kafkaTemplate;
@Override
public Long createUser(UserDto userDto) {
Users user = new Users();
user.setFirstname(userDto.getFirstname());
user.setLastname(userDto.getLastname());
user.setEmail(userDto.getEmail());
return this.usersRepository.save(user).getId();
}
@Override
@Transactional
public void updateUser(UserDto userDto) {
this.usersRepository.findById(userDto.getId())
.ifPresent(user -> {
user.setFirstname(userDto.getFirstname());
user.setLastname(userDto.getLastname());
user.setEmail(userDto.getEmail());
this.raiseEvent(userDto);
});
}
private void raiseEvent(UserDto dto){
try{
String value = OBJECT_MAPPER.writeValueAsString(dto);
this.kafkaTemplate.sendDefault(dto.getId(), value);
}catch (Exception e){
e.printStackTrace();
}
}
}