From 2541f11b5d637d47b39f25cc03dc4173a6b7efe6 Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Thu, 22 Aug 2019 14:54:47 +0800 Subject: Add nickname. Step 1. --- Timeline/Entities/UserDetail.cs | 3 +++ Timeline/Models/UserDetail.cs | 7 ++++- Timeline/Services/UserDetailService.cs | 48 +++++++++++++++++++++++++++++----- 3 files changed, 50 insertions(+), 8 deletions(-) (limited to 'Timeline') 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 @@ -11,6 +11,15 @@ namespace Timeline.Services { public interface IUserDetailService { + /// + /// Get the nickname of user. + /// + /// The username to get nickname of. + /// The user's nickname. Null if not set. + /// Thrown if is null or empty. + /// Thrown if user doesn't exist. + Task GetUserNickname(string username); + /// /// Get the detail of user. /// @@ -42,23 +51,45 @@ namespace Timeline.Services _databaseContext = databaseContext; } + private async Task 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 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 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 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; -- cgit v1.2.3