Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Domain
- public record User(Guid Id, string Name, string Password, DateTime CreatedAt);
- // Public API
- public record UserViewModel(Guid Id, string Name);
- public record LoginViewModel(string Name, string Password);
- public record LoginRequest(string Name, string Password, IPAddress IP, string UserAgent);
- public record RequestInfo(IPAddress IP, string UserAgent);
- [ApiController]
- [Route("users")]
- public class UserController : ControllerBase
- {
- private readonly ILogger<UserController> _logger;
- private readonly UserService _userService;
- public UserController(ILogger<UserController> logger, UserService userService)
- {
- _logger = logger;
- _userService = userService;
- }
- [HttpPost("login")]
- public async Task<UserViewModel> Login([FromBody] LoginViewModel viewModel)
- {
- IPAddress ip = Request.HttpContext.Connection.RemoteIpAddress!;
- string userAgent = HttpContext.Request.Headers[HeaderNames.UserAgent].ToString();
- // Вариант 1
- LoginRequest request = new LoginRequest(viewModel.Name, viewModel.Password, ip, userAgent);
- UserViewModel userV1 = await _userService.Login(request);
- // Вариант 2
- RequestInfo info = new RequestInfo(ip, userAgent);
- UserViewModel userV2 = await _userService.Login(viewModel, info);
- return userV1;
- }
- }
- public class UserService
- {
- // Вариант 1
- public async Task<UserViewModel> Login(LoginRequest request)
- {
- User user = new User(Guid.CreateVersion7(), request.Name, request.Password, DateTime.UtcNow);
- return await Task.FromResult(new UserViewModel(user.Id, user.Name));
- }
- // Вариант 2
- public async Task<UserViewModel> Login(LoginViewModel viewModel, RequestInfo info)
- {
- User user = new User(Guid.CreateVersion7(), viewModel.Name, viewModel.Password, DateTime.UtcNow);
- return await Task.FromResult(new UserViewModel(user.Id, user.Name));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement