EmailUnsubscribedController.java

package sk.iway.iwcm.dmail.rest;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;

import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.database.SimpleQuery;
import sk.iway.iwcm.dmail.Sender;
import sk.iway.iwcm.dmail.jpa.UnsubscribedEntity;
import sk.iway.iwcm.dmail.jpa.UnsubscribedRepository;

@RestController
public class EmailUnsubscribedController {

    private UnsubscribedRepository unsubscribedRepository;

    @Autowired
    public EmailUnsubscribedController(UnsubscribedRepository unsubscribedRepository) {
        this.unsubscribedRepository = unsubscribedRepository;
    }

    /**
     * Unsubscribe email from mailing list. Used as one click unsubscribe action (link) in email header List-Unsubscribe.
     * @param emailId
     * @param hash
     */
    @RequestMapping(path={"/rest/dmail/unsubscribe"})
	public String unsubscribeEmail(HttpServletRequest request)
	{
        String dmailStatParamValue = request.getParameter(Constants.getString("dmailStatParam"));
        int emailId = Sender.getEmailIdFromClickHash(dmailStatParamValue);

        if(emailId < 1 || Tools.isEmpty(dmailStatParamValue)) throw new ResponseStatusException(HttpStatus.BAD_REQUEST);

        String email = (new SimpleQuery()).forString("SELECT recipient_email FROM emails WHERE email_id = ?", emailId);
        if(Tools.isEmpty(email)) throw new ResponseStatusException(HttpStatus.BAD_REQUEST);

        UnsubscribedEntity newUnsubscribedEntity = new UnsubscribedEntity();
        newUnsubscribedEntity.setEmail(email);
        newUnsubscribedEntity.setCreateDate(new Date());
        newUnsubscribedEntity.setDomainId(CloudToolsForCore.getDomainId());
        unsubscribedRepository.save(newUnsubscribedEntity);

        return "OK";
	}
}