public ReleaseState UpdateMetadata(MetadataUpdateCommand command) { if (!this.TrackList.ContainsKey(command.TrackId) || command.Timestamp <= this.Timestamp) { return(this); } var state = new ReleaseState(this); state.Timestamp = command.Timestamp; var metadata = TrackList[command.TrackId]; state.TrackList = state.TrackList.SetItem(command.TrackId, metadata.Update(command)); return(state); }
private bool OnMetadataUpdated(MetadataUpdateCommand command) { if (!CommandValidator.Validate(command).Success || command.ReleaseId != PersistenceId || !_state.TrackList.ContainsKey(command.TrackId) || command.Timestamp <= _state.TrackList[command.TrackId].Timestamp) { return(false); } Persist(command, cmd => { _state = _state.UpdateMetadata(cmd); TellStateUpdated(); }); return(true); }
public MetadataState Update(MetadataUpdateCommand cmd) { var state = new MetadataState(this); if (cmd.Timestamp > state.Timestamp) { state.TrackId = cmd.TrackId ?? state.TrackId; state.Title = cmd.Title ?? state.Title; state.Artist = cmd.Artist ?? state.Artist; state.Album = cmd.Album ?? state.Album; state.Genre = cmd.Genre ?? state.Genre; state.Number = cmd.Number ?? state.Number; state.Timestamp = cmd.Timestamp; } return(state); }
public static ValidationResult Validate(MetadataUpdateCommand command) { if (command == null || string.IsNullOrEmpty(command.TrackId) || string.IsNullOrEmpty(command.ReleaseId)) { return(ValidationResult.ErrorOf("Command can't be null and should have track and release ids filled")); } if (!string.IsNullOrEmpty(command.Title) || !string.IsNullOrEmpty(command.Genre) || !string.IsNullOrEmpty(command.Artist) || !string.IsNullOrEmpty(command.Album) || command.Number.HasValue) { return(ValidationResult.Ok); } return(ValidationResult.ErrorOf("Command has to update at least one field")); }
public void UpdateMetadata(MetadataUpdateCommand updateMetadata) { WithValidation(() => CommandValidator.Validate(updateMetadata)); ActorModel.TellReleaseActor(updateMetadata.ReleaseId, updateMetadata); }
public void UpdateMetadata([FromBody] MetadataUpdateCommand command) { _releaseService.UpdateMetadata(command); }