From b324cbd2cc02b9b11513fb292b329deaddcf6873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Aug 2019 16:59:18 +0300 Subject: [PATCH] Added application services --- docs/en/Tutorials/Angular/Part-I.md | 20 ++++++++++------- .../Angular/images/bookstore-swagger-api.png | Bin 0 -> 35254 bytes docs/en/Tutorials/AspNetCore-Mvc/Part-I.md | 12 +++++----- .../BookDto.cs | 16 +++++++++++++ .../CreateUpdateBookDto.cs | 21 ++++++++++++++++++ .../IBookAppService.cs | 17 ++++++++++++++ .../BookAppService.cs | 19 ++++++++++++++++ .../BookStoreApplicationAutoMapperProfile.cs | 5 ++--- 8 files changed, 93 insertions(+), 17 deletions(-) create mode 100644 docs/en/Tutorials/Angular/images/bookstore-swagger-api.png create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/BookDto.cs create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/CreateUpdateBookDto.cs create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/IBookAppService.cs create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookAppService.cs diff --git a/docs/en/Tutorials/Angular/Part-I.md b/docs/en/Tutorials/Angular/Part-I.md index fdc8de4bf4..06ba6aa41d 100644 --- a/docs/en/Tutorials/Angular/Part-I.md +++ b/docs/en/Tutorials/Angular/Part-I.md @@ -246,7 +246,7 @@ using Volo.Abp.Application.Services; namespace Acme.BookStore { public interface IBookAppService : - IAsyncCrudAppService< //Defines CRUD methods + ICrudAppService< //Defines CRUD methods BookDto, //Used to show books Guid, //Primary key of the book entity PagedAndSortedResultRequestDto, //Used for paging/sorting on getting a list of books @@ -259,8 +259,8 @@ namespace Acme.BookStore ``` - Defining interfaces for application services is not required by the framework. However, it's suggested as a best practice. -- `IAsyncCrudAppService` defines common **CRUD** methods: `GetAsync`, `GetListAsync`, `CreateAsync`, `UpdateAsync` and `DeleteAsync`. It's not required to extend it. Instead, you could inherit from the empty `IApplicationService` interface and define your own methods manually. -- There are some variations of the `IAsyncCrudAppService` where you can use separated DTOs for each method. +- `ICrudAppService` defines common **CRUD** methods: `GetAsync`, `GetListAsync`, `CreateAsync`, `UpdateAsync` and `DeleteAsync`. It's not required to extend it. Instead, you could inherit from the empty `IApplicationService` interface and define your own methods manually. +- There are some variations of the `ICrudAppService` where you can use separated DTOs for each method. #### BookAppService @@ -275,7 +275,7 @@ using Volo.Abp.Domain.Repositories; namespace Acme.BookStore { public class BookAppService : - AsyncCrudAppService, IBookAppService { @@ -288,7 +288,7 @@ namespace Acme.BookStore } ``` -- `BookAppService` is derived from `AsyncCrudAppService<...>` which implements all the CRUD methods defined above. +- `BookAppService` is derived from `CrudAppService<...>` which implements all the CRUD methods defined above. - `BookAppService` injects `IRepository` which is the default repository for the `Book` entity. ABP automatically creates default repositories for each aggregate root (or entity). See the [repository document](../../Repositories.md). - `BookAppService` uses `IObjectMapper` to convert `Book` objects to `BookDto` objects and `CreateUpdateBookDto` objects to `Book` objects. The Startup template uses the [AutoMapper](http://automapper.org/) library as the object mapping provider. You defined the mappings before, so it will work as expected. @@ -298,10 +298,14 @@ You normally create **Controllers** to expose application services as **HTTP API #### Swagger UI -The startup template is configured to run the [swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the application and enter `https://localhost:XXXX/swagger/` (replace XXXX by your own port) as URL on your browser. +The startup template is configured to run the [swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the `Acme.BookStore.HttpApi.Host` application and enter `https://localhost:XXXX/swagger/` (replace XXXX by your own port) as URL on your browser. You will see some built-in service endpoints as well as the `Book` service and its REST-style endpoints: -TODO: Screenshot +![bookstore-swagger](images/bookstore-swagger-api.png) -Swagger has a nice UI to test APIs. You can try to execute the `[GET] /api/app/book` API to get a list of books. \ No newline at end of file +Swagger has a nice UI to test APIs. You can try to execute the `[GET] /api/app/book` API to get a list of books. + +### Create the Books Page + +It's time to create something visible and usable! \ No newline at end of file diff --git a/docs/en/Tutorials/Angular/images/bookstore-swagger-api.png b/docs/en/Tutorials/Angular/images/bookstore-swagger-api.png new file mode 100644 index 0000000000000000000000000000000000000000..437c77250387600237598e0ad79e5551ed65b45f GIT binary patch literal 35254 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 required by the framework. However, it's suggested as a best practice. -* `IAsyncCrudAppService` defines common **CRUD** methods: `GetAsync`, `GetListAsync`, `CreateAsync`, `UpdateAsync` and `DeleteAsync`. It's not required to extend it. Instead, you could inherit from the empty `IApplicationService` interface and define your own methods manually. -* There are some variations of the `IAsyncCrudAppService` where you can use separated DTOs for each method. +* `ICrudAppService` defines common **CRUD** methods: `GetAsync`, `GetListAsync`, `CreateAsync`, `UpdateAsync` and `DeleteAsync`. It's not required to extend it. Instead, you could inherit from the empty `IApplicationService` interface and define your own methods manually. +* There are some variations of the `ICrudAppService` where you can use separated DTOs for each method. #### BookAppService @@ -250,8 +250,8 @@ using Volo.Abp.Domain.Repositories; namespace Acme.BookStore { public class BookAppService : - AsyncCrudAppService, + CrudAppService, IBookAppService { public BookAppService(IRepository repository) @@ -263,7 +263,7 @@ namespace Acme.BookStore } ```` -* `BookAppService` is derived from `AsyncCrudAppService<...>` which implements all the CRUD methods defined above. +* `BookAppService` is derived from `CrudAppService<...>` which implements all the CRUD methods defined above. * `BookAppService` injects `IRepository` which is the default repository for the `Book` entity. ABP automatically creates default repositories for each aggregate root (or entity). See the [repository document](../../Repositories.md). * `BookAppService` uses `IObjectMapper` to convert `Book` objects to `BookDto` objects and `CreateUpdateBookDto` objects to `Book` objects. The Startup template uses the [AutoMapper](http://automapper.org/) library as the object mapping provider. You defined the mappings before, so it will work as expected. diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/BookDto.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/BookDto.cs new file mode 100644 index 0000000000..5a94fbce1e --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/BookDto.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Acme.BookStore +{ + public class BookDto : AuditedEntityDto + { + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } + } +} \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/CreateUpdateBookDto.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/CreateUpdateBookDto.cs new file mode 100644 index 0000000000..8dc38a9e31 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/CreateUpdateBookDto.cs @@ -0,0 +1,21 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace Acme.BookStore +{ + public class CreateUpdateBookDto + { + [Required] + [StringLength(128)] + public string Name { get; set; } + + [Required] + public BookType Type { get; set; } = BookType.Undefined; + + [Required] + public DateTime PublishDate { get; set; } + + [Required] + public float Price { get; set; } + } +} \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/IBookAppService.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/IBookAppService.cs new file mode 100644 index 0000000000..5a17a8f19d --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/IBookAppService.cs @@ -0,0 +1,17 @@ +using System; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace Acme.BookStore +{ + public interface IBookAppService : + ICrudAppService< //Defines CRUD methods + BookDto, //Used to show books + Guid, //Primary key of the book entity + PagedAndSortedResultRequestDto, //Used for paging/sorting on getting a list of books + CreateUpdateBookDto, //Used to create a new book + CreateUpdateBookDto> //Used to update a book + { + + } +} \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookAppService.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookAppService.cs new file mode 100644 index 0000000000..8d9d29468a --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookAppService.cs @@ -0,0 +1,19 @@ +using System; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace Acme.BookStore +{ + public class BookAppService : + CrudAppService, + IBookAppService + { + public BookAppService(IRepository repository) + : base(repository) + { + + } + } +} \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookStoreApplicationAutoMapperProfile.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookStoreApplicationAutoMapperProfile.cs index 0706d83633..9bc08930cf 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookStoreApplicationAutoMapperProfile.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/BookStoreApplicationAutoMapperProfile.cs @@ -6,9 +6,8 @@ namespace Acme.BookStore { public BookStoreApplicationAutoMapperProfile() { - /* You can configure your AutoMapper mapping configuration here. - * Alternatively, you can split your mapping configurations - * into multiple profile classes for a better organization. */ + CreateMap(); + CreateMap(); } } }