From 2b66a16047689d93863f3872e8335c78e0faf34d Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Fri, 12 Jan 2024 16:05:29 +0100 Subject: [PATCH] Add AcAddress; Implement AcAddress and relations; ITimeStampCreated improvements; refactoring, improvements, fixes, etc... --- AyCode.Database/DbContexts/AcDbContextBase.cs | 10 ++++++++-- .../DbSets/Addresses/IAcAddressDbSetBase.cs | 10 ++++++++++ .../Addresses/IAcAddressDbSetExtensions.cs | 18 +++++++++++++++++ AyCode.Entities/Addresses/AcAddress.cs | 20 +++++++++++++++++++ AyCode.Entities/Profiles/AcProfile.cs | 7 +++---- .../Users/AcUserToServiceProvider.cs | 4 ++-- .../Addresses/Dtos/IAcAddressDtoBase.cs | 11 ++++++++++ AyCode.Interfaces/Addresses/IAcAddress.cs | 9 +++++++++ .../Addresses/IAcAddressForeignKey.cs | 6 ++++++ .../Addresses/IAcAddressRelation.cs | 10 ++++++++++ AyCode.Interfaces/AyCode.Interfaces.csproj | 1 + AyCode.Interfaces/Profiles/AcProfile.cs | 15 -------------- .../Profiles/Dtos/IAcProfileDtoBase.cs | 2 +- ...eForeignKey.cs => IAcProfileForeignKey.cs} | 2 +- .../Profiles/IAcProfileRelation.cs | 3 +-- .../IServiceProviderForeignKey.cs | 2 +- AyCode.Interfaces/Users/IAcUserBase.cs | 2 +- AyCode.Interfaces/Users/IAcUserRelation.cs | 3 +-- .../Users/IAcUserToServiceProvider.cs | 2 +- .../Users/IAcUserToServiceProviderBase.cs | 2 +- AyCode.Models/Users/AcUserModelDtoMinBase.cs | 1 - 21 files changed, 106 insertions(+), 34 deletions(-) create mode 100644 AyCode.Database/DbSets/Addresses/IAcAddressDbSetBase.cs create mode 100644 AyCode.Database/DbSets/Addresses/IAcAddressDbSetExtensions.cs create mode 100644 AyCode.Entities/Addresses/AcAddress.cs create mode 100644 AyCode.Interfaces/Addresses/Dtos/IAcAddressDtoBase.cs create mode 100644 AyCode.Interfaces/Addresses/IAcAddress.cs create mode 100644 AyCode.Interfaces/Addresses/IAcAddressForeignKey.cs create mode 100644 AyCode.Interfaces/Addresses/IAcAddressRelation.cs delete mode 100644 AyCode.Interfaces/Profiles/AcProfile.cs rename AyCode.Interfaces/Profiles/{IProfileForeignKey.cs => IAcProfileForeignKey.cs} (69%) diff --git a/AyCode.Database/DbContexts/AcDbContextBase.cs b/AyCode.Database/DbContexts/AcDbContextBase.cs index e76bf71..8c97c00 100644 --- a/AyCode.Database/DbContexts/AcDbContextBase.cs +++ b/AyCode.Database/DbContexts/AcDbContextBase.cs @@ -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; } } diff --git a/AyCode.Database/DbSets/Addresses/IAcAddressDbSetBase.cs b/AyCode.Database/DbSets/Addresses/IAcAddressDbSetBase.cs new file mode 100644 index 0000000..5a4046a --- /dev/null +++ b/AyCode.Database/DbSets/Addresses/IAcAddressDbSetBase.cs @@ -0,0 +1,10 @@ +using AyCode.Interfaces.Addresses; +using AyCode.Interfaces.Users; +using Microsoft.EntityFrameworkCore; + +namespace AyCode.Database.DbSets.Addresses; + +public interface IAcAddressDbSetBase where TAddress : class, IAcAddress +{ + DbSet Addresses { get; set; } +} \ No newline at end of file diff --git a/AyCode.Database/DbSets/Addresses/IAcAddressDbSetExtensions.cs b/AyCode.Database/DbSets/Addresses/IAcAddressDbSetExtensions.cs new file mode 100644 index 0000000..3c27815 --- /dev/null +++ b/AyCode.Database/DbSets/Addresses/IAcAddressDbSetExtensions.cs @@ -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 GetAddresses(this IAcAddressDbSetBase ctx) where TAddress : class, IAcAddress + => ctx.Addresses; + + public static TAddress? GetAddressById(this IAcAddressDbSetBase ctx, Guid addressId) where TAddress : class, IAcAddress + => ctx.GetAddresses().FirstOrDefault(x => x.Id == addressId); + } +} diff --git a/AyCode.Entities/Addresses/AcAddress.cs b/AyCode.Entities/Addresses/AcAddress.cs new file mode 100644 index 0000000..9f753d1 --- /dev/null +++ b/AyCode.Entities/Addresses/AcAddress.cs @@ -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; } +} \ No newline at end of file diff --git a/AyCode.Entities/Profiles/AcProfile.cs b/AyCode.Entities/Profiles/AcProfile.cs index c2045cd..889fdd6 100644 --- a/AyCode.Entities/Profiles/AcProfile.cs +++ b/AyCode.Entities/Profiles/AcProfile.cs @@ -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; } } diff --git a/AyCode.Entities/Users/AcUserToServiceProvider.cs b/AyCode.Entities/Users/AcUserToServiceProvider.cs index 8713c95..a110490 100644 --- a/AyCode.Entities/Users/AcUserToServiceProvider.cs +++ b/AyCode.Entities/Users/AcUserToServiceProvider.cs @@ -6,7 +6,7 @@ using AyCode.Interfaces.Users; namespace AyCode.Entities.Users; [Table("UserToServiceProvider")] -public abstract class AcUserToServiceProvider : IAcUserToServiceProvider +public abstract class AcUserToServiceProvider : IAcUserToAcServiceProvider where TUser : class, IAcUserBase where TServiceProvider : class, IAcServiceProviderBase { @@ -18,7 +18,7 @@ public abstract class AcUserToServiceProvider : IAcUser public virtual TUser User { get; set; } public virtual TServiceProvider ServiceProvider { get; set; } - + public DateTime Created { get; set; } public DateTime Modified { get; set; } } \ No newline at end of file diff --git a/AyCode.Interfaces/Addresses/Dtos/IAcAddressDtoBase.cs b/AyCode.Interfaces/Addresses/Dtos/IAcAddressDtoBase.cs new file mode 100644 index 0000000..612cb73 --- /dev/null +++ b/AyCode.Interfaces/Addresses/Dtos/IAcAddressDtoBase.cs @@ -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; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Addresses/IAcAddress.cs b/AyCode.Interfaces/Addresses/IAcAddress.cs new file mode 100644 index 0000000..39221c5 --- /dev/null +++ b/AyCode.Interfaces/Addresses/IAcAddress.cs @@ -0,0 +1,9 @@ +using AyCode.Interfaces.Addresses.Dtos; +using AyCode.Interfaces.TimeStampInfo; + +namespace AyCode.Interfaces.Addresses; + +public interface IAcAddress : IAcAddressDtoBase, ITimeStampInfo +{ + +} \ No newline at end of file diff --git a/AyCode.Interfaces/Addresses/IAcAddressForeignKey.cs b/AyCode.Interfaces/Addresses/IAcAddressForeignKey.cs new file mode 100644 index 0000000..0f59376 --- /dev/null +++ b/AyCode.Interfaces/Addresses/IAcAddressForeignKey.cs @@ -0,0 +1,6 @@ +namespace AyCode.Interfaces.Addresses; + +public interface IAcAddressForeignKey +{ + public Guid AddressId { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Addresses/IAcAddressRelation.cs b/AyCode.Interfaces/Addresses/IAcAddressRelation.cs new file mode 100644 index 0000000..3b8195d --- /dev/null +++ b/AyCode.Interfaces/Addresses/IAcAddressRelation.cs @@ -0,0 +1,10 @@ +using AyCode.Interfaces.Profiles; +using System.Formats.Tar; +using System.Net; + +namespace AyCode.Interfaces.Addresses; + +public interface IAcAddressRelation : IAcAddressForeignKey where TAddress : class, IAcAddress +{ + public TAddress Address { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/AyCode.Interfaces.csproj b/AyCode.Interfaces/AyCode.Interfaces.csproj index 70f60b6..e72a4bf 100644 --- a/AyCode.Interfaces/AyCode.Interfaces.csproj +++ b/AyCode.Interfaces/AyCode.Interfaces.csproj @@ -7,6 +7,7 @@ + diff --git a/AyCode.Interfaces/Profiles/AcProfile.cs b/AyCode.Interfaces/Profiles/AcProfile.cs deleted file mode 100644 index e5f9b12..0000000 --- a/AyCode.Interfaces/Profiles/AcProfile.cs +++ /dev/null @@ -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; } -} \ No newline at end of file diff --git a/AyCode.Interfaces/Profiles/Dtos/IAcProfileDtoBase.cs b/AyCode.Interfaces/Profiles/Dtos/IAcProfileDtoBase.cs index 46ef611..b57dba6 100644 --- a/AyCode.Interfaces/Profiles/Dtos/IAcProfileDtoBase.cs +++ b/AyCode.Interfaces/Profiles/Dtos/IAcProfileDtoBase.cs @@ -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; } } \ No newline at end of file diff --git a/AyCode.Interfaces/Profiles/IProfileForeignKey.cs b/AyCode.Interfaces/Profiles/IAcProfileForeignKey.cs similarity index 69% rename from AyCode.Interfaces/Profiles/IProfileForeignKey.cs rename to AyCode.Interfaces/Profiles/IAcProfileForeignKey.cs index 4d817c7..8234ab9 100644 --- a/AyCode.Interfaces/Profiles/IProfileForeignKey.cs +++ b/AyCode.Interfaces/Profiles/IAcProfileForeignKey.cs @@ -1,6 +1,6 @@ namespace AyCode.Interfaces.Profiles; -public interface IProfileForeignKey +public interface IAcProfileForeignKey { public Guid ProfileId { get; set; } } \ No newline at end of file diff --git a/AyCode.Interfaces/Profiles/IAcProfileRelation.cs b/AyCode.Interfaces/Profiles/IAcProfileRelation.cs index dee6c75..06ae9c3 100644 --- a/AyCode.Interfaces/Profiles/IAcProfileRelation.cs +++ b/AyCode.Interfaces/Profiles/IAcProfileRelation.cs @@ -4,8 +4,7 @@ using AyCode.Interfaces.Users; namespace AyCode.Interfaces.Profiles; -public interface IAcProfileRelation where TProfile : class, IAcProfile +public interface IAcProfileRelation : IAcProfileForeignKey where TProfile : class, IAcProfile { - public Guid ProfileId { get; } public TProfile Profile { get; set; } } \ No newline at end of file diff --git a/AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs b/AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs index fc41cf7..6a376b1 100644 --- a/AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs +++ b/AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs @@ -1,6 +1,6 @@ namespace AyCode.Interfaces.ServiceProviders; -public interface IServiceProviderForeignKey +public interface IAcServiceProviderForeignKey { public Guid ServiceProviderId { get; set; } } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUserBase.cs b/AyCode.Interfaces/Users/IAcUserBase.cs index 69e1a8d..37cb496 100644 --- a/AyCode.Interfaces/Users/IAcUserBase.cs +++ b/AyCode.Interfaces/Users/IAcUserBase.cs @@ -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; } diff --git a/AyCode.Interfaces/Users/IAcUserRelation.cs b/AyCode.Interfaces/Users/IAcUserRelation.cs index 069fcd1..3045e6f 100644 --- a/AyCode.Interfaces/Users/IAcUserRelation.cs +++ b/AyCode.Interfaces/Users/IAcUserRelation.cs @@ -11,8 +11,7 @@ public interface IAcUserListRelation public List UserToServiceProviders { get; set; } } -public interface IAcUserRelation where TUser : class, IAcUserBase +public interface IAcUserRelation : IUserForeignKey where TUser : class, IAcUserBase { - public Guid UserId { get; } public TUser User { get; set; } } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUserToServiceProvider.cs b/AyCode.Interfaces/Users/IAcUserToServiceProvider.cs index caf2861..3573b1b 100644 --- a/AyCode.Interfaces/Users/IAcUserToServiceProvider.cs +++ b/AyCode.Interfaces/Users/IAcUserToServiceProvider.cs @@ -4,7 +4,7 @@ using AyCode.Interfaces.TimeStampInfo; namespace AyCode.Interfaces.Users; -public interface IAcUserToServiceProvider : IAcUserToServiceProviderBase +public interface IAcUserToAcServiceProvider : IAcUserToServiceProviderBase where TUser : class, IAcUserBase where TServiceProvider : class, IAcServiceProviderBase { diff --git a/AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs b/AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs index 706f5f7..ad62446 100644 --- a/AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs +++ b/AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs @@ -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 { } \ No newline at end of file diff --git a/AyCode.Models/Users/AcUserModelDtoMinBase.cs b/AyCode.Models/Users/AcUserModelDtoMinBase.cs index 832f28e..a5c9b37 100644 --- a/AyCode.Models/Users/AcUserModelDtoMinBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoMinBase.cs @@ -24,6 +24,5 @@ public abstract class AcUserModelDtoMinBase Profile = Activator.CreateInstance(); Profile.Id = user.Profile.Id; Profile.Name = user.Profile.Name; - Profile.OwnerId = user.Profile.OwnerId; } } \ No newline at end of file