@@ -14,7 +14,7 @@ func routes(_ app: Application) throws {
14
14
return " foo bar "
15
15
}
16
16
17
- // A Parse Hook Function route.
17
+ // A simple Parse Hook Function route that returns "Hello World" .
18
18
app. post ( " hello " ,
19
19
name: " hello " ) { req async throws -> ParseHookResponse < String > in
20
20
// Note that `ParseHookResponse<String>` means a "successfull"
@@ -25,7 +25,7 @@ func routes(_ app: Application) throws {
25
25
var parseRequest = try req. content
26
26
. decode ( ParseHookFunctionRequest< User, FooParameters> . self )
27
27
28
- // If a User called the request, fetch the complete user.
28
+ // If a User made the request, fetch the complete user.
29
29
if parseRequest. user != nil {
30
30
parseRequest = try await parseRequest. hydrateUser ( request: req)
31
31
}
@@ -38,6 +38,56 @@ func routes(_ app: Application) throws {
38
38
return ParseHookResponse ( success: " Hello world! " )
39
39
}
40
40
41
+ // Another simple Parse Hook Function route that returns the version of the server.
42
+ app. post ( " version " ,
43
+ name: " version " ) { req async throws -> ParseHookResponse < String > in
44
+ // Note that `ParseHookResponse<String>` means a "successfull"
45
+ // response will return a "String" type.
46
+ if let error: ParseHookResponse < String > = checkHeaders ( req) {
47
+ return error
48
+ }
49
+ var parseRequest = try req. content
50
+ . decode ( ParseHookFunctionRequest< User, FooParameters> . self )
51
+
52
+ // If a non-User made the request, they cannot see the version.
53
+ guard parseRequest. user != nil else {
54
+ let error = ParseError ( code: . invalidSessionToken,
55
+ message: " User must be signed in to access server version " )
56
+ return ParseHookResponse < String > ( error: error)
57
+ }
58
+
59
+ do {
60
+ // If a User made the request, fetch the complete user to ensure
61
+ // their sessionToken is valid.
62
+ parseRequest = try await parseRequest. hydrateUser ( request: req)
63
+ } catch {
64
+ guard let parseError = error as? ParseError else {
65
+ let error = ParseError ( code: . otherCause,
66
+ swift: error)
67
+ return ParseHookResponse < String > ( error: error)
68
+ }
69
+ return ParseHookResponse < String > ( error: parseError)
70
+ }
71
+
72
+ do {
73
+ // Attempt to get version of the server.
74
+ guard let version = try await ParseServer . information ( ) . version else {
75
+ let error = ParseError ( code: . otherCause,
76
+ message: " Could not retrieve any information from the Server " )
77
+ return ParseHookResponse < String > ( error: error)
78
+ }
79
+ req. logger. info ( " Server version is: \( version) " )
80
+ return ParseHookResponse ( success: " \( version) " )
81
+ } catch {
82
+ guard let parseError = error as? ParseError else {
83
+ let error = ParseError ( code: . otherCause,
84
+ swift: error)
85
+ return ParseHookResponse < String > ( error: error)
86
+ }
87
+ return ParseHookResponse < String > ( error: parseError)
88
+ }
89
+ }
90
+
41
91
// A Parse Hook Trigger route.
42
92
app. post ( " score " , " save " , " before " ,
43
93
className: GameScore . className,
@@ -50,7 +100,7 @@ func routes(_ app: Application) throws {
50
100
var parseRequest = try req. content
51
101
. decode ( ParseHookTriggerObjectRequest< User, GameScore> . self )
52
102
53
- // If a User called the request, fetch the complete user.
103
+ // If a User made the request, fetch the complete user.
54
104
if parseRequest. user != nil {
55
105
parseRequest = try await parseRequest. hydrateUser ( request: req)
56
106
}
0 commit comments