diff options
| author | Syndamia <kamen.d.mladenov@protonmail.com> | 2021-05-13 15:05:53 +0300 |
|---|---|---|
| committer | Syndamia <kamen.d.mladenov@protonmail.com> | 2021-05-13 15:05:53 +0300 |
| commit | ef163726a5444ba0cbc631f74730184172c1c486 (patch) | |
| tree | d7d60837bb093c4256ad6506bc10ab981dafd491 /ExamTemplate/Services | |
| parent | 19bb4631a7c0b57c8da19ca7aa89864ac1555836 (diff) | |
| download | it-kariera-exam-template-ef163726a5444ba0cbc631f74730184172c1c486.tar it-kariera-exam-template-ef163726a5444ba0cbc631f74730184172c1c486.tar.gz it-kariera-exam-template-ef163726a5444ba0cbc631f74730184172c1c486.zip | |
Implemented BaseService that uses generics to implement very basic CRUD; Moved away from 3 service model to 1 service model in add feature script
Diffstat (limited to 'ExamTemplate/Services')
| -rw-r--r-- | ExamTemplate/Services/Interfaces/IBaseService.cs | 21 | ||||
| -rw-r--r-- | ExamTemplate/Services/Interfaces/IUserService.cs | 4 | ||||
| -rw-r--r-- | ExamTemplate/Services/Models/User/EditUserServiceModel.cs | 9 | ||||
| -rw-r--r-- | ExamTemplate/Services/Services/BaseService.cs | 81 | ||||
| -rw-r--r-- | ExamTemplate/Services/Services/UserService.cs | 8 |
5 files changed, 107 insertions, 16 deletions
diff --git a/ExamTemplate/Services/Interfaces/IBaseService.cs b/ExamTemplate/Services/Interfaces/IBaseService.cs new file mode 100644 index 0000000..55500ff --- /dev/null +++ b/ExamTemplate/Services/Interfaces/IBaseService.cs @@ -0,0 +1,21 @@ +using System; +using System.Threading.Tasks; +using System.Collections.Generic; + +namespace ExamTemplate.Services.Interfaces +{ + public interface IBaseService<DbModel, ServiceModel> + where DbModel : class + where ServiceModel : class + { + Task<bool> CreateAsync(ServiceModel serviceModel); + + Task<ServiceModel> GetByIdAsync(Guid id); + + Task<List<ServiceModel>> GetAll(); + + Task<bool> EditAsync(ServiceModel serviceModel); + + Task<bool> DeleteAsync(Guid id); + } +} diff --git a/ExamTemplate/Services/Interfaces/IUserService.cs b/ExamTemplate/Services/Interfaces/IUserService.cs index 7f4c26f..35f14e3 100644 --- a/ExamTemplate/Services/Interfaces/IUserService.cs +++ b/ExamTemplate/Services/Interfaces/IUserService.cs @@ -1,8 +1,6 @@ using System.Security.Claims; using System.Threading.Tasks; using ExamTemplate.Services.Models.User; -using Microsoft.AspNetCore.Identity; -using Microsoft.EntityFrameworkCore; namespace ExamTemplate.Services.Interfaces { @@ -18,7 +16,7 @@ namespace ExamTemplate.Services.Interfaces Task<UserServiceModel> GetUserByClaimsAsync(ClaimsPrincipal claimsPrincipal); - Task<bool> EditUserAsync(ClaimsPrincipal claimsPrincipal, EditUserServiceModel editUserServiceModel); + Task<bool> EditUserAsync(ClaimsPrincipal claimsPrincipal, UserServiceModel userServiceModel); Task<bool> DeleteUserAsync(ClaimsPrincipal claimsPrincipal); diff --git a/ExamTemplate/Services/Models/User/EditUserServiceModel.cs b/ExamTemplate/Services/Models/User/EditUserServiceModel.cs deleted file mode 100644 index c8b9971..0000000 --- a/ExamTemplate/Services/Models/User/EditUserServiceModel.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExamTemplate.Services.Models.User -{ - public class EditUserServiceModel - { - public string FirstName { get; set; } - public string LastName { get; set; } - public string Username { get; set; } - } -} diff --git a/ExamTemplate/Services/Services/BaseService.cs b/ExamTemplate/Services/Services/BaseService.cs new file mode 100644 index 0000000..89b3239 --- /dev/null +++ b/ExamTemplate/Services/Services/BaseService.cs @@ -0,0 +1,81 @@ +using System; +using System.Threading.Tasks; +using AutoMapper; +using ExamTemplate.Data; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using System.Linq; +using ExamTemplate.Services.Interfaces; + +namespace ExamTemplate.Services.Services +{ + public abstract class BaseService<DbModel, ServiceModel> : IBaseService<DbModel, ServiceModel> + where DbModel : class + where ServiceModel : class + { + protected IMapper _autoMapper { get; private set; } + protected TemplateContext _context { get; private set; } + + protected BaseService(IMapper autoMapper, TemplateContext context) + { + this._autoMapper = autoMapper; + this._context = context; + } + + public virtual async Task<bool> CreateAsync(ServiceModel serviceModel) + { + DbModel newEntity = this._autoMapper.Map<DbModel>(serviceModel); + + await this.GetDbSet() + .AddAsync(newEntity); + + return await this.SaveChangesAsync(); + } + + public virtual async Task<ServiceModel> GetByIdAsync(Guid id) + { + DbModel entity = await this.GetDbSet() + .FindAsync(id); + + return this._autoMapper.Map<ServiceModel>(entity); + } + + public virtual async Task<List<ServiceModel>> GetAll() + { + return await this.GetDbSet() + .Select(x => this._autoMapper.Map<ServiceModel>(x)) + .ToListAsync(); + } + + public virtual async Task<bool> EditAsync(ServiceModel serviceModel) + { + DbModel entity = this._autoMapper.Map<DbModel>(serviceModel); + + this._context.Update(entity); + + return await this.SaveChangesAsync(); + } + + public virtual async Task<bool> DeleteAsync(Guid id) + { + DbModel entity = this.GetDbSet() + .Find(id); + + this._context.Remove(entity); + + return await this.SaveChangesAsync(); + } + + /// Get, Create, Edit and Delete use this method + /// Override it to add include statements (and so all other methods will work with includes too) + protected virtual DbSet<DbModel> GetDbSet() + { + return this._context.Set<DbModel>(); + } + + protected async Task<bool> SaveChangesAsync() + { + return await this._context.SaveChangesAsync() >= 1; + } + } +} diff --git a/ExamTemplate/Services/Services/UserService.cs b/ExamTemplate/Services/Services/UserService.cs index dab0801..f2a3e9f 100644 --- a/ExamTemplate/Services/Services/UserService.cs +++ b/ExamTemplate/Services/Services/UserService.cs @@ -78,13 +78,13 @@ namespace ExamTemplate.Services.Services return this._autoMapper.Map<UserServiceModel>(user);
}
- public async Task<bool> EditUserAsync(ClaimsPrincipal claimsPrincipal, EditUserServiceModel editUserServiceModel)
+ public async Task<bool> EditUserAsync(ClaimsPrincipal claimsPrincipal, UserServiceModel userServiceModel)
{
User user = await this._userManager.GetUserAsync(claimsPrincipal);
- user.UserName = editUserServiceModel.Username;
- user.FirstName = editUserServiceModel.FirstName;
- user.LastName = editUserServiceModel.LastName;
+ user.UserName = userServiceModel.Username;
+ user.FirstName = userServiceModel.FirstName;
+ user.LastName = userServiceModel.LastName;
IdentityResult result = await this._userManager.UpdateAsync(user);
return result.Succeeded;
|
