@@ -19,37 +19,33 @@ import Vapor
19
19
20
20
enum AuthorController {
21
21
22
- static func query( on database: Database , owner: String ) -> EventLoopFuture < [ Joined3 < Package , Repository , Version > ] > {
23
- Joined3 < Package , Repository , Version >
22
+ static func query( on database: Database , owner: String ) async throws -> [ Joined3 < Package , Repository , Version > ] {
23
+ let packages = try await Joined3 < Package , Repository , Version >
24
24
. query ( on: database, version: . defaultBranch)
25
25
. filter ( Repository . self, \. $owner, . custom( " ilike " ) , owner)
26
26
. sort ( Version . self, \. $packageName)
27
27
. all ( )
28
- . flatMapThrowing {
29
- if $0. isEmpty {
30
- throw Abort ( . notFound)
31
- }
32
- return $0
33
- }
28
+
29
+ if packages. isEmpty { throw Abort ( . notFound) }
30
+
31
+ return packages
34
32
}
35
33
36
34
@Sendable
37
- static func show( req: Request ) throws -> EventLoopFuture < HTML > {
35
+ static func show( req: Request ) async throws -> HTML {
38
36
guard let owner = req. parameters. get ( " owner " ) else {
39
- return req . eventLoop . future ( error : Abort ( . notFound) )
37
+ throw Abort ( . notFound)
40
38
}
41
39
42
- return Self . query ( on: req. db, owner: owner)
43
- . map {
44
- AuthorShow . Model (
45
- owner: $0. first? . repository. owner ?? owner,
46
- ownerName: $0. first? . repository. ownerDisplayName ?? owner,
47
- packages: $0. compactMap ( PackageInfo . init ( package : ) )
48
- )
49
- }
50
- . map {
51
- AuthorShow . View ( path: req. url. path, model: $0) . document ( )
52
- }
40
+ let packages = try await Self . query ( on: req. db, owner: owner)
41
+
42
+ let model = AuthorShow . Model (
43
+ owner: packages. first? . repository. owner ?? owner,
44
+ ownerName: packages. first? . repository. ownerDisplayName ?? owner,
45
+ packages: packages. compactMap ( PackageInfo . init ( package : ) )
46
+ )
47
+
48
+ return AuthorShow . View ( path: req. url. path, model: model) . document ( )
53
49
}
54
50
55
51
}
0 commit comments