diff --git a/grails-app/init/deep/dive/Application.groovy b/grails-app/init/deep/dive/Application.groovy index 9ff4f2d..410820c 100644 --- a/grails-app/init/deep/dive/Application.groovy +++ b/grails-app/init/deep/dive/Application.groovy @@ -4,8 +4,12 @@ import grails.boot.GrailsApp import grails.boot.config.GrailsAutoConfiguration import groovy.transform.CompileStatic +import org.springframework.context.annotation.ComponentScan +import org.springframework.scheduling.annotation.EnableScheduling @CompileStatic +@ComponentScan('deep.dive') +@EnableScheduling class Application extends GrailsAutoConfiguration { static void main(String[] args) { GrailsApp.run(Application, args) diff --git a/grails-app/services/deep/dive/SendEmailScheduleService.groovy b/grails-app/services/deep/dive/SendEmailScheduleService.groovy new file mode 100644 index 0000000..15e202f --- /dev/null +++ b/grails-app/services/deep/dive/SendEmailScheduleService.groovy @@ -0,0 +1,25 @@ +package deep.dive + +import groovy.util.logging.Slf4j +import org.springframework.scheduling.annotation.Scheduled + +@Slf4j +class SendEmailScheduleService { + + static lazyInit = false + + SubscriberEntityDataService subscriberEntityDataService + EmailService emailService + + @Scheduled(cron = "0 0/1 * * * ?") + void sendEmailNewsletters() { + List subscribers = subscriberEntityDataService.findAllByVerified(true, [:]) + + log.info("Sending newsletter to {} verified subscribers", subscribers.size()) + + subscribers.each { subscriber -> + emailService.sendEmail(subscriber.email, EmailType.NEWSLETTER) + } + + } +} diff --git a/grails-app/services/deep/dive/SimpleEmailService.groovy b/grails-app/services/deep/dive/SimpleEmailService.groovy index b6e2eb1..71ea4ec 100644 --- a/grails-app/services/deep/dive/SimpleEmailService.groovy +++ b/grails-app/services/deep/dive/SimpleEmailService.groovy @@ -1,10 +1,12 @@ package deep.dive import groovy.util.logging.Slf4j +import org.springframework.beans.factory.annotation.Autowired @Slf4j class SimpleEmailService implements EmailService { + @Autowired EmailComposer emailComposer void sendEmail(String recipient, EmailType emailType) { @@ -15,6 +17,9 @@ class SimpleEmailService implements EmailService { case EmailType.WELCOME: emailBody = emailComposer.composeWelcomeEmail(recipient) break + case EmailType.NEWSLETTER: + emailBody = emailComposer.composeNewsletterEmail(recipient) + break default: emailBody = null } diff --git a/src/main/groovy/deep/dive/EmailComposer.groovy b/src/main/groovy/deep/dive/EmailComposer.groovy index 2ccb79c..8ff8b4d 100644 --- a/src/main/groovy/deep/dive/EmailComposer.groovy +++ b/src/main/groovy/deep/dive/EmailComposer.groovy @@ -24,6 +24,11 @@ Please confirm your email address by clicking this link: ${serverUrl}/newsletter } + String composeNewsletterEmail(String recipient) { + "Hello ${recipient}! We hope you enjoy the newsletter" + } + + @Override void setConfiguration(Config co) { serverUrl = co.getProperty("grails.serverUrl")