Skip to content

Commit

Permalink
Improve code and remove UoW from Handler #3 #4
Browse files Browse the repository at this point in the history
  • Loading branch information
thangchung committed Aug 17, 2018
1 parent 7f15540 commit 08bca2f
Show file tree
Hide file tree
Showing 43 changed files with 1,084 additions and 49 deletions.
9 changes: 9 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.dockerignore
.env
.git
.gitignore
.vs
.vscode
*/bin
*/obj
**/.toolstarget
1 change: 1 addition & 0 deletions build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ var isWindows = IsRunningOnWindows();
var libs = new List<string>{
"./src/NetCoreKit.Utils/NetCoreKit.Utils.csproj",
"./src/NetCoreKit.Domain/NetCoreKit.Domain.csproj",
"./src/NetCoreKit.Infrastructure/NetCoreKit.Infrastructure.csproj",
"./src/NetCoreKit.Infrastructure.AspNetCore/NetCoreKit.Infrastructure.AspNetCore.csproj",
"./src/NetCoreKit.Infrastructure.AspNetCore.CleanArch/NetCoreKit.Infrastructure.AspNetCore.CleanArch.csproj",
"./src/NetCoreKit.Infrastructure.AspNetCore.Miniservice/NetCoreKit.Infrastructure.AspNetCore.Miniservice.csproj",
Expand Down
56 changes: 56 additions & 0 deletions netcore-kit.sln
Original file line number Diff line number Diff line change
Expand Up @@ -39,44 +39,98 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__", "__", "{EE8515E4-F600-4699-A652-FE8E241B9A83}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetCoreKit.Samples.TodoAPI", "samples\TodoApi\NetCoreKit.Samples.TodoAPI.csproj", "{07F7005A-062E-478D-93C0-3B7E1C42389E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCoreKit.Infrastructure", "src\NetCoreKit.Infrastructure\NetCoreKit.Infrastructure.csproj", "{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Debug|x86.ActiveCfg = Debug|Any CPU
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Debug|x86.Build.0 = Debug|Any CPU
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Release|Any CPU.Build.0 = Release|Any CPU
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Release|x86.ActiveCfg = Release|Any CPU
{B9235669-6FFC-4266-B103-851B07EC6E8E}.Release|x86.Build.0 = Release|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Debug|x86.ActiveCfg = Debug|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Debug|x86.Build.0 = Debug|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Release|Any CPU.Build.0 = Release|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Release|x86.ActiveCfg = Release|Any CPU
{CAF26917-0B10-4FB9-BD59-F792D21C2BD8}.Release|x86.Build.0 = Release|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Debug|x86.ActiveCfg = Debug|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Debug|x86.Build.0 = Debug|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Release|Any CPU.Build.0 = Release|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Release|x86.ActiveCfg = Release|Any CPU
{29F1B230-7A1A-43DB-9294-D3A664220D8C}.Release|x86.Build.0 = Release|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Debug|x86.ActiveCfg = Debug|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Debug|x86.Build.0 = Debug|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Release|Any CPU.Build.0 = Release|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Release|x86.ActiveCfg = Release|Any CPU
{F57C8FE9-DC9C-4858-8EA7-6AEF523557A4}.Release|x86.Build.0 = Release|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Debug|x86.ActiveCfg = Debug|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Debug|x86.Build.0 = Debug|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Release|Any CPU.Build.0 = Release|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Release|x86.ActiveCfg = Release|Any CPU
{E8AA73B0-2BFC-4D9F-8921-CE25A6EE49FB}.Release|x86.Build.0 = Release|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Debug|x86.ActiveCfg = Debug|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Debug|x86.Build.0 = Debug|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Release|Any CPU.Build.0 = Release|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Release|x86.ActiveCfg = Release|Any CPU
{86E10CC4-BAA0-459F-B0C9-3C6CE466DD9B}.Release|x86.Build.0 = Release|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Debug|x86.ActiveCfg = Debug|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Debug|x86.Build.0 = Debug|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Release|Any CPU.Build.0 = Release|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Release|x86.ActiveCfg = Release|Any CPU
{FA666FF1-5453-481D-BBDD-842F151F9E75}.Release|x86.Build.0 = Release|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Debug|x86.ActiveCfg = Debug|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Debug|x86.Build.0 = Debug|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Release|Any CPU.Build.0 = Release|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Release|x86.ActiveCfg = Release|Any CPU
{D6B29A97-1417-48A6-B141-74D57E5C8C16}.Release|x86.Build.0 = Release|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Debug|x86.ActiveCfg = Debug|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Debug|x86.Build.0 = Debug|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Release|Any CPU.Build.0 = Release|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Release|x86.ActiveCfg = Release|Any CPU
{07F7005A-062E-478D-93C0-3B7E1C42389E}.Release|x86.Build.0 = Release|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Debug|x86.ActiveCfg = Debug|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Debug|x86.Build.0 = Debug|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Release|Any CPU.Build.0 = Release|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Release|x86.ActiveCfg = Release|Any CPU
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -91,6 +145,8 @@ Global
{FA666FF1-5453-481D-BBDD-842F151F9E75} = {6CF50533-EBD6-47B1-9AD9-9EBBFF3AC887}
{D6B29A97-1417-48A6-B141-74D57E5C8C16} = {6CF50533-EBD6-47B1-9AD9-9EBBFF3AC887}
{A1CCC105-67B3-45AE-9A74-DD6716521708} = {EE8515E4-F600-4699-A652-FE8E241B9A83}
{07F7005A-062E-478D-93C0-3B7E1C42389E} = {92D6FD73-B95C-4CBB-A48E-047672EB4E77}
{EE16B7AA-67D5-463E-A24F-6221DBD80A5F} = {6CF50533-EBD6-47B1-9AD9-9EBBFF3AC887}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B9325AE8-21A8-4D46-9B04-38BD2BC35C0F}
Expand Down
5 changes: 5 additions & 0 deletions samples/TodoApi/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*
!src
!*.sln
**/bin
**/obj
28 changes: 28 additions & 0 deletions samples/TodoApi/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
FROM microsoft/dotnet:2.1.2-aspnetcore-runtime-alpine AS base
WORKDIR /app

ARG service_version
ENV SERVICE_VERSION ${service_version:-0.0.1}

ARG api_version
ENV API_VERSION ${api_version:-1.0}

ENV ASPNETCORE_URLS http://+:5001
EXPOSE 5001

FROM microsoft/dotnet:2.1.302-sdk-alpine AS build
WORKDIR /src
COPY . .

WORKDIR /src/src/samples

RUN dotnet restore -nowarn:msb3202,nu1503
RUN dotnet build --no-restore -c Release -o /app

FROM build AS publish
RUN dotnet publish --no-restore -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Company.Application.samples.dll"]
55 changes: 55 additions & 0 deletions samples/TodoApi/Domain/Todo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System;
using System.ComponentModel.DataAnnotations;
using NetCoreKit.Domain;

namespace NetCoreKit.Samples.TodoAPI.Domain
{
public sealed class Todo : EntityBase
{
internal Todo(string title)
: this(Guid.NewGuid(), title)
{
}

public Todo(Guid id, string title) : base(id)
{
Title = title;
}

public static Todo Load(string title)
{
return new Todo(title);
}

public static Todo Load(Guid id, string title)
{
return new Todo(id, title);
}

public int? Order { get; private set; } = 1;
[Required] public string Title { get; private set; }
public bool? Completed { get; private set; } = false;

public Todo ChangeTitle(string title)
{
if(string.IsNullOrEmpty(title))
throw new DomainException("Order is null or empty.");
Title = title;
return this;
}

public Todo ChangeOrder(int order)
{
if (order <= 0)
throw new DomainException("Order could be greater than zero.");
Order = order;
return this;
}

public Todo ChangeToCompleted()
{
Completed = true;
return this;
}
}
}
12 changes: 12 additions & 0 deletions samples/TodoApi/Dtos/TodoDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace NetCoreKit.Samples.TodoAPI.Dtos
{
public class TodoDto
{
public Guid Id { get; set; }
public string Title { get; set; }
public int Order { get; set; }
public bool Completed { get; set; }
}
}
19 changes: 19 additions & 0 deletions samples/TodoApi/Extensions/TodoExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using NetCoreKit.Samples.TodoAPI.Domain;
using NetCoreKit.Samples.TodoAPI.Dtos;

namespace NetCoreKit.Samples.TodoAPI.Extensions
{
public static class TodoExtensions
{
public static TodoDto ToDto(this Todo todo)
{
return new TodoDto
{
Id = todo.Id,
Title = todo.Title,
Completed = todo.Completed ?? false,
Order = todo.Order ?? 1
};
}
}
}
12 changes: 12 additions & 0 deletions samples/TodoApi/Infrastructure/Db/TodoDbContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Microsoft.EntityFrameworkCore;
using NetCoreKit.Infrastructure.EfCore.Db;

namespace NetCoreKit.Samples.TodoAPI.Infrastructure.Db
{
public class TodoDbContext : ApplicationDbContext
{
public TodoDbContext(DbContextOptions options) : base(options)
{
}
}
}
47 changes: 47 additions & 0 deletions samples/TodoApi/Migrations/20180817091043_InitTodoDb.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 33 additions & 0 deletions samples/TodoApi/Migrations/20180817091043_InitTodoDb.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;

namespace NetCoreKit.Samples.TodoAPI.Migrations
{
public partial class InitTodoDb : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Todos",
columns: table => new
{
Id = table.Column<Guid>(nullable: false),
Created = table.Column<DateTime>(nullable: false),
Updated = table.Column<DateTime>(nullable: false),
Order = table.Column<int>(nullable: true),
Title = table.Column<string>(nullable: false),
Completed = table.Column<bool>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Todos", x => x.Id);
});
}

protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Todos");
}
}
}
45 changes: 45 additions & 0 deletions samples/TodoApi/Migrations/TodoDbContextModelSnapshot.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using NetCoreKit.Samples.TodoAPI.Infrastructure.Db;

namespace NetCoreKit.Samples.TodoAPI.Migrations
{
[DbContext(typeof(TodoDbContext))]
partial class TodoDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "2.1.1-rtm-30846")
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

modelBuilder.Entity("NetCoreKit.Samples.TodoAPI.Domain.Todo", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<bool?>("Completed");
b.Property<DateTime>("Created");
b.Property<int?>("Order");
b.Property<string>("Title")
.IsRequired();
b.Property<DateTime>("Updated");
b.HasKey("Id");
b.ToTable("Todos");
});
#pragma warning restore 612, 618
}
}
}
Loading

0 comments on commit 08bca2f

Please sign in to comment.