@@ -14,7 +14,7 @@ func routes(_ app: Application) throws {
1414 return " foo bar "
1515 }
1616
17- // A Parse Hook Function route.
17+ // A simple Parse Hook Function route that returns "Hello World" .
1818 app. post ( " hello " ,
1919 name: " hello " ) { req async throws -> ParseHookResponse < String > in
2020 // Note that `ParseHookResponse<String>` means a "successfull"
@@ -25,7 +25,7 @@ func routes(_ app: Application) throws {
2525 var parseRequest = try req. content
2626 . decode ( ParseHookFunctionRequest< User, FooParameters> . self )
2727
28- // If a User called the request, fetch the complete user.
28+ // If a User made the request, fetch the complete user.
2929 if parseRequest. user != nil {
3030 parseRequest = try await parseRequest. hydrateUser ( request: req)
3131 }
@@ -38,6 +38,56 @@ func routes(_ app: Application) throws {
3838 return ParseHookResponse ( success: " Hello world! " )
3939 }
4040
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+
4191 // A Parse Hook Trigger route.
4292 app. post ( " score " , " save " , " before " ,
4393 className: GameScore . className,
@@ -50,7 +100,7 @@ func routes(_ app: Application) throws {
50100 var parseRequest = try req. content
51101 . decode ( ParseHookTriggerObjectRequest< User, GameScore> . self )
52102
53- // If a User called the request, fetch the complete user.
103+ // If a User made the request, fetch the complete user.
54104 if parseRequest. user != nil {
55105 parseRequest = try await parseRequest. hydrateUser ( request: req)
56106 }
0 commit comments