Skip to content

Commit

Permalink
minor updates in base and default eager loading to follow the same lo…
Browse files Browse the repository at this point in the history
…gic as with filtering
  • Loading branch information
KazaiMazai committed Dec 19, 2020
1 parent c14f077 commit c9c7054
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,20 @@ public protocol EagerLoadProvider where Key: EagerLoadingKey, Key.Model == Model
associatedtype Key

func defaultEagerLoading(_ queryBuilder: QueryBuilder<Model>) -> QueryBuilder<Model>

func baseEagerLoading(_ queryBuilder: QueryBuilder<Model>) -> QueryBuilder<Model>

var supportsDynamicEagerLoadingKeys: Bool { get }

init()
}

public extension EagerLoadProvider {
func baseEagerLoading(_ queryBuilder: QueryBuilder<Model>) -> QueryBuilder<Model> {
return queryBuilder
}
}

extension EagerLoadProvider where Key.RawValue == String {
func eagerLoadFor(builder: QueryBuilder<Model>,
includeKeys: [Self.Key]) -> QueryBuilder<Model> {
Expand All @@ -46,6 +55,11 @@ public protocol StaticEagerLoading: EagerLoadProvider { }

public extension StaticEagerLoading {
var supportsDynamicEagerLoadingKeys: Bool { return false }

func defaultEagerLoading(_ queryBuilder: QueryBuilder<Model>) -> QueryBuilder<Model> {
baseEagerLoading(queryBuilder)
}

}

//MARK: DynamicEagerLoading Protocol
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,21 @@ public extension QueryBuilder {
func with<EagerLoading: EagerLoadProvider>(_ eagerLoadProvider: EagerLoading, for req: Request) throws -> QueryBuilder<Model> where EagerLoading.Model == Model {

guard eagerLoadProvider.supportsDynamicEagerLoadingKeys else {
return eagerLoadProvider.defaultEagerLoading(self)
return eagerLoadProvider.baseEagerLoading(self)
}

let baseEagerLoaded = eagerLoadProvider.baseEagerLoading(self)

let keys = try req.query.decode(ArrayQueryRequest<EagerLoadCodingKeys>.self)
.values
.map { EagerLoading.Key(rawValue: $0) }
.compactMap { $0 }

guard keys.count > 0 else {
return eagerLoadProvider.defaultEagerLoading(self)
return eagerLoadProvider.defaultEagerLoading(baseEagerLoaded)
}

return eagerLoadProvider.eagerLoadFor(builder: self, includeKeys: keys)
return eagerLoadProvider.eagerLoadFor(builder: baseEagerLoaded, includeKeys: keys)
}
}

Expand Down
2 changes: 1 addition & 1 deletion Tests/VaporRestKitTests/Controllers/StarController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ extension StarTagControllers {
typealias Key = EmptyEagerLoadKey<Model>
typealias Model = Star

func defaultEagerLoading(_ queryBuilder: QueryBuilder<Star>) -> QueryBuilder<Star> {
func baseEagerLoading(_ queryBuilder: QueryBuilder<Star>) -> QueryBuilder<Star> {
return queryBuilder.with(\.$galaxy).with(\.$starTags)
}
}
Expand Down

0 comments on commit c9c7054

Please sign in to comment.