Compare commits

..

2 Commits

Author SHA1 Message Date
6b1dda41bc Translation 2025-07-31 15:02:46 +08:00
fd1c47196d 🗃️ Update migration for back dated check in 2025-07-31 15:02:41 +08:00
9 changed files with 1975 additions and 2 deletions

View File

@@ -59,6 +59,7 @@
<PackageReference Include="Swashbuckle.AspNetCore" Version="9.0.3"/>
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="9.0.3"/>
<PackageReference Include="System.ServiceModel.Syndication" Version="9.0.7" />
<PackageReference Include="TencentCloudSDK.Tmt" Version="3.0.1276" />
</ItemGroup>
<ItemGroup>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace DysonNetwork.Sphere.Migrations
{
/// <inheritdoc />
public partial class AddCheckInBackdated : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

View File

@@ -24,7 +24,7 @@ namespace DysonNetwork.Sphere.Migrations
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.3")
.HasAnnotation("ProductVersion", "9.0.7")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "postgis");

View File

@@ -19,6 +19,7 @@ using DysonNetwork.Shared.GeoIp;
using DysonNetwork.Sphere.WebReader;
using DysonNetwork.Sphere.Developer;
using DysonNetwork.Sphere.Discovery;
using DysonNetwork.Sphere.Translation;
namespace DysonNetwork.Sphere.Startup;
@@ -167,6 +168,14 @@ public static class ServiceCollectionExtensions
services.AddScoped<DiscoveryService>();
services.AddScoped<CustomAppService>();
var translationProvider = configuration["Translation:Provider"]?.ToLower();
switch (translationProvider)
{
case "tencent":
services.AddScoped<ITranslationProvider, TencentTranslation>();
break;
}
return services;
}
}

View File

@@ -0,0 +1,6 @@
namespace DysonNetwork.Sphere.Translation;
public interface ITranslationProvider
{
public Task<string> Translate(string text, string targetLanguage);
}

View File

@@ -0,0 +1,26 @@
using TencentCloud.Common;
using TencentCloud.Tmt.V20180321;
using TencentCloud.Tmt.V20180321.Models;
namespace DysonNetwork.Sphere.Translation;
public class TencentTranslation(IConfiguration configuration) : ITranslationProvider
{
private readonly string _region = configuration["Translation:Region"]!;
private readonly Credential _apiCredential = new Credential
{
SecretId = configuration["Translation:SecretId"]!,
SecretKey = configuration["Translation:SecretKey"]!
};
public async Task<string> Translate(string text, string targetLanguage)
{
var client = new TmtClient(_apiCredential, _region);
var request = new TextTranslateRequest();
request.SourceText = text;
request.Source = "auto";
request.Target = targetLanguage;
var response = await client.TextTranslate(request);
return response.TargetText;
}
}

View File

@@ -0,0 +1,21 @@
using DysonNetwork.Pass.Account;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace DysonNetwork.Sphere.Translation;
[ApiController]
[Route("translate")]
public class TranslationController(ITranslationProvider provider) : ControllerBase
{
[HttpPost]
[Authorize]
public async Task<ActionResult<string>> Translate([FromBody] string text, [FromQuery] string targetLanguage)
{
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
if (currentUser.PerkSubscription is null)
return StatusCode(403, "You need a subscription to use this feature.");
return await provider.Translate(text, targetLanguage);
}
}

View File

@@ -29,6 +29,12 @@
"PreferredRegion": "us-east-1"
}
},
"Translation": {
"Provider": "Tencent",
"Region": "ap-hongkong",
"SecretId": "",
"SecretKey": ""
},
"KnownProxies": [
"127.0.0.1",
"::1"