@@ -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