From 7255325ae424e0d1f1b48d01bde8357096c2db8b Mon Sep 17 00:00:00 2001 From: Syndamia Date: Wed, 12 May 2021 16:44:17 +0300 Subject: Moved services to their own folder and updated their namespaces --- ExamTemplate/Services/CloudinaryService.cs | 50 ------------ .../Services/Services/CloudinaryService.cs | 50 ++++++++++++ ExamTemplate/Services/Services/UserService.cs | 94 ++++++++++++++++++++++ ExamTemplate/Services/UserService.cs | 94 ---------------------- ExamTemplate/Web/Startup.cs | 2 +- tools/add-feature-template.sh | 4 +- 6 files changed, 147 insertions(+), 147 deletions(-) delete mode 100644 ExamTemplate/Services/CloudinaryService.cs create mode 100644 ExamTemplate/Services/Services/CloudinaryService.cs create mode 100644 ExamTemplate/Services/Services/UserService.cs delete mode 100644 ExamTemplate/Services/UserService.cs diff --git a/ExamTemplate/Services/CloudinaryService.cs b/ExamTemplate/Services/CloudinaryService.cs deleted file mode 100644 index ef421e7..0000000 --- a/ExamTemplate/Services/CloudinaryService.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using CloudinaryDotNet; -using CloudinaryDotNet.Actions; -using Microsoft.AspNetCore.Http; -using ExamTemplate.Services.Interfaces; - -namespace ExamTemplate.Services -{ - public class CloudinaryService : ICloudinaryService - { - // Regex for getting the filename without (final) filename extension - // So, from image.png, it will match image, and from doc.my.txt will match doc.my - private static readonly Regex s_imageRegex = new(".*(?=\\.)"); - - private readonly Cloudinary _cloudinary; - - public CloudinaryService(string cloudName, string apiKey, string apiSecret) - { - this._cloudinary = new Cloudinary(new Account(cloudName, apiKey, apiSecret)); - } - - public async Task> UploadFilesToCloud(List formFiles) - { - List fileUrls = new(); - foreach (var formFile in formFiles) - { - string fileName = s_imageRegex.Match(formFile.FileName).ToString(); - - using var ms = new MemoryStream(); - formFile.CopyTo(ms); - byte[] formBytes = ms.ToArray(); - - RawUploadParams rawUploadParams = new() - { - File = new FileDescription(fileName, new MemoryStream(formBytes)), - PublicId = fileName, - UseFilename = true - }; - - RawUploadResult rawUploadResult = await this._cloudinary.UploadAsync(rawUploadParams); - fileUrls.Add(rawUploadResult.Url.AbsoluteUri); - } - - return fileUrls; - } - } -} diff --git a/ExamTemplate/Services/Services/CloudinaryService.cs b/ExamTemplate/Services/Services/CloudinaryService.cs new file mode 100644 index 0000000..40772d9 --- /dev/null +++ b/ExamTemplate/Services/Services/CloudinaryService.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using CloudinaryDotNet; +using CloudinaryDotNet.Actions; +using Microsoft.AspNetCore.Http; +using ExamTemplate.Services.Interfaces; + +namespace ExamTemplate.Services.Services +{ + public class CloudinaryService : ICloudinaryService + { + // Regex for getting the filename without (final) filename extension + // So, from image.png, it will match image, and from doc.my.txt will match doc.my + private static readonly Regex s_imageRegex = new(".*(?=\\.)"); + + private readonly Cloudinary _cloudinary; + + public CloudinaryService(string cloudName, string apiKey, string apiSecret) + { + this._cloudinary = new Cloudinary(new Account(cloudName, apiKey, apiSecret)); + } + + public async Task> UploadFilesToCloud(List formFiles) + { + List fileUrls = new(); + foreach (var formFile in formFiles) + { + string fileName = s_imageRegex.Match(formFile.FileName).ToString(); + + using var ms = new MemoryStream(); + formFile.CopyTo(ms); + byte[] formBytes = ms.ToArray(); + + RawUploadParams rawUploadParams = new() + { + File = new FileDescription(fileName, new MemoryStream(formBytes)), + PublicId = fileName, + UseFilename = true + }; + + RawUploadResult rawUploadResult = await this._cloudinary.UploadAsync(rawUploadParams); + fileUrls.Add(rawUploadResult.Url.AbsoluteUri); + } + + return fileUrls; + } + } +} diff --git a/ExamTemplate/Services/Services/UserService.cs b/ExamTemplate/Services/Services/UserService.cs new file mode 100644 index 0000000..e82859a --- /dev/null +++ b/ExamTemplate/Services/Services/UserService.cs @@ -0,0 +1,94 @@ +using System; +using System.Security.Claims; +using System.Threading.Tasks; +using AutoMapper; +using ExamTemplate.Data; +using ExamTemplate.Data.Models; +using ExamTemplate.Services.Models.User; +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; +using ExamTemplate.Services.Interfaces; + +namespace ExamTemplate.Services.Services +{ + public class UserService : IUserService + { + private readonly IMapper _autoMapper; + private readonly TemplateContext _context; + private readonly SignInManager _signInManager; + private readonly UserManager _userManager; + private readonly RoleManager> _roleManager; + + public UserService(IMapper autoMapper, TemplateContext templateContext, SignInManager signInManager, UserManager userManager, RoleManager> roleManager) + { + this._autoMapper = autoMapper; + this._context = templateContext; + this._signInManager = signInManager; + this._userManager = userManager; + this._roleManager = roleManager; + } + + public async Task RegisterUserAsync(RegisterUserServiceModel registerUserServiceModel) + { + User user = this._autoMapper.Map(registerUserServiceModel); + + user.PasswordHash = this._userManager.PasswordHasher.HashPassword(user, registerUserServiceModel.Password); + IdentityResult userCreateResult = await this._userManager.CreateAsync(user); + IdentityResult addRoleResult = await this._userManager.AddToRoleAsync(user, "User"); + + return userCreateResult.Succeeded && addRoleResult.Succeeded; + } + + public async Task LoginUserAsync(LoginUserServiceModel loginUserServiceModel) + { + SignInResult result = await this._signInManager.PasswordSignInAsync(loginUserServiceModel.Username, loginUserServiceModel.Password, false, false); + + return result.Succeeded; + } + + public async Task LogoutAsync() + { + await this._signInManager.SignOutAsync(); + } + + public async Task GetUserByUsernameAsync(string username) + { + User user = await this._userManager.Users + .FirstOrDefaultAsync(x => x.UserName == username); + + return this._autoMapper.Map(user); + } + + public async Task GetUserByClaimsAsync(ClaimsPrincipal claimsPrincipal) + { + User user = await this._userManager.GetUserAsync(claimsPrincipal); + + return this._autoMapper.Map(user); + } + + public async Task EditUserAsync(ClaimsPrincipal claimsPrincipal, EditUserServiceModel editUserServiceModel) + { + User user = await this._userManager.GetUserAsync(claimsPrincipal); + + user.UserName = editUserServiceModel.Username; + user.FirstName = editUserServiceModel.FirstName; + user.LastName = editUserServiceModel.LastName; + + IdentityResult result = await this._userManager.UpdateAsync(user); + return result.Succeeded; + } + + public async Task DeleteUserAsync(ClaimsPrincipal claimsPrincipal) + { + User user = await this._userManager.GetUserAsync(claimsPrincipal); + + IdentityResult result = await this._userManager.DeleteAsync(user); + return result.Succeeded; + } + + public bool IsSignedIn(ClaimsPrincipal claimsPrincipal) + { + return this._signInManager.IsSignedIn(claimsPrincipal); + } + } +} diff --git a/ExamTemplate/Services/UserService.cs b/ExamTemplate/Services/UserService.cs deleted file mode 100644 index 3099bda..0000000 --- a/ExamTemplate/Services/UserService.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Security.Claims; -using System.Threading.Tasks; -using AutoMapper; -using ExamTemplate.Data; -using ExamTemplate.Data.Models; -using ExamTemplate.Services.Models.User; -using Microsoft.AspNetCore.Identity; -using Microsoft.EntityFrameworkCore; -using ExamTemplate.Services.Interfaces; - -namespace ExamTemplate.Services -{ - public class UserService : IUserService - { - private readonly IMapper _autoMapper; - private readonly TemplateContext _context; - private readonly SignInManager _signInManager; - private readonly UserManager _userManager; - private readonly RoleManager> _roleManager; - - public UserService(IMapper autoMapper, TemplateContext templateContext, SignInManager signInManager, UserManager userManager, RoleManager> roleManager) - { - this._autoMapper = autoMapper; - this._context = templateContext; - this._signInManager = signInManager; - this._userManager = userManager; - this._roleManager = roleManager; - } - - public async Task RegisterUserAsync(RegisterUserServiceModel registerUserServiceModel) - { - User user = this._autoMapper.Map(registerUserServiceModel); - - user.PasswordHash = this._userManager.PasswordHasher.HashPassword(user, registerUserServiceModel.Password); - IdentityResult userCreateResult = await this._userManager.CreateAsync(user); - IdentityResult addRoleResult = await this._userManager.AddToRoleAsync(user, "User"); - - return userCreateResult.Succeeded && addRoleResult.Succeeded; - } - - public async Task LoginUserAsync(LoginUserServiceModel loginUserServiceModel) - { - SignInResult result = await this._signInManager.PasswordSignInAsync(loginUserServiceModel.Username, loginUserServiceModel.Password, false, false); - - return result.Succeeded; - } - - public async Task LogoutAsync() - { - await this._signInManager.SignOutAsync(); - } - - public async Task GetUserByUsernameAsync(string username) - { - User user = await this._userManager.Users - .FirstOrDefaultAsync(x => x.UserName == username); - - return this._autoMapper.Map(user); - } - - public async Task GetUserByClaimsAsync(ClaimsPrincipal claimsPrincipal) - { - User user = await this._userManager.GetUserAsync(claimsPrincipal); - - return this._autoMapper.Map(user); - } - - public async Task EditUserAsync(ClaimsPrincipal claimsPrincipal, EditUserServiceModel editUserServiceModel) - { - User user = await this._userManager.GetUserAsync(claimsPrincipal); - - user.UserName = editUserServiceModel.Username; - user.FirstName = editUserServiceModel.FirstName; - user.LastName = editUserServiceModel.LastName; - - IdentityResult result = await this._userManager.UpdateAsync(user); - return result.Succeeded; - } - - public async Task DeleteUserAsync(ClaimsPrincipal claimsPrincipal) - { - User user = await this._userManager.GetUserAsync(claimsPrincipal); - - IdentityResult result = await this._userManager.DeleteAsync(user); - return result.Succeeded; - } - - public bool IsSignedIn(ClaimsPrincipal claimsPrincipal) - { - return this._signInManager.IsSignedIn(claimsPrincipal); - } - } -} diff --git a/ExamTemplate/Web/Startup.cs b/ExamTemplate/Web/Startup.cs index ec479a7..c18bca6 100644 --- a/ExamTemplate/Web/Startup.cs +++ b/ExamTemplate/Web/Startup.cs @@ -3,7 +3,7 @@ using System.Linq; using ExamTemplate.Common; using ExamTemplate.Data; using ExamTemplate.Data.Models; -using ExamTemplate.Services; +using ExamTemplate.Services.Services; using ExamTemplate.Services.Interfaces; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/tools/add-feature-template.sh b/tools/add-feature-template.sh index ca0c8d5..b5ab0da 100755 --- a/tools/add-feature-template.sh +++ b/tools/add-feature-template.sh @@ -89,7 +89,7 @@ namespace $project_name.Services.Interfaces } EOF -cat > $dir/${feature_name}Service.cs<< EOF +cat > $dir/Services/${feature_name}Service.cs<< EOF using $project_name.Services.Interfaces; using System; using System.Threading.Tasks; @@ -100,7 +100,7 @@ using $project_name.Services.Models.$feature_name; using System.Collections.Generic; using System.Linq; -namespace $project_name.Services +namespace $project_name.Services.Services { public class ${feature_name}Service : I${feature_name}Service { -- cgit v1.2.3