mirror of
https://github.com/2martens/tsw-timetable.git
synced 2026-10-17 07:57:55 +02:00
change: Allow overwriting BahnTimetable
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ import java.time.Instant
|
||||
import java.time.LocalDateTime
|
||||
|
||||
@Document
|
||||
@CompoundIndex(def = "{'userId': 1, 'routeId': 1, 'eva': 1, 'fetchedDateTime': 1}", unique = true)
|
||||
@CompoundIndex(def = "{'userId': 1, 'routeId': 1, 'eva': 1, 'fetchedDateTime': 1}")
|
||||
data class ScheduledFetchTask(
|
||||
var userId: UserId,
|
||||
var routeId: RouteId,
|
||||
|
||||
+9
@@ -4,9 +4,18 @@ import de.twomartens.timetable.bahnApi.model.Eva
|
||||
import de.twomartens.timetable.bahnApi.model.db.BahnTimetable
|
||||
import de.twomartens.timetable.types.HourAtDay
|
||||
import org.bson.types.ObjectId
|
||||
import org.springframework.data.domain.ExampleMatcher
|
||||
import org.springframework.data.mongodb.repository.MongoRepository
|
||||
|
||||
// TODO: figure out what ID type should be
|
||||
interface BahnTimetableRepository : MongoRepository<BahnTimetable, ObjectId> {
|
||||
fun findByEvaAndHourAtDay(eva: Eva, hourAtDay: HourAtDay): BahnTimetable?
|
||||
|
||||
fun getExampleMatcher(): ExampleMatcher {
|
||||
return ExampleMatcher.matching()
|
||||
.withMatcher("userId", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||
.withMatcher("eva", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||
.withMatcher("hourAtDay", ExampleMatcher.GenericPropertyMatchers.exact())
|
||||
}
|
||||
}
|
||||
+12
-1
@@ -12,6 +12,7 @@ import de.twomartens.timetable.model.db.Station
|
||||
import de.twomartens.timetable.model.repository.StationRepository
|
||||
import de.twomartens.timetable.types.HourAtDay
|
||||
import org.mapstruct.factory.Mappers
|
||||
import org.springframework.data.domain.Example
|
||||
import org.springframework.data.mongodb.core.BulkOperations
|
||||
import org.springframework.data.mongodb.core.MongoTemplate
|
||||
import org.springframework.stereotype.Service
|
||||
@@ -91,7 +92,17 @@ open class BahnDatabaseService(
|
||||
|
||||
fun storeTimetable(timetable: BahnTimetable, userId: UserId, routeId: RouteId,
|
||||
hourAtDay: HourAtDay) {
|
||||
bahnTimetableRepository.save(bahnTimetableMapper.mapToDB(timetable, userId, routeId, hourAtDay))
|
||||
val matcher = bahnTimetableRepository.getExampleMatcher()
|
||||
val dbTimetable = bahnTimetableMapper.mapToDB(timetable, userId, routeId, hourAtDay)
|
||||
val existingTimetable = bahnTimetableRepository.findOne(Example.of(dbTimetable, matcher))
|
||||
existingTimetable
|
||||
.map {
|
||||
it.stops = dbTimetable.stops
|
||||
it.station = dbTimetable.station
|
||||
it
|
||||
}
|
||||
.orElse(dbTimetable)
|
||||
bahnTimetableRepository.save(dbTimetable)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user