@@ -31,6 +31,27 @@ type ProjectHistory struct {
31
31
Import ProvisionerJob `json:"import"`
32
32
}
33
33
34
+ // ProjectParameter represents a parameter parsed from project history source on creation.
35
+ type ProjectParameter struct {
36
+ ID uuid.UUID `json:"id"`
37
+ CreatedAt time.Time `json:"created_at"`
38
+ ProjectHistoryID uuid.UUID `json:"project_history_id"`
39
+ Name string `json:"name"`
40
+ Description string `json:"description,omitempty"`
41
+ DefaultSourceScheme database.ParameterSourceScheme `json:"default_source_scheme,omitempty"`
42
+ DefaultSourceValue string `json:"default_source_value,omitempty"`
43
+ AllowOverrideSource bool `json:"allow_override_source"`
44
+ DefaultDestinationScheme database.ParameterDestinationScheme `json:"default_destination_scheme,omitempty"`
45
+ DefaultDestinationValue string `json:"default_destination_value,omitempty"`
46
+ AllowOverrideDestination bool `json:"allow_override_destination"`
47
+ DefaultRefresh string `json:"default_refresh"`
48
+ RedisplayValue bool `json:"redisplay_value"`
49
+ ValidationError string `json:"validation_error,omitempty"`
50
+ ValidationCondition string `json:"validation_condition,omitempty"`
51
+ ValidationTypeSystem database.ParameterTypeSystem `json:"validation_type_system,omitempty"`
52
+ ValidationValueType string `json:"validation_value_type,omitempty"`
53
+ }
54
+
34
55
// CreateProjectHistoryRequest enables callers to create a new Project Version.
35
56
type CreateProjectHistoryRequest struct {
36
57
StorageMethod database.ProjectStorageMethod `json:"storage_method" validate:"oneof=inline-archive,required"`
@@ -160,14 +181,81 @@ func (api *api) postProjectHistoryByOrganization(rw http.ResponseWriter, r *http
160
181
render .JSON (rw , r , convertProjectHistory (projectHistory , provisionerJob ))
161
182
}
162
183
184
+ func (api * api ) projectHistoryParametersByOrganizationAndName (rw http.ResponseWriter , r * http.Request ) {
185
+ projectHistory := httpmw .ProjectHistoryParam (r )
186
+ job , err := api .Database .GetProvisionerJobByID (r .Context (), projectHistory .ImportJobID )
187
+ if err != nil {
188
+ httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
189
+ Message : fmt .Sprintf ("get provisioner job: %s" , err ),
190
+ })
191
+ return
192
+ }
193
+ apiJob := convertProvisionerJob (job )
194
+ if ! apiJob .Status .Completed () {
195
+ httpapi .Write (rw , http .StatusPreconditionRequired , httpapi.Response {
196
+ Message : fmt .Sprintf ("import job hasn't completed: %s" , apiJob .Status ),
197
+ })
198
+ return
199
+ }
200
+ if apiJob .Status != ProvisionerJobStatusSucceeded {
201
+ httpapi .Write (rw , http .StatusPreconditionFailed , httpapi.Response {
202
+ Message : "import job wasn't successful. no parameters were parsed" ,
203
+ })
204
+ return
205
+ }
206
+
207
+ parameters , err := api .Database .GetProjectParametersByHistoryID (r .Context (), projectHistory .ID )
208
+ if errors .Is (err , sql .ErrNoRows ) {
209
+ err = nil
210
+ parameters = []database.ProjectParameter {}
211
+ }
212
+ if err != nil {
213
+ httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
214
+ Message : fmt .Sprintf ("get project parameters: %s" , err ),
215
+ })
216
+ return
217
+ }
218
+
219
+ apiParameters := make ([]ProjectParameter , 0 , len (parameters ))
220
+ for _ , parameter := range parameters {
221
+ apiParameters = append (apiParameters , convertProjectParameter (parameter ))
222
+ }
223
+
224
+ render .Status (r , http .StatusOK )
225
+ render .JSON (rw , r , apiParameters )
226
+ }
227
+
163
228
func convertProjectHistory (history database.ProjectHistory , job database.ProvisionerJob ) ProjectHistory {
164
229
return ProjectHistory {
165
- ID : history .ID ,
166
- ProjectID : history .ProjectID ,
167
- CreatedAt : history .CreatedAt ,
168
- UpdatedAt : history .UpdatedAt ,
169
- Name : history .Name ,
170
- Import : convertProvisionerJob (job ),
230
+ ID : history .ID ,
231
+ ProjectID : history .ProjectID ,
232
+ CreatedAt : history .CreatedAt ,
233
+ UpdatedAt : history .UpdatedAt ,
234
+ Name : history .Name ,
235
+ StorageMethod : history .StorageMethod ,
236
+ Import : convertProvisionerJob (job ),
237
+ }
238
+ }
239
+
240
+ func convertProjectParameter (parameter database.ProjectParameter ) ProjectParameter {
241
+ return ProjectParameter {
242
+ ID : parameter .ID ,
243
+ CreatedAt : parameter .CreatedAt ,
244
+ ProjectHistoryID : parameter .ProjectHistoryID ,
245
+ Name : parameter .Name ,
246
+ Description : parameter .Description ,
247
+ DefaultSourceScheme : parameter .DefaultSourceScheme ,
248
+ DefaultSourceValue : parameter .DefaultSourceValue .String ,
249
+ AllowOverrideSource : parameter .AllowOverrideSource ,
250
+ DefaultDestinationScheme : parameter .DefaultDestinationScheme ,
251
+ DefaultDestinationValue : parameter .DefaultDestinationValue .String ,
252
+ AllowOverrideDestination : parameter .AllowOverrideDestination ,
253
+ DefaultRefresh : parameter .DefaultRefresh ,
254
+ RedisplayValue : parameter .RedisplayValue ,
255
+ ValidationError : parameter .ValidationError ,
256
+ ValidationCondition : parameter .ValidationCondition ,
257
+ ValidationTypeSystem : parameter .ValidationTypeSystem ,
258
+ ValidationValueType : parameter .ValidationValueType ,
171
259
}
172
260
}
173
261
0 commit comments