Skip to content

Commit 92d2be5

Browse files
Merge pull request #455 from SharebookBR/develop
Develop to master
2 parents fea35d8 + a07a0cd commit 92d2be5

23 files changed

+734
-114
lines changed

ShareBook/ShareBook.Api/AutoMapper/ViewModelToDomainMappingProfile.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using AutoMapper;
22
using ShareBook.Api.ViewModels;
33
using ShareBook.Domain;
4-
4+
using ShareBook.Domain.DTOs;
5+
56
namespace ShareBook.Api.AutoMapper
67
{
78
public class ViewModelToDomainMappingProfile : Profile
@@ -24,7 +25,7 @@ protected ViewModelToDomainMappingProfile(string profileName) : base(profileName
2425
#region [ User ]
2526

2627
CreateMap<LoginUserVM, User>();
27-
CreateMap<RegisterUserVM, User>()
28+
CreateMap<RegisterUserDTO, User>()
2829
.ForPath(dest => dest.Address.Street, opt => opt.MapFrom(src => src.Street))
2930
.ForPath(dest => dest.Address.Number, opt => opt.MapFrom(src => src.Number))
3031
.ForPath(dest => dest.Address.PostalCode, opt => opt.MapFrom(src => src.PostalCode))

ShareBook/ShareBook.Api/Controllers/AccountController.cs

+24-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using ShareBook.Api.ViewModels;
1313
using ShareBook.Domain;
1414
using ShareBook.Domain.Common;
15+
using ShareBook.Domain.DTOs;
1516
using ShareBook.Domain.Exceptions;
1617
using ShareBook.Infra.CrossCutting.Identity;
1718
using ShareBook.Infra.CrossCutting.Identity.Interfaces;
@@ -102,14 +103,18 @@ public async Task<IActionResult> WhoAccessedMyProfile(Guid userId)
102103
[HttpPost("Register")]
103104
[ProducesResponseType(typeof(object), 200)]
104105
[ProducesResponseType(409)]
105-
public IActionResult Post([FromBody] RegisterUserVM registerUserVM, [FromServices] SigningConfigurations signingConfigurations, [FromServices] TokenConfigurations tokenConfigurations)
106+
public IActionResult Post([FromBody] RegisterUserDTO registerUserDto, [FromServices] SigningConfigurations signingConfigurations, [FromServices] TokenConfigurations tokenConfigurations)
106107
{
107-
var user = _mapper.Map<User>(registerUserVM);
108-
109-
var result = _userService.Insert(user);
110-
111-
if (result.Success)
112-
return Ok(_signManager.GenerateTokenAndSetIdentity(result.Value, signingConfigurations, tokenConfigurations));
108+
var result = _userService.Insert(registerUserDto);
109+
110+
if (result.Success)
111+
{
112+
if (registerUserDto.Age > 12)
113+
return Ok(_signManager.GenerateTokenAndSetIdentity(result.Value, signingConfigurations, tokenConfigurations));
114+
else
115+
return Ok(new Result(SuccessMessage: "Seu cadastro foi realizado com sucesso. Foi enviado um email para os pais solicitando o consentimento. Vamos te avisar por email quando seu acesso for liberado. Obrigado. =)"));
116+
}
117+
113118

114119
return Conflict(result);
115120
}
@@ -215,6 +220,18 @@ public IActionResult ChangeUserPasswordByHashCode([FromBody] ChangeUserPasswordB
215220
return Ok(resultChangePasswordUser);
216221
}
217222

223+
[HttpPut("ParentAproval")]
224+
public IActionResult ParentAproval([FromBody] ParentAprovalVM parentAprovalVM)
225+
{
226+
var ParentHashCodeAproval = parentAprovalVM.ParentHashCodeAproval;
227+
228+
if (string.IsNullOrEmpty(ParentHashCodeAproval) || !Guid.TryParse(ParentHashCodeAproval, out _))
229+
throw new ShareBookException("Código inválido.");
230+
231+
_userService.ParentAproval(ParentHashCodeAproval);
232+
return Ok();
233+
}
234+
218235
#endregion PUT
219236

220237
private bool IsValidClientVersion(string client, string clientVersion)

ShareBook/ShareBook.Api/Controllers/BookController.cs

+29-9
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
using System.Threading.Tasks;
1818
using Flurl.Util;
1919
using ShareBook.Domain.Enums;
20-
20+
using ShareBook.Domain.Exceptions;
21+
2122
namespace ShareBook.Api.Controllers
2223
{
2324
[Route("api/[controller]")]
@@ -220,6 +221,10 @@ public PagedList<BookVM> ByCategoryId(Guid categoryId, int page, int items)
220221
[ProducesResponseType(typeof(Result), 200)]
221222
public IActionResult RequestBook([FromBody] RequestBookVM requestBookVM)
222223
{
224+
User user = GetUser();
225+
if (_IsDonator(requestBookVM.BookId, user) && !_IsAdmin(user)) //Permitido solicitar o próprio livro somente para Admin
226+
throw new ShareBookException("Não é possivel solicitar esse livro pois você é o doador.");
227+
223228
_bookUserService.Insert(requestBookVM.BookId, requestBookVM.Reason);
224229
return Ok(new Result { SuccessMessage = "Pedido realizado com sucesso!" });
225230
}
@@ -389,21 +394,36 @@ public IActionResult RenewChooseDate(Guid bookId)
389394
// apenas doador e adm
390395
private bool _IsBookOwner(Guid bookId)
391396
{
392-
var userId = new Guid(Thread.CurrentPrincipal?.Identity?.Name);
393-
var user = _userService.Find(userId);
397+
User user = GetUser();
394398
if (user == null)
395399
return false;
396400

397401
// Adm
398-
if (user.Profile == Domain.Enums.Profile.Administrator)
399-
return true;
402+
if (_IsAdmin(user)) return true;
400403

401404
// Doador
402-
var book = _service.GetBookWithAllUsers(bookId);
403-
if (book.UserId == userId)
404-
return true;
405+
return _IsDonator(bookId, user);
406+
}
405407

406-
return false;
408+
private bool _IsDonator(Guid bookId, User user)
409+
{
410+
if (user == null || user.Id == Guid.Empty) return false;
411+
Book book = _service.GetBookWithAllUsers(bookId);
412+
if (book == null || book.Id == Guid.Empty) return false;
413+
414+
return book.UserId == user.Id;
415+
}
416+
417+
private User GetUser()
418+
{
419+
var userId = new Guid(Thread.CurrentPrincipal?.Identity?.Name);
420+
return _userService.Find(userId);
421+
}
422+
423+
private bool _IsAdmin(User user)
424+
{
425+
if (user == null || user?.Profile == null) return false;
426+
return user.Profile.Equals(Domain.Enums.Profile.Administrator);
407427
}
408428

409429
// doador, adm e ganhador

ShareBook/ShareBook.Api/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace ShareBook.Api
66
public class Program
77
{
88
public static void Main(string[] args)
9-
{
9+
{
1010
BuildWebHost(args).Run();
1111
}
1212

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace ShareBook.Api.ViewModels
2+
{
3+
public class ParentAprovalVM
4+
{
5+
public string ParentHashCodeAproval { get; set; }
6+
}
7+
}

ShareBook/ShareBook.Api/ViewModels/RegisterUserVM.cs

-61
This file was deleted.

ShareBook/ShareBook.Api/appsettings.Development.json

-3
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,5 @@
5858
"QueueUrl": "",
5959
"Region": "",
6060
"MaxDestinationsPerMessage": 5
61-
},
62-
"ClientSettings": {
63-
"AndroidMinVersion": "v1.0.0"
6461
}
6562
}

ShareBook/ShareBook.Api/appsettings.Stage.json

-3
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,5 @@
5252
"QueueUrl": "",
5353
"Region": "",
5454
"MaxDestinationsPerMessage": 5
55-
},
56-
"ClientSettings": {
57-
"AndroidMinVersion": "v1.0.0"
5855
}
5956
}

ShareBook/ShareBook.Api/appsettings.json

+3
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,8 @@
2626
"Default": "Warning"
2727
}
2828
}
29+
},
30+
"ClientSettings": {
31+
"AndroidMinVersion": "v1.3.0"
2932
}
3033
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+

2+
namespace ShareBook.Domain.DTOs
3+
{
4+
public class RegisterUserDTO
5+
{
6+
public string Name { get; set; }
7+
8+
public string Email { get; set; }
9+
10+
public string Street { get; set; }
11+
12+
public string Number { get; set; }
13+
14+
public string Complement { get; set; }
15+
16+
public string Neighborhood { get; set; }
17+
18+
public string PostalCode { get; set; }
19+
20+
public string City { get; set; }
21+
22+
public string State { get; set; }
23+
24+
public string Country { get; set; }
25+
26+
public string Linkedin { get; set; }
27+
28+
public string Phone { get; set; }
29+
30+
public string Password { get; set; }
31+
32+
public bool AllowSendingEmail { get; set; } = true;
33+
34+
public int Age { get; set; }
35+
36+
public string ParentEmail { get; set; }
37+
}
38+
}

ShareBook/ShareBook.Domain/User.cs

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public class User : BaseEntity
2727
public virtual ICollection<Book> BooksDonated { get; set; }
2828
public virtual ICollection<AccessHistory> Visitors { get; set; }
2929

30+
public string ParentEmail { get; set; }
31+
public string ParentHashCodeAproval { get; set; }
32+
public bool ParentAproved { get; set; } = true;
33+
34+
3035
public bool PasswordIsStrong()
3136
{
3237
Regex rgx = new Regex(@"(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])[A-Za-z0-9\d$@$!%_*_?&#.,-_:;]{8,}");

0 commit comments

Comments
 (0)