using LinqToDB; using LinqToDB.Mapping; using Newtonsoft.Json; namespace Azaion.Common.Database; public static class AnnotationsDbSchemaHolder { public static readonly MappingSchema MappingSchema; static AnnotationsDbSchemaHolder() { MappingSchema = new MappingSchema(); var builder = new FluentMappingBuilder(MappingSchema); var annotationBuilder = builder.Entity(); annotationBuilder.HasTableName(Constants.ANNOTATIONS_TABLENAME) .HasPrimaryKey(x => x.Name) .Association(a => a.Detections, (a, d) => a.Name == d.AnnotationName) .Property(x => x.Time).HasDataType(DataType.Int64).HasConversion(ts => ts.Ticks, t => new TimeSpan(t)); annotationBuilder .Ignore(x => x.Milliseconds) .Ignore(x => x.Classes) .Ignore(x => x.Classes) .Ignore(x => x.ImagePath) .Ignore(x => x.LabelPath) .Ignore(x => x.ThumbPath); builder.Entity() .HasTableName(Constants.DETECTIONS_TABLENAME); builder.Entity() .HasTableName(Constants.ANNOTATIONS_QUEUE_TABLENAME) .HasPrimaryKey(x => x.Id) .Property(x => x.AnnotationNames) .HasDataType(DataType.NVarChar) .HasConversion(list => JsonConvert.SerializeObject(list), str => JsonConvert.DeserializeObject>(str) ?? new List()); builder.Entity() .HasTableName(Constants.MEDIAFILE_TABLENAME); builder.Build(); } }