diff --git a/Marechai.ApiClient/Models/SoundSynthFullDto.cs b/Marechai.ApiClient/Models/SoundSynthFullDto.cs
new file mode 100644
index 00000000..ef5f6fe1
--- /dev/null
+++ b/Marechai.ApiClient/Models/SoundSynthFullDto.cs
@@ -0,0 +1,129 @@
+//
+#pragma warning disable CS0618
+using Microsoft.Kiota.Abstractions.Extensions;
+using Microsoft.Kiota.Abstractions.Serialization;
+using System.Collections.Generic;
+using System.IO;
+using System;
+namespace Marechai.ApiClient.Models
+{
+ [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
+ #pragma warning disable CS1591
+ public partial class SoundSynthFullDto : IAdditionalDataHolder, IParsable
+ #pragma warning restore CS1591
+ {
+ /// Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
+ public IDictionary AdditionalData { get; set; }
+ /// The company_logo property
+ public Guid? CompanyLogo { get; set; }
+ /// The description_html property
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public string? DescriptionHtml { get; set; }
+#nullable restore
+#else
+ public string DescriptionHtml { get; set; }
+#endif
+ /// The description_language_code property
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public string? DescriptionLanguageCode { get; set; }
+#nullable restore
+#else
+ public string DescriptionLanguageCode { get; set; }
+#endif
+ /// The description_text property
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public string? DescriptionText { get; set; }
+#nullable restore
+#else
+ public string DescriptionText { get; set; }
+#endif
+ /// The machines property
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public List? Machines { get; set; }
+#nullable restore
+#else
+ public List Machines { get; set; }
+#endif
+ /// The photos property
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public List? Photos { get; set; }
+#nullable restore
+#else
+ public List Photos { get; set; }
+#endif
+ /// The sound_synth property
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public global::Marechai.ApiClient.Models.SoundSynthDto? SoundSynth { get; set; }
+#nullable restore
+#else
+ public global::Marechai.ApiClient.Models.SoundSynthDto SoundSynth { get; set; }
+#endif
+ /// The videos property
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public List? Videos { get; set; }
+#nullable restore
+#else
+ public List Videos { get; set; }
+#endif
+ ///
+ /// Instantiates a new and sets the default values.
+ ///
+ public SoundSynthFullDto()
+ {
+ AdditionalData = new Dictionary();
+ }
+ ///
+ /// Creates a new instance of the appropriate class based on discriminator value
+ ///
+ /// A
+ /// The parse node to use to read the discriminator value and create the object
+ public static global::Marechai.ApiClient.Models.SoundSynthFullDto CreateFromDiscriminatorValue(IParseNode parseNode)
+ {
+ if(ReferenceEquals(parseNode, null)) throw new ArgumentNullException(nameof(parseNode));
+ return new global::Marechai.ApiClient.Models.SoundSynthFullDto();
+ }
+ ///
+ /// The deserialization information for the current model
+ ///
+ /// A IDictionary<string, Action<IParseNode>>
+ public virtual IDictionary> GetFieldDeserializers()
+ {
+ return new Dictionary>
+ {
+ { "company_logo", n => { CompanyLogo = n.GetGuidValue(); } },
+ { "description_html", n => { DescriptionHtml = n.GetStringValue(); } },
+ { "description_language_code", n => { DescriptionLanguageCode = n.GetStringValue(); } },
+ { "description_text", n => { DescriptionText = n.GetStringValue(); } },
+ { "machines", n => { Machines = n.GetCollectionOfObjectValues(global::Marechai.ApiClient.Models.MachineDto.CreateFromDiscriminatorValue)?.AsList(); } },
+ { "photos", n => { Photos = n.GetCollectionOfPrimitiveValues()?.AsList(); } },
+ { "sound_synth", n => { SoundSynth = n.GetObjectValue(global::Marechai.ApiClient.Models.SoundSynthDto.CreateFromDiscriminatorValue); } },
+ { "videos", n => { Videos = n.GetCollectionOfObjectValues(global::Marechai.ApiClient.Models.SoundSynthVideoDto.CreateFromDiscriminatorValue)?.AsList(); } },
+ };
+ }
+ ///
+ /// Serializes information the current object
+ ///
+ /// Serialization writer to use to serialize this model
+ public virtual void Serialize(ISerializationWriter writer)
+ {
+ if(ReferenceEquals(writer, null)) throw new ArgumentNullException(nameof(writer));
+ writer.WriteGuidValue("company_logo", CompanyLogo);
+ writer.WriteStringValue("description_html", DescriptionHtml);
+ writer.WriteStringValue("description_language_code", DescriptionLanguageCode);
+ writer.WriteStringValue("description_text", DescriptionText);
+ writer.WriteCollectionOfObjectValues("machines", Machines);
+ writer.WriteCollectionOfPrimitiveValues("photos", Photos);
+ writer.WriteObjectValue("sound_synth", SoundSynth);
+ writer.WriteCollectionOfObjectValues("videos", Videos);
+ writer.WriteAdditionalData(AdditionalData);
+ }
+ }
+}
+#pragma warning restore CS0618
diff --git a/Marechai.ApiClient/SoundSynths/Item/Full/FullRequestBuilder.cs b/Marechai.ApiClient/SoundSynths/Item/Full/FullRequestBuilder.cs
new file mode 100644
index 00000000..5958e95e
--- /dev/null
+++ b/Marechai.ApiClient/SoundSynths/Item/Full/FullRequestBuilder.cs
@@ -0,0 +1,108 @@
+//
+#pragma warning disable CS0618
+using Marechai.ApiClient.Models;
+using Microsoft.Kiota.Abstractions.Extensions;
+using Microsoft.Kiota.Abstractions.Serialization;
+using Microsoft.Kiota.Abstractions;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+using System.Threading;
+using System;
+namespace Marechai.ApiClient.SoundSynths.Item.Full
+{
+ ///
+ /// Builds and executes requests for operations under \sound-synths\{-id}\full
+ ///
+ [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
+ public partial class FullRequestBuilder : BaseRequestBuilder
+ {
+ ///
+ /// Instantiates a new and sets the default values.
+ ///
+ /// Path parameters for the request
+ /// The request adapter to use to execute the requests.
+ public FullRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/sound-synths/{%2Did}/full{?lang*}", pathParameters)
+ {
+ }
+ ///
+ /// Instantiates a new and sets the default values.
+ ///
+ /// The raw URL to use for the request builder.
+ /// The request adapter to use to execute the requests.
+ public FullRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/sound-synths/{%2Did}/full{?lang*}", rawUrl)
+ {
+ }
+ /// A
+ /// Cancellation token to use when cancelling requests
+ /// Configuration for the request such as headers, query parameters, and middleware options.
+ /// When receiving a 400 status code
+ /// When receiving a 404 status code
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public async Task GetAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default)
+ {
+#nullable restore
+#else
+ public async Task GetAsync(Action> requestConfiguration = default, CancellationToken cancellationToken = default)
+ {
+#endif
+ var requestInfo = ToGetRequestInformation(requestConfiguration);
+ var errorMapping = new Dictionary>
+ {
+ { "400", global::Marechai.ApiClient.Models.ProblemDetails.CreateFromDiscriminatorValue },
+ { "404", global::Marechai.ApiClient.Models.ProblemDetails.CreateFromDiscriminatorValue },
+ };
+ return await RequestAdapter.SendAsync(requestInfo, global::Marechai.ApiClient.Models.SoundSynthFullDto.CreateFromDiscriminatorValue, errorMapping, cancellationToken).ConfigureAwait(false);
+ }
+ /// A
+ /// Configuration for the request such as headers, query parameters, and middleware options.
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ public RequestInformation ToGetRequestInformation(Action>? requestConfiguration = default)
+ {
+#nullable restore
+#else
+ public RequestInformation ToGetRequestInformation(Action> requestConfiguration = default)
+ {
+#endif
+ var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters);
+ requestInfo.Configure(requestConfiguration);
+ requestInfo.Headers.TryAdd("Accept", "application/json, text/plain;q=0.9");
+ return requestInfo;
+ }
+ ///
+ /// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored.
+ ///
+ /// A
+ /// The raw URL to use for the request builder.
+ public global::Marechai.ApiClient.SoundSynths.Item.Full.FullRequestBuilder WithUrl(string rawUrl)
+ {
+ return new global::Marechai.ApiClient.SoundSynths.Item.Full.FullRequestBuilder(rawUrl, RequestAdapter);
+ }
+ [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
+ #pragma warning disable CS1591
+ public partial class FullRequestBuilderGetQueryParameters
+ #pragma warning restore CS1591
+ {
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
+#nullable enable
+ [QueryParameter("lang")]
+ public string? Lang { get; set; }
+#nullable restore
+#else
+ [QueryParameter("lang")]
+ public string Lang { get; set; }
+#endif
+ }
+ ///
+ /// Configuration for the request such as headers, query parameters, and middleware options.
+ ///
+ [Obsolete("This class is deprecated. Please use the generic RequestConfiguration class generated by the generator.")]
+ [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
+ public partial class FullRequestBuilderGetRequestConfiguration : RequestConfiguration
+ {
+ }
+ }
+}
+#pragma warning restore CS0618
diff --git a/Marechai.ApiClient/SoundSynths/Item/ItemRequestBuilder.cs b/Marechai.ApiClient/SoundSynths/Item/ItemRequestBuilder.cs
index 9ba0cc3c..a3f248f5 100644
--- a/Marechai.ApiClient/SoundSynths/Item/ItemRequestBuilder.cs
+++ b/Marechai.ApiClient/SoundSynths/Item/ItemRequestBuilder.cs
@@ -3,6 +3,7 @@
using Marechai.ApiClient.Models;
using Marechai.ApiClient.SoundSynths.Item.Description;
using Marechai.ApiClient.SoundSynths.Item.Descriptions;
+using Marechai.ApiClient.SoundSynths.Item.Full;
using Marechai.ApiClient.SoundSynths.Item.Machines;
using Marechai.ApiClient.SoundSynths.Item.Photos;
using Marechai.ApiClient.SoundSynths.Item.Videos;
@@ -32,6 +33,11 @@ namespace Marechai.ApiClient.SoundSynths.Item
{
get => new global::Marechai.ApiClient.SoundSynths.Item.Descriptions.DescriptionsRequestBuilder(PathParameters, RequestAdapter);
}
+ /// The full property
+ public global::Marechai.ApiClient.SoundSynths.Item.Full.FullRequestBuilder Full
+ {
+ get => new global::Marechai.ApiClient.SoundSynths.Item.Full.FullRequestBuilder(PathParameters, RequestAdapter);
+ }
/// The machines property
public global::Marechai.ApiClient.SoundSynths.Item.Machines.MachinesRequestBuilder Machines
{
diff --git a/Marechai.ApiClient/kiota-lock.json b/Marechai.ApiClient/kiota-lock.json
index 278206cb..2498b65a 100644
--- a/Marechai.ApiClient/kiota-lock.json
+++ b/Marechai.ApiClient/kiota-lock.json
@@ -1,5 +1,5 @@
{
- "descriptionHash": "18CCAA5AB1EB61E4C6AD4D508A4A990449F492E780F84384BD5721DDEC3F4EB07301E868DC18FB336E887B60816D3EA00E73CD801CF35979D08DE5A788482FC7",
+ "descriptionHash": "389F8BA108D981456765FE8C3A9288855C430D007CA1DEA039290889224411A5630995CA2A8D9CCFC43727EC38FA727627E08ACB6E9FEB19709049107313B727",
"descriptionLocation": "../../../../../tmp/openapi.json",
"lockFileVersion": "1.0.0",
"kiotaVersion": "1.31.1",
diff --git a/Marechai.Data/Dtos/SoundSynthFullDto.cs b/Marechai.Data/Dtos/SoundSynthFullDto.cs
new file mode 100644
index 00000000..f39c2485
--- /dev/null
+++ b/Marechai.Data/Dtos/SoundSynthFullDto.cs
@@ -0,0 +1,98 @@
+/******************************************************************************
+// MARECHAI: Master repository of computing history artifacts information
+// ----------------------------------------------------------------------------
+//
+// Author(s) : Natalia Portillo
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2003-2026 Natalia Portillo
+*******************************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text.Json.Serialization;
+
+namespace Marechai.Data.Dtos;
+
+///
+/// Consolidated payload for the public /soundsynth/{Id} view page. Replaces 5 sequential
+/// HTTP round-trips (head + machines + description + photos + videos) with a single
+/// response. The head + company name + company logo are pulled in one projected query
+/// (logo via inline correlated subquery so it costs zero extra DB round-trips); the
+/// description language fallback is collapsed into a single ordered query; the child
+/// collections are fetched in parallel using independent
+/// instances from IDbContextFactory (DbContext is not thread-safe; sharing the
+/// request-scoped context across parallel branches throws InvalidOperationException).
+///
+public class SoundSynthFullDto
+{
+ // [Required] is needed in addition to the non-nullable type so the generated
+ // OpenAPI schema is a plain $ref instead of `oneOf:[null, $ref]`. With the
+ // oneOf-with-null shape Kiota generates a "composed type wrapper" that
+ // requires a discriminator field that doesn't exist in the JSON, leaving the
+ // inner DTO un-populated. See pattern in BookFullDto.Book, GpuFullDto.Gpu and
+ // ProcessorFullDto.Processor.
+ [JsonPropertyName("sound_synth")]
+ [Required]
+ public SoundSynthDto SoundSynth { get; set; }
+
+ ///
+ /// Asset GUID of the company logo to display next to the sound synth header. Picked
+ /// from the company's logos with the introduced-year preference applied server-side
+ /// (logos with Year >= introducedYear sort first, then ascending by year).
+ /// Null when the synth has no company or the company has no logos.
+ ///
+ [JsonPropertyName("company_logo")]
+ public Guid? CompanyLogo { get; set; }
+
+ ///
+ /// HTML-rendered description in the requested language (with English fallback applied
+ /// server-side via a single ordered query). Null at runtime when the synth has no
+ /// description in either the requested language or English.
+ ///
+ [JsonPropertyName("description_html")]
+ public string? DescriptionHtml { get; set; }
+
+ ///
+ /// Plain-text (markdown source) description in the requested language. Mirrors
+ /// for callers that prefer raw markdown over rendered
+ /// HTML. Null when no description was found.
+ ///
+ [JsonPropertyName("description_text")]
+ public string? DescriptionText { get; set; }
+
+ ///
+ /// Language code of the description that was actually returned (the requested language
+ /// or "eng" if the fallback fired). Null when no description was found.
+ ///
+ [JsonPropertyName("description_language_code")]
+ public string? DescriptionLanguageCode { get; set; }
+
+ [JsonPropertyName("machines")]
+ [Required]
+ public List Machines { get; set; } = new();
+
+ [JsonPropertyName("photos")]
+ [Required]
+ public List Photos { get; set; } = new();
+
+ [JsonPropertyName("videos")]
+ [Required]
+ public List Videos { get; set; } = new();
+}
diff --git a/Marechai.Database/Migrations/20260508201459_AddSoundSynthPhotosSoundSynthIdIndex.Designer.cs b/Marechai.Database/Migrations/20260508201459_AddSoundSynthPhotosSoundSynthIdIndex.Designer.cs
new file mode 100644
index 00000000..4334da5c
--- /dev/null
+++ b/Marechai.Database/Migrations/20260508201459_AddSoundSynthPhotosSoundSynthIdIndex.Designer.cs
@@ -0,0 +1,11063 @@
+//
+using System;
+using Marechai.Database.Models;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace Marechai.Database.Migrations
+{
+ [DbContext(typeof(MarechaiContext))]
+ [Migration("20260508201459_AddSoundSynthPhotosSoundSynthIdIndex")]
+ partial class AddSoundSynthPhotosSoundSynthIdIndex
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.11")
+ .HasAnnotation("Proxies:ChangeTracking", false)
+ .HasAnnotation("Proxies:CheckEquality", false)
+ .HasAnnotation("Proxies:LazyLoading", true)
+ .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+ MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder);
+
+ modelBuilder.Entity("Marechai.Database.Models.ApplicationRole", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("varchar(255)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("longtext");
+
+ b.Property("Created")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Description")
+ .HasColumnType("longtext");
+
+ b.Property("Name")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("NormalizedName")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasDatabaseName("RoleNameIndex");
+
+ b.ToTable("AspNetRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.ApplicationUser", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("varchar(255)");
+
+ b.Property("AccessFailedCount")
+ .HasColumnType("int");
+
+ b.Property("AvatarGuid")
+ .HasColumnType("char(36)");
+
+ b.Property("Bio")
+ .HasMaxLength(2000)
+ .HasColumnType("varchar(2000)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("longtext");
+
+ b.Property("DisplayName")
+ .HasMaxLength(100)
+ .HasColumnType("varchar(100)");
+
+ b.Property("Email")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("EmailConfirmed")
+ .HasColumnType("bit(1)");
+
+ b.Property("Facebook")
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("GitHub")
+ .HasMaxLength(100)
+ .HasColumnType("varchar(100)");
+
+ b.Property("IsSystemAccount")
+ .HasColumnType("bit(1)");
+
+ b.Property("LinkedIn")
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("Location")
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("LockoutEnabled")
+ .HasColumnType("bit(1)");
+
+ b.Property("LockoutEnd")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Mastodon")
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("NormalizedEmail")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("NormalizedUserName")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("OriginalAvatarExtension")
+ .HasMaxLength(10)
+ .HasColumnType("varchar(10)");
+
+ b.Property("PasswordHash")
+ .HasColumnType("longtext");
+
+ b.Property("PhoneNumber")
+ .HasColumnType("longtext");
+
+ b.Property("PhoneNumberConfirmed")
+ .HasColumnType("bit(1)");
+
+ b.Property("PreferredThemeId")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("SecurityStamp")
+ .HasColumnType("longtext");
+
+ b.Property("Twitter")
+ .HasMaxLength(100)
+ .HasColumnType("varchar(100)");
+
+ b.Property("TwoFactorEnabled")
+ .HasColumnType("bit(1)");
+
+ b.Property("TwoFactorViaAuthenticator")
+ .HasColumnType("bit(1)");
+
+ b.Property("TwoFactorViaEmail")
+ .HasColumnType("bit(1)");
+
+ b.Property("UseGravatar")
+ .HasColumnType("bit(1)");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("Website")
+ .HasMaxLength(500)
+ .HasColumnType("varchar(500)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedEmail")
+ .HasDatabaseName("EmailIndex");
+
+ b.HasIndex("NormalizedUserName")
+ .IsUnique()
+ .HasDatabaseName("UserNameIndex");
+
+ b.ToTable("AspNetUsers", (string)null);
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.Audit", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("AffectedColumns")
+ .HasColumnType("json");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("Keys")
+ .HasColumnType("json");
+
+ b.Property("NewValues")
+ .HasColumnType("json");
+
+ b.Property("OldValues")
+ .HasColumnType("json");
+
+ b.Property("Table")
+ .HasColumnType("varchar(255)");
+
+ b.Property("Type")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("varchar(255)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Table");
+
+ b.HasIndex("Type");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Audit");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.Book", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CountryId")
+ .HasColumnType("smallint(3)");
+
+ b.Property("CoverGuid")
+ .HasColumnType("char(36)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("Edition")
+ .HasColumnType("int");
+
+ b.Property("Isbn")
+ .HasMaxLength(13)
+ .HasColumnType("varchar(13)");
+
+ b.Property("NativeTitle")
+ .HasColumnType("varchar(255)");
+
+ b.Property("OriginalCoverExtension")
+ .HasColumnType("longtext");
+
+ b.Property("Pages")
+ .HasColumnType("smallint");
+
+ b.Property("PreviousId")
+ .HasColumnType("bigint");
+
+ b.Property("Published")
+ .HasColumnType("datetime(6)");
+
+ b.Property("PublishedPrecision")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("SortTitle")
+ .HasColumnType("longtext");
+
+ b.Property("SourceId")
+ .HasColumnType("bigint");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("varchar(255)");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("CountryId");
+
+ b.HasIndex("Edition");
+
+ b.HasIndex("Isbn");
+
+ b.HasIndex("NativeTitle");
+
+ b.HasIndex("Pages");
+
+ b.HasIndex("PreviousId")
+ .IsUnique();
+
+ b.HasIndex("Published");
+
+ b.HasIndex("SourceId");
+
+ b.HasIndex("Title");
+
+ b.ToTable("Books");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.BookScan", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("char(36)");
+
+ b.Property("Author")
+ .HasColumnType("varchar(255)");
+
+ b.Property("BookId")
+ .HasColumnType("bigint");
+
+ b.Property("ColorSpace")
+ .HasColumnType("smallint unsigned");
+
+ b.Property("Comments")
+ .HasColumnType("varchar(255)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ExifVersion")
+ .HasColumnType("varchar(255)");
+
+ b.Property("HorizontalResolution")
+ .HasColumnType("double");
+
+ b.Property("OriginalExtension")
+ .HasColumnType("longtext");
+
+ b.Property("Page")
+ .HasColumnType("int unsigned");
+
+ b.Property("ResolutionUnit")
+ .HasColumnType("smallint unsigned");
+
+ b.Property("ScannerManufacturer")
+ .HasColumnType("varchar(255)");
+
+ b.Property("ScannerModel")
+ .HasColumnType("varchar(255)");
+
+ b.Property("SoftwareUsed")
+ .HasColumnType("varchar(255)");
+
+ b.Property("Type")
+ .HasColumnType("int unsigned");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.Property("UploadDate")
+ .IsConcurrencyToken()
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ b.Property("UserId")
+ .HasColumnType("varchar(255)");
+
+ b.Property("VerticalResolution")
+ .HasColumnType("double");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Author");
+
+ b.HasIndex("BookId");
+
+ b.HasIndex("ColorSpace");
+
+ b.HasIndex("Comments");
+
+ b.HasIndex("CreationDate");
+
+ b.HasIndex("ExifVersion");
+
+ b.HasIndex("HorizontalResolution");
+
+ b.HasIndex("Page");
+
+ b.HasIndex("ResolutionUnit");
+
+ b.HasIndex("ScannerManufacturer");
+
+ b.HasIndex("ScannerModel");
+
+ b.HasIndex("SoftwareUsed");
+
+ b.HasIndex("Type");
+
+ b.HasIndex("UploadDate");
+
+ b.HasIndex("UserId");
+
+ b.HasIndex("VerticalResolution");
+
+ b.ToTable("BookScans");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.BookSynopsis", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("BookId")
+ .HasColumnType("bigint");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("LanguageCode")
+ .IsRequired()
+ .HasMaxLength(3)
+ .HasColumnType("char(3)");
+
+ b.Property("Text")
+ .IsRequired()
+ .HasMaxLength(262144)
+ .HasColumnType("longtext");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("LanguageCode");
+
+ b.HasIndex("Text")
+ .HasAnnotation("MySql:FullTextIndex", true);
+
+ b.HasIndex("BookId", "LanguageCode")
+ .IsUnique()
+ .HasDatabaseName("idx_book_synopses_book_language");
+
+ b.ToTable("BookSynopses");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.BooksByMachine", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("BookId")
+ .HasColumnType("bigint");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("MachineId")
+ .HasColumnType("int(11)");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("BookId");
+
+ b.HasIndex("MachineId");
+
+ b.ToTable("BooksByMachines");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.BooksByMachineFamily", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("BookId")
+ .HasColumnType("bigint");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("MachineFamilyId")
+ .HasColumnType("int(11)");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("BookId");
+
+ b.HasIndex("MachineFamilyId");
+
+ b.ToTable("BooksByMachineFamilies");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.BrowserTest", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int(11)")
+ .HasColumnName("id");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("Agif")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("agif");
+
+ b.Property("Browser")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)")
+ .HasColumnName("browser")
+ .HasDefaultValueSql("''");
+
+ b.Property("Colors")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("colors");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("Flash")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("flash");
+
+ b.Property("Frames")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("frames");
+
+ b.Property("Gif87")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("gif87");
+
+ b.Property("Gif89")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("gif89");
+
+ b.Property("Jpeg")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("jpeg");
+
+ b.Property("Js")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("js");
+
+ b.Property("Os")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(32)
+ .HasColumnType("varchar(32)")
+ .HasColumnName("os")
+ .HasDefaultValueSql("''");
+
+ b.Property("Platform")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(8)
+ .HasColumnType("varchar(8)")
+ .HasColumnName("platform")
+ .HasDefaultValueSql("''");
+
+ b.Property("Png")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("png");
+
+ b.Property("Pngt")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("pngt");
+
+ b.Property("Table")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue((sbyte)0)
+ .HasColumnName("table");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.Property("UserAgent")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)")
+ .HasColumnName("user_agent")
+ .HasDefaultValueSql("''");
+
+ b.Property("Version")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(16)
+ .HasColumnType("varchar(16)")
+ .HasColumnName("version")
+ .HasDefaultValueSql("''");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Browser")
+ .HasDatabaseName("idx_browser_tests_browser");
+
+ b.HasIndex("Os")
+ .HasDatabaseName("idx_browser_tests_os");
+
+ b.HasIndex("Platform")
+ .HasDatabaseName("idx_browser_tests_platform");
+
+ b.HasIndex("UserAgent")
+ .HasDatabaseName("idx_browser_tests_user_agent");
+
+ b.HasIndex("Version")
+ .HasDatabaseName("idx_browser_tests_version");
+
+ b.ToTable("browser_tests", (string)null);
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CollectedBook", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("varchar(255)");
+
+ b.Property("BookId")
+ .HasColumnType("bigint");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.HasKey("UserId", "BookId");
+
+ b.HasIndex("BookId");
+
+ b.ToTable("CollectedBooks");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CollectedDocument", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("varchar(255)");
+
+ b.Property("DocumentId")
+ .HasColumnType("bigint");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.HasKey("UserId", "DocumentId");
+
+ b.HasIndex("DocumentId");
+
+ b.ToTable("CollectedDocuments");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CollectedSoftwareRelease", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("varchar(255)");
+
+ b.Property("SoftwareReleaseId")
+ .HasColumnType("bigint unsigned");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.HasKey("UserId", "SoftwareReleaseId");
+
+ b.HasIndex("SoftwareReleaseId");
+
+ b.ToTable("CollectedSoftwareReleases");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CompaniesByBook", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("BookId")
+ .HasColumnType("bigint");
+
+ b.Property("CompanyId")
+ .HasColumnType("int(11)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("char(3)");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("BookId");
+
+ b.HasIndex("CompanyId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("CompaniesByBooks");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CompaniesByDocument", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CompanyId")
+ .HasColumnType("int(11)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("DocumentId")
+ .HasColumnType("bigint");
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("char(3)");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompanyId");
+
+ b.HasIndex("DocumentId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("CompaniesByDocuments");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CompaniesByMagazine", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CompanyId")
+ .HasColumnType("int(11)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("MagazineId")
+ .HasColumnType("bigint");
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("char(3)");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompanyId");
+
+ b.HasIndex("MagazineId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("CompaniesByMagazines");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.Company", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int(11)")
+ .HasColumnName("id");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .HasMaxLength(80)
+ .HasColumnType("varchar(80)")
+ .HasColumnName("address");
+
+ b.Property("City")
+ .HasMaxLength(80)
+ .HasColumnType("varchar(80)")
+ .HasColumnName("city");
+
+ b.Property("CountryId")
+ .HasColumnType("smallint(3)")
+ .HasColumnName("country");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("Facebook")
+ .HasMaxLength(45)
+ .HasColumnType("varchar(45)")
+ .HasColumnName("facebook");
+
+ b.Property("Founded")
+ .HasColumnType("datetime")
+ .HasColumnName("founded");
+
+ b.Property("FoundedPrecision")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("LegalName")
+ .HasColumnType("longtext");
+
+ b.Property("Name")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasColumnType("varchar(128)")
+ .HasColumnName("name")
+ .HasDefaultValueSql("''");
+
+ b.Property("PostalCode")
+ .HasMaxLength(25)
+ .HasColumnType("varchar(25)")
+ .HasColumnName("postal_code");
+
+ b.Property("Province")
+ .HasMaxLength(80)
+ .HasColumnType("varchar(80)")
+ .HasColumnName("province");
+
+ b.Property("Sold")
+ .HasColumnType("datetime")
+ .HasColumnName("sold");
+
+ b.Property("SoldPrecision")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("SoldToId")
+ .HasColumnType("int(11)")
+ .HasColumnName("sold_to");
+
+ b.Property("Status")
+ .HasColumnType("int(11)")
+ .HasColumnName("status");
+
+ b.Property("Twitter")
+ .HasMaxLength(45)
+ .HasColumnType("varchar(45)")
+ .HasColumnName("twitter");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.Property("Website")
+ .HasMaxLength(255)
+ .HasColumnType("varchar(255)")
+ .HasColumnName("website");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Address")
+ .HasDatabaseName("idx_companies_address");
+
+ b.HasIndex("City")
+ .HasDatabaseName("idx_companies_city");
+
+ b.HasIndex("CountryId")
+ .HasDatabaseName("idx_companies_country");
+
+ b.HasIndex("Facebook")
+ .HasDatabaseName("idx_companies_facebook");
+
+ b.HasIndex("Founded")
+ .HasDatabaseName("idx_companies_founded");
+
+ b.HasIndex("Name")
+ .HasDatabaseName("idx_companies_name");
+
+ b.HasIndex("PostalCode")
+ .HasDatabaseName("idx_companies_postal_code");
+
+ b.HasIndex("Province")
+ .HasDatabaseName("idx_companies_province");
+
+ b.HasIndex("Sold")
+ .HasDatabaseName("idx_companies_sold");
+
+ b.HasIndex("SoldToId")
+ .HasDatabaseName("idx_companies_sold_to");
+
+ b.HasIndex("Status")
+ .HasDatabaseName("idx_companies_status");
+
+ b.HasIndex("Twitter")
+ .HasDatabaseName("idx_companies_twitter");
+
+ b.HasIndex("Website")
+ .HasDatabaseName("idx_companies_website");
+
+ b.ToTable("companies", (string)null);
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CompanyBySoftwareFamily", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint unsigned");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CompanyId")
+ .HasColumnType("int(11)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("char(3)");
+
+ b.Property("SoftwareFamilyId")
+ .HasColumnType("bigint unsigned");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompanyId");
+
+ b.HasIndex("RoleId");
+
+ b.HasIndex("SoftwareFamilyId");
+
+ b.ToTable("CompaniesBySoftwareFamilies");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CompanyBySoftwareVersion", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint unsigned");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CompanyId")
+ .HasColumnType("int(11)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("char(3)");
+
+ b.Property("SoftwareVersionId")
+ .HasColumnType("bigint unsigned");
+
+ b.Property("UpdatedOn")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("UpdatedOn"));
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompanyId");
+
+ b.HasIndex("RoleId");
+
+ b.HasIndex("SoftwareVersionId");
+
+ b.ToTable("CompaniesBySoftwareVersions");
+ });
+
+ modelBuilder.Entity("Marechai.Database.Models.CompanyDescription", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CompanyId")
+ .HasColumnType("int(11)");
+
+ b.Property("CreatedOn")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("datetime(6)");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CreatedOn"));
+
+ b.Property