Reputation: 1989
I'm creating an account and then sending an email with the password. Right now it first sends the email and then saves the user. How can I change the order, because after return I can't use the email function.
How can I work around that? Should I create another function for those two?
public WorkDetail setWorkerData(PatchWorkerRequest request, User user, WorkDetail workDetail) {
if (request.getName() != null) {
user.setName(request.getName());
}
if (request.getIdCode() != null) {
user.setIdCode(request.getIdCode());
}
if (request.getEmail() != null) {
user.setEmail(request.getEmail());
}
if (request.getPhone() != null) {
user.setPhone(request.getPhone());
}
if (request.getStatus() != null) {
user.setStatus(request.getStatus());
}
// Work details
if (request.getJobRelation() != null) {
workDetail.setJobRelation(request.getJobRelation());
}
if (request.getSalary() != null) {
workDetail.setSalary(request.getSalary());
}
if (request.getDistricts() != null) {
workDetail.setDistricts(request.getDistricts());
}
if (request.getCompetences() != null) {
workDetail.setCompetences(request.getCompetences());
}
workDetail = workDetailRepository.save(workDetail);
user.setWorkDetail(workDetail);
workDetail.setUser(user);
return workDetailRepository.save(workDetail);
}
public WorkDetail createWorker(PatchWorkerRequest request) {
WorkDetail workDetail = new WorkDetail();
User user = new User();
String generatedPassword = userService.generatePassword(8);
user.setPassword(passwordEncoder.encode(generatedPassword));
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"SYDA: teile loodi kasutaja",
"Teile loodi SYDA süsteemi kasutaja. Teie parool on: " + generatedPassword +
"\nSisse saate logida kasutades emaili: " + request.getEmail());
return this.setWorkerData(request, user, workDetail);
}
Upvotes: 2
Views: 340
Reputation: 1225
Instead of
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"SYDA: teile loodi kasutaja",
"Teile loodi SYDA süsteemi kasutaja. Teie parool on: " + generatedPassword +
"\nSisse saate logida kasutades emaili: " + request.getEmail());
return this.setWorkerData(request, user, workDetail);
write
WorkDetail workDetailSaved = this.setWorkerData(request, user, workDetail);
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"SYDA: teile loodi kasutaja",
"Teile loodi SYDA süsteemi kasutaja. Teie parool on: " + generatedPassword +
"\nSisse saate logida kasutades emaili: " + request.getEmail());
return workDetailSaved;
(as proposed by Stultuske)
Example:
public WorkDetail createWorker(PatchWorkerRequest request) {
User user = buildUser(request); // builds a new User-instance from the request
String generatedPassword = userService.generatePassword(8);
user.setPassword(passwordEncoder.encode(generatedPassword));
WorkDetail workDetail = buildWorkDetail(request, user); // builds a new WorkDetail-instance from the request
workDetail.setUser(user);
workDetailRepository.save(workDetail);
user.setWorkDetail(workDetail);
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"...",
"...);
return workDetail;
}
Upvotes: 1