aboutsummaryrefslogtreecommitdiff
path: root/BackEnd
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-04-17 22:43:19 +0800
committercrupest <crupest@outlook.com>2022-04-17 22:43:19 +0800
commit7368d0388e78228499f28b33f79891c60639fb57 (patch)
tree9bd2c33c5f6a081438f4692fd9529bee9f787c53 /BackEnd
parente7a441b8805f8b02ba37ab1f550fa2939fe9e7f0 (diff)
downloadtimeline-7368d0388e78228499f28b33f79891c60639fb57.tar.gz
timeline-7368d0388e78228499f28b33f79891c60639fb57.tar.bz2
timeline-7368d0388e78228499f28b33f79891c60639fb57.zip
...
Diffstat (limited to 'BackEnd')
-rw-r--r--BackEnd/Timeline/Entities/DatabaseContext.cs5
-rw-r--r--BackEnd/Timeline/Entities/RegisterCode.cs4
-rw-r--r--BackEnd/Timeline/Entities/UserEntity.cs3
-rw-r--r--BackEnd/Timeline/Entities/UserRegisterInfo.cs31
-rw-r--r--BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs51
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);
}
}