Compare commits
8 Commits
36759d8fee
...
e14a6a0f69
| Author | SHA1 | Date | |
|---|---|---|---|
| e14a6a0f69 | |||
| 181a0b23b5 | |||
| 2b43ec5984 | |||
| ea9bc87981 | |||
| 33d92551da | |||
| 43017036fd | |||
| 707f547014 | |||
| 487924e345 |
+2
-2
@@ -5,7 +5,7 @@ WORKDIR /src
|
|||||||
COPY Directory.Packages.props ./
|
COPY Directory.Packages.props ./
|
||||||
COPY Apis/api/api.csproj Apis/api/
|
COPY Apis/api/api.csproj Apis/api/
|
||||||
COPY Apis/api-models/api-models.csproj Apis/api-models/
|
COPY Apis/api-models/api-models.csproj Apis/api-models/
|
||||||
COPY Apis/email-api-data/email-api-data.csproj Apis/email-api-data/
|
COPY Apis/email-data/email-data.csproj Apis/email-data/
|
||||||
COPY Apis/email-api-models/email-api-models.csproj Apis/email-api-models/
|
COPY Apis/email-api-models/email-api-models.csproj Apis/email-api-models/
|
||||||
COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/
|
COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/
|
||||||
COPY Apis/common/common.csproj Apis/common/
|
COPY Apis/common/common.csproj Apis/common/
|
||||||
@@ -17,7 +17,7 @@ RUN dotnet restore Apis/api/api.csproj
|
|||||||
|
|
||||||
COPY Apis/api/ Apis/api/
|
COPY Apis/api/ Apis/api/
|
||||||
COPY Apis/api-models/ Apis/api-models/
|
COPY Apis/api-models/ Apis/api-models/
|
||||||
COPY Apis/email-api-data/ Apis/email-api-data/
|
COPY Apis/email-data/ Apis/email-data/
|
||||||
COPY Apis/email-api-models/ Apis/email-api-models/
|
COPY Apis/email-api-models/ Apis/email-api-models/
|
||||||
COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/
|
COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/
|
||||||
COPY Apis/common/ Apis/common/
|
COPY Apis/common/ Apis/common/
|
||||||
|
|||||||
+5
-5
@@ -1,10 +1,10 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Api.Services;
|
using Api.Services;
|
||||||
using Api.Services.Contracts;
|
using Api.Services.Contracts;
|
||||||
using EmailApi.Data;
|
using Email.Data;
|
||||||
using EmailApi.Data.Repositories;
|
using Email.Data.Repositories;
|
||||||
using EmailApi.Data.Repositories.Contracts;
|
using Email.Data.Repositories.Contracts;
|
||||||
using EmailApi.Data.Services;
|
using Email.Data.Services;
|
||||||
using EmailApi.Models.Clients;
|
using EmailApi.Models.Clients;
|
||||||
using EmailApi.Models.Settings;
|
using EmailApi.Models.Settings;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@@ -57,7 +57,7 @@ try
|
|||||||
options.UseSqlServer(connectionString, sql =>
|
options.UseSqlServer(connectionString, sql =>
|
||||||
{
|
{
|
||||||
sql.MigrationsHistoryTable(EmailApiDbContext.MigrationTableName, EmailApiDbContext.SchemaName);
|
sql.MigrationsHistoryTable(EmailApiDbContext.MigrationTableName, EmailApiDbContext.SchemaName);
|
||||||
sql.MigrationsAssembly("email-api-data");
|
sql.MigrationsAssembly("email-data");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using Api.Services.Contracts;
|
using Api.Services.Contracts;
|
||||||
using CvMatcher.Models.Responses;
|
using CvMatcher.Models.Responses;
|
||||||
using EmailApi.Data.Services;
|
using Email.Data.Services;
|
||||||
using EmailApi.Models.Clients;
|
using EmailApi.Models.Clients;
|
||||||
using EmailApi.Models.Requests;
|
using EmailApi.Models.Requests;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\api-models\api-models.csproj" />
|
<ProjectReference Include="..\api-models\api-models.csproj" />
|
||||||
<ProjectReference Include="..\email-api-data\email-api-data.csproj" />
|
<ProjectReference Include="..\email-data\email-data.csproj" />
|
||||||
<ProjectReference Include="..\email-api-models\email-api-models.csproj" />
|
<ProjectReference Include="..\email-api-models\email-api-models.csproj" />
|
||||||
<ProjectReference Include="..\cv-matcher-api-models\cv-matcher-api-models.csproj" />
|
<ProjectReference Include="..\cv-matcher-api-models\cv-matcher-api-models.csproj" />
|
||||||
<ProjectReference Include="..\common\common.csproj" />
|
<ProjectReference Include="..\common\common.csproj" />
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ namespace CvMatcher.Data;
|
|||||||
|
|
||||||
public sealed class CvMatcherDbContext : DbContext
|
public sealed class CvMatcherDbContext : DbContext
|
||||||
{
|
{
|
||||||
public const string SchemaName = "cvMatcher";
|
public const string SchemaName = MigrationConstants.SchemaName;
|
||||||
public const string MigrationTableName = "_Migrations";
|
public const string MigrationTableName = MigrationConstants.MigrationTableName;
|
||||||
|
|
||||||
public CvMatcherDbContext(DbContextOptions<CvMatcherDbContext> options) : base(options)
|
public CvMatcherDbContext(DbContextOptions<CvMatcherDbContext> options) : base(options)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace CvMatcher.Data;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Schema constants used by CvMatcherDbContext and migrations.
|
||||||
|
/// Centralized to avoid hardcoded strings and ensure consistency.
|
||||||
|
/// </summary>
|
||||||
|
public static class MigrationConstants
|
||||||
|
{
|
||||||
|
public const string SchemaName = "cvMatcher";
|
||||||
|
public const string MigrationTableName = "_Migrations";
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using CvMatcher.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -12,11 +13,11 @@ namespace CvMatcher.Data.Migrations
|
|||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.EnsureSchema(
|
migrationBuilder.EnsureSchema(
|
||||||
name: "cvMatcher");
|
name: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "ChatCache",
|
name: "ChatCache",
|
||||||
schema: "cvMatcher",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
CacheKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
CacheKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -32,7 +33,7 @@ namespace CvMatcher.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Results",
|
name: "Results",
|
||||||
schema: "cvMatcher",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -49,7 +50,7 @@ namespace CvMatcher.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Results_CvDocumentId_JobDocumentId",
|
name: "IX_Results_CvDocumentId_JobDocumentId",
|
||||||
schema: "cvMatcher",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "Results",
|
table: "Results",
|
||||||
columns: new[] { "CvDocumentId", "JobDocumentId" },
|
columns: new[] { "CvDocumentId", "JobDocumentId" },
|
||||||
unique: true);
|
unique: true);
|
||||||
@@ -60,11 +61,11 @@ namespace CvMatcher.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "ChatCache",
|
name: "ChatCache",
|
||||||
schema: "cvMatcher");
|
schema: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Results",
|
name: "Results",
|
||||||
schema: "cvMatcher");
|
schema: MigrationConstants.SchemaName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using CvMatcher.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ namespace CvMatcher.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.AddColumn<string>(
|
migrationBuilder.AddColumn<string>(
|
||||||
name: "Language",
|
name: "Language",
|
||||||
schema: "cvMatcher",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "Results",
|
table: "Results",
|
||||||
type: "nvarchar(max)",
|
type: "nvarchar(max)",
|
||||||
nullable: false,
|
nullable: false,
|
||||||
@@ -24,7 +25,7 @@ namespace CvMatcher.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.DropColumn(
|
migrationBuilder.DropColumn(
|
||||||
name: "Language",
|
name: "Language",
|
||||||
schema: "cvMatcher",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "Results");
|
table: "Results");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using CvMatcher.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -13,7 +14,7 @@ namespace CvMatcher.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "AiPrompts",
|
name: "AiPrompts",
|
||||||
schema: "cvMatcher",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
||||||
@@ -28,7 +29,7 @@ namespace CvMatcher.Data.Migrations
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.InsertData(
|
migrationBuilder.InsertData(
|
||||||
schema: "cvMatcher",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "AiPrompts",
|
table: "AiPrompts",
|
||||||
columns: ["Key", "Language", "Value", "Description"],
|
columns: ["Key", "Language", "Value", "Description"],
|
||||||
values: new object[]
|
values: new object[]
|
||||||
@@ -43,7 +44,7 @@ namespace CvMatcher.Data.Migrations
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.DropTable(name: "AiPrompts", schema: "cvMatcher");
|
migrationBuilder.DropTable(name: "AiPrompts", schema: MigrationConstants.SchemaName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ using CvMatcher.Data.Entities;
|
|||||||
using CvMatcher.Data.Repositories.Contracts;
|
using CvMatcher.Data.Repositories.Contracts;
|
||||||
using CvMatcher.Models.Responses;
|
using CvMatcher.Models.Responses;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CvMatcher.Data.Repositories;
|
namespace CvMatcher.Data.Repositories;
|
||||||
|
|
||||||
@@ -15,5 +15,6 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\shared-data\shared-data.csproj" />
|
<ProjectReference Include="..\shared-data\shared-data.csproj" />
|
||||||
|
<ProjectReference Include="..\cv-matcher-api-models\cv-matcher-api-models.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ namespace CvSearch.Data;
|
|||||||
|
|
||||||
public sealed class CvSearchDbContext : DbContext
|
public sealed class CvSearchDbContext : DbContext
|
||||||
{
|
{
|
||||||
public const string SchemaName = "cvSearch";
|
public const string SchemaName = MigrationConstants.SchemaName;
|
||||||
public const string MigrationTableName = "_Migrations";
|
public const string MigrationTableName = MigrationConstants.MigrationTableName;
|
||||||
|
|
||||||
public CvSearchDbContext(DbContextOptions<CvSearchDbContext> options) : base(options) { }
|
public CvSearchDbContext(DbContextOptions<CvSearchDbContext> options) : base(options) { }
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace CvSearch.Data;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Schema constants used by CvSearchDbContext and migrations.
|
||||||
|
/// Centralized to avoid hardcoded strings and ensure consistency.
|
||||||
|
/// </summary>
|
||||||
|
public static class MigrationConstants
|
||||||
|
{
|
||||||
|
public const string SchemaName = "cvSearch";
|
||||||
|
public const string MigrationTableName = "_Migrations";
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using CvSearch.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -12,11 +13,11 @@ namespace CvSearch.Data.Migrations
|
|||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.EnsureSchema(
|
migrationBuilder.EnsureSchema(
|
||||||
name: "cvSearch");
|
name: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "JobSearchResults",
|
name: "JobSearchResults",
|
||||||
schema: "cvSearch",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -36,7 +37,7 @@ namespace CvSearch.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "JobSearchSessions",
|
name: "JobSearchSessions",
|
||||||
schema: "cvSearch",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -55,7 +56,7 @@ namespace CvSearch.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "JobSearchTokens",
|
name: "JobSearchTokens",
|
||||||
schema: "cvSearch",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -88,15 +89,15 @@ namespace CvSearch.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "JobSearchResults",
|
name: "JobSearchResults",
|
||||||
schema: "cvSearch");
|
schema: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "JobSearchSessions",
|
name: "JobSearchSessions",
|
||||||
schema: "cvSearch");
|
schema: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "JobSearchTokens",
|
name: "JobSearchTokens",
|
||||||
schema: "cvSearch");
|
schema: MigrationConstants.SchemaName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using CvSearch.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ namespace CvSearch.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.AddColumn<string>(
|
migrationBuilder.AddColumn<string>(
|
||||||
name: "Language",
|
name: "Language",
|
||||||
schema: "cvSearch",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "JobSearchTokens",
|
table: "JobSearchTokens",
|
||||||
type: "nvarchar(8)",
|
type: "nvarchar(8)",
|
||||||
maxLength: 8,
|
maxLength: 8,
|
||||||
@@ -21,7 +22,7 @@ namespace CvSearch.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.AddColumn<string>(
|
migrationBuilder.AddColumn<string>(
|
||||||
name: "Language",
|
name: "Language",
|
||||||
schema: "cvSearch",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "JobSearchSessions",
|
table: "JobSearchSessions",
|
||||||
type: "nvarchar(8)",
|
type: "nvarchar(8)",
|
||||||
maxLength: 8,
|
maxLength: 8,
|
||||||
@@ -34,12 +35,12 @@ namespace CvSearch.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.DropColumn(
|
migrationBuilder.DropColumn(
|
||||||
name: "Language",
|
name: "Language",
|
||||||
schema: "cvSearch",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "JobSearchTokens");
|
table: "JobSearchTokens");
|
||||||
|
|
||||||
migrationBuilder.DropColumn(
|
migrationBuilder.DropColumn(
|
||||||
name: "Language",
|
name: "Language",
|
||||||
schema: "cvSearch",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "JobSearchSessions");
|
table: "JobSearchSessions");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
using CvSearch.Models.Data.Entities;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
|
|
||||||
namespace CvSearch.Models.Data;
|
|
||||||
|
|
||||||
public sealed class CvSearchDbContext : DbContext
|
|
||||||
{
|
|
||||||
public const string SchemaName = "cvSearch";
|
|
||||||
public const string MigrationTableName = "_Migrations";
|
|
||||||
|
|
||||||
public CvSearchDbContext(DbContextOptions<CvSearchDbContext> options) : base(options) { }
|
|
||||||
|
|
||||||
public DbSet<JobSearchTokenEntity> JobSearchTokens => Set<JobSearchTokenEntity>();
|
|
||||||
public DbSet<JobSearchSessionEntity> JobSearchSessions => Set<JobSearchSessionEntity>();
|
|
||||||
public DbSet<JobSearchResultEntity> JobSearchResults => Set<JobSearchResultEntity>();
|
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
modelBuilder.HasDefaultSchema(SchemaName);
|
|
||||||
|
|
||||||
modelBuilder.Entity<JobSearchTokenEntity>(entity =>
|
|
||||||
{
|
|
||||||
entity.ToTable("JobSearchTokens");
|
|
||||||
entity.HasKey(x => x.Id);
|
|
||||||
entity.Property(x => x.Id).HasMaxLength(64);
|
|
||||||
entity.Property(x => x.CvDocumentId).HasMaxLength(64).IsRequired();
|
|
||||||
entity.Property(x => x.Email).HasMaxLength(256).IsRequired();
|
|
||||||
entity.Property(x => x.Language).HasMaxLength(8).HasDefaultValue("en").IsRequired();
|
|
||||||
entity.Property(x => x.Used).HasDefaultValue(false);
|
|
||||||
entity.Property(x => x.CreatedAt).HasDefaultValueSql("SYSUTCDATETIME()");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity<JobSearchSessionEntity>(entity =>
|
|
||||||
{
|
|
||||||
entity.ToTable("JobSearchSessions");
|
|
||||||
entity.HasKey(x => x.Id);
|
|
||||||
entity.Property(x => x.Id).HasMaxLength(64);
|
|
||||||
entity.Property(x => x.TokenId).HasMaxLength(64).IsRequired();
|
|
||||||
entity.Property(x => x.CvDocumentId).HasMaxLength(64).IsRequired();
|
|
||||||
entity.Property(x => x.Email).HasMaxLength(256).IsRequired();
|
|
||||||
entity.Property(x => x.Status).HasMaxLength(32).IsRequired();
|
|
||||||
entity.Property(x => x.Keywords).HasMaxLength(1000);
|
|
||||||
entity.Property(x => x.ProviderConfigJson).IsRequired(false);
|
|
||||||
entity.Property(x => x.Language).HasMaxLength(8).HasDefaultValue("en").IsRequired();
|
|
||||||
entity.Property(x => x.CreatedAt).HasDefaultValueSql("SYSUTCDATETIME()");
|
|
||||||
entity.HasIndex(x => x.Status);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity<JobSearchResultEntity>(entity =>
|
|
||||||
{
|
|
||||||
entity.ToTable("JobSearchResults");
|
|
||||||
entity.HasKey(x => x.Id);
|
|
||||||
entity.Property(x => x.Id).HasMaxLength(64);
|
|
||||||
entity.Property(x => x.SessionId).HasMaxLength(64).IsRequired();
|
|
||||||
entity.Property(x => x.ProviderName).HasMaxLength(128);
|
|
||||||
entity.Property(x => x.JobUrl).HasMaxLength(2048);
|
|
||||||
entity.Property(x => x.JobTitle).HasMaxLength(512);
|
|
||||||
entity.Property(x => x.CreatedAt).HasDefaultValueSql("SYSUTCDATETIME()");
|
|
||||||
entity.HasIndex(x => x.SessionId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
namespace CvSearch.Models.Data.Entities;
|
|
||||||
|
|
||||||
public sealed class JobSearchResultEntity
|
|
||||||
{
|
|
||||||
public string Id { get; set; } = string.Empty;
|
|
||||||
public string SessionId { get; set; } = string.Empty;
|
|
||||||
public string ProviderName { get; set; } = string.Empty;
|
|
||||||
public string JobUrl { get; set; } = string.Empty;
|
|
||||||
public string JobTitle { get; set; } = string.Empty;
|
|
||||||
public string JobText { get; set; } = string.Empty;
|
|
||||||
public int Score { get; set; }
|
|
||||||
public string ResultJson { get; set; } = string.Empty;
|
|
||||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
namespace CvSearch.Models.Data.Entities;
|
|
||||||
|
|
||||||
public sealed class JobSearchSessionEntity
|
|
||||||
{
|
|
||||||
public string Id { get; set; } = string.Empty;
|
|
||||||
public string TokenId { get; set; } = string.Empty;
|
|
||||||
public string CvDocumentId { get; set; } = string.Empty;
|
|
||||||
public string Email { get; set; } = string.Empty;
|
|
||||||
public string Status { get; set; } = JobSearchStatus.Pending;
|
|
||||||
public string Keywords { get; set; } = string.Empty;
|
|
||||||
public string? ProviderConfigJson { get; set; }
|
|
||||||
public string Language { get; set; } = "en";
|
|
||||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class JobSearchStatus
|
|
||||||
{
|
|
||||||
public const string Pending = "Pending";
|
|
||||||
public const string Processing = "Processing";
|
|
||||||
public const string Done = "Done";
|
|
||||||
public const string Failed = "Failed";
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
namespace CvSearch.Models.Data.Entities;
|
|
||||||
|
|
||||||
public sealed class JobSearchTokenEntity
|
|
||||||
{
|
|
||||||
public string Id { get; set; } = string.Empty;
|
|
||||||
public string CvDocumentId { get; set; } = string.Empty;
|
|
||||||
public string Email { get; set; } = string.Empty;
|
|
||||||
public string Language { get; set; } = "en";
|
|
||||||
public DateTime ExpiresAt { get; set; }
|
|
||||||
public bool Used { get; set; }
|
|
||||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,7 @@ ARG BUILD_CONFIGURATION=Release
|
|||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
|
|
||||||
COPY Apis/email-api/email-api.csproj Apis/email-api/
|
COPY Apis/email-api/email-api.csproj Apis/email-api/
|
||||||
COPY Apis/email-api-data/email-api-data.csproj Apis/email-api-data/
|
COPY Apis/email-data/email-data.csproj Apis/email-data/
|
||||||
COPY Apis/email-api-models/email-api-models.csproj Apis/email-api-models/
|
COPY Apis/email-api-models/email-api-models.csproj Apis/email-api-models/
|
||||||
COPY Apis/api-models/api-models.csproj Apis/api-models/
|
COPY Apis/api-models/api-models.csproj Apis/api-models/
|
||||||
COPY Apis/common/common.csproj Apis/common/
|
COPY Apis/common/common.csproj Apis/common/
|
||||||
@@ -14,7 +14,7 @@ COPY Directory.Packages.props ./
|
|||||||
RUN dotnet restore Apis/email-api/email-api.csproj
|
RUN dotnet restore Apis/email-api/email-api.csproj
|
||||||
|
|
||||||
COPY Apis/email-api/ Apis/email-api/
|
COPY Apis/email-api/ Apis/email-api/
|
||||||
COPY Apis/email-api-data/ Apis/email-api-data/
|
COPY Apis/email-data/ Apis/email-data/
|
||||||
COPY Apis/email-api-models/ Apis/email-api-models/
|
COPY Apis/email-api-models/ Apis/email-api-models/
|
||||||
COPY Apis/api-models/ Apis/api-models/
|
COPY Apis/api-models/ Apis/api-models/
|
||||||
COPY Apis/common/ Apis/common/
|
COPY Apis/common/ Apis/common/
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using EmailApi.Data;
|
using Email.Data;
|
||||||
using EmailApi.Data.Repositories;
|
using Email.Data.Repositories;
|
||||||
using EmailApi.Data.Repositories.Contracts;
|
using Email.Data.Repositories.Contracts;
|
||||||
using EmailApi.Data.Services;
|
using Email.Data.Services;
|
||||||
using EmailApi.Services;
|
using EmailApi.Services;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Models.Settings;
|
using Models.Settings;
|
||||||
@@ -35,7 +35,7 @@ try
|
|||||||
options.UseSqlServer(connectionString, sql =>
|
options.UseSqlServer(connectionString, sql =>
|
||||||
{
|
{
|
||||||
sql.MigrationsHistoryTable(EmailApiDbContext.MigrationTableName, EmailApiDbContext.SchemaName);
|
sql.MigrationsHistoryTable(EmailApiDbContext.MigrationTableName, EmailApiDbContext.SchemaName);
|
||||||
sql.MigrationsAssembly("email-api-data");
|
sql.MigrationsAssembly("email-data");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using EmailApi.Data.Services;
|
using Email.Data.Services;
|
||||||
using EmailApi.Models.Requests;
|
using EmailApi.Models.Requests;
|
||||||
using MailKit.Net.Smtp;
|
using MailKit.Net.Smtp;
|
||||||
using MailKit.Security;
|
using MailKit.Security;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
<ProjectReference Include="..\..\Helpers\startup-helpers\startup-helpers.csproj" />
|
<ProjectReference Include="..\..\Helpers\startup-helpers\startup-helpers.csproj" />
|
||||||
<ProjectReference Include="..\api-models\api-models.csproj" />
|
<ProjectReference Include="..\api-models\api-models.csproj" />
|
||||||
<ProjectReference Include="..\common\common.csproj" />
|
<ProjectReference Include="..\common\common.csproj" />
|
||||||
<ProjectReference Include="..\email-api-data\email-api-data.csproj" />
|
<ProjectReference Include="..\email-data\email-data.csproj" />
|
||||||
<ProjectReference Include="..\email-api-models\email-api-models.csproj" />
|
<ProjectReference Include="..\email-api-models\email-api-models.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
using EmailApi.Data.Entities;
|
using Email.Data.Entities;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace EmailApi.Data;
|
namespace Email.Data;
|
||||||
|
|
||||||
public sealed class EmailApiDbContext : DbContext
|
public sealed class EmailApiDbContext : DbContext
|
||||||
{
|
{
|
||||||
public const string SchemaName = "emailApi";
|
public const string SchemaName = MigrationConstants.SchemaName;
|
||||||
public const string MigrationTableName = "_Migrations";
|
public const string MigrationTableName = MigrationConstants.MigrationTableName;
|
||||||
|
|
||||||
public EmailApiDbContext(DbContextOptions<EmailApiDbContext> options) : base(options) { }
|
public EmailApiDbContext(DbContextOptions<EmailApiDbContext> options) : base(options) { }
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
namespace EmailApi.Data.Entities;
|
namespace Email.Data.Entities;
|
||||||
|
|
||||||
// composite PK (Key + Language) — BaseEntity not applicable
|
// composite PK (Key + Language) — BaseEntity not applicable
|
||||||
public sealed class EmailTemplateEntity
|
public sealed class EmailTemplateEntity
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace Email.Data;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Schema constants used by EmailApiDbContext and migrations.
|
||||||
|
/// Centralized to avoid hardcoded strings and ensure consistency.
|
||||||
|
/// </summary>
|
||||||
|
public static class MigrationConstants
|
||||||
|
{
|
||||||
|
public const string SchemaName = "email";
|
||||||
|
public const string MigrationTableName = "_Migrations";
|
||||||
|
}
|
||||||
+5
-5
@@ -1,6 +1,6 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using System;
|
using System;
|
||||||
using EmailApi.Data;
|
using Email.Data;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
@@ -9,7 +9,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
namespace EmailApi.Data.Migrations
|
namespace Email.Data.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(EmailApiDbContext))]
|
[DbContext(typeof(EmailApiDbContext))]
|
||||||
[Migration("20260528100000_CreateEmailTemplates")]
|
[Migration("20260528100000_CreateEmailTemplates")]
|
||||||
@@ -20,13 +20,13 @@ namespace EmailApi.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasDefaultSchema("emailApi")
|
.HasDefaultSchema(MigrationConstants.SchemaName)
|
||||||
.HasAnnotation("ProductVersion", "10.0.7")
|
.HasAnnotation("ProductVersion", "10.0.7")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|
||||||
modelBuilder.Entity("EmailApi.Data.Entities.EmailTemplateEntity", b =>
|
modelBuilder.Entity("Email.Data.Entities.EmailTemplateEntity", b =>
|
||||||
{
|
{
|
||||||
b.Property<string>("Key")
|
b.Property<string>("Key")
|
||||||
.HasMaxLength(128)
|
.HasMaxLength(128)
|
||||||
@@ -61,7 +61,7 @@ namespace EmailApi.Data.Migrations
|
|||||||
|
|
||||||
b.HasKey("Key", "Language");
|
b.HasKey("Key", "Language");
|
||||||
|
|
||||||
b.ToTable("EmailTemplates", "emailApi");
|
b.ToTable("EmailTemplates", MigrationConstants.SchemaName);
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
+5
-4
@@ -1,9 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Email.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
namespace EmailApi.Data.Migrations
|
namespace Email.Data.Migrations
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public partial class CreateEmailTemplates : Migration
|
public partial class CreateEmailTemplates : Migration
|
||||||
@@ -11,11 +12,11 @@ namespace EmailApi.Data.Migrations
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.EnsureSchema(name: "emailApi");
|
migrationBuilder.EnsureSchema(name: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "EmailTemplates",
|
name: "EmailTemplates",
|
||||||
schema: "emailApi",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
||||||
@@ -39,7 +40,7 @@ namespace EmailApi.Data.Migrations
|
|||||||
=> m.InsertData("EmailTemplates",
|
=> m.InsertData("EmailTemplates",
|
||||||
["Key", "Language", "Value", "Description", "OperatorCopy"],
|
["Key", "Language", "Value", "Description", "OperatorCopy"],
|
||||||
[key, lang, value, description, operatorCopy],
|
[key, lang, value, description, operatorCopy],
|
||||||
"emailApi");
|
MigrationConstants.SchemaName);
|
||||||
|
|
||||||
// ── HTML shell (no operator copy — these are layout fragments, not addressable emails) ──
|
// ── HTML shell (no operator copy — these are layout fragments, not addressable emails) ──
|
||||||
Row("email.html-shell.start", "*",
|
Row("email.html-shell.start", "*",
|
||||||
+5
-5
@@ -1,6 +1,6 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using System;
|
using System;
|
||||||
using EmailApi.Data;
|
using Email.Data;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
@@ -9,7 +9,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
namespace EmailApi.Data.Migrations
|
namespace Email.Data.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(EmailApiDbContext))]
|
[DbContext(typeof(EmailApiDbContext))]
|
||||||
[Migration("20260528130652_SeedEmailTemplates")]
|
[Migration("20260528130652_SeedEmailTemplates")]
|
||||||
@@ -20,13 +20,13 @@ namespace EmailApi.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasDefaultSchema("emailApi")
|
.HasDefaultSchema(MigrationConstants.SchemaName)
|
||||||
.HasAnnotation("ProductVersion", "10.0.7")
|
.HasAnnotation("ProductVersion", "10.0.7")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|
||||||
modelBuilder.Entity("EmailApi.Data.Entities.EmailTemplateEntity", b =>
|
modelBuilder.Entity("Email.Data.Entities.EmailTemplateEntity", b =>
|
||||||
{
|
{
|
||||||
b.Property<string>("Key")
|
b.Property<string>("Key")
|
||||||
.HasMaxLength(128)
|
.HasMaxLength(128)
|
||||||
@@ -61,7 +61,7 @@ namespace EmailApi.Data.Migrations
|
|||||||
|
|
||||||
b.HasKey("Key", "Language");
|
b.HasKey("Key", "Language");
|
||||||
|
|
||||||
b.ToTable("EmailTemplates", "emailApi");
|
b.ToTable("EmailTemplates", MigrationConstants.SchemaName);
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
+4
-2
@@ -1,8 +1,9 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Email.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
namespace EmailApi.Data.Migrations
|
namespace Email.Data.Migrations
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public partial class SeedEmailTemplates : Migration
|
public partial class SeedEmailTemplates : Migration
|
||||||
@@ -26,12 +27,13 @@ namespace EmailApi.Data.Migrations
|
|||||||
private static void Seed(MigrationBuilder m)
|
private static void Seed(MigrationBuilder m)
|
||||||
{
|
{
|
||||||
const string op = "contact@myai.ro";
|
const string op = "contact@myai.ro";
|
||||||
|
const string schema = MigrationConstants.SchemaName;
|
||||||
|
|
||||||
void Row(string key, string lang, string value, string description = "", string operatorCopy = "")
|
void Row(string key, string lang, string value, string description = "", string operatorCopy = "")
|
||||||
=> m.InsertData("EmailTemplates",
|
=> m.InsertData("EmailTemplates",
|
||||||
["Key", "Language", "Value", "Description", "OperatorCopy"],
|
["Key", "Language", "Value", "Description", "OperatorCopy"],
|
||||||
[key, lang, value, description, operatorCopy],
|
[key, lang, value, description, operatorCopy],
|
||||||
"emailApi");
|
schema);
|
||||||
|
|
||||||
// ── HTML shell (no operator copy — these are layout fragments, not addressable emails) ──
|
// ── HTML shell (no operator copy — these are layout fragments, not addressable emails) ──
|
||||||
Row("email.html-shell.start", "*",
|
Row("email.html-shell.start", "*",
|
||||||
+5
-5
@@ -1,6 +1,6 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using System;
|
using System;
|
||||||
using EmailApi.Data;
|
using Email.Data;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
@@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
namespace EmailApi.Data.Migrations
|
namespace Email.Data.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(EmailApiDbContext))]
|
[DbContext(typeof(EmailApiDbContext))]
|
||||||
partial class EmailApiDbContextModelSnapshot : ModelSnapshot
|
partial class EmailApiDbContextModelSnapshot : ModelSnapshot
|
||||||
@@ -17,13 +17,13 @@ namespace EmailApi.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasDefaultSchema("emailApi")
|
.HasDefaultSchema(MigrationConstants.SchemaName)
|
||||||
.HasAnnotation("ProductVersion", "10.0.7")
|
.HasAnnotation("ProductVersion", "10.0.7")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|
||||||
modelBuilder.Entity("EmailApi.Data.Entities.EmailTemplateEntity", b =>
|
modelBuilder.Entity("Email.Data.Entities.EmailTemplateEntity", b =>
|
||||||
{
|
{
|
||||||
b.Property<string>("Key")
|
b.Property<string>("Key")
|
||||||
.HasMaxLength(128)
|
.HasMaxLength(128)
|
||||||
@@ -58,7 +58,7 @@ namespace EmailApi.Data.Migrations
|
|||||||
|
|
||||||
b.HasKey("Key", "Language");
|
b.HasKey("Key", "Language");
|
||||||
|
|
||||||
b.ToTable("EmailTemplates", "emailApi");
|
b.ToTable("EmailTemplates", MigrationConstants.SchemaName);
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
using EmailApi.Data.Entities;
|
using Email.Data.Entities;
|
||||||
|
|
||||||
namespace EmailApi.Data.Repositories.Contracts;
|
namespace Email.Data.Repositories.Contracts;
|
||||||
|
|
||||||
public interface IEmailTemplateRepository
|
public interface IEmailTemplateRepository
|
||||||
{
|
{
|
||||||
+3
-3
@@ -1,8 +1,8 @@
|
|||||||
using EmailApi.Data.Entities;
|
using Email.Data.Entities;
|
||||||
using EmailApi.Data.Repositories.Contracts;
|
using Email.Data.Repositories.Contracts;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace EmailApi.Data.Repositories;
|
namespace Email.Data.Repositories;
|
||||||
|
|
||||||
public sealed class EfEmailTemplateRepository : IEmailTemplateRepository
|
public sealed class EfEmailTemplateRepository : IEmailTemplateRepository
|
||||||
{
|
{
|
||||||
+2
-2
@@ -1,9 +1,9 @@
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using EmailApi.Data.Repositories.Contracts;
|
using Email.Data.Repositories.Contracts;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace EmailApi.Data.Services;
|
namespace Email.Data.Services;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Singleton implementation of <see cref="IEmailTemplateService"/> that caches all email templates
|
/// Singleton implementation of <see cref="IEmailTemplateService"/> that caches all email templates
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
namespace EmailApi.Data.Services;
|
namespace Email.Data.Services;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Provides access to localised email templates stored in the <c>emailApi.EmailTemplates</c> table.
|
/// Provides access to localised email templates stored in the <c>emailApi.EmailTemplates</c> table.
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<AssemblyName>email-api-data</AssemblyName>
|
<AssemblyName>email-data</AssemblyName>
|
||||||
<RootNamespace>EmailApi.Data</RootNamespace>
|
<RootNamespace>Email.Data</RootNamespace>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -13,4 +13,8 @@
|
|||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\shared-data\shared-data.csproj" />
|
||||||
|
<ProjectReference Include="..\email-api-models\email-api-models.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace MyAi.Data;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Schema constants used by MyAiDbContext and migrations.
|
||||||
|
/// Centralized to avoid hardcoded strings and ensure consistency.
|
||||||
|
/// </summary>
|
||||||
|
public static class MigrationConstants
|
||||||
|
{
|
||||||
|
public const string SchemaName = "myAi";
|
||||||
|
public const string MigrationTableName = "_Migrations";
|
||||||
|
}
|
||||||
@@ -5,8 +5,8 @@ namespace MyAi.Data;
|
|||||||
|
|
||||||
public sealed class MyAiDbContext : DbContext
|
public sealed class MyAiDbContext : DbContext
|
||||||
{
|
{
|
||||||
public const string SchemaName = "myAi";
|
public const string SchemaName = MigrationConstants.SchemaName;
|
||||||
public const string MigrationTableName = "_Migrations";
|
public const string MigrationTableName = MigrationConstants.MigrationTableName;
|
||||||
|
|
||||||
public MyAiDbContext(DbContextOptions<MyAiDbContext> options) : base(options) { }
|
public MyAiDbContext(DbContextOptions<MyAiDbContext> options) : base(options) { }
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using MyAi.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -12,11 +13,11 @@ namespace MyAi.Data.Migrations
|
|||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.EnsureSchema(
|
migrationBuilder.EnsureSchema(
|
||||||
name: "myAi");
|
name: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Templates",
|
name: "Templates",
|
||||||
schema: "myAi",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
||||||
@@ -36,7 +37,7 @@ namespace MyAi.Data.Migrations
|
|||||||
private static void Seed(MigrationBuilder m)
|
private static void Seed(MigrationBuilder m)
|
||||||
{
|
{
|
||||||
void Row(string key, string lang, string value, string description = "")
|
void Row(string key, string lang, string value, string description = "")
|
||||||
=> m.InsertData("Templates", ["Key", "Language", "Value", "Description"], [key, lang, value, description], "myAi");
|
=> m.InsertData("Templates", ["Key", "Language", "Value", "Description"], [key, lang, value, description], MigrationConstants.SchemaName);
|
||||||
|
|
||||||
// Match result email — subject
|
// Match result email — subject
|
||||||
Row("email.match.subject", "en", "MyAi.ro CV Match: {{score}}% - {{jobLabel}}", "Subject for the CV match result email");
|
Row("email.match.subject", "en", "MyAi.ro CV Match: {{score}}% - {{jobLabel}}", "Subject for the CV match result email");
|
||||||
@@ -107,7 +108,7 @@ namespace MyAi.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Templates",
|
name: "Templates",
|
||||||
schema: "myAi");
|
schema: MigrationConstants.SchemaName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using MyAi.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ namespace MyAi.Data.Migrations
|
|||||||
{
|
{
|
||||||
void Update(string key, string lang, string value)
|
void Update(string key, string lang, string value)
|
||||||
=> migrationBuilder.UpdateData("Templates", ["Key", "Language"], [key, lang],
|
=> migrationBuilder.UpdateData("Templates", ["Key", "Language"], [key, lang],
|
||||||
["Value"], [value], "myAi");
|
["Value"], [value], MigrationConstants.SchemaName);
|
||||||
|
|
||||||
// email.match.body — en
|
// email.match.body — en
|
||||||
Update("email.match.body", "en",
|
Update("email.match.body", "en",
|
||||||
@@ -120,7 +121,7 @@ namespace MyAi.Data.Migrations
|
|||||||
{
|
{
|
||||||
void Update(string key, string lang, string value)
|
void Update(string key, string lang, string value)
|
||||||
=> migrationBuilder.UpdateData("Templates", ["Key", "Language"], [key, lang],
|
=> migrationBuilder.UpdateData("Templates", ["Key", "Language"], [key, lang],
|
||||||
["Value"], [value], "myAi");
|
["Value"], [value], MigrationConstants.SchemaName);
|
||||||
|
|
||||||
Update("email.match.body", "en",
|
Update("email.match.body", "en",
|
||||||
"CV Matcher result\n\nCV Document ID: {{cvDocumentId}}\nJob: {{jobLabel}}\nJob URL: {{jobUrl}}\nScore: {{score}}%\n\nSummary:\n{{summary}}\n\nStrengths:\n{{strengths}}\n\nGaps:\n{{gaps}}\n\nRecommendations:\n{{recommendations}}");
|
"CV Matcher result\n\nCV Document ID: {{cvDocumentId}}\nJob: {{jobLabel}}\nJob URL: {{jobUrl}}\nScore: {{score}}%\n\nSummary:\n{{summary}}\n\nStrengths:\n{{strengths}}\n\nGaps:\n{{gaps}}\n\nRecommendations:\n{{recommendations}}");
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using MyAi.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -10,8 +11,8 @@ namespace MyAi.Data.Migrations
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.Sql("DELETE FROM [myAi].[Templates] WHERE [Key] LIKE 'email.%'");
|
migrationBuilder.Sql($"DELETE FROM [{MigrationConstants.SchemaName}].[Templates] WHERE [Key] LIKE 'email.%'");
|
||||||
migrationBuilder.Sql("DELETE FROM [myAi].[Templates] WHERE [Key] LIKE 'ai.%'");
|
migrationBuilder.Sql($"DELETE FROM [{MigrationConstants.SchemaName}].[Templates] WHERE [Key] LIKE 'ai.%'");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
namespace MyAi.Models.Data.Entities;
|
|
||||||
|
|
||||||
public sealed class TemplateEntity
|
|
||||||
{
|
|
||||||
public string Key { get; set; } = string.Empty;
|
|
||||||
public string Language { get; set; } = string.Empty;
|
|
||||||
public string Value { get; set; } = string.Empty;
|
|
||||||
public string Description { get; set; } = string.Empty;
|
|
||||||
public DateTime UpdatedAt { get; set; }
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
using MyAi.Models.Data.Entities;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
|
|
||||||
namespace MyAi.Models.Data;
|
|
||||||
|
|
||||||
public sealed class MyAiDbContext : DbContext
|
|
||||||
{
|
|
||||||
public const string SchemaName = "myAi";
|
|
||||||
public const string MigrationTableName = "_MyAiMigrations";
|
|
||||||
|
|
||||||
public MyAiDbContext(DbContextOptions<MyAiDbContext> options) : base(options) { }
|
|
||||||
|
|
||||||
public DbSet<TemplateEntity> Templates => Set<TemplateEntity>();
|
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
modelBuilder.HasDefaultSchema(SchemaName);
|
|
||||||
|
|
||||||
modelBuilder.Entity<TemplateEntity>(entity =>
|
|
||||||
{
|
|
||||||
entity.ToTable("Templates");
|
|
||||||
entity.HasKey(x => new { x.Key, x.Language });
|
|
||||||
entity.Property(x => x.Key).HasMaxLength(128);
|
|
||||||
entity.Property(x => x.Language).HasMaxLength(8);
|
|
||||||
entity.Property(x => x.Value).IsRequired();
|
|
||||||
entity.Property(x => x.Description).HasMaxLength(500).HasDefaultValue(string.Empty);
|
|
||||||
entity.Property(x => x.UpdatedAt).HasDefaultValueSql("SYSUTCDATETIME()");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace Rag.Data;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Schema constants used by RagDbContext and migrations.
|
||||||
|
/// Centralized to avoid hardcoded strings and ensure consistency.
|
||||||
|
/// </summary>
|
||||||
|
public static class MigrationConstants
|
||||||
|
{
|
||||||
|
public const string SchemaName = "rag";
|
||||||
|
public const string MigrationTableName = "_Migrations";
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Rag.Data;
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
@@ -12,11 +13,11 @@ namespace Rag.Data.Migrations
|
|||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.EnsureSchema(
|
migrationBuilder.EnsureSchema(
|
||||||
name: "rag");
|
name: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "ChatCompletionCache",
|
name: "ChatCompletionCache",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
CacheKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
CacheKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -32,7 +33,7 @@ namespace Rag.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Documents",
|
name: "Documents",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -52,7 +53,7 @@ namespace Rag.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "EmbeddingCache",
|
name: "EmbeddingCache",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
CacheKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
CacheKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -68,7 +69,7 @@ namespace Rag.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Chunks",
|
name: "Chunks",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
@@ -91,25 +92,25 @@ namespace Rag.Data.Migrations
|
|||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Chunks_DocumentId",
|
name: "IX_Chunks_DocumentId",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "Chunks",
|
table: "Chunks",
|
||||||
column: "DocumentId");
|
column: "DocumentId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Documents_DocumentType",
|
name: "IX_Documents_DocumentType",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "Documents",
|
table: "Documents",
|
||||||
column: "DocumentType");
|
column: "DocumentType");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Documents_TextHash",
|
name: "IX_Documents_TextHash",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "Documents",
|
table: "Documents",
|
||||||
column: "TextHash");
|
column: "TextHash");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_EmbeddingCache_TextHash",
|
name: "IX_EmbeddingCache_TextHash",
|
||||||
schema: "rag",
|
schema: MigrationConstants.SchemaName,
|
||||||
table: "EmbeddingCache",
|
table: "EmbeddingCache",
|
||||||
column: "TextHash");
|
column: "TextHash");
|
||||||
}
|
}
|
||||||
@@ -119,19 +120,19 @@ namespace Rag.Data.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "ChatCompletionCache",
|
name: "ChatCompletionCache",
|
||||||
schema: "rag");
|
schema: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Chunks",
|
name: "Chunks",
|
||||||
schema: "rag");
|
schema: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "EmbeddingCache",
|
name: "EmbeddingCache",
|
||||||
schema: "rag");
|
schema: MigrationConstants.SchemaName);
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Documents",
|
name: "Documents",
|
||||||
schema: "rag");
|
schema: MigrationConstants.SchemaName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ namespace Rag.Data;
|
|||||||
|
|
||||||
public sealed class RagDbContext : DbContext
|
public sealed class RagDbContext : DbContext
|
||||||
{
|
{
|
||||||
public const string SchemaName = "rag";
|
public const string SchemaName = MigrationConstants.SchemaName;
|
||||||
public const string MigrationTableName = "_Migrations";
|
public const string MigrationTableName = MigrationConstants.MigrationTableName;
|
||||||
|
|
||||||
public RagDbContext(DbContextOptions<RagDbContext> options) : base(options)
|
public RagDbContext(DbContextOptions<RagDbContext> options) : base(options)
|
||||||
{
|
{
|
||||||
|
|||||||
+1
@@ -1,6 +1,7 @@
|
|||||||
using Rag.Data;
|
using Rag.Data;
|
||||||
using Rag.Data.Entities;
|
using Rag.Data.Entities;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Rag.Data.Repositories.Contracts;
|
using Rag.Data.Repositories.Contracts;
|
||||||
using Rag.Models;
|
using Rag.Models;
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\shared-data\shared-data.csproj" />
|
<ProjectReference Include="..\shared-data\shared-data.csproj" />
|
||||||
|
<ProjectReference Include="..\rag-api-models\rag-api-models.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ COPY Jobs/cv-search-job/cv-search-job.csproj Jobs/cv-search-job/
|
|||||||
COPY Jobs/job-scheduler/job-scheduler.csproj Jobs/job-scheduler/
|
COPY Jobs/job-scheduler/job-scheduler.csproj Jobs/job-scheduler/
|
||||||
COPY Apis/cv-search-data/cv-search-data.csproj Apis/cv-search-data/
|
COPY Apis/cv-search-data/cv-search-data.csproj Apis/cv-search-data/
|
||||||
COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/
|
COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/
|
||||||
COPY Apis/email-api-data/email-api-data.csproj Apis/email-api-data/
|
COPY Apis/email-data/email-data.csproj Apis/email-data/
|
||||||
COPY Apis/email-api-models/email-api-models.csproj Apis/email-api-models/
|
COPY Apis/email-api-models/email-api-models.csproj Apis/email-api-models/
|
||||||
COPY Apis/common/common.csproj Apis/common/
|
COPY Apis/common/common.csproj Apis/common/
|
||||||
COPY Apis/myai-data/myai-data.csproj Apis/myai-data/
|
COPY Apis/myai-data/myai-data.csproj Apis/myai-data/
|
||||||
@@ -20,7 +20,7 @@ COPY Jobs/cv-search-job/ Jobs/cv-search-job/
|
|||||||
COPY Jobs/job-scheduler/ Jobs/job-scheduler/
|
COPY Jobs/job-scheduler/ Jobs/job-scheduler/
|
||||||
COPY Apis/cv-search-data/ Apis/cv-search-data/
|
COPY Apis/cv-search-data/ Apis/cv-search-data/
|
||||||
COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/
|
COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/
|
||||||
COPY Apis/email-api-data/ Apis/email-api-data/
|
COPY Apis/email-data/ Apis/email-data/
|
||||||
COPY Apis/email-api-models/ Apis/email-api-models/
|
COPY Apis/email-api-models/ Apis/email-api-models/
|
||||||
COPY Apis/common/ Apis/common/
|
COPY Apis/common/ Apis/common/
|
||||||
COPY Apis/myai-data/ Apis/myai-data/
|
COPY Apis/myai-data/ Apis/myai-data/
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ using CvMatcher.Models.Settings;
|
|||||||
using CvSearch.Data;
|
using CvSearch.Data;
|
||||||
using CvSearchJob.Clients;
|
using CvSearchJob.Clients;
|
||||||
using CvSearchJob.Services;
|
using CvSearchJob.Services;
|
||||||
using EmailApi.Data;
|
using Email.Data;
|
||||||
using EmailApi.Data.Repositories;
|
using Email.Data.Repositories;
|
||||||
using EmailApi.Data.Repositories.Contracts;
|
using Email.Data.Repositories.Contracts;
|
||||||
using EmailApi.Data.Services;
|
using Email.Data.Services;
|
||||||
using EmailApi.Models.Clients;
|
using EmailApi.Models.Clients;
|
||||||
using CvSearchJob.Tasks;
|
using CvSearchJob.Tasks;
|
||||||
using JobScheduler.Scheduling;
|
using JobScheduler.Scheduling;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using CvMatcher.Models.Responses;
|
using CvMatcher.Models.Responses;
|
||||||
using CvSearch.Data.Entities;
|
using CvSearch.Data.Entities;
|
||||||
using EmailApi.Data.Services;
|
using Email.Data.Services;
|
||||||
using EmailApi.Models.Clients;
|
using EmailApi.Models.Clients;
|
||||||
using EmailApi.Models.Requests;
|
using EmailApi.Models.Requests;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\Apis\cv-matcher-api-models\cv-matcher-api-models.csproj" />
|
<ProjectReference Include="..\..\Apis\cv-matcher-api-models\cv-matcher-api-models.csproj" />
|
||||||
<ProjectReference Include="..\..\Apis\email-api-data\email-api-data.csproj" />
|
<ProjectReference Include="..\..\Apis\email-data\email-data.csproj" />
|
||||||
<ProjectReference Include="..\..\Apis\email-api-models\email-api-models.csproj" />
|
<ProjectReference Include="..\..\Apis\email-api-models\email-api-models.csproj" />
|
||||||
<ProjectReference Include="..\..\Apis\cv-search-data\cv-search-data.csproj" />
|
<ProjectReference Include="..\..\Apis\cv-search-data\cv-search-data.csproj" />
|
||||||
<ProjectReference Include="..\..\Apis\common\common.csproj" />
|
<ProjectReference Include="..\..\Apis\common\common.csproj" />
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "email-api-models", "Apis\em
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "email-api", "Apis\email-api\email-api.csproj", "{434119EA-2FFC-4433-9B8E-1E6D94006413}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "email-api", "Apis\email-api\email-api.csproj", "{434119EA-2FFC-4433-9B8E-1E6D94006413}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "email-api-data", "Apis\email-api-data\email-api-data.csproj", "{C1D2E3F4-A5B6-4789-CDEF-012345678ABC}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "email-data", "Apis\email-data\email-data.csproj", "{C1D2E3F4-A5B6-4789-CDEF-012345678ABC}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
|||||||
Reference in New Issue
Block a user