diff options
Diffstat (limited to 'BackEnd')
-rw-r--r-- | BackEnd/Timeline/Entities/DatabaseContext.cs | 5 | ||||
-rw-r--r-- | BackEnd/Timeline/Entities/RegisterCode.cs | 4 | ||||
-rw-r--r-- | BackEnd/Timeline/Entities/UserEntity.cs | 3 | ||||
-rw-r--r-- | BackEnd/Timeline/Entities/UserRegisterInfo.cs | 31 | ||||
-rw-r--r-- | BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs | 51 |
5 files changed, 82 insertions, 12 deletions
diff --git a/BackEnd/Timeline/Entities/DatabaseContext.cs b/BackEnd/Timeline/Entities/DatabaseContext.cs index cb776e72..7984f0a3 100644 --- a/BackEnd/Timeline/Entities/DatabaseContext.cs +++ b/BackEnd/Timeline/Entities/DatabaseContext.cs @@ -1,4 +1,4 @@ -using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
namespace Timeline.Entities
{
@@ -36,6 +36,9 @@ namespace Timeline.Entities public DbSet<UserConfigurationEntity> UserConfigurations { get; set; } = default!;
+ public DbSet<RegisterCode> RegisterCodes { get; set; } = default!;
+ public DbSet<UserRegisterInfo> UserRegisterInfos { get; set; } = default!;
+
public DbSet<JwtTokenEntity> JwtToken { get; set; } = default!;
public DbSet<UserTokenEntity> UserTokens { get; set; } = default!;
public DbSet<DataEntity> Data { get; set; } = default!;
diff --git a/BackEnd/Timeline/Entities/RegisterCode.cs b/BackEnd/Timeline/Entities/RegisterCode.cs index 945d61e9..034dde98 100644 --- a/BackEnd/Timeline/Entities/RegisterCode.cs +++ b/BackEnd/Timeline/Entities/RegisterCode.cs @@ -10,10 +10,10 @@ namespace Timeline.Entities public long Id { get; set; } [Column("owner_id")] - public long OwnerId { get; set; } + public long? OwnerId { get; set; } [ForeignKey(nameof(OwnerId))] - public UserEntity Owner { get; set; } = default!; + public UserEntity? Owner { get; set; } = default!; [Column("code")] public string Code { get; set; } = default!; diff --git a/BackEnd/Timeline/Entities/UserEntity.cs b/BackEnd/Timeline/Entities/UserEntity.cs index 267d0ef2..d8015ccf 100644 --- a/BackEnd/Timeline/Entities/UserEntity.cs +++ b/BackEnd/Timeline/Entities/UserEntity.cs @@ -37,9 +37,6 @@ namespace Timeline.Entities [Column("last_modified")]
public DateTime LastModified { get; set; }
- [Column("register_code")]
- public string? RegisterCode { get; set; }
-
public UserAvatarEntity? Avatar { get; set; }
#pragma warning disable CA2227 // Collection properties should be read only
diff --git a/BackEnd/Timeline/Entities/UserRegisterInfo.cs b/BackEnd/Timeline/Entities/UserRegisterInfo.cs new file mode 100644 index 00000000..1d62aadb --- /dev/null +++ b/BackEnd/Timeline/Entities/UserRegisterInfo.cs @@ -0,0 +1,31 @@ +using System;
+using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Timeline.Entities +{ + [Table("user_register_info")] + public class UserRegisterInfo + { + [Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public long Id { get; set; } + + [Column("user_id")] + public long UserId { get; set; } + + [ForeignKey(nameof(UserId))] + public UserEntity User { get; set; } = default!; + + [Column("register_code")] + public string RegisterCode { get; set; } = default!; + + [Column("introducer_id")] + public long? IntroducerId { get; set; } + + [ForeignKey(nameof(IntroducerId))] + public UserEntity? Introducer { get; set; } + + [Column("register_time")] + public DateTime RegisterTime { get; set; } + } +} diff --git a/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs b/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs index e4aa17fa..65decefc 100644 --- a/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs +++ b/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs @@ -1,17 +1,56 @@ -using System.Collections.Generic; +using System;
+using System.Collections.Generic;
+using System.Threading.Tasks; +using Timeline.Entities; namespace Timeline.Services.User.RegisterCode { public interface IRegisterCodeService { - string? GetCurrentRegisterCode(long userId); + /// <summary> + /// Get the owner of a register code or null if the code does not exist or is not enabled. + /// </summary> + /// <param name="code">The register code.</param> + /// <param name="onlyEnabled">If true, only when code is enabled the owner id is returned.</param> + /// <returns>A task contains the owner of the register code. Null of the code does not exist or is not enabled.</returns> + Task<long?> GetCodeOwner(string code, bool onlyEnabled = true); - List<string> GetAllRegisterCodes(long userId); + /// <summary> + /// Get the current enabled register code of the user or null if there is none. + /// </summary> + /// <param name="userId">The user id.</param> + /// <returns>A task contains current enabled register code or null if there is none.</returns> + Task<string?> GetCurrentCode(long userId); - string CreateNewRegisterCode(long userId); + /// <summary> + /// Create a new register code for a user, enable it and disable the previous one if there is a previous one. + /// </summary> + /// <param name="userId">The user id.</param> + /// <returns>A task contains the new register code.</returns> + Task<string> CreateNewCode(long userId); - List<long> GetUsersIntroducedByCode(string registerCode); + /// <summary> + /// Record a register info for a user. + /// </summary> + /// <param name="userId">The newly-registered user.</param> + /// <param name="introducerId">The introducer user id.</param> + /// <param name="registerCode">The register code.</param> + /// <param name="registerTime">The register time.</param> + /// <returns>The created register info.</returns> + Task<UserRegisterInfo> CreateRegisterInfo(long userId, long introducerId, string registerCode, DateTime registerTime); - List<long> GetUsersIntroducedByUser(long userId); + /// <summary> + /// Get register info of a user if there is one. + /// </summary> + /// <param name="userId">The user id.</param> + /// <returns>The user register info if there is one. Or null if there is not.</returns> + Task<UserRegisterInfo?> GetUserRegisterInfo(long userId); + + /// <summary> + /// Get the list of user register info of the specified introducer. + /// </summary> + /// <param name="introducerId"></param> + /// <returns>The list of user register info.</returns> + Task<List<UserRegisterInfo>> GetUserRegisterInfoOfIntroducer(long introducerId); } } |