diff --git a/src/Imprink.Application/Service/ICurrentUserService.cs b/src/Imprink.Application/Service/ICurrentUserService.cs
new file mode 100644
index 0000000..bd6ad1e
--- /dev/null
+++ b/src/Imprink.Application/Service/ICurrentUserService.cs
@@ -0,0 +1,6 @@
+namespace Imprink.Application.Service;
+
+public interface ICurrentUserService
+{
+ string? GetCurrentUserId();
+}
\ No newline at end of file
diff --git a/src/Imprink.Application/Users/Dtos/UserDto.cs b/src/Imprink.Application/Users/Dtos/UserDto.cs
new file mode 100644
index 0000000..256629e
--- /dev/null
+++ b/src/Imprink.Application/Users/Dtos/UserDto.cs
@@ -0,0 +1,23 @@
+using Imprink.Domain.Entities.Orders;
+using Imprink.Domain.Entities.Users;
+
+namespace Imprink.Application.Users.Dtos;
+
+public class UserDto
+{
+ public string Id { get; set; } = null!;
+ public required string Name { get; set; }
+ public required string Nickname { get; set; }
+ public required string Email { get; set; }
+ public bool EmailVerified { get; set; }
+ public string? FullName { get; set; }
+ public string? PhoneNumber { get; set; }
+ public required bool IsActive { get; set; }
+
+ public virtual ICollection
Addresses { get; set; } = new List();
+ public virtual ICollection UserRoles { get; set; } = new List();
+ public virtual ICollection Orders { get; set; } = new List();
+
+ public Address? DefaultAddress => Addresses.FirstOrDefault(a => a is { IsDefault: true, IsActive: true });
+ public IEnumerable Roles => UserRoles.Select(ur => ur.Role);
+}
\ No newline at end of file
diff --git a/src/Imprink.Application/Users/SetUserPhoneHandler.cs b/src/Imprink.Application/Users/SetUserPhoneHandler.cs
new file mode 100644
index 0000000..5b2cfe3
--- /dev/null
+++ b/src/Imprink.Application/Users/SetUserPhoneHandler.cs
@@ -0,0 +1,11 @@
+using Imprink.Application.Users.Dtos;
+using MediatR;
+
+namespace Imprink.Application.Users;
+
+public record SetUserPhoneCommand(string Sub, Guid RoleId) : IRequest;
+
+public class SetUserPhoneHandler
+{
+
+}
\ No newline at end of file
diff --git a/src/Imprink.Domain/Entities/Users/User.cs b/src/Imprink.Domain/Entities/Users/User.cs
index 19d8ed1..d1a1a4d 100644
--- a/src/Imprink.Domain/Entities/Users/User.cs
+++ b/src/Imprink.Domain/Entities/Users/User.cs
@@ -8,7 +8,6 @@ public class User
public required string Name { get; set; }
public required string Nickname { get; set; }
public required string Email { get; set; }
-
public bool EmailVerified { get; set; }
public string? FullName { get; set; }
public string? PhoneNumber { get; set; }
diff --git a/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj b/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj
index fc58356..8650de1 100644
--- a/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj
+++ b/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj
@@ -8,6 +8,7 @@
+
diff --git a/src/Imprink.Infrastructure/Services/CurrentUserService.cs b/src/Imprink.Infrastructure/Services/CurrentUserService.cs
new file mode 100644
index 0000000..6579e54
--- /dev/null
+++ b/src/Imprink.Infrastructure/Services/CurrentUserService.cs
@@ -0,0 +1,14 @@
+using System.Security.Claims;
+using Imprink.Application.Service;
+using Microsoft.AspNetCore.Http;
+
+namespace Imprink.Infrastructure.Services;
+
+public class CurrentUserService(IHttpContextAccessor httpContextAccessor) : ICurrentUserService
+{
+ public string? GetCurrentUserId()
+ {
+ return httpContextAccessor.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value
+ ?? httpContextAccessor.HttpContext?.User?.FindFirst("sub")?.Value;
+ }
+}
\ No newline at end of file
diff --git a/src/Imprink.WebApi/Startup.cs b/src/Imprink.WebApi/Startup.cs
index 60e1eae..3ea0697 100644
--- a/src/Imprink.WebApi/Startup.cs
+++ b/src/Imprink.WebApi/Startup.cs
@@ -2,6 +2,7 @@ using System.Security.Claims;
using FluentValidation;
using Imprink.Application;
using Imprink.Application.Products.Create;
+using Imprink.Application.Service;
using Imprink.Application.Validation.Models;
using Imprink.Domain.Repositories;
using Imprink.Domain.Repositories.Products;
@@ -10,6 +11,7 @@ using Imprink.Infrastructure;
using Imprink.Infrastructure.Database;
using Imprink.Infrastructure.Repositories.Products;
using Imprink.Infrastructure.Repositories.Users;
+using Imprink.Infrastructure.Services;
using Imprink.WebApi.Filters;
using Imprink.WebApi.Middleware;
using Microsoft.AspNetCore.Authentication.JwtBearer;
@@ -31,8 +33,11 @@ public static class Startup
services.AddScoped();
services.AddScoped();
services.AddScoped();
+ services.AddScoped();
services.AddScoped();
+
+ services.AddHttpContextAccessor();
services.AddDbContext(options =>
options.UseSqlServer(