Files
2021-04-21 17:00:16 +08:00

64 lines
1.9 KiB
C#

using Base62;
using Domain.Events;
using Domain.SeedWork;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Domain.AggregateModel.LinkAggregate
{
public class Link:Entity,IAggregateRoot
{
/// <summary>
/// 非自增主键
/// </summary>
public string ShortCode { get; private set; }
public string BaseUrl { get; private set; }
public string SuffixUrl { get; private set; }
public string FullUrl { get; private set; }
public int AppId { get; private set; }
public DateTime Time { get; private set; }
private Link()
{
}
/// <summary>
/// 创建一条新的短链接
/// </summary>
/// <param name="baseUrl"></param>
/// <param name="suffixUrl"></param>
/// <param name="appId">分配的应用id</param>
public Link(string baseUrl,string suffixUrl,string fullUrl,int appId,string shortCode)
{
BaseUrl = baseUrl;
SuffixUrl = suffixUrl;
FullUrl = fullUrl;
ShortCode = shortCode;
AppId = appId;
Time = DateTime.Now;
AddDomainEvent(new LinkCreatedDomainEvent(this));
}
/// <summary>
/// 根据值计算短链字段
/// </summary>
/// <returns></returns>
private void CalculateShortCode()
{
string code;
using (var md5 = MD5.Create())
{
var result = md5.ComputeHash(Encoding.UTF8.GetBytes(FullUrl));
var res = new[] { BitConverter.ToInt64(result, 0) ,BitConverter.ToInt64(result,8)};
//任意取其中一条即可
code = res[0].ToBase62();
}
ShortCode = code;
}
}
}