Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
CleanArchitecture
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tsai
CleanArchitecture
Commits
2206608a
Commit
2206608a
authored
Oct 30, 2017
by
Steve Smith
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
parent
f2cb9398
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
249 additions
and
13 deletions
+249
-13
ToDoItems2Controller.cs
src/CleanArchitecture.Web/Api/ToDoItems2Controller.cs
+49
-0
ToDoItems3Controller.cs
src/CleanArchitecture.Web/Api/ToDoItems3Controller.cs
+56
-0
ToDoItemsController.cs
src/CleanArchitecture.Web/Api/ToDoItemsController.cs
+14
-8
ToDoItemDTO.cs
src/CleanArchitecture.Web/ApiModels/ToDoItemDTO.cs
+1
-5
CleanArchitecture.Web.csproj
src/CleanArchitecture.Web/CleanArchitecture.Web.csproj
+1
-0
CreateItemCommand.cs
src/CleanArchitecture.Web/Commands/CreateItemCommand.cs
+10
-0
GetItemCommand.cs
src/CleanArchitecture.Web/Commands/GetItemCommand.cs
+10
-0
ListItemsCommand.cs
src/CleanArchitecture.Web/Commands/ListItemsCommand.cs
+10
-0
MarkItemCompleteCommand.cs
...CleanArchitecture.Web/Commands/MarkItemCompleteCommand.cs
+9
-0
ListItemsHandler.cs
src/CleanArchitecture.Web/Handlers/ListItemsHandler.cs
+26
-0
IToDoAppService.cs
src/CleanArchitecture.Web/Services/IToDoAppService.cs
+13
-0
ToDoAppService.cs
src/CleanArchitecture.Web/Services/ToDoAppService.cs
+47
-0
Startup.cs
src/CleanArchitecture.Web/Startup.cs
+3
-0
No files found.
src/CleanArchitecture.Web/Api/ToDoItems2Controller.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Web.ApiModels
;
using
CleanArchitecture.Web.Filters
;
using
CleanArchitecture.Web.Services
;
using
Microsoft.AspNetCore.Mvc
;
using
System.Threading.Tasks
;
namespace
CleanArchitecture.Web.Api
{
[
Route
(
"api/[controller]"
)]
[
ValidateModel
]
public
class
ToDoItems2Controller
:
Controller
{
private
readonly
IToDoAppService
_appService
;
public
ToDoItems2Controller
(
IToDoAppService
appService
)
{
_appService
=
appService
;
}
[
HttpGet
]
public
IActionResult
List
()
{
var
items
=
_appService
.
List
();
return
Ok
(
items
);
}
[
HttpGet
(
"{id:int}"
)]
public
IActionResult
GetById
(
int
id
)
{
var
item
=
_appService
.
GetById
(
id
);
return
Ok
(
item
);
}
[
HttpPost
]
public
async
Task
<
IActionResult
>
Post
([
FromBody
]
ToDoItemDTO
item
)
{
var
createdItem
=
_appService
.
CreateItem
(
item
);
return
Ok
(
createdItem
);
}
[
HttpPost
(
"{itemId}"
)]
public
async
Task
<
IActionResult
>
MarkComplete
(
int
itemId
)
{
_appService
.
MarkComplete
(
itemId
);
return
Ok
();
}
}
}
src/CleanArchitecture.Web/Api/ToDoItems3Controller.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Web.ApiModels
;
using
CleanArchitecture.Web.Commands
;
using
CleanArchitecture.Web.Filters
;
using
MediatR
;
using
Microsoft.AspNetCore.Mvc
;
using
System.Threading.Tasks
;
namespace
CleanArchitecture.Web.Api
{
[
Route
(
"api/[controller]"
)]
[
ValidateModel
]
public
class
ToDoItems3Controller
:
Controller
{
private
readonly
IMediator
_mediator
;
public
ToDoItems3Controller
(
IMediator
mediator
)
{
_mediator
=
mediator
;
}
[
HttpGet
]
public
async
Task
<
IActionResult
>
List
()
{
var
items
=
await
_mediator
.
Send
(
new
ListItemsCommand
());
return
Ok
(
items
);
}
[
HttpGet
(
"{id:int}"
)]
public
async
Task
<
IActionResult
>
GetById
(
int
id
)
{
var
command
=
new
GetItemCommand
{
Id
=
id
};
var
item
=
await
_mediator
.
Send
(
command
);
return
Ok
(
item
);
}
[
HttpPost
]
public
async
Task
<
IActionResult
>
Post
([
FromBody
]
ToDoItemDTO
item
)
{
var
command
=
new
CreateItemCommand
{
ItemToCreate
=
item
};
var
createdItem
=
await
_mediator
.
Send
(
command
);
return
Ok
(
createdItem
);
}
[
HttpPost
(
"{itemId}"
)]
public
async
Task
<
IActionResult
>
MarkComplete
(
int
itemId
)
{
var
command
=
new
MarkItemCompleteCommand
{
Id
=
itemId
};
await
_mediator
.
Send
(
command
);
return
Ok
();
}
}
}
src/CleanArchitecture.Web/Api/ToDoItemsController.cs
View file @
2206608a
using
System
;
using
CleanArchitecture.Core.Entities
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Threading.Tasks
;
using
CleanArchitecture.Core.Entities
;
using
CleanArchitecture.Core.Interfaces
;
using
CleanArchitecture.Core.Interfaces
;
using
CleanArchitecture.Web.ApiModels
;
using
CleanArchitecture.Web.ApiModels
;
using
CleanArchitecture.Web.Filters
;
using
CleanArchitecture.Web.Filters
;
using
Microsoft.AspNetCore.Mvc
;
using
Microsoft.AspNetCore.Mvc
;
using
System.Linq
;
using
System.Threading.Tasks
;
namespace
CleanArchitecture.Web.Api
namespace
CleanArchitecture.Web.Api
{
{
...
@@ -21,7 +19,6 @@ namespace CleanArchitecture.Web.Api
...
@@ -21,7 +19,6 @@ namespace CleanArchitecture.Web.Api
_todoRepository
=
todoRepository
;
_todoRepository
=
todoRepository
;
}
}
// GET: api/ToDoItems
[
HttpGet
]
[
HttpGet
]
public
IActionResult
List
()
public
IActionResult
List
()
{
{
...
@@ -30,7 +27,6 @@ namespace CleanArchitecture.Web.Api
...
@@ -30,7 +27,6 @@ namespace CleanArchitecture.Web.Api
return
Ok
(
items
);
return
Ok
(
items
);
}
}
// GET: api/ToDoItems
[
HttpGet
(
"{id:int}"
)]
[
HttpGet
(
"{id:int}"
)]
public
IActionResult
GetById
(
int
id
)
public
IActionResult
GetById
(
int
id
)
{
{
...
@@ -38,7 +34,7 @@ namespace CleanArchitecture.Web.Api
...
@@ -38,7 +34,7 @@ namespace CleanArchitecture.Web.Api
return
Ok
(
item
);
return
Ok
(
item
);
}
}
// POST: api/ToDoItems
[
HttpPost
]
public
async
Task
<
IActionResult
>
Post
([
FromBody
]
ToDoItemDTO
item
)
public
async
Task
<
IActionResult
>
Post
([
FromBody
]
ToDoItemDTO
item
)
{
{
var
todoItem
=
new
ToDoItem
()
var
todoItem
=
new
ToDoItem
()
...
@@ -49,5 +45,15 @@ namespace CleanArchitecture.Web.Api
...
@@ -49,5 +45,15 @@ namespace CleanArchitecture.Web.Api
_todoRepository
.
Add
(
todoItem
);
_todoRepository
.
Add
(
todoItem
);
return
Ok
(
ToDoItemDTO
.
FromToDoItem
(
todoItem
));
return
Ok
(
ToDoItemDTO
.
FromToDoItem
(
todoItem
));
}
}
[
HttpPost
(
"{itemId}"
)]
public
async
Task
<
IActionResult
>
MarkComplete
(
int
itemId
)
{
var
item
=
_todoRepository
.
GetById
(
itemId
);
item
.
MarkComplete
();
_todoRepository
.
Update
(
item
);
return
Ok
();
}
}
}
}
}
src/CleanArchitecture.Web/ApiModels/ToDoItemDTO.cs
View file @
2206608a
using
System
;
using
CleanArchitecture.Core.Entities
;
using
System.Collections.Generic
;
using
System.ComponentModel.DataAnnotations
;
using
System.ComponentModel.DataAnnotations
;
using
System.Linq
;
using
System.Threading.Tasks
;
using
CleanArchitecture.Core.Entities
;
namespace
CleanArchitecture.Web.ApiModels
namespace
CleanArchitecture.Web.ApiModels
{
{
...
...
src/CleanArchitecture.Web/CleanArchitecture.Web.csproj
View file @
2206608a
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
<ItemGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="1.50.2" />
<PackageReference Include="Dapper" Version="1.50.2" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" />
...
...
src/CleanArchitecture.Web/Commands/CreateItemCommand.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Web.ApiModels
;
using
MediatR
;
namespace
CleanArchitecture.Web.Commands
{
public
class
CreateItemCommand
:
IRequest
<
ToDoItemDTO
>
{
public
ToDoItemDTO
ItemToCreate
{
get
;
set
;
}
}
}
src/CleanArchitecture.Web/Commands/GetItemCommand.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Web.ApiModels
;
using
MediatR
;
namespace
CleanArchitecture.Web.Commands
{
public
class
GetItemCommand
:
IRequest
<
ToDoItemDTO
>
{
public
int
Id
{
get
;
set
;
}
}
}
src/CleanArchitecture.Web/Commands/ListItemsCommand.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Web.ApiModels
;
using
MediatR
;
using
System.Collections.Generic
;
namespace
CleanArchitecture.Web.Commands
{
public
class
ListItemsCommand
:
IRequest
<
List
<
ToDoItemDTO
>>
{
}
}
src/CleanArchitecture.Web/Commands/MarkItemCompleteCommand.cs
0 → 100644
View file @
2206608a
using
MediatR
;
namespace
CleanArchitecture.Web.Commands
{
public
class
MarkItemCompleteCommand
:
IRequest
{
public
int
Id
{
get
;
set
;
}
}
}
src/CleanArchitecture.Web/Handlers/ListItemsHandler.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Core.Entities
;
using
CleanArchitecture.Core.Interfaces
;
using
CleanArchitecture.Web.ApiModels
;
using
CleanArchitecture.Web.Commands
;
using
MediatR
;
using
System.Collections.Generic
;
using
System.Linq
;
namespace
CleanArchitecture.Web.Handlers
{
public
class
ListItemsHandler
:
IRequestHandler
<
ListItemsCommand
,
List
<
ToDoItemDTO
>>
{
private
readonly
IRepository
<
ToDoItem
>
_todoRepository
;
public
ListItemsHandler
(
IRepository
<
ToDoItem
>
todoRepository
)
{
_todoRepository
=
todoRepository
;
}
public
List
<
ToDoItemDTO
>
Handle
(
ListItemsCommand
message
)
{
return
_todoRepository
.
List
()
.
Select
(
ToDoItemDTO
.
FromToDoItem
)
.
ToList
();
}
}
}
src/CleanArchitecture.Web/Services/IToDoAppService.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Web.ApiModels
;
using
System.Collections.Generic
;
namespace
CleanArchitecture.Web.Services
{
public
interface
IToDoAppService
{
ToDoItemDTO
GetById
(
int
id
);
ToDoItemDTO
CreateItem
(
ToDoItemDTO
itemToCreate
);
IEnumerable
<
ToDoItemDTO
>
List
();
void
MarkComplete
(
int
itemId
);
}
}
src/CleanArchitecture.Web/Services/ToDoAppService.cs
0 → 100644
View file @
2206608a
using
CleanArchitecture.Core.Entities
;
using
CleanArchitecture.Core.Interfaces
;
using
CleanArchitecture.Web.ApiModels
;
using
System.Collections.Generic
;
using
System.Linq
;
namespace
CleanArchitecture.Web.Services
{
public
class
ToDoAppService
:
IToDoAppService
{
private
readonly
IRepository
<
ToDoItem
>
_todoRepository
;
public
ToDoAppService
(
IRepository
<
ToDoItem
>
todoRepository
)
{
_todoRepository
=
todoRepository
;
}
public
ToDoItemDTO
CreateItem
(
ToDoItemDTO
itemToCreate
)
{
var
todoItem
=
new
ToDoItem
()
{
Title
=
itemToCreate
.
Title
,
Description
=
itemToCreate
.
Description
};
_todoRepository
.
Add
(
todoItem
);
return
ToDoItemDTO
.
FromToDoItem
(
todoItem
);
}
public
ToDoItemDTO
GetById
(
int
id
)
{
return
ToDoItemDTO
.
FromToDoItem
(
_todoRepository
.
GetById
(
id
));
}
public
IEnumerable
<
ToDoItemDTO
>
List
()
{
return
_todoRepository
.
List
()
.
Select
(
item
=>
ToDoItemDTO
.
FromToDoItem
(
item
));
}
public
void
MarkComplete
(
int
itemId
)
{
var
item
=
_todoRepository
.
GetById
(
itemId
);
item
.
MarkComplete
();
_todoRepository
.
Update
(
item
);
}
}
}
src/CleanArchitecture.Web/Startup.cs
View file @
2206608a
...
@@ -9,6 +9,7 @@ using Microsoft.Extensions.Configuration;
...
@@ -9,6 +9,7 @@ using Microsoft.Extensions.Configuration;
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.Logging
;
using
Microsoft.Extensions.Logging
;
using
StructureMap
;
using
StructureMap
;
using
MediatR
;
namespace
CleanArchitecture.Web
namespace
CleanArchitecture.Web
{
{
...
@@ -32,6 +33,8 @@ namespace CleanArchitecture.Web
...
@@ -32,6 +33,8 @@ namespace CleanArchitecture.Web
services
.
AddMvc
()
services
.
AddMvc
()
.
AddControllersAsServices
();
.
AddControllersAsServices
();
services
.
AddMediatR
();
var
container
=
new
Container
();
var
container
=
new
Container
();
container
.
Configure
(
config
=>
container
.
Configure
(
config
=>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment