コード例 #1
0
        public void when_method_name_given_condition_should_expectation()
        {
            // arrange
            ConsoleView.ShowGettingChannels();
            ReplicateResult replicateResult = ReplicateResult.BuildChannelCreated(channelName: "foo channel");

            // act
            ConsoleView.Show(replicateResult);
        }
コード例 #2
0
        private ReplicateResult Replicate(ChannelDto channelDto)
        {
            var newChannel = new Channel(channelDto, _entityFactory);

            LookUpCourses(ref newChannel);

            _db.Channels.Add(newChannel);

            return(ReplicateResult.BuildChannelCreated(newChannel.Name));
        }
コード例 #3
0
        private ReplicateResult Replicate(ChannelDto channelDto, Channel channelDb)
        {
            bool channelModified = channelDb.Merge(channelDto, _entityFactory);

            if (channelModified)
            {
                LookUpCourses(ref channelDb);
            }

            return(channelModified
                       ? ReplicateResult.BuildChannelUpdated(channelDb.Name)
                       : ReplicateResult.BuildChannelUnchanged(channelDb.Name));
        }
コード例 #4
0
        public async Task <ReplicateResult> Replicate(IEnumerable <ChannelDto> channelDtosList,
                                                      CancellationToken cancellationToken)
        {
            if (channelDtosList == null)
            {
                return(ReplicateResult.BuildEmpty());
            }

            Dictionary <string, Channel> channelsDbByName = await _db.Channels.Include(c => c.ChannelCourses)
                                                            .ThenInclude(channelCourses => channelCourses.Course)
                                                            .ToDictionaryAsync(c => c.Name, cancellationToken);

            var result = new ReplicateResult();

            foreach (ChannelDto channelDto in channelDtosList)
            {
                cancellationToken.ThrowIfCancellationRequested();

                ReplicateResult replicateResult;

                if (string.IsNullOrWhiteSpace(channelDto.Name))
                {
                    Log.Error("channel without name. ChannelPageUrl: [{ChannelPageUrl}]", channelDto.Url);
                    continue;
                }

                if (channelsDbByName.TryGetValue(channelDto.Name, out Channel channelDb))
                {
                    replicateResult = Replicate(channelDto, channelDb);
                    channelsDbByName.Remove(channelDb.Name);
                }
                else
                {
                    replicateResult = Replicate(channelDto);
                }

                result.Add(replicateResult);
            }

            foreach (Channel channelDb in channelsDbByName.Values)
            {
                ReplicateResult channelDeleted = ReplicateResult.BuildChannelDeleted(channelDb.Name);
                result.Add(channelDeleted);
            }

            _db.Channels.RemoveRange(channelsDbByName.Values);

            await _db.SaveChangesAsync(cancellationToken);

            return(result);
        }
コード例 #5
0
        public static void Show(ReplicateResult result)
        {
            var columnsConfig =
                new[]
            {
                new TableColumn(TableRenderer.COLUMN_NAME_INDEX, length:  5, alignment: "right", getValue: (detail, i) => i.ToString()),
                new TableColumn(TableRenderer.COLUMN_NAME_CHANNEL_NAME, length: 30, alignment: "left", getValue: (detail, i) => detail.ChannelName),
                new TableColumn(TableRenderer.COLUMN_NAME_ACTION, length: 10, alignment: "left", getValue: (detail, i) => detail.Action.ToString()),
            };

            var tableRenderer = new TableRenderer(columnsConfig);

            var sb = new StringBuilder();

            sb.AppendLine();
            sb.AppendLine(tableRenderer.Headers);

            var rowIndex = 1;

            foreach (ReplicateResultDetail detail in result.Details)
            {
                sb.AppendLine(tableRenderer.DataRow(detail, rowIndex));
                rowIndex += 1;
            }

            sb.AppendLine();
            sb.AppendLine($" channels created   : [{result.ChannelsCreatedCount}]");
            sb.AppendLine($" channels updated   : [{result.ChannelsUpdatedCount}]");
            sb.AppendLine($" channels deleted   : [{result.ChannelsDeletedCount}]");
            sb.AppendLine($" channels unchanged : [{result.ChannelsUnchangedCount}]");

            sb.AppendLine("-------------------   ------");
            sb.AppendLine($"     total channels : [{result.TotalChannelsCount}]");

            sb.AppendLine();
            sb.AppendLine($"            elapsed : [{_stopWatch?.Elapsed}]");

            Log.Information(sb.ToString());
        }
コード例 #6
0
        private static async Task ReplicateChannels(IEnumerable <ChannelDto> channels)
        {
            ReplicateResult result = await Replicator.Replicate(channels, _cancellation.Token);

            ConsoleView.Show(result);
        }