1
- // Copyright 2023 (c) Andrea Scuderi - https://github.com/swift-serverless
1
+ // Copyright 2024 (c) Andrea Scuderi - https://github.com/swift-serverless
2
2
//
3
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
4
// you may not use this file except in compliance with the License.
@@ -18,76 +18,33 @@ import BreezeDynamoDBService
18
18
import BreezeHTTPClientService
19
19
import AWSLambdaRuntime
20
20
21
- public actor BreezeLambdaAPIService < T: BreezeCodable > : Service {
21
+ public actor BreezeLambdaAPI < T: BreezeCodable > : Service {
22
22
23
- let logger = Logger ( label: " service-group " )
23
+ let logger = Logger ( label: " service-group-breeze-lambda-api " )
24
24
let timeout : TimeAmount
25
25
let httpClientService : BreezeHTTPClientServing
26
26
let dynamoDBService : BreezeDynamoDBServing
27
27
let breezeLambdaService : BreezeLambdaService < T >
28
28
private let serviceGroup : ServiceGroup
29
+ private let apiConfig : any APIConfiguring
29
30
30
- static func currentRegion( ) -> Region {
31
- if let awsRegion = Lambda . env ( " AWS_REGION " ) {
32
- let value = Region ( rawValue: awsRegion)
33
- return value
34
- } else {
35
- return . useast1
36
- }
37
- }
38
-
39
- static func tableName( ) throws -> String {
40
- guard let tableName = Lambda . env ( " DYNAMO_DB_TABLE_NAME " ) else {
41
- throw BreezeLambdaAPIError . tableNameNotFound
42
- }
43
- return tableName
44
- }
45
-
46
- static func keyName( ) throws -> String {
47
- guard let tableName = Lambda . env ( " DYNAMO_DB_KEY " ) else {
48
- throw BreezeLambdaAPIError . keyNameNotFound
49
- }
50
- return tableName
51
- }
52
-
53
- static func endpoint( ) -> String ? {
54
- if let localstack = Lambda . env ( " LOCALSTACK_ENDPOINT " ) ,
55
- !localstack. isEmpty {
56
- return localstack
57
- }
58
- return nil
59
- }
60
-
61
- static func operation( ) throws -> BreezeOperation {
62
- guard let handler = Lambda . env ( " _HANDLER " ) ,
63
- let operation = BreezeOperation ( handler: handler)
64
- else {
65
- throw BreezeLambdaAPIError . invalidHandler
66
- }
67
- return operation
68
- }
69
-
70
- public init ( dbTimeout: Int64 = 30 ) throws {
31
+ public init ( apiConfig: APIConfiguring = BreezeAPIConfiguration ( ) ) throws {
71
32
do {
72
- self . timeout = . seconds( dbTimeout)
33
+ self . apiConfig = apiConfig
34
+ self . timeout = . seconds( apiConfig. dbTimeout)
73
35
self . httpClientService = BreezeHTTPClientService (
74
36
timeout: timeout,
75
37
logger: logger
76
38
)
77
- let config = BreezeDynamoDBConfig (
78
- region: Self . currentRegion ( ) ,
79
- tableName: try Self . tableName ( ) ,
80
- keyName: try Self . keyName ( ) ,
81
- endpoint: Self . endpoint ( )
82
- )
39
+ let config = try apiConfig. getConfig ( )
83
40
let serviceConfig = BreezeClientServiceConfig (
84
41
httpClientService: httpClientService,
85
42
logger: logger
86
43
)
87
44
self . dynamoDBService = BreezeDynamoDBService ( config: config, serviceConfig: serviceConfig)
88
45
self . breezeLambdaService = BreezeLambdaService < T > (
89
46
dynamoDBService: dynamoDBService,
90
- operation: try Self . operation ( ) ,
47
+ operation: try apiConfig . operation ( ) ,
91
48
logger: logger
92
49
)
93
50
self . serviceGroup = ServiceGroup (
@@ -114,14 +71,14 @@ public actor BreezeLambdaAPIService<T: BreezeCodable>: Service {
114
71
)
115
72
} catch {
116
73
logger. error ( " \( error. localizedDescription) " )
117
- fatalError ( error. localizedDescription )
74
+ throw error
118
75
}
119
76
}
120
77
121
78
public func run( ) async throws {
122
79
logger. info ( " Starting BreezeLambdaAPIService... " )
123
80
try await serviceGroup. run ( )
124
- logger. info ( " Shutting down BreezeLambdaAPIService..." )
81
+ logger. info ( " Stopping BreezeLambdaAPIService..." )
125
82
try await gracefulShutdown ( )
126
83
logger. info ( " BreezeLambdaAPIService is stopped. " )
127
84
}
0 commit comments