forked from hosseinJavadi/vizhvizhBack
first commit
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
using Vizhvizh.Shared.Domain.ValueObjects;
|
||||
using Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
using Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// عضو
|
||||
/// </summary>
|
||||
public class Member : Entity<MemberId>
|
||||
{
|
||||
private MemberFullName _fullName;
|
||||
private PhoneNumberVO _phoneNumber;
|
||||
private MemberAvatar? _avatar;
|
||||
private List<MemberAddress> _addresses;
|
||||
|
||||
private Member(MemberFullName fullName, PhoneNumberVO phoneNumber, MemberAvatar? avatar, List<MemberAddress>? addresses)
|
||||
{
|
||||
_fullName = fullName;
|
||||
_phoneNumber = phoneNumber;
|
||||
_avatar = avatar;
|
||||
_addresses = addresses ?? [];
|
||||
}
|
||||
public static Member CreateNew(MemberFullName fullName, PhoneNumberVO phoneNumber, MemberAvatar? avatar, List<MemberAddress>? addresses = null)
|
||||
{
|
||||
return new Member(fullName, phoneNumber, avatar, addresses);
|
||||
}
|
||||
public MemberFullName FullName => _fullName;
|
||||
public PhoneNumberVO PhoneNumber => _phoneNumber;
|
||||
public MemberAvatar? Avatar => _avatar;
|
||||
public IReadOnlyList<MemberAddress> Addresses => _addresses;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using Vizhvizh.Shared.Domain.ValueObjects;
|
||||
using Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
using Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.Entities;
|
||||
|
||||
public class Resource : Entity<ResourceId>
|
||||
{
|
||||
private List<Role> _roles;
|
||||
private TitleVO _title;
|
||||
private DescriptionVO _description;
|
||||
private ModuleNameVO _moduleNames;
|
||||
private ResourceKey _resourceKey;
|
||||
|
||||
public Resource(TitleVO title, DescriptionVO description, ModuleNameVO moduleNames, ResourceKey resourceKey, List<Role> roles)
|
||||
{
|
||||
_description = description;
|
||||
_title = title;
|
||||
_moduleNames = moduleNames;
|
||||
_resourceKey = resourceKey;
|
||||
_roles = roles;
|
||||
}
|
||||
public static Resource CreateNew(TitleVO title, DescriptionVO description, ModuleNameVO moduleNames, ResourceKey resourceKey, List<Role> roles)
|
||||
=> new Resource(title, description, moduleNames, resourceKey, roles);
|
||||
|
||||
public TitleVO Title => _title;
|
||||
public DescriptionVO Description => _description;
|
||||
public ModuleNameVO ModuleNames => _moduleNames;
|
||||
public ResourceKey ResourceKey => _resourceKey;
|
||||
public IReadOnlyList<Role> Roles => _roles;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using Vizhvizh.Shared.Domain.ValueObjects;
|
||||
using Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.Entities;
|
||||
|
||||
public class Role : Entity<RoleId>
|
||||
{
|
||||
private TitleVO _title;
|
||||
private List<RoleResource> _roleResources;
|
||||
private Role(TitleVO title,List<RoleResource> roleResources)
|
||||
{
|
||||
_title = title;
|
||||
_roleResources = roleResources;
|
||||
}
|
||||
public static Role CreateNew(TitleVO title , List<RoleResource> roleResources)
|
||||
=> new Role(title, roleResources);
|
||||
|
||||
public TitleVO Title => _title;
|
||||
public IReadOnlyList<RoleResource> RoleResources => _roleResources;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
using Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.Entities;
|
||||
|
||||
public class RoleResource : Entity<RoleResourceId>
|
||||
{
|
||||
private AccessLevel _accessLevel;
|
||||
|
||||
private UserId _userId;
|
||||
private RoleId _roleId;
|
||||
|
||||
private RoleResource(AccessLevel accessLevel, UserId userId, RoleId roleId)
|
||||
{
|
||||
_accessLevel = accessLevel;
|
||||
_userId = userId;
|
||||
_roleId = roleId;
|
||||
}
|
||||
|
||||
public static RoleResource CreateNew(AccessLevel accessLevel, UserId userId, RoleId roleId)
|
||||
=> new RoleResource(accessLevel, userId, roleId);
|
||||
|
||||
public AccessLevel AccessLevel => _accessLevel;
|
||||
public UserId UserId => _userId;
|
||||
public RoleId RoleId => _roleId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
using Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.Entities;
|
||||
|
||||
public class User : Entity<UserId>, IAggregateRoot
|
||||
{
|
||||
private UserNationalCode _nationalCode;
|
||||
private MemberId _memberId;
|
||||
private List<Role> _roles;
|
||||
|
||||
private User(UserNationalCode nationalCode,MemberId memberId,List<Role> roles)
|
||||
{
|
||||
_nationalCode = nationalCode;
|
||||
_memberId = memberId;
|
||||
_roles = roles;
|
||||
}
|
||||
|
||||
public static User CreateNew(UserNationalCode nationalCode, MemberId memberId, List<Role> roles)
|
||||
=> new User(nationalCode, memberId, roles);
|
||||
|
||||
public UserNationalCode NationalCode => _nationalCode;
|
||||
public MemberId MemberId => _memberId;
|
||||
public IReadOnlyList<Role> Roles => _roles;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using Vizhvizh.UserAccess.Domain.Resource;
|
||||
using Vizhvizh.BuildingBlocks.Domain.Exceptions;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.Exceptions;
|
||||
|
||||
public class InvalidNationalCodeException : ValueObjectValidationException
|
||||
{
|
||||
public InvalidNationalCodeException() : base(ExceptionResources.InvalidNationalCodeException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using Vizhvizh.UserAccess.Domain.Resource;
|
||||
using Vizhvizh.BuildingBlocks.Domain.Exceptions;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.Exceptions;
|
||||
|
||||
public class MemberFullNameNullOrEmptyException : ValueObjectValidationException
|
||||
{
|
||||
public MemberFullNameNullOrEmptyException() : base(ExceptionResources.MemberFullNameNullOrEmptyException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
|
||||
|
||||
public class MemberId : TypedIdValueBase<long>
|
||||
{
|
||||
public MemberId(long value) : base(value)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
|
||||
public class ResourceId : TypedIdValueBase<long>
|
||||
{
|
||||
public ResourceId(long value) : base(value)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
|
||||
public class RoleId : TypedIdValueBase<int>
|
||||
{
|
||||
public RoleId(int value) : base(value)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
|
||||
public class RoleResourceId : TypedIdValueBase<long>
|
||||
{
|
||||
public RoleResourceId(long value) : base(value)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.TypeIds;
|
||||
|
||||
public class UserId : TypedIdValueBase<long>
|
||||
{
|
||||
public UserId(long value) : base(value)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Vizhvizh.UserAccess.Domain.Resource;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
|
||||
public class AccessLevel : ValueObject
|
||||
{
|
||||
public AccessLevel(AccessLevelEnum value)
|
||||
{
|
||||
Value = (int)value;
|
||||
}
|
||||
public int Value { get; init;}
|
||||
}
|
||||
public enum AccessLevelEnum
|
||||
{
|
||||
[Display(Name = nameof(ValueObjectResources.AccessLevelEnum_Write), ResourceType = typeof(ValueObjectResources))]
|
||||
Write = 0,
|
||||
[Display(Name = nameof(ValueObjectResources.AccessLevelEnum_Read), ResourceType = typeof(ValueObjectResources))]
|
||||
Read = 1,
|
||||
[Display(Name = nameof(ValueObjectResources.AccessLevelEnum_ReadWrite), ResourceType = typeof(ValueObjectResources))]
|
||||
ReadWrite = 2
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using Vizhvizh.Shared.Domain.TypeIds;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
|
||||
public class MemberAddress : ValueObject
|
||||
{
|
||||
public MemberAddress(double latitude, double longitude, int provinceId, int cityId, string address, string postalCode)
|
||||
{
|
||||
Latitude = latitude;
|
||||
Longitude = longitude;
|
||||
ProvinceId = provinceId;
|
||||
CityId = cityId;
|
||||
Address = address;
|
||||
PostalCode = postalCode;
|
||||
}
|
||||
public double Latitude { get; init; }
|
||||
public double Longitude { get; init; }
|
||||
public int ProvinceId { get; set; }
|
||||
public int CityId { get; set; }
|
||||
public string Address { get; set; }
|
||||
public string PostalCode { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
|
||||
public class MemberAvatar : ValueObject
|
||||
{
|
||||
public MemberAvatar(string value)
|
||||
{
|
||||
Value = value;
|
||||
}
|
||||
public string Value { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using Vizhvizh.Shared.Domain.Exceptions;
|
||||
using Vizhvizh.UserAccess.Domain.Exceptions;
|
||||
using Vizhvizh.UserAccess.Domain.Resource;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
|
||||
public class MemberFullName : ValueObject
|
||||
{
|
||||
public const short Limit = 100;
|
||||
public MemberFullName(string firstName, string lastName)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(firstName) || string.IsNullOrWhiteSpace(lastName))
|
||||
throw new MemberFullNameNullOrEmptyException();
|
||||
|
||||
if ((firstName + lastName).Length > Limit)
|
||||
throw new CharacterLimitException(ValueObjectResources.MemberFullName, Limit);
|
||||
|
||||
FirstName = firstName;
|
||||
LastName = lastName;
|
||||
}
|
||||
public string FirstName { get; init; }
|
||||
public string LastName { get; init; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{FirstName} {LastName}";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Vizhvizh.Shared.Domain.ValueObjects;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
|
||||
public class ResourceKey : ValueObject
|
||||
{
|
||||
public ResourceKey(ModuleNameVO module,TitleVO resourceTitle, params string[] parts)
|
||||
{
|
||||
Value = $"{module.Value}.{string.Join('.',parts)}.{resourceTitle.Value}";
|
||||
}
|
||||
public string Value { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using Vizhvizh.UserAccess.Domain.Exceptions;
|
||||
using Vizhvizh.BuildingBlocks.Domain;
|
||||
|
||||
namespace Vizhvizh.UserAccess.Domain.ValueObjects;
|
||||
|
||||
public class UserNationalCode : ValueObject
|
||||
{
|
||||
public static bool IsValidNationalCode(string nationalCode)
|
||||
{
|
||||
if (nationalCode is null || nationalCode.Length > 10)
|
||||
return false;
|
||||
|
||||
// تبدیل به آرایه
|
||||
var arr = nationalCode.ToArray().Select(n => int.Parse(n.ToString()));
|
||||
|
||||
//بر عکس کردن اجزا
|
||||
var arrReduce = arr.Reverse().ToList();
|
||||
|
||||
// بدست آوردن رقم کنترل اخر کد ملی
|
||||
var numberControl = arrReduce.First();
|
||||
arrReduce.RemoveAt(0);
|
||||
|
||||
// تمام 9 رقم سمت چپ کد ملی ضرب در موقعیت خودش میشه بعد همه جمع میشن بعدش تقسیم به یازده و باقی مانده رو میگیرم
|
||||
//کد ملی 0700454713
|
||||
//موقیعت 07 به ترتیب 9و10 هست از اونجایی ک ما رقم کنترل رو برداشتیم پس باید ایندکس ب اضافه ی 2 شه
|
||||
var remaining = decimal.Parse($"{arrReduce.Select((n, i) => n * (i + 2)).Sum() % 11}");
|
||||
|
||||
if (remaining <= 2.0m)
|
||||
{
|
||||
if (numberControl == remaining)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else if (11m - remaining == numberControl)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
public UserNationalCode(string value)
|
||||
{
|
||||
if (!IsValidNationalCode(value))
|
||||
throw new InvalidNationalCodeException();
|
||||
|
||||
Value = value;
|
||||
}
|
||||
public string Value { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Vichvich.Shared.Domain\Vizhvizh.Shared.Domain.csproj" />
|
||||
<ProjectReference Include="..\Vichvich.UserAccess.Domain.Resource\Vizhvizh.UserAccess.Domain.Resource.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user