aboutsummaryrefslogtreecommitdiff
path: root/ExamTemplate/Services
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-05-13 15:05:53 +0300
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-05-13 15:05:53 +0300
commitef163726a5444ba0cbc631f74730184172c1c486 (patch)
treed7d60837bb093c4256ad6506bc10ab981dafd491 /ExamTemplate/Services
parent19bb4631a7c0b57c8da19ca7aa89864ac1555836 (diff)
downloadit-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.cs21
-rw-r--r--ExamTemplate/Services/Interfaces/IUserService.cs4
-rw-r--r--ExamTemplate/Services/Models/User/EditUserServiceModel.cs9
-rw-r--r--ExamTemplate/Services/Services/BaseService.cs81
-rw-r--r--ExamTemplate/Services/Services/UserService.cs8
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;