aboutsummaryrefslogtreecommitdiff
path: root/Timeline
diff options
context:
space:
mode:
Diffstat (limited to 'Timeline')
-rw-r--r--Timeline/Entities/UserDetail.cs3
-rw-r--r--Timeline/Models/UserDetail.cs7
-rw-r--r--Timeline/Services/UserDetailService.cs48
3 files changed, 50 insertions, 8 deletions
diff --git a/Timeline/Entities/UserDetail.cs b/Timeline/Entities/UserDetail.cs
index 9bc6f5e5..6e582234 100644
--- a/Timeline/Entities/UserDetail.cs
+++ b/Timeline/Entities/UserDetail.cs
@@ -9,6 +9,9 @@ namespace Timeline.Entities
[Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
+ [Column("nickname"), MaxLength(15)]
+ public string Nickname { get; set; }
+
[Column("qq"), MaxLength(15)]
public string QQ { get; set; }
diff --git a/Timeline/Models/UserDetail.cs b/Timeline/Models/UserDetail.cs
index 4af88450..86866d8b 100644
--- a/Timeline/Models/UserDetail.cs
+++ b/Timeline/Models/UserDetail.cs
@@ -1,10 +1,14 @@
-using Timeline.Entities;
+using System.ComponentModel.DataAnnotations;
+using Timeline.Entities;
using Timeline.Models.Validation;
namespace Timeline.Models
{
public class UserDetail
{
+ [MaxLength(10)]
+ public string Nickname { get; set; }
+
[ValidateWith(typeof(UserDetailValidators.QQValidator))]
public string QQ { get; set; }
@@ -28,6 +32,7 @@ namespace Timeline.Models
{
return new UserDetail
{
+ Nickname = CoerceEmptyToNull(entity.Nickname),
QQ = CoerceEmptyToNull(entity.QQ),
EMail = CoerceEmptyToNull(entity.EMail),
PhoneNumber = CoerceEmptyToNull(entity.PhoneNumber),
diff --git a/Timeline/Services/UserDetailService.cs b/Timeline/Services/UserDetailService.cs
index 0bb745f3..a8ed662b 100644
--- a/Timeline/Services/UserDetailService.cs
+++ b/Timeline/Services/UserDetailService.cs
@@ -12,6 +12,15 @@ namespace Timeline.Services
public interface IUserDetailService
{
/// <summary>
+ /// Get the nickname of user.
+ /// </summary>
+ /// <param name="username">The username to get nickname of.</param>
+ /// <returns>The user's nickname. Null if not set.</returns>
+ /// <exception cref="ArgumentException">Thrown if <paramref name="username"/> is null or empty.</exception>
+ /// <exception cref="UserNotExistException">Thrown if user doesn't exist.</exception>
+ Task<string> GetUserNickname(string username);
+
+ /// <summary>
/// Get the detail of user.
/// </summary>
/// <param name="username">The username to get user detail of.</param>
@@ -42,23 +51,45 @@ namespace Timeline.Services
_databaseContext = databaseContext;
}
+ private async Task<UserDetailEntity> CreateEntity(long userId)
+ {
+ var entity = new UserDetailEntity()
+ {
+ UserId = userId
+ };
+ _databaseContext.UserDetails.Add(entity);
+ await _databaseContext.SaveChangesAsync();
+ _logger.LogInformation("An entity is created in user_details.");
+ return entity;
+ }
+
// Check the existence of user detail entry
private async Task<UserDetailEntity> CheckAndInit(long userId)
{
var detail = await _databaseContext.UserDetails.Where(e => e.UserId == userId).SingleOrDefaultAsync();
if (detail == null)
{
- detail = new UserDetailEntity()
- {
- UserId = userId
- };
- _databaseContext.UserDetails.Add(detail);
- await _databaseContext.SaveChangesAsync();
- _logger.LogInformation("An entity is created in user_details.");
+ detail = await CreateEntity(userId);
}
return detail;
}
+ public async Task<string> GetUserNickname(string username)
+ {
+ var userId = await DatabaseExtensions.CheckAndGetUser(_databaseContext.Users, username);
+ var detail = await _databaseContext.UserDetails.Where(e => e.UserId == userId).Select(e => new { e.Nickname }).SingleOrDefaultAsync();
+ if (detail == null)
+ {
+ var entity = await CreateEntity(userId);
+ return null;
+ }
+ else
+ {
+ var nickname = detail.Nickname;
+ return string.IsNullOrEmpty(nickname) ? null : nickname;
+ }
+ }
+
public async Task<UserDetail> GetUserDetail(string username)
{
var userId = await DatabaseExtensions.CheckAndGetUser(_databaseContext.Users, username);
@@ -74,6 +105,9 @@ namespace Timeline.Services
var userId = await DatabaseExtensions.CheckAndGetUser(_databaseContext.Users, username);
var detailEntity = await CheckAndInit(userId);
+ if (detail.Nickname != null)
+ detailEntity.Nickname = detail.Nickname;
+
if (detail.QQ != null)
detailEntity.QQ = detail.QQ;