package eu.lod2.rsine.feedback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@Service
public class FeedbackService {
private final Logger logger = LoggerFactory.getLogger(FeedbackService.class);
private final String DEFAULT_FEEDBACK_FILENAME = "/tmp/feedback.txt";
private Set<String> msgIdsWithReceivedFeedback = new HashSet<String>();
private String feedbackFileName = DEFAULT_FEEDBACK_FILENAME;
public FeedbackService() {
logger.warn("No feedback file name provided. Using '" +DEFAULT_FEEDBACK_FILENAME+ "'");
}
public FeedbackService(String feedbackFileName) throws IOException {
this.feedbackFileName = feedbackFileName;
}
public void handleFeedback(String issueId, String rating, String msgId) throws IOException {
ensureNotDuplicateFeedback(msgId);
BufferedWriter feedbackWriter = new BufferedWriter(new FileWriter(getOrCreateFeedbackFile(), true));
feedbackWriter.append("IssueId: " +issueId+ ", rating: " +rating+ " (msgId: " +msgId+ ")\n");
feedbackWriter.close();
msgIdsWithReceivedFeedback.add(msgId);
}
private void ensureNotDuplicateFeedback(String msgId) {
if (msgIdsWithReceivedFeedback.contains(msgId)) {
throw new DuplicateFeedbackException(msgId);
}
}
public File getOrCreateFeedbackFile() throws IOException {
File feedbackFile = new File(feedbackFileName);
if (!feedbackFile.exists()) {
feedbackFile.createNewFile();
}
return feedbackFile;
}
}