Add AcAddress; Implement AcAddress and relations; ITimeStampCreated improvements; refactoring, improvements, fixes, etc...

This commit is contained in:
jozsef.b@aycode.com 2024-01-12 16:05:29 +01:00
parent 0d122e1470
commit 2b66a16047
21 changed files with 106 additions and 34 deletions

View File

@ -63,10 +63,16 @@ public abstract class AcDbContextBase : DbContext
if (entityEntry.Entity is ITimeStampModified timeStampModified)
timeStampModified.Modified = utcNow;
if (entityEntry.State != EntityState.Added) continue;
if (entityEntry.Entity is not ITimeStampCreated timeStampCreated)
continue;
if (entityEntry.Entity is ITimeStampCreated timeStampCreated)
if (entityEntry.State == EntityState.Added)
{
timeStampCreated.Created = utcNow;
continue;
}
entityEntry.Property(nameof(timeStampCreated.Created)).IsModified = false;
}
}

View File

@ -0,0 +1,10 @@
using AyCode.Interfaces.Addresses;
using AyCode.Interfaces.Users;
using Microsoft.EntityFrameworkCore;
namespace AyCode.Database.DbSets.Addresses;
public interface IAcAddressDbSetBase<TAddress> where TAddress : class, IAcAddress
{
DbSet<TAddress> Addresses { get; set; }
}

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AyCode.Interfaces.Addresses;
namespace AyCode.Database.DbSets.Addresses
{
public static class AcAddressDbSetExtensions
{
public static IQueryable<TAddress> GetAddresses<TAddress>(this IAcAddressDbSetBase<TAddress> ctx) where TAddress : class, IAcAddress
=> ctx.Addresses;
public static TAddress? GetAddressById<TAddress>(this IAcAddressDbSetBase<TAddress> ctx, Guid addressId) where TAddress : class, IAcAddress
=> ctx.GetAddresses().FirstOrDefault(x => x.Id == addressId);
}
}

View File

@ -0,0 +1,20 @@
using System.ComponentModel.DataAnnotations;
using AyCode.Interfaces.Addresses;
using System.ComponentModel.DataAnnotations.Schema;
namespace AyCode.Entities.Addresses;
[Table("Address")]
public abstract class AcAddress : IAcAddress
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public string AddressText { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -14,19 +14,18 @@ namespace AyCode.Entities.Profiles
{
protected AcProfile() { }
protected AcProfile(Guid ownerId) : this()
protected AcProfile(Guid id) : this()
{
OwnerId = ownerId;
Id = id;
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid OwnerId { get; set; }
public Guid? UserMediaId { get; set; }
public string? Name { get; set; }
public string? ThumbnailUrl { get ; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -6,7 +6,7 @@ using AyCode.Interfaces.Users;
namespace AyCode.Entities.Users;
[Table("UserToServiceProvider")]
public abstract class AcUserToServiceProvider<TUser, TServiceProvider> : IAcUserToServiceProvider<TUser, TServiceProvider>
public abstract class AcUserToServiceProvider<TUser, TServiceProvider> : IAcUserToAcServiceProvider<TUser, TServiceProvider>
where TUser : class, IAcUserBase
where TServiceProvider : class, IAcServiceProviderBase
{
@ -18,7 +18,7 @@ public abstract class AcUserToServiceProvider<TUser, TServiceProvider> : IAcUser
public virtual TUser User { get; set; }
public virtual TServiceProvider ServiceProvider { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,11 @@
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.MediaInfo;
namespace AyCode.Interfaces.Addresses.Dtos;
public interface IAcAddressDtoBase : IEntityGuid
{
public double Latitude { get; set; }
public double Longitude { get; set; }
public string AddressText { get; set; }
}

View File

@ -0,0 +1,9 @@
using AyCode.Interfaces.Addresses.Dtos;
using AyCode.Interfaces.TimeStampInfo;
namespace AyCode.Interfaces.Addresses;
public interface IAcAddress : IAcAddressDtoBase, ITimeStampInfo
{
}

View File

@ -0,0 +1,6 @@
namespace AyCode.Interfaces.Addresses;
public interface IAcAddressForeignKey
{
public Guid AddressId { get; set; }
}

View File

@ -0,0 +1,10 @@
using AyCode.Interfaces.Profiles;
using System.Formats.Tar;
using System.Net;
namespace AyCode.Interfaces.Addresses;
public interface IAcAddressRelation<TAddress> : IAcAddressForeignKey where TAddress : class, IAcAddress
{
public TAddress Address { get; set; }
}

View File

@ -7,6 +7,7 @@
</PropertyGroup>
<ItemGroup>
<Folder Include="Addresses\Dtos\" />
<Folder Include="Sessions\" />
</ItemGroup>

View File

@ -1,15 +0,0 @@
namespace AyCode.Interfaces.Profiles;
public abstract class AcProfile : IAcProfile
{
public Guid Id { get; set; }
public Guid OwnerId { get; set; }
public Guid? UserMediaId { get; set; }
public string? Name { get; set; }
public string? ThumbnailUrl { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -3,7 +3,7 @@ using AyCode.Interfaces.MediaInfo;
namespace AyCode.Interfaces.Profiles.Dtos;
public interface IAcProfileDtoBase : IEntityGuid, IOwnerId, IMediaInfo
public interface IAcProfileDtoBase : IEntityGuid, IMediaInfo
{
string? Name { get; set; }
}

View File

@ -1,6 +1,6 @@
namespace AyCode.Interfaces.Profiles;
public interface IProfileForeignKey
public interface IAcProfileForeignKey
{
public Guid ProfileId { get; set; }
}

View File

@ -4,8 +4,7 @@ using AyCode.Interfaces.Users;
namespace AyCode.Interfaces.Profiles;
public interface IAcProfileRelation<TProfile> where TProfile : class, IAcProfile
public interface IAcProfileRelation<TProfile> : IAcProfileForeignKey where TProfile : class, IAcProfile
{
public Guid ProfileId { get; }
public TProfile Profile { get; set; }
}

View File

@ -1,6 +1,6 @@
namespace AyCode.Interfaces.ServiceProviders;
public interface IServiceProviderForeignKey
public interface IAcServiceProviderForeignKey
{
public Guid ServiceProviderId { get; set; }
}

View File

@ -5,7 +5,7 @@ using AyCode.Interfaces.Users.Dtos;
namespace AyCode.Interfaces.Users;
public interface IAcUserBase : IEntityGuid, IProfileForeignKey, IEmailAddress, IPassword, ITimeStampInfo
public interface IAcUserBase : IEntityGuid, IAcProfileForeignKey, IEmailAddress, IPassword, ITimeStampInfo
{
public string PhoneNumber { get; set; }
public string? RefreshToken { get; set; }

View File

@ -11,8 +11,7 @@ public interface IAcUserListRelation<TUser, TUserToServiceProvider>
public List<TUserToServiceProvider> UserToServiceProviders { get; set; }
}
public interface IAcUserRelation<TUser> where TUser : class, IAcUserBase
public interface IAcUserRelation<TUser> : IUserForeignKey where TUser : class, IAcUserBase
{
public Guid UserId { get; }
public TUser User { get; set; }
}

View File

@ -4,7 +4,7 @@ using AyCode.Interfaces.TimeStampInfo;
namespace AyCode.Interfaces.Users;
public interface IAcUserToServiceProvider<TUser, TServiceProvider> : IAcUserToServiceProviderBase
public interface IAcUserToAcServiceProvider<TUser, TServiceProvider> : IAcUserToServiceProviderBase
where TUser : class, IAcUserBase
where TServiceProvider : class, IAcServiceProviderBase
{

View File

@ -4,6 +4,6 @@ using AyCode.Interfaces.TimeStampInfo;
namespace AyCode.Interfaces.Users;
public interface IAcUserToServiceProviderBase : IEntityGuid, IUserForeignKey, IServiceProviderForeignKey, ITimeStampInfo
public interface IAcUserToServiceProviderBase : IEntityGuid, IUserForeignKey, IAcServiceProviderForeignKey, ITimeStampInfo
{
}

View File

@ -24,6 +24,5 @@ public abstract class AcUserModelDtoMinBase<TUserDtoMin, TProfile, TProfileDto>
Profile = Activator.CreateInstance<TProfileDto>();
Profile.Id = user.Profile.Id;
Profile.Name = user.Profile.Name;
Profile.OwnerId = user.Profile.OwnerId;
}
}