Skip to content

Commit db17b90

Browse files
committed
send project creation event
Signed-off-by: Miguel Martinez <miguel@chainloop.dev>
1 parent b3b3b9d commit db17b90

1 file changed

Lines changed: 37 additions & 27 deletions

File tree

app/controlplane/pkg/biz/workflow.go

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,15 @@ func (uc *WorkflowUseCase) Create(ctx context.Context, opts *WorkflowCreateOpts)
155155
return nil, NewErrValidation(err)
156156
}
157157

158+
// Check if the project already exists to determine if we need to emit a ProjectCreated event
159+
orgUUID, err := uuid.Parse(opts.OrgID)
160+
if err != nil {
161+
return nil, fmt.Errorf("failed to parse org ID %q: %w", opts.OrgID, err)
162+
}
163+
164+
existingProject, err := uc.projectRepo.FindProjectByOrgIDAndName(ctx, orgUUID, opts.Project)
165+
projectAlreadyExists := err == nil && existingProject != nil
166+
158167
wf, err := uc.wfRepo.Create(ctx, opts)
159168
if err != nil {
160169
if IsErrAlreadyExists(err) {
@@ -166,43 +175,44 @@ func (uc *WorkflowUseCase) Create(ctx context.Context, opts *WorkflowCreateOpts)
166175

167176
// Set project admin if a new project has been created
168177
if opts.Owner != nil {
169-
orgUUID, err := uuid.Parse(opts.OrgID)
170-
if err != nil {
171-
return nil, fmt.Errorf("failed to parse org ID %q: %w", opts.OrgID, err)
172-
}
173178
if err = uc.membershipUC.SetProjectOwner(ctx, orgUUID, wf.ProjectID, *opts.Owner); err != nil {
174179
return nil, fmt.Errorf("failed to set project owner: %w", err)
175180
}
176181
}
177182

178-
orgUUID, err := uuid.Parse(opts.OrgID)
179-
if err != nil {
180-
uc.logger.Warn("failed to parse org id", "err", err)
181-
} else {
182-
// Dispatch events to the audit log regarding the workflow
183-
uc.auditorUC.Dispatch(ctx, &events.WorkflowCreated{
184-
WorkflowBase: &events.WorkflowBase{
185-
WorkflowID: &wf.ID,
186-
WorkflowName: wf.Name,
187-
ProjectName: opts.Project,
183+
// Dispatch audit event for project creation if a new project was created
184+
if !projectAlreadyExists {
185+
uc.auditorUC.Dispatch(ctx, &events.ProjectCreated{
186+
ProjectBase: &events.ProjectBase{
187+
ProjectID: &wf.ProjectID,
188+
ProjectName: opts.Project,
188189
},
189-
WorkflowContractID: &wf.ContractID,
190-
WorkflowContractName: wf.ContractName,
191-
WorkflowDescription: &opts.Description,
192-
Team: &opts.Team,
193-
Public: opts.Public,
194190
}, &orgUUID)
191+
}
195192

196-
// Dispatch events to the audit log regarding the contract
197-
uc.auditorUC.Dispatch(ctx, &events.WorkflowContractAttached{
198-
WorkflowContractBase: &events.WorkflowContractBase{
199-
WorkflowContractID: &wf.ContractID,
200-
WorkflowContractName: wf.ContractName,
201-
},
193+
// Dispatch events to the audit log regarding the workflow
194+
uc.auditorUC.Dispatch(ctx, &events.WorkflowCreated{
195+
WorkflowBase: &events.WorkflowBase{
202196
WorkflowID: &wf.ID,
203197
WorkflowName: wf.Name,
204-
}, &orgUUID)
205-
}
198+
ProjectName: opts.Project,
199+
},
200+
WorkflowContractID: &wf.ContractID,
201+
WorkflowContractName: wf.ContractName,
202+
WorkflowDescription: &opts.Description,
203+
Team: &opts.Team,
204+
Public: opts.Public,
205+
}, &orgUUID)
206+
207+
// Dispatch events to the audit log regarding the contract
208+
uc.auditorUC.Dispatch(ctx, &events.WorkflowContractAttached{
209+
WorkflowContractBase: &events.WorkflowContractBase{
210+
WorkflowContractID: &wf.ContractID,
211+
WorkflowContractName: wf.ContractName,
212+
},
213+
WorkflowID: &wf.ID,
214+
WorkflowName: wf.Name,
215+
}, &orgUUID)
206216

207217
return wf, nil
208218
}

0 commit comments

Comments
 (0)