diff options
author | crupest <crupest@outlook.com> | 2020-01-31 15:21:58 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-01-31 15:21:58 +0800 |
commit | 45a6ca3a189a81060ae44d0764248547fe2b686c (patch) | |
tree | bbbac2fe1a6d3ce4c5d2c32553f6d06cb3209172 /Timeline | |
parent | 038e8dcf461d4d4ebd51c8fdf7680497869f691c (diff) | |
download | timeline-45a6ca3a189a81060ae44d0764248547fe2b686c.tar.gz timeline-45a6ca3a189a81060ae44d0764248547fe2b686c.tar.bz2 timeline-45a6ca3a189a81060ae44d0764248547fe2b686c.zip |
Combine two user info types.
Diffstat (limited to 'Timeline')
-rw-r--r-- | Timeline/Controllers/TokenController.cs | 4 | ||||
-rw-r--r-- | Timeline/Controllers/UserController.cs | 22 | ||||
-rw-r--r-- | Timeline/Models/Http/TokenController.cs | 4 | ||||
-rw-r--r-- | Timeline/Models/Http/UserInfo.cs | 45 |
4 files changed, 30 insertions, 45 deletions
diff --git a/Timeline/Controllers/TokenController.cs b/Timeline/Controllers/TokenController.cs index a7f5fbde..1fb0b17a 100644 --- a/Timeline/Controllers/TokenController.cs +++ b/Timeline/Controllers/TokenController.cs @@ -59,7 +59,7 @@ namespace Timeline.Controllers return Ok(new CreateTokenResponse
{
Token = result.Token,
- User = _mapper.Map<UserInfoForAdmin>(result.User)
+ User = _mapper.Map<UserInfo>(result.User)
});
}
catch (UserNotExistException e)
@@ -94,7 +94,7 @@ namespace Timeline.Controllers ("Username", result.Username), ("Token", request.Token)));
return Ok(new VerifyTokenResponse
{
- User = _mapper.Map<UserInfoForAdmin>(result)
+ User = _mapper.Map<UserInfo>(result)
});
}
catch (UserTokenTimeExpireException e)
diff --git a/Timeline/Controllers/UserController.cs b/Timeline/Controllers/UserController.cs index fa73c6f9..4572296b 100644 --- a/Timeline/Controllers/UserController.cs +++ b/Timeline/Controllers/UserController.cs @@ -29,35 +29,23 @@ namespace Timeline.Controllers _mapper = mapper;
}
- private IUserInfo ConvertToUserInfo(User user, bool administrator)
- {
- if (administrator)
- return _mapper.Map<UserInfoForAdmin>(user);
- else
- return _mapper.Map<UserInfo>(user);
- }
+ private UserInfo ConvertToUserInfo(User user) => _mapper.Map<UserInfo>(user);
[HttpGet("users")]
- public async Task<ActionResult<IUserInfo[]>> List()
+ public async Task<ActionResult<UserInfo[]>> List()
{
var users = await _userService.GetUsers();
- var administrator = this.IsAdministrator();
- // Note: the (object) explicit conversion. If not convert,
- // then result is a IUserInfo array and JsonSerializer will
- // treat all element as IUserInfo and deserialize only properties
- // in IUserInfo. So we convert it to object to make an object
- // array so that JsonSerializer use the runtime type.
- var result = users.Select(u => (object)ConvertToUserInfo(u, administrator)).ToArray();
+ var result = users.Select(u => ConvertToUserInfo(u)).ToArray();
return Ok(result);
}
[HttpGet("users/{username}")]
- public async Task<ActionResult<IUserInfo>> Get([FromRoute][Username] string username)
+ public async Task<ActionResult<UserInfo>> Get([FromRoute][Username] string username)
{
try
{
var user = await _userService.GetUserByUsername(username);
- return Ok(ConvertToUserInfo(user, this.IsAdministrator()));
+ return Ok(ConvertToUserInfo(user));
}
catch (UserNotExistException e)
{
diff --git a/Timeline/Models/Http/TokenController.cs b/Timeline/Models/Http/TokenController.cs index 383b2965..ea8b59ed 100644 --- a/Timeline/Models/Http/TokenController.cs +++ b/Timeline/Models/Http/TokenController.cs @@ -16,7 +16,7 @@ namespace Timeline.Models.Http public class CreateTokenResponse
{
public string Token { get; set; } = default!;
- public UserInfoForAdmin User { get; set; } = default!;
+ public UserInfo User { get; set; } = default!;
}
public class VerifyTokenRequest
@@ -27,6 +27,6 @@ namespace Timeline.Models.Http public class VerifyTokenResponse
{
- public UserInfoForAdmin User { get; set; } = default!;
+ public UserInfo User { get; set; } = default!;
}
}
diff --git a/Timeline/Models/Http/UserInfo.cs b/Timeline/Models/Http/UserInfo.cs index 07ac0aad..5890a7a6 100644 --- a/Timeline/Models/Http/UserInfo.cs +++ b/Timeline/Models/Http/UserInfo.cs @@ -7,54 +7,52 @@ 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 class UserInfo
{
public string Username { get; set; } = default!;
public string Nickname { get; set; } = default!;
- public string AvatarUrl { get; set; } = default!;
+ public bool? Administrator { get; set; } = default!;
+#pragma warning disable CA1707
+ public UserInfoLinks? _links { get; set; }
+#pragma warning restore CA1707
}
- public class UserInfoForAdmin : IUserInfo
+ public class UserInfoLinks
{
- public string Username { get; set; } = default!;
- public string Nickname { get; set; } = default!;
- public string AvatarUrl { get; set; } = default!;
- public bool Administrator { get; set; }
+ public string Avatar { get; set; } = default!;
+ public string Timeline { get; set; } = default!;
}
- public class UserInfoAvatarUrlValueResolver : IValueResolver<User, IUserInfo, string>
+ public class UserInfoLinksValueResolver : IValueResolver<User, UserInfo, UserInfoLinks?>
{
private readonly IActionContextAccessor? _actionContextAccessor;
private readonly IUrlHelperFactory? _urlHelperFactory;
- public UserInfoAvatarUrlValueResolver()
+ public UserInfoLinksValueResolver()
{
_actionContextAccessor = null;
_urlHelperFactory = null;
}
- public UserInfoAvatarUrlValueResolver(IActionContextAccessor actionContextAccessor, IUrlHelperFactory urlHelperFactory)
+ public UserInfoLinksValueResolver(IActionContextAccessor actionContextAccessor, IUrlHelperFactory urlHelperFactory)
{
_actionContextAccessor = actionContextAccessor;
_urlHelperFactory = urlHelperFactory;
}
- public string Resolve(User source, IUserInfo destination, string destMember, ResolutionContext context)
+ public UserInfoLinks? Resolve(User source, UserInfo destination, UserInfoLinks? destMember, ResolutionContext context)
{
- if (_actionContextAccessor == null)
+ if (_actionContextAccessor == null || _urlHelperFactory == null)
{
- return $"/users/{destination.Username}/avatar";
+ return null;
}
- var urlHelper = _urlHelperFactory!.GetUrlHelper(_actionContextAccessor.ActionContext);
- return urlHelper.ActionLink(nameof(UserAvatarController.Get), nameof(UserAvatarController), new { destination.Username });
+ var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext);
+ return new UserInfoLinks
+ {
+ Avatar = urlHelper.ActionLink(nameof(UserAvatarController.Get), nameof(UserAvatarController), new { destination.Username }),
+ Timeline = urlHelper.ActionLink(nameof(PersonalTimelineController.TimelineGet), nameof(PersonalTimelineController), new { destination.Username })
+ };
}
}
@@ -62,8 +60,7 @@ namespace Timeline.Models.Http {
public UserInfoAutoMapperProfile()
{
- CreateMap<User, UserInfo>().ForMember(u => u.AvatarUrl, opt => opt.MapFrom<UserInfoAvatarUrlValueResolver>());
- CreateMap<User, UserInfoForAdmin>().ForMember(u => u.AvatarUrl, opt => opt.MapFrom<UserInfoAvatarUrlValueResolver>());
+ CreateMap<User, UserInfo>().ForMember(u => u._links, opt => opt.MapFrom<UserInfoLinksValueResolver>());
}
}
}
|