UserPromptService.java
package com.nonononoki.alovoa.service;
import com.nonononoki.alovoa.entity.User;
import com.nonononoki.alovoa.entity.user.UserPrompt;
import com.nonononoki.alovoa.model.AlovoaException;
import com.nonononoki.alovoa.model.UserPromptDto;
import com.nonononoki.alovoa.repo.UserPromptRepository;
import com.nonononoki.alovoa.repo.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@Service
public class UserPromptService {
@Autowired
private UserRepository userRepo;
@Autowired
private AuthService authService;
@Value("${app.prompt.max}")
private int promptMax;
@Value("${app.prompt.length.max}")
private int promptLengthMax;
public void deletePrompt(long promptId) throws AlovoaException {
User user = authService.getCurrentUser(true);
user.getPrompts().removeIf(e -> e.getPromptId() == promptId);
userRepo.saveAndFlush(user);
}
public List<UserPrompt> addPrompt(UserPromptDto promptDto) throws AlovoaException {
validatePromptTextLength(promptDto);
User user = authService.getCurrentUser(true);
if (user.getPrompts().size() >= promptMax) {
throw new AlovoaException("Max number of prompts exceeded");
} else if (user.getPrompts().stream().anyMatch(o -> Objects.equals(o.getPromptId(),
promptDto.getPromptId()))) {
throw new AlovoaException("Prompt with same promptId already exists");
} else {
UserPrompt prompt = new UserPrompt();
prompt.setUser(user);
prompt.setPromptId(promptDto.getPromptId());
prompt.setText(promptDto.getText());
user.getPrompts().add(prompt);
return userRepo.saveAndFlush(user).getPrompts();
}
}
public List<UserPrompt> updatePrompt(UserPromptDto promptDto) throws AlovoaException {
User user = authService.getCurrentUser(true);
validatePromptTextLength(promptDto);
Optional<UserPrompt> promptOpt = user.getPrompts().stream().filter(o ->
Objects.equals(o.getPromptId(), promptDto.getPromptId())).findFirst();
if (promptOpt.isPresent()) {
UserPrompt prompt = promptOpt.get();
prompt.setText(promptDto.getText());
user.getPrompts().add(prompt);
return userRepo.saveAndFlush(user).getPrompts();
} else {
throw new AlovoaException("Prompt with promptId does not exist");
}
}
private void validatePromptTextLength(UserPromptDto promptDto) throws AlovoaException {
if (promptDto.getText().length() > promptLengthMax) {
throw new AlovoaException("Max prompt text length exceeded");
}
}
}