diff --git a/App/Migrations/20231111121538_MigrateToTagFromSha.Designer.cs b/App/Migrations/20231111121538_MigrateToTagFromSha.Designer.cs new file mode 100644 index 0000000..2d78fb5 --- /dev/null +++ b/App/Migrations/20231111121538_MigrateToTagFromSha.Designer.cs @@ -0,0 +1,716 @@ +// +using System; +using App.StartUp.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using NpgsqlTypes; + +#nullable disable + +namespace App.Migrations +{ + [DbContext(typeof(MainDbContext))] + [Migration("20231111121538_MigrateToTagFromSha")] + partial class MigrateToTagFromSha + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0-preview.4.23259.3") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("Downloads") + .HasColumnType("bigint"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Project") + .IsRequired() + .HasColumnType("text"); + + b.Property("Readme") + .IsRequired() + .HasColumnType("text"); + + b.Property("SearchVector") + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("tsvector") + .HasAnnotation("Npgsql:TsVectorConfig", "english") + .HasAnnotation("Npgsql:TsVectorProperties", new[] { "Name", "Description" }); + + b.Property("Source") + .IsRequired() + .HasColumnType("text"); + + b.Property("Tags") + .IsRequired() + .HasColumnType("text[]"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("SearchVector"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "GIN"); + + b.HasIndex("UserId", "Name") + .IsUnique(); + + b.ToTable("Plugins"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginLikeData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("PluginId") + .HasColumnType("uuid"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("PluginId"); + + b.HasIndex("UserId", "PluginId") + .IsUnique(); + + b.ToTable("PluginLikes"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginVersionData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("DockerReference") + .IsRequired() + .HasColumnType("text"); + + b.Property("DockerTag") + .IsRequired() + .HasColumnType("text"); + + b.Property("PluginId") + .HasColumnType("uuid"); + + b.Property("Version") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("PluginId"); + + b.HasIndex("Id", "Version") + .IsUnique(); + + b.ToTable("PluginVersions"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("Downloads") + .HasColumnType("bigint"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Project") + .IsRequired() + .HasColumnType("text"); + + b.Property("Readme") + .IsRequired() + .HasColumnType("text"); + + b.Property("SearchVector") + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("tsvector") + .HasAnnotation("Npgsql:TsVectorConfig", "english") + .HasAnnotation("Npgsql:TsVectorProperties", new[] { "Name", "Description" }); + + b.Property("Source") + .IsRequired() + .HasColumnType("text"); + + b.Property("Tags") + .IsRequired() + .HasColumnType("text[]"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("SearchVector"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "GIN"); + + b.HasIndex("UserId", "Name") + .IsUnique(); + + b.ToTable("Processors"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorLikeData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ProcessorId") + .HasColumnType("uuid"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ProcessorId"); + + b.HasIndex("UserId", "ProcessorId") + .IsUnique(); + + b.ToTable("ProcessorLikes"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorVersionData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("DockerReference") + .IsRequired() + .HasColumnType("text"); + + b.Property("DockerTag") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProcessorId") + .HasColumnType("uuid"); + + b.Property("Version") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("ProcessorId"); + + b.HasIndex("Id", "Version") + .IsUnique(); + + b.ToTable("ProcessorVersions"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("Downloads") + .HasColumnType("bigint"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Project") + .IsRequired() + .HasColumnType("text"); + + b.Property("Readme") + .IsRequired() + .HasColumnType("text"); + + b.Property("SearchVector") + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("tsvector") + .HasAnnotation("Npgsql:TsVectorConfig", "english") + .HasAnnotation("Npgsql:TsVectorProperties", new[] { "Name", "Description" }); + + b.Property("Source") + .IsRequired() + .HasColumnType("text"); + + b.Property("Tags") + .IsRequired() + .HasColumnType("text[]"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("SearchVector"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "GIN"); + + b.HasIndex("UserId", "Name") + .IsUnique(); + + b.ToTable("Templates"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateLikeData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("TemplateId") + .HasColumnType("uuid"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("TemplateId"); + + b.HasIndex("UserId", "TemplateId") + .IsUnique(); + + b.ToTable("TemplateLikes"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplatePluginVersionData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("PluginId") + .HasColumnType("uuid"); + + b.Property("TemplateId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("PluginId"); + + b.HasIndex("TemplateId"); + + b.ToTable("TemplatePluginVersions"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateProcessorVersionData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ProcessorId") + .HasColumnType("uuid"); + + b.Property("TemplateId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ProcessorId"); + + b.HasIndex("TemplateId"); + + b.ToTable("TemplateProcessorVersions"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateVersionData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BlobDockerReference") + .IsRequired() + .HasColumnType("text"); + + b.Property("BlobDockerTag") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("TemplateDockerReference") + .IsRequired() + .HasColumnType("text"); + + b.Property("TemplateDockerTag") + .IsRequired() + .HasColumnType("text"); + + b.Property("TemplateId") + .HasColumnType("uuid"); + + b.Property("Version") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("TemplateId"); + + b.HasIndex("Id", "Version") + .IsUnique(); + + b.ToTable("TemplateVersions"); + }); + + modelBuilder.Entity("App.Modules.Users.Data.TokenData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApiToken") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Revoked") + .HasColumnType("boolean"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ApiToken") + .IsUnique(); + + b.HasIndex("UserId"); + + b.ToTable("Tokens"); + }); + + modelBuilder.Entity("App.Modules.Users.Data.UserData", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Username") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Username") + .IsUnique(); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginData", b => + { + b.HasOne("App.Modules.Users.Data.UserData", "User") + .WithMany("Plugins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginLikeData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.PluginData", "Plugin") + .WithMany("Likes") + .HasForeignKey("PluginId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("App.Modules.Users.Data.UserData", "User") + .WithMany("PluginLikes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Plugin"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginVersionData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.PluginData", "Plugin") + .WithMany("Versions") + .HasForeignKey("PluginId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Plugin"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorData", b => + { + b.HasOne("App.Modules.Users.Data.UserData", "User") + .WithMany("Processors") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorLikeData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.ProcessorData", "Processor") + .WithMany("Likes") + .HasForeignKey("ProcessorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("App.Modules.Users.Data.UserData", "User") + .WithMany("ProcessorLikes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Processor"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorVersionData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.ProcessorData", "Processor") + .WithMany("Versions") + .HasForeignKey("ProcessorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Processor"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateData", b => + { + b.HasOne("App.Modules.Users.Data.UserData", "User") + .WithMany("Templates") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateLikeData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.TemplateData", "Template") + .WithMany("Likes") + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("App.Modules.Users.Data.UserData", "User") + .WithMany("TemplateLikes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Template"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplatePluginVersionData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.PluginVersionData", "Plugin") + .WithMany("Templates") + .HasForeignKey("PluginId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("App.Modules.Cyan.Data.Models.TemplateVersionData", "Template") + .WithMany("Plugins") + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Plugin"); + + b.Navigation("Template"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateProcessorVersionData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.ProcessorVersionData", "Processor") + .WithMany("Templates") + .HasForeignKey("ProcessorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("App.Modules.Cyan.Data.Models.TemplateVersionData", "Template") + .WithMany("Processors") + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Processor"); + + b.Navigation("Template"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateVersionData", b => + { + b.HasOne("App.Modules.Cyan.Data.Models.TemplateData", "Template") + .WithMany("Versions") + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Template"); + }); + + modelBuilder.Entity("App.Modules.Users.Data.TokenData", b => + { + b.HasOne("App.Modules.Users.Data.UserData", "User") + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginData", b => + { + b.Navigation("Likes"); + + b.Navigation("Versions"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.PluginVersionData", b => + { + b.Navigation("Templates"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorData", b => + { + b.Navigation("Likes"); + + b.Navigation("Versions"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.ProcessorVersionData", b => + { + b.Navigation("Templates"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateData", b => + { + b.Navigation("Likes"); + + b.Navigation("Versions"); + }); + + modelBuilder.Entity("App.Modules.Cyan.Data.Models.TemplateVersionData", b => + { + b.Navigation("Plugins"); + + b.Navigation("Processors"); + }); + + modelBuilder.Entity("App.Modules.Users.Data.UserData", b => + { + b.Navigation("PluginLikes"); + + b.Navigation("Plugins"); + + b.Navigation("ProcessorLikes"); + + b.Navigation("Processors"); + + b.Navigation("TemplateLikes"); + + b.Navigation("Templates"); + + b.Navigation("Tokens"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/App/Migrations/20231111121538_MigrateToTagFromSha.cs b/App/Migrations/20231111121538_MigrateToTagFromSha.cs new file mode 100644 index 0000000..5b8d459 --- /dev/null +++ b/App/Migrations/20231111121538_MigrateToTagFromSha.cs @@ -0,0 +1,58 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace App.Migrations +{ + /// + public partial class MigrateToTagFromSha : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "TemplateDockerSha", + table: "TemplateVersions", + newName: "TemplateDockerTag"); + + migrationBuilder.RenameColumn( + name: "BlobDockerSha", + table: "TemplateVersions", + newName: "BlobDockerTag"); + + migrationBuilder.RenameColumn( + name: "DockerSha", + table: "ProcessorVersions", + newName: "DockerTag"); + + migrationBuilder.RenameColumn( + name: "DockerSha", + table: "PluginVersions", + newName: "DockerTag"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "TemplateDockerTag", + table: "TemplateVersions", + newName: "TemplateDockerSha"); + + migrationBuilder.RenameColumn( + name: "BlobDockerTag", + table: "TemplateVersions", + newName: "BlobDockerSha"); + + migrationBuilder.RenameColumn( + name: "DockerTag", + table: "ProcessorVersions", + newName: "DockerSha"); + + migrationBuilder.RenameColumn( + name: "DockerTag", + table: "PluginVersions", + newName: "DockerSha"); + } + } +} diff --git a/App/Migrations/MainDbContextModelSnapshot.cs b/App/Migrations/MainDbContextModelSnapshot.cs index 075b174..b8ae1c2 100644 --- a/App/Migrations/MainDbContextModelSnapshot.cs +++ b/App/Migrations/MainDbContextModelSnapshot.cs @@ -123,7 +123,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("text"); - b.Property("DockerSha") + b.Property("DockerTag") .IsRequired() .HasColumnType("text"); @@ -243,7 +243,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("text"); - b.Property("DockerSha") + b.Property("DockerTag") .IsRequired() .HasColumnType("text"); @@ -398,7 +398,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("text"); - b.Property("BlobDockerSha") + b.Property("BlobDockerTag") .IsRequired() .HasColumnType("text"); @@ -413,7 +413,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("text"); - b.Property("TemplateDockerSha") + b.Property("TemplateDockerTag") .IsRequired() .HasColumnType("text"); diff --git a/App/Modules/Cyan/API/V1/Mappers/PluginMapper.cs b/App/Modules/Cyan/API/V1/Mappers/PluginMapper.cs index ac3af1a..952e0f3 100644 --- a/App/Modules/Cyan/API/V1/Mappers/PluginMapper.cs +++ b/App/Modules/Cyan/API/V1/Mappers/PluginMapper.cs @@ -20,7 +20,7 @@ public static (PluginRecord, PluginMetadata, PluginVersionRecord, PluginVersionP Readme = req.Readme }, new PluginVersionRecord { Description = req.Description, }, - new PluginVersionProperty { DockerReference = req.DockerReference, DockerSha = req.DockerSha, } + new PluginVersionProperty { DockerReference = req.DockerReference, DockerTag = req.DockerTag, } ); public static (PluginRecord, PluginMetadata) ToDomain(this CreatePluginReq req) => @@ -70,7 +70,7 @@ public static PluginResp ToResp(this Plugin plugin) => public static class PluginVersionMapper { public static (PluginVersionProperty, PluginVersionRecord) ToDomain(this CreatePluginVersionReq req) => - (new PluginVersionProperty { DockerReference = req.DockerReference, DockerSha = req.DockerSha }, + (new PluginVersionProperty { DockerReference = req.DockerReference, DockerTag = req.DockerTag }, new PluginVersionRecord { Description = req.Description }); public static PluginVersionRecord ToDomain(this UpdatePluginVersionReq req) => @@ -82,7 +82,7 @@ public static PluginVersionSearch ToDomain(this SearchPluginVersionQuery query) public static PluginVersionPrincipalResp ToResp(this PluginVersionPrincipal principal) => new(principal.Id, principal.Version, principal.CreatedAt, principal.Record.Description, principal.Property.DockerReference, - principal.Property.DockerSha); + principal.Property.DockerTag); public static PluginVersionResp ToResp(this PluginVersion version) => new(version.Principal.ToResp(), version.PluginPrincipal.ToResp()); diff --git a/App/Modules/Cyan/API/V1/Mappers/ProcessorMapper.cs b/App/Modules/Cyan/API/V1/Mappers/ProcessorMapper.cs index 3399f3b..1139232 100644 --- a/App/Modules/Cyan/API/V1/Mappers/ProcessorMapper.cs +++ b/App/Modules/Cyan/API/V1/Mappers/ProcessorMapper.cs @@ -20,7 +20,7 @@ public static (ProcessorRecord, ProcessorMetadata, ProcessorVersionRecord, Proce Readme = req.Readme }, new ProcessorVersionRecord { Description = req.Description, }, - new ProcessorVersionProperty { DockerReference = req.DockerReference, DockerSha = req.DockerSha, } + new ProcessorVersionProperty { DockerReference = req.DockerReference, DockerTag = req.DockerTag, } ); public static (ProcessorRecord, ProcessorMetadata) ToDomain(this CreateProcessorReq req) => @@ -70,23 +70,19 @@ public static ProcessorResp ToResp(this Processor processor) => public static class ProcessorVersionMapper { public static (ProcessorVersionProperty, ProcessorVersionRecord) ToDomain(this CreateProcessorVersionReq req) => - (new ProcessorVersionProperty { DockerReference = req.DockerReference, DockerSha = req.DockerSha }, + (new ProcessorVersionProperty { DockerReference = req.DockerReference, DockerTag = req.DockerTag }, new ProcessorVersionRecord { Description = req.Description }); - public static ProcessorVersionRecord ToDomain(this UpdateProcessorVersionReq req) => new() { Description = req.Description }; + public static ProcessorVersionRecord ToDomain(this UpdateProcessorVersionReq req) => + new() { Description = req.Description }; public static ProcessorVersionSearch ToDomain(this SearchProcessorVersionQuery query) => - new() - { - Search = query.Search, - Limit = query.Limit ?? 20, - Skip = query.Skip ?? 0, - }; + new() { Search = query.Search, Limit = query.Limit ?? 20, Skip = query.Skip ?? 0, }; public static ProcessorVersionPrincipalResp ToResp(this ProcessorVersionPrincipal principal) => new(principal.Id, principal.Version, principal.CreatedAt, principal.Record.Description, principal.Property.DockerReference, - principal.Property.DockerSha); + principal.Property.DockerTag); public static ProcessorVersionResp ToResp(this ProcessorVersion version) => new(version.Principal.ToResp(), version.ProcessorPrincipal.ToResp()); diff --git a/App/Modules/Cyan/API/V1/Mappers/TemplateMapper.cs b/App/Modules/Cyan/API/V1/Mappers/TemplateMapper.cs index e2546cc..01f427f 100644 --- a/App/Modules/Cyan/API/V1/Mappers/TemplateMapper.cs +++ b/App/Modules/Cyan/API/V1/Mappers/TemplateMapper.cs @@ -23,9 +23,9 @@ public static (TemplateRecord, TemplateMetadata, TemplateVersionRecord, Template new TemplateVersionProperty { BlobDockerReference = req.BlobDockerReference, - BlobDockerSha = req.BlobDockerSha, + BlobDockerTag = req.BlobDockerTag, TemplateDockerReference = req.TemplateDockerReference, - TemplateDockerSha = req.TemplateDockerSha, + TemplateDockerTag = req.TemplateDockerTag, } ); @@ -82,9 +82,9 @@ public static TemplateVersionProperty ToProperty(this CreateTemplateVersionReq r new() { BlobDockerReference = req.BlobDockerReference, - BlobDockerSha = req.BlobDockerSha, + BlobDockerTag = req.BlobDockerTag, TemplateDockerReference = req.TemplateDockerReference, - TemplateDockerSha = req.TemplateDockerSha + TemplateDockerTag = req.TemplateDockerTag }; public static TemplateVersionRecord ToDomain(this UpdateTemplateVersionReq req) => @@ -93,7 +93,8 @@ public static TemplateVersionRecord ToDomain(this UpdateTemplateVersionReq req) public static TemplateVersionSearch ToDomain(this SearchTemplateVersionQuery query) => new() { Search = query.Search, Limit = query.Limit ?? 20, Skip = query.Skip ?? 0, }; - public static PluginVersionRef ToDomain(this PluginReferenceReq req) => new(req.Username, req.Name, req.Version == 0 ? null : req.Version); + public static PluginVersionRef ToDomain(this PluginReferenceReq req) => + new(req.Username, req.Name, req.Version == 0 ? null : req.Version); public static ProcessorVersionRef ToDomain(this ProcessorReferenceReq req) => new(req.Username, req.Name, req.Version == 0 ? null : req.Version); @@ -101,8 +102,8 @@ public static ProcessorVersionRef ToDomain(this ProcessorReferenceReq req) => public static TemplateVersionPrincipalResp ToResp(this TemplateVersionPrincipal principal) => new(principal.Id, principal.Version, principal.CreatedAt, principal.Record.Description, principal.Property.BlobDockerReference, - principal.Property.BlobDockerSha, principal.Property.TemplateDockerReference, - principal.Property.TemplateDockerSha); + principal.Property.BlobDockerTag, principal.Property.TemplateDockerReference, + principal.Property.TemplateDockerTag); public static TemplateVersionResp ToResp(this TemplateVersion version) => new( diff --git a/App/Modules/Cyan/API/V1/Models/PluginVersionModel.cs b/App/Modules/Cyan/API/V1/Models/PluginVersionModel.cs index 13cac24..50743cc 100644 --- a/App/Modules/Cyan/API/V1/Models/PluginVersionModel.cs +++ b/App/Modules/Cyan/API/V1/Models/PluginVersionModel.cs @@ -3,7 +3,7 @@ namespace App.Modules.Cyan.API.V1.Models; public record SearchPluginVersionQuery(string? Search, int? Limit, int? Skip); public record CreatePluginVersionReq( - string Description, string DockerReference, string DockerSha); + string Description, string DockerReference, string DockerTag); public record UpdatePluginVersionReq(string Description); @@ -18,12 +18,12 @@ public record PushPluginReq( string VersionDescription, string DockerReference, - string DockerSha + string DockerTag ); public record PluginVersionPrincipalResp( Guid Id, ulong Version, DateTime CreatedAt, - string Description, string DockerReference, string DockerSha); + string Description, string DockerReference, string DockerTag); public record PluginVersionResp( PluginVersionPrincipalResp Principal, diff --git a/App/Modules/Cyan/API/V1/Models/ProcessorVersionModel.cs b/App/Modules/Cyan/API/V1/Models/ProcessorVersionModel.cs index 683b256..cb74b71 100644 --- a/App/Modules/Cyan/API/V1/Models/ProcessorVersionModel.cs +++ b/App/Modules/Cyan/API/V1/Models/ProcessorVersionModel.cs @@ -3,7 +3,7 @@ namespace App.Modules.Cyan.API.V1.Models; public record SearchProcessorVersionQuery(string? Search, int? Limit, int? Skip); public record CreateProcessorVersionReq( - string Description, string DockerReference, string DockerSha); + string Description, string DockerReference, string DockerTag); public record UpdateProcessorVersionReq(string Description); @@ -18,12 +18,12 @@ public record PushProcessorReq( string VersionDescription, string DockerReference, - string DockerSha + string DockerTag ); public record ProcessorVersionPrincipalResp( Guid Id, ulong Version, DateTime CreatedAt, - string Description, string DockerReference, string DockerSha); + string Description, string DockerReference, string DockerTag); public record ProcessorVersionResp( ProcessorVersionPrincipalResp Principal, diff --git a/App/Modules/Cyan/API/V1/Models/TemplateVersionModel.cs b/App/Modules/Cyan/API/V1/Models/TemplateVersionModel.cs index 5d7882c..64d01de 100644 --- a/App/Modules/Cyan/API/V1/Models/TemplateVersionModel.cs +++ b/App/Modules/Cyan/API/V1/Models/TemplateVersionModel.cs @@ -5,9 +5,9 @@ public record SearchTemplateVersionQuery(string? Search, int? Limit, int? Skip); public record CreateTemplateVersionReq( string Description, string BlobDockerReference, - string BlobDockerSha, + string BlobDockerTag, string TemplateDockerReference, - string TemplateDockerSha, + string TemplateDockerTag, PluginReferenceReq[] Plugins, ProcessorReferenceReq[] Processors ); @@ -20,12 +20,11 @@ public record PushTemplateReq( string[] Tags, string Description, string Readme, - string VersionDescription, string BlobDockerReference, - string BlobDockerSha, + string BlobDockerTag, string TemplateDockerReference, - string TemplateDockerSha, + string TemplateDockerTag, PluginReferenceReq[] Plugins, ProcessorReferenceReq[] Processors ); @@ -39,8 +38,8 @@ public record UpdateTemplateVersionReq(string Description); public record TemplateVersionPrincipalResp( Guid Id, ulong Version, DateTime CreatedAt, string Description, - string BlobDockerReference, string BlobDockerSha, - string TemplateDockerReference, string TemplateDockerSha + string BlobDockerReference, string BlobDockerTag, + string TemplateDockerReference, string TemplateDockerTag ); public record TemplateVersionResp( diff --git a/App/Modules/Cyan/API/V1/Validators/PluginVersionValidator.cs b/App/Modules/Cyan/API/V1/Validators/PluginVersionValidator.cs index 077d92e..cfae11b 100644 --- a/App/Modules/Cyan/API/V1/Validators/PluginVersionValidator.cs +++ b/App/Modules/Cyan/API/V1/Validators/PluginVersionValidator.cs @@ -21,8 +21,8 @@ public CreatePluginVersionReqValidator() .DescriptionValid(); this.RuleFor(x => x.DockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.DockerSha) - .ShaValid(); + this.RuleFor(x => x.DockerTag) + .TagValid(); } } @@ -61,7 +61,7 @@ public PushPluginReqValidator() .DescriptionValid(); this.RuleFor(x => x.DockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.DockerSha) - .ShaValid(); + this.RuleFor(x => x.DockerTag) + .TagValid(); } } diff --git a/App/Modules/Cyan/API/V1/Validators/ProcessorVersionValidator.cs b/App/Modules/Cyan/API/V1/Validators/ProcessorVersionValidator.cs index 8a4bd6c..bf86e4e 100644 --- a/App/Modules/Cyan/API/V1/Validators/ProcessorVersionValidator.cs +++ b/App/Modules/Cyan/API/V1/Validators/ProcessorVersionValidator.cs @@ -21,8 +21,8 @@ public CreateProcessorVersionReqValidator() .DescriptionValid(); this.RuleFor(x => x.DockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.DockerSha) - .ShaValid(); + this.RuleFor(x => x.DockerTag) + .TagValid(); } } @@ -61,7 +61,7 @@ public PushProcessorReqValidator() .DescriptionValid(); this.RuleFor(x => x.DockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.DockerSha) - .ShaValid(); + this.RuleFor(x => x.DockerTag) + .TagValid(); } } diff --git a/App/Modules/Cyan/API/V1/Validators/TemplateVersionValidator.cs b/App/Modules/Cyan/API/V1/Validators/TemplateVersionValidator.cs index c9650a3..07bc6e7 100644 --- a/App/Modules/Cyan/API/V1/Validators/TemplateVersionValidator.cs +++ b/App/Modules/Cyan/API/V1/Validators/TemplateVersionValidator.cs @@ -21,12 +21,12 @@ public CreateTemplateVersionReqValidator() .DescriptionValid(); this.RuleFor(x => x.BlobDockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.BlobDockerSha) - .ShaValid(); + this.RuleFor(x => x.BlobDockerTag) + .TagValid(); this.RuleFor(x => x.TemplateDockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.TemplateDockerSha) - .ShaValid(); + this.RuleFor(x => x.TemplateDockerTag) + .TagValid(); } } @@ -65,11 +65,11 @@ public PushTemplateReqValidator() .DescriptionValid(); this.RuleFor(x => x.BlobDockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.BlobDockerSha) - .ShaValid(); + this.RuleFor(x => x.BlobDockerTag) + .TagValid(); this.RuleFor(x => x.TemplateDockerReference) .DockerReferenceValid(); - this.RuleFor(x => x.TemplateDockerSha) - .ShaValid(); + this.RuleFor(x => x.TemplateDockerTag) + .TagValid(); } } diff --git a/App/Modules/Cyan/Data/Mappers/PluginMapper.cs b/App/Modules/Cyan/Data/Mappers/PluginMapper.cs index c13c28c..671d5b9 100644 --- a/App/Modules/Cyan/Data/Mappers/PluginMapper.cs +++ b/App/Modules/Cyan/Data/Mappers/PluginMapper.cs @@ -53,10 +53,10 @@ public static PluginVersionData HydrateData(this PluginVersionData data, PluginV data with { Description = record.Description, }; public static PluginVersionData HydrateData(this PluginVersionData data, PluginVersionProperty record) => - data with { DockerReference = record.DockerReference, DockerSha = record.DockerSha, }; + data with { DockerReference = record.DockerReference, DockerTag = record.DockerTag, }; public static PluginVersionProperty ToProperty(this PluginVersionData data) => - new() { DockerReference = data.DockerReference, DockerSha = data.DockerSha, }; + new() { DockerReference = data.DockerReference, DockerTag = data.DockerTag, }; public static PluginVersionRecord ToRecord(this PluginVersionData data) => new() { Description = data.Description, }; diff --git a/App/Modules/Cyan/Data/Mappers/ProcessorMapper.cs b/App/Modules/Cyan/Data/Mappers/ProcessorMapper.cs index 1eef3cc..0c2bdd6 100644 --- a/App/Modules/Cyan/Data/Mappers/ProcessorMapper.cs +++ b/App/Modules/Cyan/Data/Mappers/ProcessorMapper.cs @@ -59,10 +59,10 @@ public static ProcessorVersionData HydrateData(this ProcessorVersionData data, P data with { Description = record.Description, }; public static ProcessorVersionData HydrateData(this ProcessorVersionData data, ProcessorVersionProperty record) => - data with { DockerReference = record.DockerReference, DockerSha = record.DockerSha, }; + data with { DockerReference = record.DockerReference, DockerTag = record.DockerTag, }; public static ProcessorVersionProperty ToProperty(this ProcessorVersionData data) => - new() { DockerReference = data.DockerReference, DockerSha = data.DockerSha, }; + new() { DockerReference = data.DockerReference, DockerTag = data.DockerTag, }; public static ProcessorVersionRecord ToRecord(this ProcessorVersionData data) => new() { Description = data.Description, }; diff --git a/App/Modules/Cyan/Data/Mappers/TemplateMapper.cs b/App/Modules/Cyan/Data/Mappers/TemplateMapper.cs index b9cbf10..6b2c472 100644 --- a/App/Modules/Cyan/Data/Mappers/TemplateMapper.cs +++ b/App/Modules/Cyan/Data/Mappers/TemplateMapper.cs @@ -62,18 +62,18 @@ public static TemplateVersionData HydrateData(this TemplateVersionData data, Tem data with { BlobDockerReference = record.BlobDockerReference, - BlobDockerSha = record.BlobDockerSha, + BlobDockerTag = record.BlobDockerTag, TemplateDockerReference = record.TemplateDockerReference, - TemplateDockerSha = record.TemplateDockerSha, + TemplateDockerTag = record.TemplateDockerTag, }; public static TemplateVersionProperty ToProperty(this TemplateVersionData data) => new() { BlobDockerReference = data.BlobDockerReference, - BlobDockerSha = data.BlobDockerSha, + BlobDockerTag = data.BlobDockerTag, TemplateDockerReference = data.TemplateDockerReference, - TemplateDockerSha = data.TemplateDockerSha, + TemplateDockerTag = data.TemplateDockerTag, }; public static TemplateVersionRecord ToRecord(this TemplateVersionData data) => diff --git a/App/Modules/Cyan/Data/Models/PluginVersionData.cs b/App/Modules/Cyan/Data/Models/PluginVersionData.cs index 491f9cf..8887821 100644 --- a/App/Modules/Cyan/Data/Models/PluginVersionData.cs +++ b/App/Modules/Cyan/Data/Models/PluginVersionData.cs @@ -12,7 +12,7 @@ public record PluginVersionData public string DockerReference { get; set; } = string.Empty; - public string DockerSha { get; set; } = string.Empty; + public string DockerTag { get; set; } = string.Empty; // Foreign Keys public Guid PluginId { get; set; } diff --git a/App/Modules/Cyan/Data/Models/ProcessorVersionData.cs b/App/Modules/Cyan/Data/Models/ProcessorVersionData.cs index 377e8f0..05b17b2 100644 --- a/App/Modules/Cyan/Data/Models/ProcessorVersionData.cs +++ b/App/Modules/Cyan/Data/Models/ProcessorVersionData.cs @@ -12,7 +12,7 @@ public record ProcessorVersionData public string DockerReference { get; set; } = string.Empty; - public string DockerSha { get; set; } = string.Empty; + public string DockerTag { get; set; } = string.Empty; // Foreign Keys public Guid ProcessorId { get; set; } diff --git a/App/Modules/Cyan/Data/Models/TemplateVersionData.cs b/App/Modules/Cyan/Data/Models/TemplateVersionData.cs index 93c58c6..98ca44c 100644 --- a/App/Modules/Cyan/Data/Models/TemplateVersionData.cs +++ b/App/Modules/Cyan/Data/Models/TemplateVersionData.cs @@ -12,11 +12,11 @@ public record TemplateVersionData public string BlobDockerReference { get; set; } = string.Empty; - public string BlobDockerSha { get; set; } = string.Empty; + public string BlobDockerTag { get; set; } = string.Empty; public string TemplateDockerReference { get; set; } = string.Empty; - public string TemplateDockerSha { get; set; } = string.Empty; + public string TemplateDockerTag { get; set; } = string.Empty; // Foreign Keys public Guid TemplateId { get; set; } diff --git a/App/Modules/Cyan/Data/Repositories/PluginRepository.cs b/App/Modules/Cyan/Data/Repositories/PluginRepository.cs index d5f464e..cd85457 100644 --- a/App/Modules/Cyan/Data/Repositories/PluginRepository.cs +++ b/App/Modules/Cyan/Data/Repositories/PluginRepository.cs @@ -11,7 +11,6 @@ using LinqKit; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; -using NpgsqlTypes; namespace App.Modules.Cyan.Data.Repositories; diff --git a/App/Utility/ValidationUtility.cs b/App/Utility/ValidationUtility.cs index 5838009..ae31a0a 100644 --- a/App/Utility/ValidationUtility.cs +++ b/App/Utility/ValidationUtility.cs @@ -58,6 +58,15 @@ public static IRuleBuilderOptions DateValid( .WithMessage("DateOnly must be in the format of dd-mm-yyyy"); } + public static IRuleBuilderOptions TagValid(this IRuleBuilder ruleBuilder) + { + return ruleBuilder + .Length(1, 32) + .WithMessage("Docker tag must be between 1 and 32 characters") + .Matches(@"^[a-z0-9](\-?[a-z0-9]+)*$") + .WithMessage("Docker tag can only contain alphanumeric characters and dashes, and cannot star or end with dash"); + } + public static IRuleBuilderOptions UsernameValid( this IRuleBuilder ruleBuilder) { diff --git a/Domain/Model/PluginVersion.cs b/Domain/Model/PluginVersion.cs index 791945d..feab3bc 100644 --- a/Domain/Model/PluginVersion.cs +++ b/Domain/Model/PluginVersion.cs @@ -39,9 +39,7 @@ public record PluginVersionRecord public record PluginVersionProperty { - public required string DockerReference { get; init; } - public required string DockerSha { get; init; } - + public required string DockerTag { get; init; } } diff --git a/Domain/Model/ProcessorVersion.cs b/Domain/Model/ProcessorVersion.cs index 6830bec..dfc81f8 100644 --- a/Domain/Model/ProcessorVersion.cs +++ b/Domain/Model/ProcessorVersion.cs @@ -40,5 +40,5 @@ public record ProcessorVersionProperty { public required string DockerReference { get; init; } - public required string DockerSha { get; init; } + public required string DockerTag { get; init; } } diff --git a/Domain/Model/TemplateVersion.cs b/Domain/Model/TemplateVersion.cs index 708f527..2f7eefb 100644 --- a/Domain/Model/TemplateVersion.cs +++ b/Domain/Model/TemplateVersion.cs @@ -42,9 +42,9 @@ public record TemplateVersionProperty { public required string BlobDockerReference { get; init; } - public required string BlobDockerSha { get; init; } + public required string BlobDockerTag { get; init; } public required string TemplateDockerReference { get; init; } - public required string TemplateDockerSha { get; init; } + public required string TemplateDockerTag { get; init; } } diff --git a/config/dev.yaml b/config/dev.yaml index c6146c3..b9ec185 100644 --- a/config/dev.yaml +++ b/config/dev.yaml @@ -12,7 +12,7 @@ type: local # fast mode # 1. does not start the cluster, automatically assumes that your cluster already created # 2. does not clean up resources. This makes your future starts faster -fast: true +fast: false # whether to start local cluster. If false, will connect to current context startCluster: true