BeanConfiguration.java
package com.wilzwert.myjobs.infrastructure.configuration;
import com.wilzwert.myjobs.core.application.usecase.*;
import com.wilzwert.myjobs.core.domain.model.job.ports.driven.JobDataManager;
import com.wilzwert.myjobs.core.domain.model.user.ports.driven.*;
import com.wilzwert.myjobs.core.domain.model.job.ports.driven.extractor.JobMetadataExtractorService;
import com.wilzwert.myjobs.core.domain.model.job.ports.driven.extractor.impl.DefaultJobMetadataExtractorService;
import com.wilzwert.myjobs.core.domain.model.job.ports.driven.extractor.impl.HtmlJobMetadataExtractor;
import com.wilzwert.myjobs.core.domain.model.job.ports.driven.extractor.impl.JsonLdJobMetadataExtractor;
import com.wilzwert.myjobs.core.domain.model.user.ports.driving.SendJobsRemindersUseCase;
import com.wilzwert.myjobs.core.domain.shared.ports.driven.FileStorage;
import com.wilzwert.myjobs.core.domain.shared.ports.driven.HtmlSanitizer;
import com.wilzwert.myjobs.core.domain.shared.ports.driven.event.IntegrationEventPublisher;
import com.wilzwert.myjobs.core.domain.shared.ports.driven.fetcher.HtmlFetcherService;
import com.wilzwert.myjobs.core.domain.shared.ports.driven.fetcher.JsHtmlFetcher;
import com.wilzwert.myjobs.core.domain.shared.ports.driven.fetcher.StaticHtmlFetcher;
import com.wilzwert.myjobs.core.domain.model.user.ports.driving.DeleteAccountUseCase;
import com.wilzwert.myjobs.core.domain.model.job.ports.driving.ExtractJobMetadataUseCase;
import com.wilzwert.myjobs.core.domain.model.user.ports.driving.LoginUseCase;
import com.wilzwert.myjobs.core.domain.model.user.ports.driving.RegisterUseCase;
import com.wilzwert.myjobs.core.domain.model.job.service.JobMetadataService;
import com.wilzwert.myjobs.core.domain.shared.ports.driven.transaction.TransactionProvider;
import com.wilzwert.myjobs.infrastructure.adapter.fetcher.CustomHtmlFetcherService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Wilhelm Zwertvaegher
*/
@Configuration
public class BeanConfiguration {
@Bean
RegisterUseCase registerUseCase(TransactionProvider transactionProvider, IntegrationEventPublisher integrationEventPublisher,UserDataManager userDataManager, PasswordHasher passwordHasher, AccountCreationMessageProvider messageProvider) {
return new RegisterUseCaseImpl(transactionProvider, integrationEventPublisher, userDataManager, passwordHasher, messageProvider);
}
@Bean
LoginUseCase loginUseCase(UserDataManager userDataManager, PasswordHasher passwordHasher, Authenticator authenticator) {
return new LoginUseCaseImpl(userDataManager, passwordHasher, authenticator);
}
@Bean
DeleteAccountUseCase deleteAccountUseCase(TransactionProvider transactionProvider, IntegrationEventPublisher integrationEventPublisher, UserDataManager userDataManager, FileStorage fileStorage) {
return new DeleteAccountUseCaseImpl(transactionProvider, integrationEventPublisher, userDataManager, fileStorage);
}
@Bean
JobUseCaseImpl jobUseCase(TransactionProvider transactionProvider, IntegrationEventPublisher integrationEventPublisher, JobDataManager jobDataManager, UserDataManager userDataManager, FileStorage fileStorage, HtmlSanitizer htmlSanitizer) {
return new JobUseCaseImpl(transactionProvider, integrationEventPublisher, jobDataManager, userDataManager, fileStorage, htmlSanitizer);
}
@Bean
PasswordUseCaseImpl passwordUseCase(UserDataManager userDataManager, PasswordResetMessageProvider passwordResetMessageProvider, PasswordHasher passwordHasher) {
return new PasswordUseCaseImpl(userDataManager, passwordResetMessageProvider, passwordHasher);
}
@Bean
UserUseCaseImpl userUseCase(TransactionProvider transactionProvider, IntegrationEventPublisher integrationEventPublisher, UserDataManager userDataManager, EmailVerificationMessageProvider emailVerificationMessageProvider) {
return new UserUseCaseImpl(transactionProvider, integrationEventPublisher, userDataManager, emailVerificationMessageProvider);
}
@Bean
public HtmlFetcherService htmlFetcher(JsHtmlFetcher jsHtmlFetcher, StaticHtmlFetcher staticHtmlFetcher) {
return new CustomHtmlFetcherService()
.with(jsHtmlFetcher)
.with(staticHtmlFetcher)
;
}
@Bean
public JobMetadataExtractorService jobMetadataExtractor() {
return new DefaultJobMetadataExtractorService()
// use concrete extractors provided by domain for simplicity
.with(new JsonLdJobMetadataExtractor())
.with(new HtmlJobMetadataExtractor())
;
}
@Bean
public JobMetadataService jobMetadataExtractorService(HtmlFetcherService htmlFetcherService, JobMetadataExtractorService jobMetadataExtractorService) {
return new JobMetadataService(htmlFetcherService, jobMetadataExtractorService);
}
@Bean
ExtractJobMetadataUseCase extractJobMetadataUseCase(JobMetadataService jobMetadataService) {
return new ExtractJobMetadataUseCaseImpl(jobMetadataService);
}
@Bean
SendJobsRemindersUseCase sendJobsRemindersUseCase(JobDataManager jobDataManager, UserDataManager userDataManager, JobReminderMessageProvider messageProvider) {
return new SendJobsRemindersUseCaseImpl(jobDataManager, userDataManager, messageProvider);
}
}