From 52acf41e331ddbd66befed4692c804b754ba7d5c Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 30 Jan 2020 20:26:52 +0800 Subject: ... --- Timeline/Models/Http/UserInfo.cs | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Timeline/Models/Http/UserInfo.cs (limited to 'Timeline/Models/Http/UserInfo.cs') diff --git a/Timeline/Models/Http/UserInfo.cs b/Timeline/Models/Http/UserInfo.cs new file mode 100644 index 00000000..6029b8aa --- /dev/null +++ b/Timeline/Models/Http/UserInfo.cs @@ -0,0 +1,58 @@ +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Infrastructure; +using Microsoft.AspNetCore.Mvc.Routing; +using Timeline.Controllers; +using Timeline.Services; + +namespace Timeline.Models.Http +{ + public interface IUserInfo + { + string Username { get; set; } + string Nickname { get; set; } + string AvatarUrl { get; set; } + } + + public class UserInfo : IUserInfo + { + public string Username { get; set; } = default!; + public string Nickname { get; set; } = default!; + public string AvatarUrl { get; set; } = default!; + } + + public class UserInfoForAdmin : IUserInfo + { + public string Username { get; set; } = default!; + public string Nickname { get; set; } = default!; + public string AvatarUrl { get; set; } = default!; + public bool Administrator { get; set; } + } + + public class UserInfoSetAvatarUrlAction : IMappingAction + { + private readonly IActionContextAccessor _actionContextAccessor; + private readonly IUrlHelperFactory _urlHelperFactory; + + public UserInfoSetAvatarUrlAction(IActionContextAccessor actionContextAccessor, IUrlHelperFactory urlHelperFactory) + { + _actionContextAccessor = actionContextAccessor; + _urlHelperFactory = urlHelperFactory; + } + + public void Process(object source, IUserInfo destination, ResolutionContext context) + { + var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); + destination.AvatarUrl = urlHelper.ActionLink(nameof(UserAvatarController.Get), nameof(UserAvatarController), new { destination.Username }); + } + } + + public class UserInfoAutoMapperProfile : Profile + { + public UserInfoAutoMapperProfile() + { + CreateMap().AfterMap(); + CreateMap().AfterMap(); + } + } +} -- cgit v1.2.3