Skip to content

Commit

Permalink
Modified BranchDto to hold full ReferenceDto's instead of ReferenceId…
Browse files Browse the repository at this point in the history
…'s for latest reference fields.
  • Loading branch information
ScottArbeit committed Jul 26, 2024
1 parent 59eb96c commit c6d7167
Show file tree
Hide file tree
Showing 9 changed files with 152 additions and 155 deletions.
64 changes: 34 additions & 30 deletions src/Grace.Actors/Branch.Actor.fs
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@ module Branch =
branchDto
| Rebased referenceId ->{ currentBranchDto with BasedOn = referenceId }
| NameSet branchName -> { currentBranchDto with BranchName = branchName }
| Assigned(referenceId, directoryVersion, sha256Hash, referenceText) ->
{ currentBranchDto with LatestPromotion = referenceId; BasedOn = referenceId }
| Promoted(referenceId, directoryVersion, sha256Hash, referenceText) ->
{ currentBranchDto with LatestPromotion = referenceId; BasedOn = referenceId }
| Committed(referenceId, directoryVersion, sha256Hash, referenceText) -> { currentBranchDto with LatestCommit = referenceId }
| Checkpointed(referenceId, directoryVersion, sha256Hash, referenceText) -> { currentBranchDto with LatestCheckpoint = referenceId }
| Saved(referenceId, directoryVersion, sha256Hash, referenceText) -> { currentBranchDto with LatestSave = referenceId }
| Tagged(referenceId, directoryVersion, sha256Hash, referenceText) -> currentBranchDto // No changes to currentBranchDto.
| ExternalCreated(referenceId, directoryVersion, sha256Hash, referenceText) -> currentBranchDto // No changes to currentBranchDto.
| Assigned(referenceDto, directoryVersion, sha256Hash, referenceText) ->
{ currentBranchDto with LatestPromotion = referenceDto; BasedOn = referenceDto.ReferenceId }
| Promoted(referenceDto, directoryVersion, sha256Hash, referenceText) ->
{ currentBranchDto with LatestPromotion = referenceDto; BasedOn = referenceDto.ReferenceId }
| Committed(referenceDto, directoryVersion, sha256Hash, referenceText) -> { currentBranchDto with LatestCommit = referenceDto }
| Checkpointed(referenceDto, directoryVersion, sha256Hash, referenceText) -> { currentBranchDto with LatestCheckpoint = referenceDto }
| Saved(referenceDto, directoryVersion, sha256Hash, referenceText) -> { currentBranchDto with LatestSave = referenceDto }
| Tagged(referenceDto, directoryVersion, sha256Hash, referenceText) -> currentBranchDto // No changes to currentBranchDto.
| ExternalCreated(referenceDto, directoryVersion, sha256Hash, referenceText) -> currentBranchDto // No changes to currentBranchDto.
| EnabledAssign enabled -> { currentBranchDto with AssignEnabled = enabled }
| EnabledPromotion enabled -> { currentBranchDto with PromotionEnabled = enabled }
| EnabledCommit enabled -> { currentBranchDto with CommitEnabled = enabled }
Expand Down Expand Up @@ -126,12 +126,12 @@ module Branch =
//logToConsole $"In Branch.Actor.OnActivateAsync: About to call getLatestReferenceByReferenceTypes()."
let! latestReferences = getLatestReferenceByReferenceTypes referenceTypes branchDto.BranchId
latestReferences |> Seq.iter (fun kvp ->
let referenceId = kvp.Value.ReferenceId
let referenceDto = kvp.Value
match kvp.Key with
| Save -> branchDto <- { branchDto with LatestSave = referenceId }
| Checkpoint -> branchDto <- { branchDto with LatestCheckpoint = referenceId }
| Commit -> branchDto <- { branchDto with LatestCommit = referenceId }
| Promotion -> branchDto <- { branchDto with LatestPromotion = referenceId; BasedOn = referenceId }
| Save -> branchDto <- { branchDto with LatestSave = referenceDto }
| Checkpoint -> branchDto <- { branchDto with LatestCheckpoint = referenceDto }
| Commit -> branchDto <- { branchDto with LatestCommit = referenceDto }
| Promotion -> branchDto <- { branchDto with LatestPromotion = referenceDto; BasedOn = referenceDto.ReferenceId }
| Rebase ->
let basedOnLink = kvp.Value.Links |> Array.find (fun link -> match link with | ReferenceLinkType.BasedOn _ -> true )
let basedOnReferenceId =
Expand Down Expand Up @@ -242,16 +242,18 @@ module Branch =
branchDto <- branchDto |> updateDto branchEvent.Event

match branchEvent.Event with
| Assigned (referenceId, _, _, _)
| Promoted (referenceId, _, _, _)
| Committed (referenceId, _, _, _)
| Checkpointed (referenceId, _, _, _)
| Saved (referenceId, _, _, _)
| Tagged (referenceId, _, _, _)
| ExternalCreated (referenceId, _, _, _)
// Don't save these reference creation events, and don't send them as events; that was done by the Reference actor when the reference was created.
| Assigned (referenceDto, _, _, _)
| Promoted (referenceDto, _, _, _)
| Committed (referenceDto, _, _, _)
| Checkpointed (referenceDto, _, _, _)
| Saved (referenceDto, _, _, _)
| Tagged (referenceDto, _, _, _)
| ExternalCreated (referenceDto, _, _, _) ->
branchEvent.Metadata.Properties[nameof (ReferenceId)] <- $"{referenceDto.ReferenceId}"
| Rebased referenceId ->
// Don't save these reference creation events, and don't send them as events; that was done by the Reference actor when the reference was created.
branchEvent.Metadata.Properties[nameof (ReferenceId)] <- $"{referenceId}"
// Save the rest of the events.
| _ ->
// For all other events, add the event to the branchEvents list, and save it to actor state.
branchEvents.Add(branchEvent)
Expand Down Expand Up @@ -352,7 +354,9 @@ module Branch =
let referenceDto = {ReferenceDto.Default with ReferenceId = referenceId; RepositoryId = repositoryId; BranchId = branchId; DirectoryId = directoryId; Sha256Hash = sha256Hash; ReferenceText = referenceText; ReferenceType = referenceType; Links = links}
let referenceCommand = Reference.ReferenceCommand.Create referenceDto
match! referenceActor.Handle referenceCommand metadata with
| Ok _ -> return Ok referenceId
| Ok _ ->
let! referenceDto = referenceActor.Get metadata.CorrelationId
return Ok referenceDto
| Error error -> return Error error
}

Expand Down Expand Up @@ -415,31 +419,31 @@ module Branch =
| EnableAutoRebase enabled -> return Ok (EnabledAutoRebase enabled)
| BranchCommand.Assign(directoryVersionId, sha256Hash, referenceText) ->
match! addReferenceToCurrentBranch directoryVersionId sha256Hash referenceText ReferenceType.Promotion Array.empty with
| Ok referenceId -> return Ok (Assigned(referenceId, directoryVersionId, sha256Hash, referenceText))
| Ok referenceDto -> return Ok (Assigned(referenceDto, directoryVersionId, sha256Hash, referenceText))
| Error error -> return Error error
| BranchCommand.Promote(directoryVersionId, sha256Hash, referenceText) ->
match! addReferenceToCurrentBranch directoryVersionId sha256Hash referenceText ReferenceType.Promotion Array.empty with
| Ok referenceId -> return Ok (Promoted(referenceId, directoryVersionId, sha256Hash, referenceText))
| Ok referenceDto -> return Ok (Promoted(referenceDto, directoryVersionId, sha256Hash, referenceText))
| Error error -> return Error error
| BranchCommand.Commit(directoryVersionId, sha256Hash, referenceText) ->
match! addReferenceToCurrentBranch directoryVersionId sha256Hash referenceText ReferenceType.Commit Array.empty with
| Ok referenceId -> return Ok (Committed(referenceId, directoryVersionId, sha256Hash, referenceText))
| Ok referenceDto -> return Ok (Committed(referenceDto, directoryVersionId, sha256Hash, referenceText))
| Error error -> return Error error
| BranchCommand.Checkpoint(directoryVersionId, sha256Hash, referenceText) ->
match! addReferenceToCurrentBranch directoryVersionId sha256Hash referenceText ReferenceType.Checkpoint Array.empty with
| Ok referenceId -> return Ok (Checkpointed(referenceId, directoryVersionId, sha256Hash, referenceText))
| Ok referenceDto -> return Ok (Checkpointed(referenceDto, directoryVersionId, sha256Hash, referenceText))
| Error error -> return Error error
| BranchCommand.Save(directoryVersionId, sha256Hash, referenceText) ->
match! addReferenceToCurrentBranch directoryVersionId sha256Hash referenceText ReferenceType.Save Array.empty with
| Ok referenceId -> return Ok (Saved(referenceId, directoryVersionId, sha256Hash, referenceText))
| Ok referenceDto -> return Ok (Saved(referenceDto, directoryVersionId, sha256Hash, referenceText))
| Error error -> return Error error
| BranchCommand.Tag(directoryVersionId, sha256Hash, referenceText) ->
match! addReferenceToCurrentBranch directoryVersionId sha256Hash referenceText ReferenceType.Tag Array.empty with
| Ok referenceId -> return Ok (Tagged(referenceId, directoryVersionId, sha256Hash, referenceText))
| Ok referenceDto -> return Ok (Tagged(referenceDto, directoryVersionId, sha256Hash, referenceText))
| Error error -> return Error error
| BranchCommand.CreateExternal(directoryVersionId, sha256Hash, referenceText) ->
match! addReferenceToCurrentBranch directoryVersionId sha256Hash referenceText ReferenceType.External Array.empty with
| Ok referenceId -> return Ok (ExternalCreated(referenceId, directoryVersionId, sha256Hash, referenceText))
| Ok referenceDto -> return Ok (ExternalCreated(referenceDto, directoryVersionId, sha256Hash, referenceText))
| Error error -> return Error error
| RemoveReference referenceId -> return Ok (ReferenceRemoved referenceId)
| DeleteLogical(force, deleteReason) ->
Expand Down
14 changes: 7 additions & 7 deletions src/Grace.Actors/Events.Actor.fs
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ module Events =
initialPermissions: ReferenceType[]
| Rebased of basedOn: ReferenceId
| NameSet of newName: BranchName
| Assigned of referenceId: ReferenceId * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Promoted of referenceId: ReferenceId * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Committed of referenceId: ReferenceId * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Checkpointed of referenceId: ReferenceId * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Saved of referenceId: ReferenceId * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Tagged of referenceId: ReferenceId * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| ExternalCreated of referenceId: ReferenceId * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Assigned of referenceDto: ReferenceDto * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Promoted of referenceDto: ReferenceDto * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Committed of referenceDto: ReferenceDto * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Checkpointed of referenceDto: ReferenceDto * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Saved of referenceDto: ReferenceDto * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| Tagged of referenceDto: ReferenceDto * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| ExternalCreated of referenceDto: ReferenceDto * directoryVersionId: DirectoryVersionId * sha256Hash: Sha256Hash * referenceText: ReferenceText
| EnabledAssign of enabled: bool
| EnabledPromotion of enabled: bool
| EnabledCommit of enabled: bool
Expand Down
4 changes: 2 additions & 2 deletions src/Grace.Actors/Interfaces.Actor.fs
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ module Interfaces =
abstract member GetEvents: correlationId: CorrelationId -> Task<IReadOnlyList<Events.Branch.BranchEvent>>

/// Retrieves the most recent commit from this branch.
abstract member GetLatestCommit: correlationId: CorrelationId -> Task<ReferenceId>
abstract member GetLatestCommit: correlationId: CorrelationId -> Task<ReferenceDto>

/// Retrieves the most recent promotion from this branch.
abstract member GetLatestPromotion: correlationId: CorrelationId -> Task<ReferenceId>
abstract member GetLatestPromotion: correlationId: CorrelationId -> Task<ReferenceDto>

/// Retrieves the parent branch for a given branch.
abstract member GetParentBranch: correlationId: CorrelationId -> Task<BranchDto>
Expand Down
41 changes: 18 additions & 23 deletions src/Grace.Actors/Reference.Actor.fs
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@ module Reference =

// Publish the event to the rest of the world.
let graceEvent = Events.GraceEvent.ReferenceEvent referenceEvent
let message = serialize graceEvent
do! daprClient.PublishEventAsync(GracePubSubService, GraceEventStreamTopic, graceEvent)

// If this is a Save or Checkpoint reference, schedule a physical deletion based on the default delays from the repository.
Expand Down Expand Up @@ -310,32 +309,28 @@ module Reference =
:> Task
| _ -> ()

let returnValue = GraceReturnValue.Create "Reference command succeeded." referenceEvent.Metadata.CorrelationId

returnValue
.enhance(nameof(RepositoryId), $"{referenceDto.RepositoryId}")
.enhance(nameof(BranchId), $"{referenceDto.BranchId}")
.enhance(nameof(ReferenceId), $"{referenceDto.ReferenceId}")
.enhance(nameof(DirectoryVersionId), $"{referenceDto.DirectoryId}")
.enhance(nameof(ReferenceType), $"{discriminatedUnionCaseName referenceDto.ReferenceType}")
.enhance (nameof(ReferenceEventType), $"{getDiscriminatedUnionFullName referenceEvent.Event}")
|> ignore
let graceReturnValue =
(GraceReturnValue.Create "Reference command succeeded." referenceEvent.Metadata.CorrelationId)
.enhance(nameof(RepositoryId), $"{referenceDto.RepositoryId}")
.enhance(nameof(BranchId), $"{referenceDto.BranchId}")
.enhance(nameof(ReferenceId), $"{referenceDto.ReferenceId}")
.enhance(nameof(DirectoryVersionId), $"{referenceDto.DirectoryId}")
.enhance(nameof(ReferenceType), $"{discriminatedUnionCaseName referenceDto.ReferenceType}")
.enhance (nameof(ReferenceEventType), $"{getDiscriminatedUnionFullName referenceEvent.Event}")

return Ok returnValue
return Ok graceReturnValue
with ex ->
let exceptionResponse = createExceptionResponse ex

let graceError = GraceError.Create (ReferenceError.getErrorMessage FailedWhileApplyingEvent) referenceEvent.Metadata.CorrelationId

graceError
.enhance("Exception details", exceptionResponse.``exception`` + exceptionResponse.innerException)
.enhance(nameof(RepositoryId), $"{referenceDto.RepositoryId}")
.enhance(nameof(BranchId), $"{referenceDto.BranchId}")
.enhance(nameof(ReferenceId), $"{referenceDto.ReferenceId}")
.enhance(nameof(DirectoryVersionId), $"{referenceDto.DirectoryId}")
.enhance(nameof(ReferenceType), $"{discriminatedUnionCaseName referenceDto.ReferenceType}")
.enhance (nameof(ReferenceEventType), $"{getDiscriminatedUnionFullName referenceEvent.Event}")
|> ignore
let graceError =
(GraceError.Create (ReferenceError.getErrorMessage FailedWhileApplyingEvent) referenceEvent.Metadata.CorrelationId)
.enhance("Exception details", exceptionResponse.``exception`` + exceptionResponse.innerException)
.enhance(nameof(RepositoryId), $"{referenceDto.RepositoryId}")
.enhance(nameof(BranchId), $"{referenceDto.BranchId}")
.enhance(nameof(ReferenceId), $"{referenceDto.ReferenceId}")
.enhance(nameof(DirectoryVersionId), $"{referenceDto.DirectoryId}")
.enhance(nameof(ReferenceType), $"{discriminatedUnionCaseName referenceDto.ReferenceType}")
.enhance (nameof(ReferenceEventType), $"{getDiscriminatedUnionFullName referenceEvent.Event}")

return Error graceError
}
Expand Down
Loading

0 comments on commit c6d7167

Please sign in to comment.