@@ -16,37 +16,32 @@ import org.springframework.cache.annotation.EnableCaching
1616import org.springframework.context.annotation.Bean
1717import org.springframework.context.annotation.Primary
1818import org.springframework.core.io.ClassPathResource
19- import org.springframework.data.mongodb.core.convert.MongoCustomConversions
2019import org.springframework.http.HttpEntity
2120import org.springframework.http.HttpHeaders
2221import org.springframework.http.MediaType
2322import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder
2423import org.springframework.scheduling.annotation.EnableAsync
2524import org.springframework.scheduling.annotation.EnableScheduling
2625import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
27- import org.springframework.session.data.mongo.AbstractMongoSessionConverter
28- import org.springframework.session.data.mongo.JdkMongoSessionConverter
29- import org.springframework.session.data.mongo.config.annotation.web.http.EnableMongoHttpSession
3026import org.springframework.web.client.RestTemplate
3127import org.springframework.web.servlet.config.annotation.CorsRegistry
3228import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
33- import rocks.didit.sefilm.database.ImdbIdConverter
34- import rocks.didit.sefilm.database.TmdbIdConverter
3529import rocks.didit.sefilm.database.entities.BioBudord
3630import rocks.didit.sefilm.database.entities.Location
3731import rocks.didit.sefilm.database.repositories.BudordRepository
3832import rocks.didit.sefilm.database.repositories.LocationRepository
3933import rocks.didit.sefilm.database.repositories.MovieRepository
34+ import rocks.didit.sefilm.database.repositories.ShowingRepository
35+ import rocks.didit.sefilm.domain.Base64ID
4036import rocks.didit.sefilm.domain.ExternalProviderErrorHandler
4137import rocks.didit.sefilm.graphql.GraphqlExceptionHandler
4238import rocks.didit.sefilm.services.SFService
39+ import rocks.didit.sefilm.services.SlugService
4340import rocks.didit.sefilm.utils.MovieFilterUtil
41+ import rocks.didit.sefilm.web.controllers.CalendarController
4442import java.math.BigDecimal
45- import java.time.Duration
4643
4744@SpringBootApplication
48- @EnableMongoHttpSession(maxInactiveIntervalInSeconds = 172800 ) // 48 hours
49- // @EnableMongoAuditing // TODO enable when it works together with EnableMongoHttpSession
5045@EnableCaching
5146@EnableWebSecurity
5247@EnableAsync
@@ -59,39 +54,37 @@ class Application {
5954 const val API_BASE_PATH = " /api"
6055 }
6156
62- @Bean
63- fun mongoSessionConverter (): AbstractMongoSessionConverter = JdkMongoSessionConverter (Duration .ofSeconds(43200 ))
64-
65- @Bean
66- fun customMongoConverters (): MongoCustomConversions {
67- val converters = listOf (ImdbIdConverter (), TmdbIdConverter ())
68- return MongoCustomConversions (converters)
69- }
70-
7157 @Bean
7258 @Primary
73- fun getRestClient (): RestTemplate {
59+ fun getRestClient (errorHandler : ExternalProviderErrorHandler ): RestTemplate {
7460 val restClient = RestTemplate ()
75- restClient.errorHandler = ExternalProviderErrorHandler ()
61+ restClient.errorHandler = errorHandler
7662 return restClient
7763 }
7864
7965 @Bean
8066 fun getHttpEntityWithJsonAcceptHeader (): HttpEntity <Void > {
8167 val httpHeaders = HttpHeaders ()
8268 httpHeaders.accept = listOf (MediaType .APPLICATION_JSON_UTF8 )
83- httpHeaders.put(" User-Agent" , listOf (" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" ))
69+ httpHeaders.put(
70+ " User-Agent" ,
71+ listOf (" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" )
72+ )
8473 return HttpEntity (httpHeaders)
8574 }
8675
8776 @Bean
88- fun corsConfigurer (): WebMvcConfigurer {
77+ fun corsConfigurer (properties : Properties ): WebMvcConfigurer {
8978 return object : WebMvcConfigurer {
9079 override fun addCorsMappings (registry : CorsRegistry ) {
91- registry.addMapping(" /**" )
92- .allowedOrigins(" http://localhost:3000" , " https://bio.didit.rocks" )
93- .allowedMethods(" GET" , " POST" , " PUT" , " DELETE" , " HEAD" )
94- .allowCredentials(true )
80+ registry.addMapping(" /graphql" )
81+ .allowedOrigins(properties.baseUrl.frontend, properties.baseUrl.api)
82+ .allowedMethods(" GET" , " POST" , " HEAD" )
83+ .allowCredentials(false )
84+ registry.addMapping(" ${CalendarController .PATH } /**" )
85+ .allowedOrigins(properties.baseUrl.frontend, properties.baseUrl.api)
86+ .allowedMethods(" GET" , " HEAD" )
87+ .allowCredentials(false )
9588 }
9689 }
9790 }
@@ -105,6 +98,20 @@ class Application {
10598 movieRepository.deleteAll(unwantedMovies)
10699 }
107100
101+ @Bean
102+ fun createSlugsAndWebIds (showingRepository : ShowingRepository , slugService : SlugService ) = ApplicationRunner {
103+ val showingsWithMissingWebId = showingRepository
104+ .findAll()
105+ .filter {
106+ it.webId == Base64ID .MISSING
107+ }
108+
109+ val updatedShowings = showingsWithMissingWebId.map {
110+ it.copy(webId = Base64ID .random(), slug = slugService.generateSlugFor(it))
111+ }
112+ showingRepository.saveAll(updatedShowings)
113+ }
114+
108115 @Bean
109116 fun trimMovieNames (movieRepository : MovieRepository , titleExtensions : MovieFilterUtil ) = ApplicationRunner {
110117 movieRepository.findAll()
@@ -119,11 +126,15 @@ class Application {
119126 }
120127 }
121128
129+ private data class LocationAliasDTO (val sfId : String , val alias : List <String >)
130+
122131 @Bean
123- fun seedInitialData (locationsRepo : LocationRepository ,
124- budordRepo : BudordRepository ,
125- sfService : SFService ,
126- properties : Properties ) = ApplicationRunner {
132+ fun seedInitialData (
133+ locationsRepo : LocationRepository ,
134+ budordRepo : BudordRepository ,
135+ sfService : SFService ,
136+ properties : Properties
137+ ) = ApplicationRunner {
127138 if (! properties.enableSeeding) {
128139 log.info(" Seeding not enabled, ignoring..." )
129140 return @ApplicationRunner
@@ -142,27 +153,35 @@ class Application {
142153 val locationsResource = ClassPathResource (" seeds/locations.json" )
143154 val locations: List <Location > = objectMapper.readValue(locationsResource.inputStream)
144155
145- val cityAlias = properties.defaultCity
146- val locationsFromSF = sfService.getLocationsInCity(cityAlias)
156+ val locationNameAliasResource = ClassPathResource (" seeds/sf-location-aliases.json" )
157+ val locationNameAlias: List <LocationAliasDTO > = objectMapper.readValue(locationNameAliasResource.inputStream)
158+
159+ val defaultCity = properties.defaultCity
160+ val locationsFromSF = sfService.getLocationsInCity(properties.defaultCity)
147161 .map {
148- Location (it.title,
162+ Location (
163+ it.title,
149164 it.address.city[" alias" ],
150165 it.address.city[" name" ],
151166 it.address.streetAddress,
152167 it.address.postalCode,
153168 it.address.postalAddress,
154169 BigDecimal (it.address.coordinates.latitude),
155- BigDecimal (it.address.coordinates.longitude))
170+ BigDecimal (it.address.coordinates.longitude),
171+ it.ncgId,
172+ alias = locationNameAlias.firstOrNull() { alias -> alias.sfId == it.ncgId }?.alias ? : listOf ()
173+ )
156174 }
157175
158176 locationsRepo.saveAll(locations)
159177 log.info(" Seeded locations with ${locations.size} values" )
160178
161- log.info(" Seeded ${locationsRepo.saveAll(locationsFromSF).count()} locations from SF for city: $cityAlias " )
179+ log.info(" Seeded ${locationsRepo.saveAll(locationsFromSF).count()} locations from SF for city: $defaultCity " )
162180 }
163181
164182 @Bean
165- fun graphqlExecutionStrategy (graphqlExceptionHandler : GraphqlExceptionHandler ) = AsyncExecutionStrategy (graphqlExceptionHandler)
183+ fun graphqlExecutionStrategy (graphqlExceptionHandler : GraphqlExceptionHandler ) =
184+ AsyncExecutionStrategy (graphqlExceptionHandler)
166185
167186 @Bean
168187 fun graphQLServletObjectMapperConfigurer (): ObjectMapperConfigurer {
@@ -183,8 +202,7 @@ class Application {
183202 }
184203
185204 @Bean
186- fun schemaParserOptions (objConfigurer : com.coxautodev.graphql.tools.ObjectMapperConfigurer )
187- = SchemaParserOptions
205+ fun schemaParserOptions (objConfigurer : com.coxautodev.graphql.tools.ObjectMapperConfigurer ) = SchemaParserOptions
188206 .newOptions()
189207 .objectMapperConfigurer(objConfigurer)
190208 .build()
0 commit comments