diff --git a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityDto.cs b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityDto.cs index fee4ce74..85f5bf1d 100644 --- a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityDto.cs @@ -1,16 +1,18 @@ using System; using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; namespace Kurs.Platform.Entities; -public class ActivityDto : FullAuditedEntityDto +public class ActivityDto : EntityDto { public Guid? TenantId { get; set; } - + public string EntityName { get; set; } + public string EntityId { get; set; } public string Type { get; set; } public string Subject { get; set; } public string Content { get; set; } - public string RecipientUserName { get; set; } + public string FilesJson { get; set; } - protected ActivityDto() { } + public IRemoteStreamContent[] Files { get; set; } } diff --git a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityFileDto.cs b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityFileDto.cs deleted file mode 100644 index d9838e18..00000000 --- a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityFileDto.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Kurs.Platform.Entities; - -public class ActivityFileDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string EntityName { get; set; } - public string EntityId { get; set; } - public string FileName { get; set; } - public long FileSize { get; set; } - public string FileType { get; set; } - public string FilePath { get; set; } - - public Guid ActivityItemId { get; set; } -} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityItemDto.cs b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityItemDto.cs deleted file mode 100644 index cdc8de51..00000000 --- a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityItemDto.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; -using Volo.Abp.MultiTenancy; - -namespace Kurs.Platform.Entities; - -public class ActivityItemDto : FullAuditedEntityDto, IMultiTenant -{ - public Guid? TenantId { get; set; } - - public string Type { get; set; } - public string EntityName { get; set; } - public string EntityId { get; set; } - public Guid? RecipientUserId { get; set; } - public string RecipientUserName { get; set; } - public string Subject { get; set; } - public string Content { get; set; } - - // Navigation properties - public Guid ActivityId { get; set; } -} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityAppService.cs b/api/src/Kurs.Platform.Application/Activity/ActivityAppService.cs index 24fc3f0a..aadde1de 100644 --- a/api/src/Kurs.Platform.Application/Activity/ActivityAppService.cs +++ b/api/src/Kurs.Platform.Application/Activity/ActivityAppService.cs @@ -1,11 +1,15 @@ using System; +using System.Threading.Tasks; +using Kurs.Platform.BlobStoring; using Kurs.Platform.Entities; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.Abp.BlobStoring; using Volo.Abp.Domain.Repositories; -namespace Kurs.Platform.DataSources; +namespace Kurs.Platform.Activities; [Authorize] public class ActivityAppService : CrudAppService< @@ -14,9 +18,28 @@ public class ActivityAppService : CrudAppService< Guid, PagedAndSortedResultRequestDto> { - public ActivityAppService( - IRepository repo) : base(repo) - { + private readonly IBlobContainer ActivityBlobContainer; + public ActivityAppService( + IRepository repo, + IBlobContainer activityBlobContainer + ) : base(repo) + { + ActivityBlobContainer = activityBlobContainer; + + // CreatePolicyName = $"{AppCodes.Listforms.Listform}.Create"; + // UpdatePolicyName = $"{AppCodes.Listforms.Listform}.Update"; + // DeletePolicyName = $"{AppCodes.Listforms.Listform}.Delete"; + + // bool canAccess = await authManager.CanAccess(listFormCode, AuthorizationTypeEnum.Update); + // if (!canAccess) + // { + // throw new UserFriendlyException(L[AppErrorCodes.NoAuth]); + // } + } + + public override Task CreateAsync([FromForm] ActivityDto input) + { + return base.CreateAsync(input); } } diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityAutoMapperProfile.cs b/api/src/Kurs.Platform.Application/Activity/ActivityAutoMapperProfile.cs index 40ca156d..9d4283e4 100644 --- a/api/src/Kurs.Platform.Application/Activity/ActivityAutoMapperProfile.cs +++ b/api/src/Kurs.Platform.Application/Activity/ActivityAutoMapperProfile.cs @@ -1,15 +1,26 @@ using AutoMapper; using Kurs.Platform.Entities; -namespace Kurs.Platform.DataSources; +namespace Kurs.Platform.Activities; public class ActivityAutoMapperProfile : Profile { public ActivityAutoMapperProfile() { - CreateMap(); - CreateMap(); - CreateMap(); + // Map from Activity to ActivityDto + CreateMap() + .ForMember(dest => dest.FilesJson, opt => opt.MapFrom(src => src.FilesJson)) + .ForMember(dest => dest.Files, opt => opt.Ignore()); // Ignore Files property as we handle it manually + // Mapping from ActivityDto to Activity + CreateMap() + .ForMember(dest => dest.TenantId, opt => opt.MapFrom(src => src.TenantId)) + .ForMember(dest => dest.EntityName, opt => opt.MapFrom(src => src.EntityName)) + .ForMember(dest => dest.EntityId, opt => opt.MapFrom(src => src.EntityId)) + .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type)) + .ForMember(dest => dest.Subject, opt => opt.MapFrom(src => src.Subject)) + .ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content)) + // Handling the FilesJson field (as a JSON string) + .ForMember(dest => dest.FilesJson, opt => opt.MapFrom(src => src.FilesJson)); // Adjust the mapping as needed } } diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityFileAppService.cs b/api/src/Kurs.Platform.Application/Activity/ActivityFileAppService.cs deleted file mode 100644 index 02016061..00000000 --- a/api/src/Kurs.Platform.Application/Activity/ActivityFileAppService.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using Kurs.Platform.Entities; -using Microsoft.AspNetCore.Authorization; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.Abp.Domain.Repositories; - -namespace Kurs.Platform.DataSources; - -[Authorize] -public class ActivityFileAppService : CrudAppService< - ActivityFile, - ActivityFileDto, - Guid, - PagedAndSortedResultRequestDto> -{ - public ActivityFileAppService( - IRepository repo) : base(repo) - { - - } -} diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityItemAppService.cs b/api/src/Kurs.Platform.Application/Activity/ActivityItemAppService.cs deleted file mode 100644 index 792a41cd..00000000 --- a/api/src/Kurs.Platform.Application/Activity/ActivityItemAppService.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using Kurs.Platform.Entities; -using Microsoft.AspNetCore.Authorization; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.Abp.Domain.Repositories; - -namespace Kurs.Platform.DataSources; - -[Authorize] -public class ActivityItemAppService : CrudAppService< - ActivityItem, - ActivityItemDto, - Guid, - PagedAndSortedResultRequestDto> -{ - public ActivityItemAppService( - IRepository repo) : base(repo) - { - - } -} diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json b/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json index 9bfc7f86..4bd5b879 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json @@ -5785,6 +5785,12 @@ "en": "Export", "tr": "Dışa Ver" }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.PermissionsImport", + "en": "Import", + "tr": "İçe Aktar" + }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.CommandColumns", @@ -15256,7 +15262,7 @@ "Order": 1, "Url": "/admin/list/list-bank", "Icon": "FcMoneyTransfer", - "RequiredPermissionName": "App.Definitions.Bank", + "RequiredPermissionName": "App.Accounting.Bank", "IsDisabled": false }, { diff --git a/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs b/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs index 032db887..d8a9800a 100644 --- a/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs +++ b/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs @@ -1428,6 +1428,7 @@ public static class PlatformConsts { public const string AvatarContainer = "Avatar"; public const string ImportContainer = "Import"; + public const string ActivityContainer = "Activity"; } public static readonly ReadOnlyCollection Languages = new( diff --git a/api/src/Kurs.Platform.Domain/BlobStoring/ActivityBlobContainer.cs b/api/src/Kurs.Platform.Domain/BlobStoring/ActivityBlobContainer.cs new file mode 100644 index 00000000..27c96415 --- /dev/null +++ b/api/src/Kurs.Platform.Domain/BlobStoring/ActivityBlobContainer.cs @@ -0,0 +1,8 @@ +using Volo.Abp.BlobStoring; + +namespace Kurs.Platform.BlobStoring; + +[BlobContainerName(PlatformConsts.BlobContainers.ActivityContainer)] +public class ActivityBlobContainer +{ +} diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/Activity.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/Activity.cs index 0ae26888..e0d26d26 100644 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/Activity.cs +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/Activity.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -8,24 +7,11 @@ namespace Kurs.Platform.Entities; public class Activity : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } - + public string EntityName { get; set; } + public string EntityId { get; set; } public string Type { get; set; } public string Subject { get; set; } public string Content { get; set; } - public Guid? RecipientUserId { get; set; } - public string RecipientUserName { get; set; } - - public ICollection ActivityItems { get; set; } - - protected Activity() { } - - public Activity(Guid id, string type, string subject, string content, string recipientUserName = null) - : base(id) - { - Type = type; - Subject = subject; - Content = content; - RecipientUserName = recipientUserName; - ActivityItems = new List(); - } + + public string FilesJson { get; set; } } \ No newline at end of file diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityFile.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityFile.cs deleted file mode 100644 index a3682e7e..00000000 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityFile.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using Volo.Abp.Domain.Entities.Auditing; -using Volo.Abp.MultiTenancy; - -namespace Kurs.Platform.Entities; - -public class ActivityFile : FullAuditedEntity, IMultiTenant -{ - public Guid? TenantId { get; set; } - - public string EntityName { get; set; } - public string EntityId { get; set; } - public string FileName { get; set; } - public long FileSize { get; set; } - public string FileType { get; set; } - public string FilePath { get; set; } - - // Navigation properties - public Guid ActivityItemId { get; set; } - public ActivityItem ActivityItem { get; set; } - - protected ActivityFile() { } - - public ActivityFile( - Guid id, - Guid activityItemId, - string entityName, - string entityId, - string fileName, - long fileSize, - string fileType, - string filePath) - : base(id) - { - ActivityItemId = activityItemId; - EntityName = entityName; - EntityId = entityId; - FileName = fileName; - FileSize = fileSize; - FileType = fileType; - FilePath = filePath; - } -} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityItem.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityItem.cs deleted file mode 100644 index f77a75de..00000000 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityItem.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using Volo.Abp.Domain.Entities.Auditing; -using Volo.Abp.MultiTenancy; - -namespace Kurs.Platform.Entities; - -public class ActivityItem : FullAuditedEntity, IMultiTenant -{ - public Guid? TenantId { get; set; } - - public string Type { get; set; } - public string EntityName { get; set; } - public string EntityId { get; set; } - public Guid? RecipientUserId { get; set; } - public string RecipientUserName { get; set; } - public string Subject { get; set; } - public string Content { get; set; } - - // Navigation properties - public Guid ActivityId { get; set; } - public Activity Activity { get; set; } - - public ICollection AttachedFiles { get; set; } - - protected ActivityItem() { } - - public ActivityItem( - Guid id, - Guid activityId, - string type, - string entityName, - string entityId, - string subject, - string content, - Guid? recipientUserId = null, - string recipientUserName = null) - : base(id) - { - ActivityId = activityId; - Type = type; - EntityName = entityName; - EntityId = entityId; - Subject = subject; - Content = content; - RecipientUserId = recipientUserId; - RecipientUserName = recipientUserName; - AttachedFiles = []; - } -} \ No newline at end of file diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index 12bebd9c..d1f53717 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -64,8 +64,6 @@ public class PlatformDbContext : public DbSet ReportGenerated { get; set; } public DbSet ReportCategories { get; set; } public DbSet Activities { get; set; } - public DbSet ActivityItems { get; set; } - public DbSet ActivityFiles { get; set; } #endregion #region Definitions from the modules @@ -1559,65 +1557,9 @@ public class PlatformDbContext : b.ToTable(Prefix.DbTableDefault + nameof(Activity), Prefix.DbSchema); b.ConfigureByConvention(); + b.Property(x => x.Type).IsRequired(); b.Property(x => x.Subject).IsRequired().HasMaxLength(256); b.Property(x => x.Content).IsRequired().HasMaxLength(2000); - b.Property(x => x.RecipientUserName).HasMaxLength(100); - b.Property(x => x.Type).IsRequired(); - - b.HasIndex(x => x.Type); - b.HasIndex(x => x.CreatorId); - b.HasIndex(x => x.CreationTime); - }); - - builder.Entity(b => - { - b.ToTable(Prefix.DbTableDefault + nameof(ActivityItem), Prefix.DbSchema); - b.ConfigureByConvention(); - - b.Property(x => x.EntityName).IsRequired().HasMaxLength(128); - b.Property(x => x.EntityId).IsRequired().HasMaxLength(128); - b.Property(x => x.Subject).IsRequired().HasMaxLength(256); - b.Property(x => x.Content).IsRequired().HasMaxLength(2000); - b.Property(x => x.RecipientUserName).HasMaxLength(100); - b.Property(x => x.Type).IsRequired(); - - // Foreign key relationship - b.HasOne(ai => ai.Activity) - .WithMany(a => a.ActivityItems) - .HasForeignKey(ai => ai.ActivityId) - .OnDelete(DeleteBehavior.Cascade); - - b.HasIndex(x => x.ActivityId); - b.HasIndex(x => x.EntityName); - b.HasIndex(x => x.EntityId); - b.HasIndex(x => x.Type); - b.HasIndex(x => x.RecipientUserId); - b.HasIndex(x => x.CreatorId); - }); - - builder.Entity(b => - { - b.ToTable(Prefix.DbTableDefault + nameof(ActivityFile), Prefix.DbSchema); - b.ConfigureByConvention(); - - b.Property(x => x.EntityName).IsRequired().HasMaxLength(128); - b.Property(x => x.EntityId).IsRequired().HasMaxLength(128); - b.Property(x => x.FileName).IsRequired().HasMaxLength(256); - b.Property(x => x.FileType).IsRequired().HasMaxLength(50); - b.Property(x => x.FilePath).IsRequired().HasMaxLength(512); - b.Property(x => x.FileSize).IsRequired(); - - // Foreign key relationship - b.HasOne(af => af.ActivityItem) - .WithMany(ai => ai.AttachedFiles) - .HasForeignKey(af => af.ActivityItemId) - .OnDelete(DeleteBehavior.Cascade); - - b.HasIndex(x => x.ActivityItemId); - b.HasIndex(x => x.EntityName); - b.HasIndex(x => x.EntityId); - b.HasIndex(x => x.FileName); - b.HasIndex(x => x.CreatorId); }); } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013214306_Initial.Designer.cs similarity index 97% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013214306_Initial.Designer.cs index ec1c8040..f2333a77 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013214306_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251013134213_Initial")] + [Migration("20251013214306_Initial")] partial class Initial { /// @@ -651,6 +651,15 @@ namespace Kurs.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); + b.Property("EntityId") + .HasColumnType("nvarchar(max)"); + + b.Property("EntityName") + .HasColumnType("nvarchar(max)"); + + b.Property("FilesJson") + .HasColumnType("nvarchar(max)"); + b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -665,10 +674,6 @@ namespace Kurs.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("RecipientUserName") - .HasMaxLength(100) - .HasColumnType("nvarchar(100)"); - b.Property("Subject") .IsRequired() .HasMaxLength(256) @@ -678,194 +683,15 @@ namespace Kurs.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); - b.Property("Type") - .HasColumnType("int"); + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(max)"); b.HasKey("Id"); - b.HasIndex("CreationTime"); - - b.HasIndex("CreatorId"); - - b.HasIndex("Type"); - b.ToTable("PActivity", (string)null); }); - modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ActivityItemId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("EntityName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("FilePath") - .IsRequired() - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.Property("FileType") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("ActivityItemId"); - - b.HasIndex("CreatorId"); - - b.HasIndex("EntityId"); - - b.HasIndex("EntityName"); - - b.HasIndex("FileName"); - - b.ToTable("PActivityFile", (string)null); - }); - - modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ActivityId") - .HasColumnType("uniqueidentifier"); - - b.Property("Content") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("nvarchar(2000)"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("EntityName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("RecipientUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("RecipientUserName") - .HasMaxLength(100) - .HasColumnType("nvarchar(100)"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ActivityId"); - - b.HasIndex("CreatorId"); - - b.HasIndex("EntityId"); - - b.HasIndex("EntityName"); - - b.HasIndex("RecipientUserId"); - - b.HasIndex("Type"); - - b.ToTable("PActivityItem", (string)null); - }); - modelBuilder.Entity("Kurs.Platform.Entities.AiBot", b => { b.Property("Id") @@ -8860,28 +8686,6 @@ namespace Kurs.Platform.Migrations b.Navigation("NotificationRule"); }); - modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => - { - b.HasOne("Kurs.Platform.Entities.ActivityItem", "ActivityItem") - .WithMany("AttachedFiles") - .HasForeignKey("ActivityItemId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActivityItem"); - }); - - modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => - { - b.HasOne("Kurs.Platform.Entities.Activity", "Activity") - .WithMany("ActivityItems") - .HasForeignKey("ActivityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Activity"); - }); - modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.HasOne("Kurs.Platform.Entities.CustomEntity", "Entity") @@ -9380,16 +9184,6 @@ namespace Kurs.Platform.Migrations b.Navigation("Notifications"); }); - modelBuilder.Entity("Kurs.Platform.Entities.Activity", b => - { - b.Navigation("ActivityItems"); - }); - - modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => - { - b.Navigation("AttachedFiles"); - }); - modelBuilder.Entity("Kurs.Platform.Entities.BlogCategory", b => { b.Navigation("Posts"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013214306_Initial.cs similarity index 97% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013214306_Initial.cs index b6d76540..37931259 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013214306_Initial.cs @@ -1214,10 +1214,12 @@ namespace Kurs.Platform.Migrations { Id = table.Column(type: "uniqueidentifier", nullable: false), TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Type = table.Column(type: "int", nullable: false), + EntityName = table.Column(type: "nvarchar(max)", nullable: true), + EntityId = table.Column(type: "nvarchar(max)", nullable: true), + Type = table.Column(type: "nvarchar(max)", nullable: false), Subject = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Content = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: false), - RecipientUserName = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: true), + FilesJson = table.Column(type: "nvarchar(max)", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), @@ -2612,39 +2614,6 @@ namespace Kurs.Platform.Migrations principalColumn: "Id"); }); - migrationBuilder.CreateTable( - name: "PActivityItem", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Type = table.Column(type: "int", nullable: false), - EntityName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - RecipientUserId = table.Column(type: "uniqueidentifier", nullable: true), - RecipientUserName = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: true), - Subject = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Content = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: false), - ActivityId = table.Column(type: "uniqueidentifier", nullable: false), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PActivityItem", x => x.Id); - table.ForeignKey( - name: "FK_PActivityItem_PActivity_ActivityId", - column: x => x.ActivityId, - principalTable: "PActivity", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateTable( name: "PBackgroundWorker_MailQueue", columns: table => new @@ -3348,38 +3317,6 @@ namespace Kurs.Platform.Migrations principalColumn: "Id"); }); - migrationBuilder.CreateTable( - name: "PActivityFile", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - FileSize = table.Column(type: "bigint", nullable: false), - FileType = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), - FilePath = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: false), - ActivityItemId = table.Column(type: "uniqueidentifier", nullable: false), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PActivityFile", x => x.Id); - table.ForeignKey( - name: "FK_PActivityFile_PActivityItem_ActivityItemId", - column: x => x.ActivityItemId, - principalTable: "PActivityItem", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateTable( name: "PBackgroundWorker_MailQueueEvents", columns: table => new @@ -3919,76 +3856,6 @@ namespace Kurs.Platform.Migrations table: "OpenIddictTokens", column: "ReferenceId"); - migrationBuilder.CreateIndex( - name: "IX_PActivity_CreationTime", - table: "PActivity", - column: "CreationTime"); - - migrationBuilder.CreateIndex( - name: "IX_PActivity_CreatorId", - table: "PActivity", - column: "CreatorId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivity_Type", - table: "PActivity", - column: "Type"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityFile_ActivityItemId", - table: "PActivityFile", - column: "ActivityItemId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityFile_CreatorId", - table: "PActivityFile", - column: "CreatorId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityFile_EntityId", - table: "PActivityFile", - column: "EntityId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityFile_EntityName", - table: "PActivityFile", - column: "EntityName"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityFile_FileName", - table: "PActivityFile", - column: "FileName"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityItem_ActivityId", - table: "PActivityItem", - column: "ActivityId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityItem_CreatorId", - table: "PActivityItem", - column: "CreatorId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityItem_EntityId", - table: "PActivityItem", - column: "EntityId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityItem_EntityName", - table: "PActivityItem", - column: "EntityName"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityItem_RecipientUserId", - table: "PActivityItem", - column: "RecipientUserId"); - - migrationBuilder.CreateIndex( - name: "IX_PActivityItem_Type", - table: "PActivityItem", - column: "Type"); - migrationBuilder.CreateIndex( name: "IX_PApiEndpoint_EntityId", table: "PApiEndpoint", @@ -4378,7 +4245,7 @@ namespace Kurs.Platform.Migrations name: "OpenIddictTokens"); migrationBuilder.DropTable( - name: "PActivityFile"); + name: "PActivity"); migrationBuilder.DropTable( name: "PAiBot"); @@ -4533,9 +4400,6 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "OpenIddictAuthorizations"); - migrationBuilder.DropTable( - name: "PActivityItem"); - migrationBuilder.DropTable( name: "PBackgroundWorker_MailQueue"); @@ -4581,9 +4445,6 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "OpenIddictApplications"); - migrationBuilder.DropTable( - name: "PActivity"); - migrationBuilder.DropTable( name: "PBackgroundWorker_MailQueueTableFormat"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 60d11600..15d9cc65 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -648,6 +648,15 @@ namespace Kurs.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); + b.Property("EntityId") + .HasColumnType("nvarchar(max)"); + + b.Property("EntityName") + .HasColumnType("nvarchar(max)"); + + b.Property("FilesJson") + .HasColumnType("nvarchar(max)"); + b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -662,10 +671,6 @@ namespace Kurs.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("RecipientUserName") - .HasMaxLength(100) - .HasColumnType("nvarchar(100)"); - b.Property("Subject") .IsRequired() .HasMaxLength(256) @@ -675,194 +680,15 @@ namespace Kurs.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); - b.Property("Type") - .HasColumnType("int"); + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(max)"); b.HasKey("Id"); - b.HasIndex("CreationTime"); - - b.HasIndex("CreatorId"); - - b.HasIndex("Type"); - b.ToTable("PActivity", (string)null); }); - modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ActivityItemId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("EntityName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("FileName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("FilePath") - .IsRequired() - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("FileSize") - .HasColumnType("bigint"); - - b.Property("FileType") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("ActivityItemId"); - - b.HasIndex("CreatorId"); - - b.HasIndex("EntityId"); - - b.HasIndex("EntityName"); - - b.HasIndex("FileName"); - - b.ToTable("PActivityFile", (string)null); - }); - - modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ActivityId") - .HasColumnType("uniqueidentifier"); - - b.Property("Content") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("nvarchar(2000)"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("EntityName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("RecipientUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("RecipientUserName") - .HasMaxLength(100) - .HasColumnType("nvarchar(100)"); - - b.Property("Subject") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ActivityId"); - - b.HasIndex("CreatorId"); - - b.HasIndex("EntityId"); - - b.HasIndex("EntityName"); - - b.HasIndex("RecipientUserId"); - - b.HasIndex("Type"); - - b.ToTable("PActivityItem", (string)null); - }); - modelBuilder.Entity("Kurs.Platform.Entities.AiBot", b => { b.Property("Id") @@ -8857,28 +8683,6 @@ namespace Kurs.Platform.Migrations b.Navigation("NotificationRule"); }); - modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => - { - b.HasOne("Kurs.Platform.Entities.ActivityItem", "ActivityItem") - .WithMany("AttachedFiles") - .HasForeignKey("ActivityItemId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ActivityItem"); - }); - - modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => - { - b.HasOne("Kurs.Platform.Entities.Activity", "Activity") - .WithMany("ActivityItems") - .HasForeignKey("ActivityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Activity"); - }); - modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.HasOne("Kurs.Platform.Entities.CustomEntity", "Entity") @@ -9377,16 +9181,6 @@ namespace Kurs.Platform.Migrations b.Navigation("Notifications"); }); - modelBuilder.Entity("Kurs.Platform.Entities.Activity", b => - { - b.Navigation("ActivityItems"); - }); - - modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => - { - b.Navigation("AttachedFiles"); - }); - modelBuilder.Entity("Kurs.Platform.Entities.BlogCategory", b => { b.Navigation("Posts"); diff --git a/api/src/Kurs.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs b/api/src/Kurs.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs index a2f7812a..d50167b8 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs +++ b/api/src/Kurs.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs @@ -340,6 +340,14 @@ public class PlatformHttpApiHostModule : AbpModule fileSystem.BasePath = configuration["App:ImportPath"]; }); }); + + options.Containers.Configure(container => + { + container.UseFileSystem(fileSystem => + { + fileSystem.BasePath = configuration["App:ActivityPath"]; + }); + }); }); } diff --git a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json index a9bde9ff..cd0d7d15 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json +++ b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json @@ -7,6 +7,7 @@ "AttachmentsPath": "/etc/api/mail-queue/attachments", "CdnPath": "/etc/api/cdn", "ImportPath": "/etc/api/import", + "ActivityPath": "/etc/api/activity", "BaseDomain": "sozsoft.com" }, "ConnectionStrings": { diff --git a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json index abb110b8..6a72c01f 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json +++ b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json @@ -7,6 +7,7 @@ "AttachmentsPath": "/etc/api/mail-queue/attachments", "CdnPath": "/etc/api/cdn", "ImportPath": "/etc/api/import", + "ActivityPath": "/etc/api/activity", "BaseDomain": "sozsoft.com" }, "ConnectionStrings": { diff --git a/api/src/Kurs.Platform.HttpApi.Host/appsettings.json b/api/src/Kurs.Platform.HttpApi.Host/appsettings.json index d9c43bff..c48e2b6d 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/appsettings.json +++ b/api/src/Kurs.Platform.HttpApi.Host/appsettings.json @@ -7,6 +7,7 @@ "AttachmentsPath": "C:\\Private\\Projects\\sozsoft\\configs\\mail-queue\\attachments", "CdnPath": "C:\\Private\\Projects\\sozsoft\\configs\\docker\\data\\cdn", "ImportPath": "C:\\Private\\Projects\\sozsoft\\configs\\docker\\data\\import", + "ActivityPath": "C:\\Private\\Projects\\sozsoft\\configs\\docker\\data\\activity", "Version": "1.0.1" }, "ConnectionStrings": { diff --git a/ui/src/proxy/activity/models.ts b/ui/src/proxy/activity/models.ts index f4f33a3e..41987ed1 100644 --- a/ui/src/proxy/activity/models.ts +++ b/ui/src/proxy/activity/models.ts @@ -1,32 +1,11 @@ -import { FullAuditedEntityDto } from "../abp"; +import { AuditedEntityDto } from "../abp"; -export interface ActivityDto extends FullAuditedEntityDto { +export interface ActivityDto extends AuditedEntityDto { tenantId?: string; - type?: string; - subject?: string; - content?: string; - recipientUserName?: string; + entityName: string; + entityId: string; + type: string; + subject: string; + content: string; + files: File[]; } - -export interface ActivityFileDto extends FullAuditedEntityDto { - tenantId?: string; - entityName?: string; - entityId?: string; - fileName?: string; - fileSize?: number; - fileType?: string; - filePath?: string; - activityItemId: string; -} - -export interface ActivityItemDto extends FullAuditedEntityDto { - tenantId?: string; - type?: string; - entityName?: string; - entityId?: string; - recipientUserId?: string; - recipientUserName?: string; - subject?: string; - content?: string; - activityId: string; -} \ No newline at end of file diff --git a/ui/src/proxy/formActivity/models.ts b/ui/src/proxy/formActivity/models.ts deleted file mode 100644 index ecf85806..00000000 --- a/ui/src/proxy/formActivity/models.ts +++ /dev/null @@ -1,36 +0,0 @@ -export interface Activity { - id: string - type: 'note' | 'message' - subject: string - content: string - recipientUserName?: string - creatorId: string - creationTime: Date - data?: ActivityItem -} - -export interface ActivityItem { - id?: string - type: 'note' | 'message' - entityName: string - entityId: string - recipientUserId?: string - recipientUserName?: string - subject: string - content: string - creatorId?: string - creationTime?: Date - attachedFiles?: ActivityFile[] -} - -export interface ActivityFile { - id?: string - entityName: string - entityId: string - fileName: string - fileSize: number - fileType: string - filePath: string - creatorId?: string - creationTime?: Date -} \ No newline at end of file diff --git a/ui/src/services/activity.service.ts b/ui/src/services/activity.service.ts index 996b08e1..8559cfa1 100644 --- a/ui/src/services/activity.service.ts +++ b/ui/src/services/activity.service.ts @@ -1,9 +1,11 @@ -import { ActivityDto, ActivityItemDto, ActivityFileDto } from '@/proxy/activity/models' +import { PagedResultDto } from '@/proxy' +import { ActivityDto } from '@/proxy/activity/models' import apiService from '@/services/api.service' +import { AxiosError } from 'axios' class ActivityService { - async getList(params?: any): Promise { - const response = await apiService.fetchData({ + async getList(params?: any): Promise> { + const response = await apiService.fetchData>({ url: '/api/app/activity', method: 'GET', params, @@ -19,13 +21,45 @@ class ActivityService { return response.data } - async create(data: ActivityDto): Promise { - const response = await apiService.fetchData({ - url: '/api/app/activity', - method: 'POST', - data: data as any, - }) - return response.data + async create(data: ActivityDto): Promise { + try { + const formData = new FormData() + formData.append('entityName', data.entityName) + formData.append('entityId', data.entityId) + formData.append('type', data.type) + formData.append('subject', data.subject) + formData.append('content', data.content) + + // Ensure files are actual File objects, not blob URLs + if (data.files && data.files.length > 0) { + for (const file of data.files) { + // Ensure file is a File object (in case it's a Blob URL, you need to get the actual file) + if (file instanceof File) { + formData.append('files', file) + } + } + } + + console.log('FormData:', formData) + + // Make the POST request + const response = await apiService.fetchData({ + url: '/api/app/activity', + method: 'POST', + data: formData, + // Don't manually set the Content-Type header; let the browser handle it + }) + + return response.data + } catch (error) { + if (error instanceof AxiosError) { + console.error('Error creating activity:', error.response?.data) + return error.response?.data + } else { + console.error('Unexpected error:', error) + throw error + } + } } async update(id: string, data: ActivityDto): Promise { @@ -43,92 +77,6 @@ class ActivityService { method: 'DELETE', }) } - - // 🔹 ActivityItem kayıtları --------------------------------------------------- - async getItems(activityId?: string): Promise { - const response = await apiService.fetchData({ - url: '/api/app/activity-item', - method: 'GET', - params: { activityId }, - }) - return response.data - } - - async getItem(id: string): Promise { - const response = await apiService.fetchData({ - url: `/api/app/activity-item/${id}`, - method: 'GET', - }) - return response.data - } - - async createItem(data: ActivityItemDto): Promise { - const response = await apiService.fetchData({ - url: '/api/app/activity-item', - method: 'POST', - data: data as any, - }) - return response.data - } - - async updateItem(id: string, data: ActivityItemDto): Promise { - const response = await apiService.fetchData({ - url: `/api/app/activity-item/${id}`, - method: 'PUT', - data: data as any, - }) - return response.data - } - - async deleteItem(id: string): Promise { - await apiService.fetchData({ - url: `/api/app/activity-item/${id}`, - method: 'DELETE', - }) - } - - // 🔹 ActivityFile kayıtları --------------------------------------------------- - async getFiles(activityItemId?: string): Promise { - const response = await apiService.fetchData({ - url: '/api/app/activity-file', - method: 'GET', - params: { activityItemId }, - }) - return response.data - } - - async getFile(id: string): Promise { - const response = await apiService.fetchData({ - url: `/api/app/activity-file/${id}`, - method: 'GET', - }) - return response.data - } - - async uploadFile(data: ActivityFileDto): Promise { - const response = await apiService.fetchData({ - url: '/api/app/activity-file', - method: 'POST', - data: data as any, - }) - return response.data - } - - async updateFile(id: string, data: ActivityFileDto): Promise { - const response = await apiService.fetchData({ - url: `/api/app/activity-file/${id}`, - method: 'PUT', - data: data as any, - }) - return response.data - } - - async deleteFile(id: string): Promise { - await apiService.fetchData({ - url: `/api/app/activity-file/${id}`, - method: 'DELETE', - }) - } } export const activityService = new ActivityService() diff --git a/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx b/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx index e381a488..f17735c2 100644 --- a/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx @@ -17,6 +17,7 @@ const schema = object().shape({ u: string(), d: string(), e: string(), + i: string(), }) function FormTabPermissions(props: FormEditProps) { @@ -183,6 +184,31 @@ function FormTabPermissions(props: FormEditProps) { )} + + + {({ field, form }: FieldProps) => ( + t.value === values.type)} + onChange={(selected: any) => setFieldValue('type', selected.value)} + options={types} + isSearchable={false} + isClearable + /> + )} + + + + {/* Konu */} + + + + + {/* Not İçeriği */} + + ( +