|
|
|
@ -4,12 +4,12 @@ import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
import entgra.mailsender.DAO.MailDAO;
|
|
|
|
|
import entgra.mailsender.DTO.MailModel;
|
|
|
|
|
import entgra.mailsender.exception.DatabaseAccessException;
|
|
|
|
|
import entgra.mailsender.exception.FileConversionException;
|
|
|
|
|
import entgra.mailsender.exception.MailProcessingException;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.io.*;
|
|
|
|
|
import java.sql.Connection;
|
|
|
|
|
import java.sql.DriverManager;
|
|
|
|
|
import java.sql.PreparedStatement;
|
|
|
|
@ -26,82 +26,83 @@ import java.util.logging.Logger;
|
|
|
|
|
@Component
|
|
|
|
|
public class MailDAOImpl implements MailDAO {
|
|
|
|
|
|
|
|
|
|
Logger logger = Logger.getLogger(String.valueOf(MailDAOImpl.class));
|
|
|
|
|
|
|
|
|
|
private Connection getConnection() throws SQLException {
|
|
|
|
|
return DriverManager.getConnection("jdbc:mysql://localhost:3306/email_sending", "root", "StrongPassword123!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int addMail(MailModel mailModel){
|
|
|
|
|
PreparedStatement stmt;
|
|
|
|
|
int generatedId = -1;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Connection conn = this.getConnection();
|
|
|
|
|
stmt = conn.prepareStatement("INSERT INTO email (EMAIL_ADDRESS, MSG_TEMPLATE, PRIORITY, ATTACHMENT, PARAMETERS, TIME, FILENAME, EXPIRY_AT) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", PreparedStatement.RETURN_GENERATED_KEYS);
|
|
|
|
|
Timestamp current_time = new Timestamp(System.currentTimeMillis());
|
|
|
|
|
String parametersJson = new ObjectMapper().writeValueAsString(mailModel.getParameters());
|
|
|
|
|
stmt.setString(1,mailModel.getEmailAddress());
|
|
|
|
|
stmt.setString(2,mailModel.getMsgTemplate());
|
|
|
|
|
stmt.setInt(3,mailModel.getPriority());
|
|
|
|
|
stmt.setBytes(4,mailModel.getAttachment().getBytes());
|
|
|
|
|
Logger logger = Logger.getLogger(String.valueOf(MailDAOImpl.class));
|
|
|
|
|
|
|
|
|
|
private Connection getConnection() throws SQLException {
|
|
|
|
|
return DriverManager.getConnection("jdbc:mysql://localhost:3306/email_sending", "root", "StrongPassword123!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int addMail(MailModel mailModel) throws SQLException {
|
|
|
|
|
try {
|
|
|
|
|
PreparedStatement stmt;
|
|
|
|
|
int generatedId;
|
|
|
|
|
Connection conn = this.getConnection();
|
|
|
|
|
stmt = conn.prepareStatement("INSERT INTO email (EMAIL_ADDRESS, MSG_TEMPLATE, PRIORITY, ATTACHMENT, PARAMETERS, TIME, FILENAME, EXPIRY_AT) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", PreparedStatement.RETURN_GENERATED_KEYS);
|
|
|
|
|
Timestamp current_time = new Timestamp(System.currentTimeMillis());
|
|
|
|
|
String parametersJson = new ObjectMapper().writeValueAsString(mailModel.getParameters());
|
|
|
|
|
stmt.setString(1, mailModel.getEmailAddress());
|
|
|
|
|
stmt.setString(2, mailModel.getMsgTemplate());
|
|
|
|
|
stmt.setInt(3, mailModel.getPriority());
|
|
|
|
|
stmt.setBytes(4, mailModel.getAttachment().getBytes());
|
|
|
|
|
stmt.setString(5, parametersJson);
|
|
|
|
|
stmt.setTimestamp(6,current_time);
|
|
|
|
|
stmt.setTimestamp(6, current_time);
|
|
|
|
|
String filename = mailModel.getAttachment().getOriginalFilename();
|
|
|
|
|
stmt.setString(7,filename);
|
|
|
|
|
stmt.setDate(8,mailModel.getExpiry_at());
|
|
|
|
|
stmt.executeUpdate();
|
|
|
|
|
ResultSet rs = stmt.getGeneratedKeys();
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
generatedId = rs.getInt(1);
|
|
|
|
|
stmt.setString(7, filename);
|
|
|
|
|
stmt.setDate(8, mailModel.getExpiry_at());
|
|
|
|
|
stmt.executeUpdate();
|
|
|
|
|
ResultSet rs = stmt.getGeneratedKeys();
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
generatedId = rs.getInt(1);
|
|
|
|
|
return generatedId;
|
|
|
|
|
}
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new SQLException("error processing sql !!", e);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new MailProcessingException("Error processing mailModel", e);
|
|
|
|
|
}
|
|
|
|
|
logger.info("Stored successfully");
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
return generatedId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<MailModel> getUnsentMessages(){
|
|
|
|
|
String sql = "SELECT * FROM email WHERE email_id NOT IN (SELECT email_id FROM sentEmail)";
|
|
|
|
|
@Override
|
|
|
|
|
public List<MailModel> getUnsentMessages() {
|
|
|
|
|
String sql = "SELECT * FROM email WHERE email_id NOT IN (SELECT email_id FROM sentEmail)";
|
|
|
|
|
|
|
|
|
|
List<MailModel> unsentMails = new ArrayList<>();
|
|
|
|
|
List<MailModel> unsentMails = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
try(Connection connection = this.getConnection();
|
|
|
|
|
PreparedStatement statement = connection.prepareStatement(sql);
|
|
|
|
|
ResultSet rs = statement.executeQuery()) {
|
|
|
|
|
while (rs.next()){
|
|
|
|
|
MailModel mailModel = new MailModel();
|
|
|
|
|
mailModel.setEmailId(rs.getInt("email_id"));
|
|
|
|
|
mailModel.setPriority(rs.getInt("priority"));
|
|
|
|
|
mailModel.setExpiry_at(rs.getDate("expiry_at"));
|
|
|
|
|
unsentMails.add(mailModel);
|
|
|
|
|
try (Connection connection = this.getConnection();
|
|
|
|
|
PreparedStatement statement = connection.prepareStatement(sql);
|
|
|
|
|
ResultSet rs = statement.executeQuery()) {
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
MailModel mailModel = new MailModel();
|
|
|
|
|
mailModel.setEmailId(rs.getInt("email_id"));
|
|
|
|
|
mailModel.setPriority(rs.getInt("priority"));
|
|
|
|
|
mailModel.setExpiry_at(rs.getDate("expiry_at"));
|
|
|
|
|
unsentMails.add(mailModel);
|
|
|
|
|
}
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new DatabaseAccessException("Error accessing database", e);
|
|
|
|
|
}
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
return unsentMails;
|
|
|
|
|
return unsentMails;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MailModel getMailDetails(Integer mail_id){
|
|
|
|
|
@Override
|
|
|
|
|
public MailModel getMailDetails(Integer mail_id) {
|
|
|
|
|
String sql = "SELECT * FROM email WHERE email_id = ?";
|
|
|
|
|
MailModel mailModel = new MailModel();
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Connection conn = this.getConnection();
|
|
|
|
|
try(PreparedStatement stmt = conn.prepareStatement(sql)) {
|
|
|
|
|
stmt.setInt(1,mail_id);
|
|
|
|
|
try(ResultSet rs = stmt.executeQuery()) {
|
|
|
|
|
while (rs.next()){
|
|
|
|
|
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
|
|
|
|
stmt.setInt(1, mail_id);
|
|
|
|
|
try (ResultSet rs = stmt.executeQuery()) {
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
mailModel.setEmailId(rs.getInt("email_id"));
|
|
|
|
|
mailModel.setEmailAddress(rs.getString("email_address"));
|
|
|
|
|
mailModel.setMsgTemplate(rs.getString("msg_template"));
|
|
|
|
@ -111,38 +112,38 @@ public MailModel getMailDetails(Integer mail_id){
|
|
|
|
|
List<MailModel.Parameter> parameters = parseJsonParameters(jsonData);
|
|
|
|
|
mailModel.setParameters(parameters);
|
|
|
|
|
|
|
|
|
|
String filename = rs.getString("filename");
|
|
|
|
|
String filename = rs.getString("filename");
|
|
|
|
|
mailModel.setFilename(filename);
|
|
|
|
|
|
|
|
|
|
Blob blob = rs.getBlob("attachment");
|
|
|
|
|
File file = convertBlobToFile(blob,filename);
|
|
|
|
|
File file = convertBlobToFile(blob, filename);
|
|
|
|
|
mailModel.setFile(file);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return mailModel;
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new MailProcessingException("Error processing mail", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new DatabaseAccessException("Error accessing database", e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MailModel.Parameter> parseJsonParameters(String parametersJson) {
|
|
|
|
|
private List<MailModel.Parameter> parseJsonParameters(String parametersJson) {
|
|
|
|
|
try {
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
return objectMapper.readValue(parametersJson, new TypeReference<>() {
|
|
|
|
|
});
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new IllegalArgumentException("Error parsing parameters JSON", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static File convertBlobToFile(Blob blob, String fileName) throws IOException, SQLException {
|
|
|
|
|
public static File convertBlobToFile(Blob blob, String fileName) throws IOException, SQLException {
|
|
|
|
|
File file = new File(fileName);
|
|
|
|
|
try (FileOutputStream outputStream = new FileOutputStream(file)) {
|
|
|
|
|
InputStream inputStream = blob.getBinaryStream();
|
|
|
|
@ -150,31 +151,25 @@ public static File convertBlobToFile(Blob blob, String fileName) throws IOExcept
|
|
|
|
|
while (inputStream.read(buffer) > 0) {
|
|
|
|
|
outputStream.write(buffer);
|
|
|
|
|
}
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new FileConversionException("Error converting Blob to File", e);
|
|
|
|
|
}
|
|
|
|
|
return file;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void addToSentMail(Integer mail_id){
|
|
|
|
|
PreparedStatement stmt;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Connection connection = this.getConnection();
|
|
|
|
|
stmt = connection.prepareStatement("INSERT INTO sentEmail (email_id,sent_time) VALUE (?,?)");
|
|
|
|
|
stmt.setInt(1,mail_id);
|
|
|
|
|
public void addToSentMail(Integer mail_id) {
|
|
|
|
|
try {
|
|
|
|
|
PreparedStatement stmt;
|
|
|
|
|
Connection connection = this.getConnection();
|
|
|
|
|
stmt = connection.prepareStatement("INSERT INTO sentEmail (email_id,sent_time) VALUE (?,?)");
|
|
|
|
|
stmt.setInt(1, mail_id);
|
|
|
|
|
stmt.setDate(2, Date.valueOf(LocalDate.now()));
|
|
|
|
|
stmt.execute();
|
|
|
|
|
logger.info("added to sent_email successfully");
|
|
|
|
|
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
stmt.execute();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
logger.info(e.getMessage());
|
|
|
|
|
throw new DatabaseAccessException("Error accessing database", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|