EventListenerConfig.java
package com.nonononoki.alovoa.config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import com.nonononoki.alovoa.entity.User;
import com.nonononoki.alovoa.entity.user.Gender;
import com.nonononoki.alovoa.entity.user.UserIntention;
import com.nonononoki.alovoa.entity.user.UserMiscInfo;
import com.nonononoki.alovoa.model.AlovoaException;
import com.nonononoki.alovoa.model.UserDeleteParams;
import com.nonononoki.alovoa.repo.ConversationRepository;
import com.nonononoki.alovoa.repo.GenderRepository;
import com.nonononoki.alovoa.repo.UserBlockRepository;
import com.nonononoki.alovoa.repo.UserHideRepository;
import com.nonononoki.alovoa.repo.UserIntentionRepository;
import com.nonononoki.alovoa.repo.UserLikeRepository;
import com.nonononoki.alovoa.repo.UserMiscInfoRepository;
import com.nonononoki.alovoa.repo.UserNotificationRepository;
import com.nonononoki.alovoa.repo.UserReportRepository;
import com.nonononoki.alovoa.repo.UserRepository;
import com.nonononoki.alovoa.service.UserService;
@Component
public class EventListenerConfig {
@Autowired
private UserRepository userRepo;
@Autowired
private UserLikeRepository userLikeRepo;
@Autowired
private UserHideRepository userHideRepo;
@Autowired
private UserBlockRepository userBlockRepo;
@Autowired
private UserReportRepository userReportRepo;
@Autowired
private UserNotificationRepository userNotificationRepo;
@Autowired
private ConversationRepository conversationRepo;
@Autowired
private GenderRepository genderRepo;
@Autowired
private UserMiscInfoRepository userMiscInfoRepo;
@Autowired
private UserIntentionRepository userIntentionRepo;
@Autowired
private PasswordEncoder passwordEncoder;
@Value("${app.admin.email}")
private String adminEmail;
@Value("${app.admin.key}")
private String adminKey;
private static final Logger logger = LoggerFactory.getLogger(EventListenerConfig.class);
@EventListener
public void handleContextRefresh(ApplicationStartedEvent event) {
setDefaultAdmin();
setDefaultGenders();
setDefaultIntentions();
setDefaultUserMiscInfo();
}
private void setDefaultUserMiscInfo() {
List<UserMiscInfo> userMiscInfoList = new ArrayList<>(Arrays.asList(
new UserMiscInfo(UserMiscInfo.DRUGS_TOBACCO_YES),
new UserMiscInfo(UserMiscInfo.DRUGS_TOBACCO_NO),
new UserMiscInfo(UserMiscInfo.DRUGS_TOBACCO_SOMETIMES),
new UserMiscInfo(UserMiscInfo.DRUGS_ALCOHOL_YES),
new UserMiscInfo(UserMiscInfo.DRUGS_ALCOHOL_NO),
new UserMiscInfo(UserMiscInfo.DRUGS_ALCOHOL_SOMETIMES),
new UserMiscInfo(UserMiscInfo.DRUGS_CANNABIS_YES),
new UserMiscInfo(UserMiscInfo.DRUGS_CANNABIS_NO),
new UserMiscInfo(UserMiscInfo.DRUGS_CANNABIS_SOMETIMES),
new UserMiscInfo(UserMiscInfo.DRUGS_OTHER_YES),
new UserMiscInfo(UserMiscInfo.DRUGS_OTHER_NO),
new UserMiscInfo(UserMiscInfo.DRUGS_OTHER_SOMETIMES),
new UserMiscInfo(UserMiscInfo.RELATIONSHIP_SINGLE),
new UserMiscInfo(UserMiscInfo.RELATIONSHIP_TAKEN),
new UserMiscInfo(UserMiscInfo.RELATIONSHIP_OPEN),
new UserMiscInfo(UserMiscInfo.RELATIONSHIP_OTHER),
new UserMiscInfo(UserMiscInfo.KIDS_NO),
new UserMiscInfo(UserMiscInfo.KIDS_YES),
new UserMiscInfo(UserMiscInfo.RELATIONSHIP_TYPE_MONOGAMOUS),
new UserMiscInfo(UserMiscInfo.RELATIONSHIP_TYPE_POLYAMOROUS),
new UserMiscInfo(UserMiscInfo.GENDER_IDENTITY_CIS),
new UserMiscInfo(UserMiscInfo.GENDER_IDENTITY_TRANS),
new UserMiscInfo(UserMiscInfo.POLITICS_MODERATE),
new UserMiscInfo(UserMiscInfo.POLITICS_LEFT),
new UserMiscInfo(UserMiscInfo.POLITICS_RIGHT),
new UserMiscInfo(UserMiscInfo.RELIGION_NO),
new UserMiscInfo(UserMiscInfo.RELIGION_YES),
new UserMiscInfo(UserMiscInfo.FAMILY_WANT),
new UserMiscInfo(UserMiscInfo.FAMILY_NOT_WANT),
new UserMiscInfo(UserMiscInfo.FAMILY_NOT_UNSURE)
));
userMiscInfoList.removeIf(u -> userMiscInfoRepo.existsByValue(u.getValue()));
if(!userMiscInfoList.isEmpty()) {
userMiscInfoRepo.saveAllAndFlush(userMiscInfoList);
}
}
public void setDefaultAdmin() {
if (userRepo.count() == 0) {
User user = new User(adminEmail);
user.setAdmin(true);
String enc = passwordEncoder.encode(adminKey);
user.setPassword(enc);
userRepo.saveAndFlush(user);
}
}
public void setDefaultGenders() {
if (genderRepo.count() == 0) {
Gender male = new Gender();
male.setText("male");
genderRepo.saveAndFlush(male);
Gender female = new Gender();
female.setText("female");
genderRepo.saveAndFlush(female);
Gender other = new Gender();
other.setText("other");
genderRepo.saveAndFlush(other);
}
}
public void setDefaultIntentions() {
if (userIntentionRepo.count() == 0) {
UserIntention meet = new UserIntention();
meet.setText("meet");
userIntentionRepo.saveAndFlush(meet);
UserIntention date = new UserIntention();
date.setText("date");
userIntentionRepo.saveAndFlush(date);
UserIntention sex = new UserIntention();
sex.setText("sex");
userIntentionRepo.saveAndFlush(sex);
}
}
public void removeInvalidUsers() throws AlovoaException {
List<User> users = userRepo.findAll();
UserDeleteParams userDeleteParam = UserDeleteParams.builder().conversationRepo(conversationRepo)
.userBlockRepo(userBlockRepo).userHideRepo(userHideRepo).userLikeRepo(userLikeRepo)
.userNotificationRepo(userNotificationRepo).userRepo(userRepo).userReportRepo(userReportRepo).build();
for (User user : users) {
if (!user.getEmail().contains("@")) {
try {
UserService.removeUserDataCascading(user, userDeleteParam);
userRepo.delete(userRepo.findByEmail(user.getEmail()));
userRepo.flush();
} catch (Exception e) {
logger.error(e.getMessage());
}
}
}
}
}