@@ -37,6 +37,7 @@ type ProjectQueryRunner struct {
37
37
createReq * api.CreateProjectRequest
38
38
listReq * api.ListProjectsRequest
39
39
describeReq * api.DescribeDatabaseRequest
40
+ updateReq * api.UpdateProjectRequest
40
41
}
41
42
42
43
func (runner * ProjectQueryRunner ) SetCreateProjectReq (create * api.CreateProjectRequest ) {
@@ -55,8 +56,12 @@ func (runner *ProjectQueryRunner) SetDescribeDatabaseReq(describe *api.DescribeD
55
56
runner .describeReq = describe
56
57
}
57
58
59
+ func (runner * ProjectQueryRunner ) SetUpdateProjectReq (update * api.UpdateProjectRequest ) {
60
+ runner .updateReq = update
61
+ }
62
+
58
63
func (runner * ProjectQueryRunner ) create (ctx context.Context , tx transaction.Tx , tenant * metadata.Tenant ) (Response , context.Context , error ) {
59
- projMetadata , err := createProjectMetadata (ctx )
64
+ projMetadata , err := createProjectMetadata (ctx , runner . createReq . Options )
60
65
if err != nil {
61
66
return Response {}, ctx , err
62
67
}
@@ -86,7 +91,7 @@ func (runner *ProjectQueryRunner) delete(ctx context.Context, tx transaction.Tx,
86
91
return Response {Status : DroppedStatus }, ctx , nil
87
92
}
88
93
89
- func (* ProjectQueryRunner ) list (ctx context.Context , _ transaction.Tx , tenant * metadata.Tenant ) (Response , context.Context , error ) {
94
+ func (* ProjectQueryRunner ) list (ctx context.Context , tx transaction.Tx , tenant * metadata.Tenant ) (Response , context.Context , error ) {
90
95
// listReq projects need not include any branches
91
96
92
97
projectList := tenant .ListProjects (ctx )
@@ -95,6 +100,17 @@ func (*ProjectQueryRunner) list(ctx context.Context, _ transaction.Tx, tenant *m
95
100
projects [i ] = & api.ProjectInfo {
96
101
Project : l ,
97
102
}
103
+
104
+ meta , err := tenant .GetProjectMetadata (ctx , tx , l )
105
+ if err != nil {
106
+ return Response {}, ctx , err
107
+ }
108
+ if meta != nil && meta .Limits != nil {
109
+ projects [i ].Limits = & api.ProjectLimits {
110
+ MaxCollections : meta .Limits .MaxCollections ,
111
+ MaxSearchIndexes : meta .Limits .MaxSearchIndexes ,
112
+ }
113
+ }
98
114
}
99
115
100
116
return Response {
@@ -104,6 +120,40 @@ func (*ProjectQueryRunner) list(ctx context.Context, _ transaction.Tx, tenant *m
104
120
}, ctx , nil
105
121
}
106
122
123
+ func (runner * ProjectQueryRunner ) update (ctx context.Context , tx transaction.Tx , tenant * metadata.Tenant ) (Response , context.Context , error ) {
124
+ meta , err := tenant .GetProjectMetadata (ctx , tx , runner .updateReq .GetProject ())
125
+ if err != nil {
126
+ return Response {}, ctx , err
127
+ }
128
+
129
+ if meta == nil {
130
+ meta , err = createProjectMetadata (ctx , runner .updateReq .GetOptions ())
131
+ if err != nil {
132
+ return Response {}, ctx , err
133
+ }
134
+ } else if runner .updateReq .GetOptions () != nil {
135
+ limits := runner .updateReq .GetOptions ().GetLimits ()
136
+ if limits == nil {
137
+ meta .Limits = nil
138
+ } else {
139
+ meta .Limits = & metadata.ProjectLimits {
140
+ MaxCollections : limits .MaxCollections ,
141
+ MaxSearchIndexes : limits .MaxSearchIndexes ,
142
+ }
143
+ }
144
+ }
145
+ err = tenant .UpdateProjectMetadata (ctx , tx , runner .updateReq .GetProject (), meta )
146
+ if err != nil {
147
+ return Response {}, ctx , err
148
+ }
149
+
150
+ return Response {
151
+ Response : & api.UpdateProjectResponse {
152
+ Status : UpdatedStatus ,
153
+ },
154
+ }, ctx , nil
155
+ }
156
+
107
157
func (runner * ProjectQueryRunner ) describe (ctx context.Context , tx transaction.Tx , tenant * metadata.Tenant ) (Response , context.Context , error ) {
108
158
db , err := runner .getDatabase (ctx , tx , tenant , runner .describeReq .GetProject (), runner .describeReq .GetBranch ())
109
159
if err != nil {
@@ -171,6 +221,8 @@ func (runner *ProjectQueryRunner) Run(ctx context.Context, tx transaction.Tx, te
171
221
return runner .list (ctx , tx , tenant )
172
222
case runner .describeReq != nil :
173
223
return runner .describe (ctx , tx , tenant )
224
+ case runner .updateReq != nil :
225
+ return runner .update (ctx , tx , tenant )
174
226
}
175
227
176
228
return Response {}, ctx , errors .Unknown ("unknown request path" )
@@ -244,14 +296,23 @@ func (runner *BranchQueryRunner) Run(ctx context.Context, tx transaction.Tx, ten
244
296
return Response {}, ctx , errors .Unknown ("unknown request path" )
245
297
}
246
298
247
- func createProjectMetadata (ctx context.Context ) (* metadata.ProjectMetadata , error ) {
299
+ func createProjectMetadata (ctx context.Context , r * api. ProjectOptions ) (* metadata.ProjectMetadata , error ) {
248
300
currentSub , err := auth .GetCurrentSub (ctx )
249
301
if err != nil && config .DefaultConfig .Auth .Enabled {
250
302
return nil , errors .Internal ("Failed to createReq database metadata" )
251
303
}
304
+ var limits * metadata.ProjectLimits
305
+ if r != nil && r .Limits != nil {
306
+ limits = & metadata.ProjectLimits {
307
+ MaxCollections : r .Limits .MaxCollections ,
308
+ MaxSearchIndexes : r .Limits .MaxSearchIndexes ,
309
+ }
310
+ }
311
+
252
312
return & metadata.ProjectMetadata {
253
313
ID : 0 , // it will be set to right value later on
254
314
Creator : currentSub ,
255
315
CreatedAt : time .Now ().Unix (),
316
+ Limits : limits ,
256
317
}, nil
257
318
}
0 commit comments