feat(Assets): update asset services and background workers

This commit is contained in:
2026-08-09 21:01:39 +02:00
parent b57cc9894c
commit e0778b88ea
32 changed files with 1020 additions and 2062 deletions
@@ -0,0 +1,129 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace FinlyticAssets.Migrations
{
/// <inheritdoc />
public partial class Init : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Settings",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
FinishedInitialScan = table.Column<bool>(type: "boolean", nullable: false),
TradeRepublicMaxRequestPageSize = table.Column<int>(type: "integer", nullable: false),
AssetUpdateTypeDelay = table.Column<int>(type: "integer", nullable: false),
InitAssetUpdateTypeDelay = table.Column<int>(type: "integer", nullable: false),
InitBatchAssetUpdateDelay = table.Column<int>(type: "integer", nullable: false),
BatchAssetUpdateDelay = table.Column<int>(type: "integer", nullable: false),
CurrentScanningType = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: false),
CurrentScanningPage = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Settings", x => x.Id);
});
migrationBuilder.CreateTable(
name: "TradeRepublicAssets",
columns: table => new
{
Isin = table.Column<string>(type: "text", nullable: false),
InstrumentCategory = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Type = table.Column<string>(type: "text", nullable: false),
HasCfd = table.Column<bool>(type: "boolean", nullable: false),
ImageId = table.Column<string>(type: "text", nullable: true),
LastUpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
AssetType = table.Column<string>(type: "character varying(13)", maxLength: 13, nullable: false),
BondIssuerName = table.Column<string>(type: "text", nullable: true),
SearchSubtitle = table.Column<string>(type: "text", nullable: true),
Subtitle = table.Column<string>(type: "text", nullable: true),
CryptoEntity_SearchSubtitle = table.Column<string>(type: "text", nullable: true),
DerivativeProductCategories = table.Column<string>(type: "text", nullable: true),
UnderlyingIsin = table.Column<string>(type: "text", nullable: true),
EtfEntity_DerivativeProductCategories = table.Column<string>(type: "text", nullable: true),
EtfDescription = table.Column<string>(type: "text", nullable: true),
MappedEtfIndexName = table.Column<string>(type: "text", nullable: true),
EtfEntity_Subtitle = table.Column<string>(type: "text", nullable: true),
EtfEntity_SearchSubtitle = table.Column<string>(type: "text", nullable: true),
StockEntity_DerivativeProductCategories = table.Column<string>(type: "text", nullable: true),
SyntheticEntity_DerivativeProductCategories = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TradeRepublicAssets", x => new { x.Isin, x.InstrumentCategory });
});
migrationBuilder.CreateTable(
name: "TradeRepublicTags",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Type = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TradeRepublicTags", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AssetEntityTagEntity",
columns: table => new
{
TagsId = table.Column<string>(type: "text", nullable: false),
AssetsIsin = table.Column<string>(type: "text", nullable: false),
AssetsInstrumentCategory = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AssetEntityTagEntity", x => new { x.TagsId, x.AssetsIsin, x.AssetsInstrumentCategory });
table.ForeignKey(
name: "FK_AssetEntityTagEntity_TradeRepublicAssets_AssetsIsin_AssetsI~",
columns: x => new { x.AssetsIsin, x.AssetsInstrumentCategory },
principalTable: "TradeRepublicAssets",
principalColumns: new[] { "Isin", "InstrumentCategory" },
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_AssetEntityTagEntity_TradeRepublicTags_TagsId",
column: x => x.TagsId,
principalTable: "TradeRepublicTags",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_AssetEntityTagEntity_AssetsIsin_AssetsInstrumentCategory",
table: "AssetEntityTagEntity",
columns: new[] { "AssetsIsin", "AssetsInstrumentCategory" });
migrationBuilder.CreateIndex(
name: "IX_TradeRepublicAssets_LastUpdatedAt",
table: "TradeRepublicAssets",
column: "LastUpdatedAt");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AssetEntityTagEntity");
migrationBuilder.DropTable(
name: "Settings");
migrationBuilder.DropTable(
name: "TradeRepublicAssets");
migrationBuilder.DropTable(
name: "TradeRepublicTags");
}
}
}