Browse Source

Added todo summary

pull/9909/head
Halil İbrahim Kalkan 5 years ago
parent
commit
16829423d4
  1. 7
      test/DistEvents/DistDemoApp/DistDemoAppModule.cs
  2. 95
      test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.Designer.cs
  3. 34
      test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.cs
  4. 34
      test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs
  5. 4
      test/DistEvents/DistDemoApp/Program.cs
  6. 1
      test/DistEvents/DistDemoApp/TodoDbContext.cs
  7. 63
      test/DistEvents/DistDemoApp/TodoEventHandler.cs
  8. 12
      test/DistEvents/DistDemoApp/TodoItemEto.cs
  9. 24
      test/DistEvents/DistDemoApp/TodoItemObjectMapper.cs
  10. 41
      test/DistEvents/DistDemoApp/TodoSummary.cs

7
test/DistEvents/DistDemoApp/DistDemoAppModule.cs

@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Autofac;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.Modularity;
@ -23,6 +24,12 @@ namespace DistDemoApp
{
options.UseSqlServer();
});
Configure<AbpDistributedEntityEventOptions>(options =>
{
options.EtoMappings.Add<TodoItem, TodoItemEto>();
options.AutoEventSelectors.Add<TodoItem>();
});
}
}
}

95
test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.Designer.cs

@ -0,0 +1,95 @@
// <auto-generated />
using System;
using DistDemoApp;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.EntityFrameworkCore;
namespace DistDemoApp.Migrations
{
[DbContext(typeof(TodoDbContext))]
[Migration("20210825112717_Added_Summary_Table")]
partial class Added_Summary_Table
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("ProductVersion", "5.0.9")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("DistDemoApp.TodoItem", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("Text")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.HasKey("Id");
b.ToTable("TodoItems");
});
modelBuilder.Entity("DistDemoApp.TodoSummary", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<byte>("Day")
.HasColumnType("tinyint");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<byte>("Month")
.HasColumnType("tinyint");
b.Property<int>("TotalCount")
.HasColumnType("int");
b.Property<int>("Year")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("TodoSummaries");
});
#pragma warning restore 612, 618
}
}
}

34
test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.cs

@ -0,0 +1,34 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace DistDemoApp.Migrations
{
public partial class Added_Summary_Table : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "TodoSummaries",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Year = table.Column<int>(type: "int", nullable: false),
Month = table.Column<byte>(type: "tinyint", nullable: false),
Day = table.Column<byte>(type: "tinyint", nullable: false),
TotalCount = table.Column<int>(type: "int", nullable: false),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TodoSummaries", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "TodoSummaries");
}
}
}

34
test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs

@ -53,6 +53,40 @@ namespace DistDemoApp.Migrations
b.ToTable("TodoItems");
});
modelBuilder.Entity("DistDemoApp.TodoSummary", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<byte>("Day")
.HasColumnType("tinyint");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<byte>("Month")
.HasColumnType("tinyint");
b.Property<int>("TotalCount")
.HasColumnType("int");
b.Property<int>("Year")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("TodoSummaries");
});
#pragma warning restore 612, 618
}
}

4
test/DistEvents/DistDemoApp/Program.cs

@ -19,8 +19,8 @@ namespace DistDemoApp
var demoService = application.ServiceProvider.GetRequiredService<DemoService>();
await demoService.CreateTodoItemAsync();
//Console.WriteLine("Press ENTER to exit");
//Console.ReadLine();
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
application.Shutdown();
}

1
test/DistEvents/DistDemoApp/TodoDbContext.cs

@ -7,6 +7,7 @@ namespace DistDemoApp
public class TodoDbContext : AbpDbContext<TodoDbContext>
{
public DbSet<TodoItem> TodoItems { get; set; }
public DbSet<TodoSummary> TodoSummaries { get; set; }
public TodoDbContext(DbContextOptions<TodoDbContext> options)
: base(options)

63
test/DistEvents/DistDemoApp/TodoEventHandler.cs

@ -0,0 +1,63 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Uow;
namespace DistDemoApp
{
public class TodoEventHandler :
IDistributedEventHandler<EntityCreatedEto<TodoItemEto>>,
IDistributedEventHandler<EntityDeletedEto<TodoItemEto>>,
ITransientDependency
{
private readonly IRepository<TodoSummary, int> _todoSummaryRepository;
public TodoEventHandler(IRepository<TodoSummary, int> todoSummaryRepository)
{
_todoSummaryRepository = todoSummaryRepository;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(EntityCreatedEto<TodoItemEto> eventData)
{
var dateTime = eventData.Entity.CreationTime;
var todoSummary = await _todoSummaryRepository.FindAsync(
x => x.Year == dateTime.Year &&
x.Month == dateTime.Month &&
x.Day == dateTime.Day
);
if (todoSummary == null)
{
await _todoSummaryRepository.InsertAsync(new TodoSummary(dateTime));
}
else
{
todoSummary.Increase();
await _todoSummaryRepository.UpdateAsync(todoSummary);
}
Console.WriteLine("Increased total count: " + todoSummary);
}
public async Task HandleEventAsync(EntityDeletedEto<TodoItemEto> eventData)
{
var dateTime = eventData.Entity.CreationTime;
var todoSummary = await _todoSummaryRepository.FirstOrDefaultAsync(
x => x.Year == dateTime.Year &&
x.Month == dateTime.Month &&
x.Day == dateTime.Day
);
if (todoSummary != null)
{
todoSummary.Decrease();
await _todoSummaryRepository.UpdateAsync(todoSummary);
Console.WriteLine("Decreased total count: " + todoSummary);
}
}
}
}

12
test/DistEvents/DistDemoApp/TodoItemEto.cs

@ -0,0 +1,12 @@
using System;
using Volo.Abp.EventBus;
namespace DistDemoApp
{
[EventName("todo-item")]
public class TodoItemEto
{
public DateTime CreationTime { get; set; }
public string Text { get; set; }
}
}

24
test/DistEvents/DistDemoApp/TodoItemObjectMapper.cs

@ -0,0 +1,24 @@
using Volo.Abp.DependencyInjection;
using Volo.Abp.ObjectMapping;
namespace DistDemoApp
{
public class TodoItemObjectMapper : IObjectMapper<TodoItem, TodoItemEto>, ISingletonDependency
{
public TodoItemEto Map(TodoItem source)
{
return new TodoItemEto
{
Text = source.Text,
CreationTime = source.CreationTime
};
}
public TodoItemEto Map(TodoItem source, TodoItemEto destination)
{
destination.Text = source.Text;
destination.CreationTime = source.CreationTime;
return destination;
}
}
}

41
test/DistEvents/DistDemoApp/TodoSummary.cs

@ -0,0 +1,41 @@
using System;
using Volo.Abp.Domain.Entities;
namespace DistDemoApp
{
public class TodoSummary : AggregateRoot<int>
{
public int Year { get; private set; }
public byte Month { get; private set; }
public byte Day { get; private set; }
public int TotalCount { get; private set; }
private TodoSummary()
{
}
public TodoSummary(DateTime dateTime, int initialCount = 1)
{
Year = dateTime.Year;
Month = (byte)dateTime.Month;
Day = (byte)dateTime.Day;
TotalCount = initialCount;
}
public void Increase(int amount = 1)
{
TotalCount += amount;
}
public void Decrease(int amount = 1)
{
TotalCount -= amount;
}
public override string ToString()
{
return $"{base.ToString()}, {Year}-{Month:2}-{Day:2}: {TotalCount}";
}
}
}
Loading…
Cancel
Save