From 32a27b6d263d31a1cf3ec64c7d9cc50435fc0e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Andr=C3=A9?= Date: Thu, 12 Mar 2020 12:24:51 +0100 Subject: [PATCH] Add a controler for "User" (add and authenticate) --- .../Interface/IAircraftService.cs | 6 +- .../Interface/IDropZoneService.cs | 2 + .../Interface/IGearService.cs | 6 +- .../Interface/IJumpService.cs | 6 +- .../Interface/IJumpTypeService.cs | 8 +-- .../Interface/IUserService.cs | 11 ++++ Back/skydiveLogs-api.Business/UserService.cs | 32 +++++++++ .../Interface/IDataProvider.cs | 2 + .../Interface/IUserRepository.cs | 10 +++ Back/skydiveLogs-api.Data/LiteDbProvider.cs | 2 + Back/skydiveLogs-api.Data/UserRepository.cs | 61 ++++++++++++++++++ .../skydiveLogs-api.Data.csproj | 2 +- Back/skydiveLogs-api.Model/User.cs | 15 +++++ .../Controllers/UserController.cs | 44 +++++++++++++ Back/skydiveLogs-api/Data/JumpsDb-log.db | Bin 516096 -> 0 bytes Back/skydiveLogs-api/Data/JumpsDb.db | Bin 147456 -> 155648 bytes .../DataContract/AircraftResp.cs | 7 +- Back/skydiveLogs-api/DataContract/JumpReq.cs | 3 - .../DataContract/JumpTypeReq.cs | 7 +- .../DataContract/JumpTypeResp.cs | 7 +- Back/skydiveLogs-api/DataContract/UserReq.cs | 13 ++++ Back/skydiveLogs-api/DataContract/UserResp.cs | 13 ++++ Back/skydiveLogs-api/Mapper/ModelProfile.cs | 2 + 23 files changed, 225 insertions(+), 34 deletions(-) create mode 100644 Back/skydiveLogs-api.Business/Interface/IUserService.cs create mode 100644 Back/skydiveLogs-api.Business/UserService.cs create mode 100644 Back/skydiveLogs-api.Data/Interface/IUserRepository.cs create mode 100644 Back/skydiveLogs-api.Data/UserRepository.cs create mode 100644 Back/skydiveLogs-api.Model/User.cs create mode 100644 Back/skydiveLogs-api/Controllers/UserController.cs delete mode 100644 Back/skydiveLogs-api/Data/JumpsDb-log.db create mode 100644 Back/skydiveLogs-api/DataContract/UserReq.cs create mode 100644 Back/skydiveLogs-api/DataContract/UserResp.cs diff --git a/Back/skydiveLogs-api.Business/Interface/IAircraftService.cs b/Back/skydiveLogs-api.Business/Interface/IAircraftService.cs index 3cba1c9..415f0ae 100644 --- a/Back/skydiveLogs-api.Business/Interface/IAircraftService.cs +++ b/Back/skydiveLogs-api.Business/Interface/IAircraftService.cs @@ -1,8 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; + using skydiveLogs_api.Model; + namespace skydiveLogs_api.Business.Interface { public interface IAircraftService diff --git a/Back/skydiveLogs-api.Business/Interface/IDropZoneService.cs b/Back/skydiveLogs-api.Business/Interface/IDropZoneService.cs index 6042116..37cf401 100644 --- a/Back/skydiveLogs-api.Business/Interface/IDropZoneService.cs +++ b/Back/skydiveLogs-api.Business/Interface/IDropZoneService.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; + using skydiveLogs_api.Model; + namespace skydiveLogs_api.Business.Interface { public interface IDropZoneService diff --git a/Back/skydiveLogs-api.Business/Interface/IGearService.cs b/Back/skydiveLogs-api.Business/Interface/IGearService.cs index 2f6f951..d88c6cc 100644 --- a/Back/skydiveLogs-api.Business/Interface/IGearService.cs +++ b/Back/skydiveLogs-api.Business/Interface/IGearService.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; + using skydiveLogs_api.Model; + namespace skydiveLogs_api.Business.Interface { public interface IGearService @@ -11,8 +13,8 @@ namespace skydiveLogs_api.Business.Interface void DeleteGearById(int id); - void UpdateGear(int id, Gear Gear); + void UpdateGear(int id, Gear gear); - void AddNewGear(Gear Gear); + void AddNewGear(Gear gear); } } diff --git a/Back/skydiveLogs-api.Business/Interface/IJumpService.cs b/Back/skydiveLogs-api.Business/Interface/IJumpService.cs index dae85d7..caf8d39 100644 --- a/Back/skydiveLogs-api.Business/Interface/IJumpService.cs +++ b/Back/skydiveLogs-api.Business/Interface/IJumpService.cs @@ -1,8 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; + using skydiveLogs_api.Model; + namespace skydiveLogs_api.Business.Interface { public interface IJumpService diff --git a/Back/skydiveLogs-api.Business/Interface/IJumpTypeService.cs b/Back/skydiveLogs-api.Business/Interface/IJumpTypeService.cs index 17eb098..e41bd44 100644 --- a/Back/skydiveLogs-api.Business/Interface/IJumpTypeService.cs +++ b/Back/skydiveLogs-api.Business/Interface/IJumpTypeService.cs @@ -1,7 +1,7 @@ -using skydiveLogs_api.Model; -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; + +using skydiveLogs_api.Model; + namespace skydiveLogs_api.Business.Interface { diff --git a/Back/skydiveLogs-api.Business/Interface/IUserService.cs b/Back/skydiveLogs-api.Business/Interface/IUserService.cs new file mode 100644 index 0000000..48cbe1a --- /dev/null +++ b/Back/skydiveLogs-api.Business/Interface/IUserService.cs @@ -0,0 +1,11 @@ +using skydiveLogs_api.Model; + +namespace skydiveLogs_api.Business.Interface +{ + public interface IUserService + { + User GetByLogin(string login, string password); + + void AddNewUser(User user); + } +} diff --git a/Back/skydiveLogs-api.Business/UserService.cs b/Back/skydiveLogs-api.Business/UserService.cs new file mode 100644 index 0000000..5336c4f --- /dev/null +++ b/Back/skydiveLogs-api.Business/UserService.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +using skydiveLogs_api.Business.Interface; +using skydiveLogs_api.Model; +using skydiveLogs_api.Data.Interface; + + +namespace skydiveLogs_api.Business +{ + public class UserService : IUserService + { + public UserService(IUserRepository userRepository) + { + _userRepository = userRepository; + } + + public User GetByLogin(string login, string password) + { + var tmp = _userRepository.GetByLogin(login, password); + + return tmp; + } + + public void AddNewUser(User newUser) + { + _userRepository.Add(newUser); + } + + private readonly IUserRepository _userRepository; + } +} diff --git a/Back/skydiveLogs-api.Data/Interface/IDataProvider.cs b/Back/skydiveLogs-api.Data/Interface/IDataProvider.cs index 14208c8..2b33ef1 100644 --- a/Back/skydiveLogs-api.Data/Interface/IDataProvider.cs +++ b/Back/skydiveLogs-api.Data/Interface/IDataProvider.cs @@ -20,5 +20,7 @@ namespace skydiveLogs_api.Data.Interface ILiteCollection CollOfJumpType { get; } ILiteCollection CollOfJump { get; } + + ILiteCollection CollOfUser { get; } } } diff --git a/Back/skydiveLogs-api.Data/Interface/IUserRepository.cs b/Back/skydiveLogs-api.Data/Interface/IUserRepository.cs new file mode 100644 index 0000000..2289d6e --- /dev/null +++ b/Back/skydiveLogs-api.Data/Interface/IUserRepository.cs @@ -0,0 +1,10 @@ +using skydiveLogs_api.Model; + + +namespace skydiveLogs_api.Data.Interface +{ + public interface IUserRepository : IRepository + { + User GetByLogin(string login, string password); + } +} diff --git a/Back/skydiveLogs-api.Data/LiteDbProvider.cs b/Back/skydiveLogs-api.Data/LiteDbProvider.cs index 0a6f11d..89fff6a 100644 --- a/Back/skydiveLogs-api.Data/LiteDbProvider.cs +++ b/Back/skydiveLogs-api.Data/LiteDbProvider.cs @@ -37,5 +37,7 @@ namespace skydiveLogs_api.Data public ILiteCollection CollOfJumpType => _db.GetCollection(); public ILiteCollection CollOfJump => _db.GetCollection(); + + public ILiteCollection CollOfUser => _db.GetCollection(); } } diff --git a/Back/skydiveLogs-api.Data/UserRepository.cs b/Back/skydiveLogs-api.Data/UserRepository.cs new file mode 100644 index 0000000..18c388c --- /dev/null +++ b/Back/skydiveLogs-api.Data/UserRepository.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using LiteDB; + +using skydiveLogs_api.Data.Interface; +using skydiveLogs_api.Model; + + +namespace skydiveLogs_api.Data +{ + public class UserRepository : IUserRepository + { + public UserRepository(IDataProvider dataProvider) + { + _dataProvider = dataProvider; + _col = _dataProvider.CollOfUser; + } + + public User GetByLogin(string login, string password) + { + return _col.FindOne(u => u.Login == login && u.Password == password); + } + + public bool Add(User newUser) + { + var result = true; + + try + { + _col.Insert(newUser); + } + catch + { + result = false; + } + + return result; + } + + public IEnumerable GetAll() + { + throw new NotImplementedException(); + } + + public User GetById(int id) + { + throw new NotImplementedException(); + } + + public bool Update(User updated) + { + throw new NotImplementedException(); + } + + private readonly IDataProvider _dataProvider; + + private readonly ILiteCollection _col; + } +} diff --git a/Back/skydiveLogs-api.Data/skydiveLogs-api.Data.csproj b/Back/skydiveLogs-api.Data/skydiveLogs-api.Data.csproj index 079557f..e67d3fb 100644 --- a/Back/skydiveLogs-api.Data/skydiveLogs-api.Data.csproj +++ b/Back/skydiveLogs-api.Data/skydiveLogs-api.Data.csproj @@ -6,7 +6,7 @@ - + diff --git a/Back/skydiveLogs-api.Model/User.cs b/Back/skydiveLogs-api.Model/User.cs new file mode 100644 index 0000000..a43a392 --- /dev/null +++ b/Back/skydiveLogs-api.Model/User.cs @@ -0,0 +1,15 @@ +namespace skydiveLogs_api.Model +{ + public class User + { + public int Id { get; set; } + + public string FirstName { get; set; } + + public string LastName { get; set; } + + public string Login { get; set; } + + public string Password { get; set; } + } +} diff --git a/Back/skydiveLogs-api/Controllers/UserController.cs b/Back/skydiveLogs-api/Controllers/UserController.cs new file mode 100644 index 0000000..96b9134 --- /dev/null +++ b/Back/skydiveLogs-api/Controllers/UserController.cs @@ -0,0 +1,44 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Cors; + +using AutoMapper; + +using skydiveLogs_api.Business.Interface; +using skydiveLogs_api.DataContract; +using skydiveLogs_api.Model; + + +namespace skydiveLogs_api.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class UserController : ControllerBase + { + public UserController(IUserService userService, + IMapper mapper) + { + _userService = userService; + _mapper = mapper; + } + + // POST: api/User + [HttpPost] + [EnableCors] + public UserResp Authenticate([FromBody] string login, [FromBody] string password) + { + var result = _userService.GetByLogin(login, password); + return _mapper.Map(result); + } + + // POST: api/User + [HttpPost] + [EnableCors] + public void Post([FromBody] UserReq value) + { + _userService.AddNewUser(_mapper.Map(value)); + } + + private readonly IUserService _userService; + private readonly IMapper _mapper; + } +} diff --git a/Back/skydiveLogs-api/Data/JumpsDb-log.db b/Back/skydiveLogs-api/Data/JumpsDb-log.db deleted file mode 100644 index c473c06e9e3462f2fca67b9f5108e94176e206bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516096 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 CreateMap(); CreateMap(); + CreateMap(); CreateMap(); CreateMap(); @@ -18,6 +19,7 @@ namespace skydiveLogs_api.Mapper CreateMap(); CreateMap(); CreateMap(); + CreateMap(); CreateMap(); }