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