feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped

This commit is contained in:
Yun Chan 2026-08-20 11:12:05 +09:00
parent 5cd1de6859
commit 708e20f747
406 changed files with 42464 additions and 6199 deletions

View file

@ -0,0 +1,9 @@
bin/
obj/
*.db
*.db-shm
*.db-wal
*.log
.git/
.vs/
.vscode/

View file

@ -0,0 +1,275 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using D3ROVoice.Api.Data;
using D3ROVoice.Api.Dtos;
using D3ROVoice.Api.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace D3ROVoice.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class AdminController : ControllerBase
{
private readonly AppDbContext _db;
private readonly ISttProxyService _sttService;
private static readonly DateTime _serverStartTime = DateTime.UtcNow;
public AdminController(AppDbContext db, ISttProxyService sttService)
{
_db = db;
_sttService = sttService;
}
[HttpGet("stats")]
public async Task<IActionResult> GetStats()
{
var totalUsers = await _db.Users.CountAsync();
var today = DateTime.UtcNow.Date;
var activeUsersToday = await _db.Users.CountAsync(u => u.LastLoginAt >= today);
var totalRequests = await _db.UsageLogs.CountAsync() + await _db.SttUsageLogs.CountAsync();
var totalLlmCost = await _db.UsageLogs.SumAsync(u => (decimal?)u.CalculatedCost) ?? 0m;
var totalSttCost = await _db.SttUsageLogs.SumAsync(u => (decimal?)u.CalculatedCost) ?? 0m;
var totalCost = totalLlmCost + totalSttCost;
var errorCount = await _db.ErrorLogs.CountAsync();
var recentErrors = await _db.ErrorLogs
.OrderByDescending(e => e.CreatedAt)
.Take(10)
.Select(e => new ServerErrorLogDto(e.Id, e.ErrorType, e.Message, e.Endpoint, e.CreatedAt))
.ToListAsync();
var uptime = (DateTime.UtcNow - _serverStartTime).TotalSeconds;
var stats = new ServerStatsDto(
totalUsers,
activeUsersToday,
totalRequests,
totalCost,
uptime,
errorCount,
recentErrors
);
return Ok(stats);
}
[HttpGet("users")]
public async Task<IActionResult> GetUsers()
{
var users = await _db.Users
.OrderByDescending(u => u.CreatedAt)
.Select(u => new UserInfoDto(u.Id, u.Email, u.Role, u.CreatedAt, u.LastLoginAt, u.IsActive))
.ToListAsync();
return Ok(users);
}
// ── LLM Model Endpoints ───────────────────────────────────────────────
[HttpGet("endpoints")]
public async Task<IActionResult> GetEndpoints()
{
var endpoints = await _db.ModelEndpoints
.OrderBy(m => m.Id)
.ToListAsync();
return Ok(endpoints);
}
[HttpPost("endpoints")]
public async Task<IActionResult> CreateEndpoint([FromBody] CreateModelEndpointDto dto)
{
if (string.IsNullOrWhiteSpace(dto.ModelId) || string.IsNullOrWhiteSpace(dto.ModelName))
{
return BadRequest(new { message = "ModelId와 ModelName은 필수 항목입니다." });
}
var existing = await _db.ModelEndpoints.FirstOrDefaultAsync(m => m.ModelId == dto.ModelId);
if (existing != null)
{
return Conflict(new { message = "이미 존재하는 ModelId입니다." });
}
var endpoint = new ServiceModelEndpoint
{
ModelId = dto.ModelId.Trim(),
ModelName = dto.ModelName.Trim(),
Provider = dto.Provider.Trim(),
EndpointUrl = dto.EndpointUrl.Trim(),
ApiKey = dto.ApiKey ?? "",
CostPer1kPromptTokens = dto.CostPer1kPromptTokens,
CostPer1kCompletionTokens = dto.CostPer1kCompletionTokens,
IsActive = true,
CreatedAt = DateTime.UtcNow
};
_db.ModelEndpoints.Add(endpoint);
await _db.SaveChangesAsync();
return Ok(endpoint);
}
[HttpPut("endpoints/{id}")]
public async Task<IActionResult> UpdateEndpoint(int id, [FromBody] UpdateModelEndpointDto dto)
{
var endpoint = await _db.ModelEndpoints.FindAsync(id);
if (endpoint == null) return NotFound();
endpoint.ModelName = dto.ModelName.Trim();
endpoint.Provider = dto.Provider.Trim();
endpoint.EndpointUrl = dto.EndpointUrl.Trim();
endpoint.ApiKey = dto.ApiKey ?? "";
endpoint.CostPer1kPromptTokens = dto.CostPer1kPromptTokens;
endpoint.CostPer1kCompletionTokens = dto.CostPer1kCompletionTokens;
endpoint.IsActive = dto.IsActive;
await _db.SaveChangesAsync();
return Ok(endpoint);
}
[HttpDelete("endpoints/{id}")]
public async Task<IActionResult> DeleteEndpoint(int id)
{
var endpoint = await _db.ModelEndpoints.FindAsync(id);
if (endpoint == null) return NotFound();
_db.ModelEndpoints.Remove(endpoint);
await _db.SaveChangesAsync();
return Ok(new { message = "삭제되었습니다." });
}
// ── STT / Transcription Provider Endpoints ────────────────────────────
[HttpGet("stt-endpoints")]
public async Task<IActionResult> GetSttEndpoints()
{
var endpoints = await _sttService.GetAllEndpointsAsync();
return Ok(endpoints);
}
[HttpGet("stt-endpoints/{id}")]
public async Task<IActionResult> GetSttEndpoint(int id)
{
var endpoints = await _sttService.GetAllEndpointsAsync();
var endpoint = endpoints.FirstOrDefault(e => e.Id == id);
if (endpoint == null) return NotFound(new { message = $"STT Endpoint {id} not found." });
return Ok(endpoint);
}
[HttpPost("stt-endpoints")]
public async Task<IActionResult> CreateSttEndpoint([FromBody] CreateSttEndpointDto dto)
{
if (string.IsNullOrWhiteSpace(dto.Name) || string.IsNullOrWhiteSpace(dto.EndpointUrl))
{
return BadRequest(new { message = "이름과 Endpoint URL은 필수입니다." });
}
var endpoint = await _sttService.CreateEndpointAsync(dto);
return Ok(endpoint);
}
[HttpPut("stt-endpoints/{id}")]
public async Task<IActionResult> UpdateSttEndpoint(int id, [FromBody] UpdateSttEndpointDto dto)
{
try
{
var endpoint = await _sttService.UpdateEndpointAsync(id, dto);
return Ok(endpoint);
}
catch (KeyNotFoundException)
{
return NotFound(new { message = $"STT Endpoint {id} not found." });
}
}
[HttpDelete("stt-endpoints/{id}")]
public async Task<IActionResult> DeleteSttEndpoint(int id)
{
var deleted = await _sttService.DeleteEndpointAsync(id);
if (!deleted) return NotFound();
return Ok(new { message = "STT 엔드포인트가 성공적으로 삭제되었습니다." });
}
[HttpPost("stt-endpoints/{id}/set-default")]
public async Task<IActionResult> SetDefaultSttEndpoint(int id)
{
var success = await _sttService.SetDefaultEndpointAsync(id);
if (!success) return NotFound();
return Ok(new { id, isDefault = true, success = true, message = "기본 클라우드 전사 프로바이더로 설정되었습니다." });
}
[HttpPost("stt-endpoints/{id}/test")]
public async Task<IActionResult> TestSttEndpoint(int id)
{
var result = await _sttService.TestEndpointAsync(id);
return Ok(result);
}
[HttpPost("stt-endpoints/test-direct")]
public async Task<IActionResult> TestSttDirect([FromQuery] string endpointUrl, [FromQuery] string? apiKey)
{
var result = await _sttService.TestEndpointAsync(0, apiKey, endpointUrl);
return Ok(result);
}
[HttpGet("stt-usage")]
public async Task<IActionResult> GetSttUsageReport()
{
var report = await _sttService.GetUsageReportAsync();
return Ok(report);
}
// ── LLM Usage Report ──────────────────────────────────────────────────
[HttpGet("usage")]
public async Task<IActionResult> GetUsageReport()
{
var logs = await _db.UsageLogs.AsNoTracking().ToListAsync();
var totalRequests = logs.Count;
var totalPromptTokens = logs.Sum(l => l.PromptTokens);
var totalCompletionTokens = logs.Sum(l => l.CompletionTokens);
var totalCost = logs.Sum(l => l.CalculatedCost);
var userSummaries = logs
.GroupBy(l => new { l.UserId, l.UserEmail })
.Select(g => new UserUsageSummaryDto(
g.Key.UserId,
g.Key.UserEmail,
g.Count(),
g.Sum(x => x.TotalTokens),
g.Sum(x => x.CalculatedCost)
))
.OrderByDescending(u => u.TotalCost)
.ToList();
var modelSummaries = logs
.GroupBy(l => l.ModelId)
.Select(g => new ModelUsageSummaryDto(
g.Key,
g.Key,
g.Count(),
g.Sum(x => x.TotalTokens),
g.Sum(x => x.CalculatedCost)
))
.OrderByDescending(m => m.TotalCost)
.ToList();
var report = new UsageReportDto(
totalRequests,
totalPromptTokens,
totalCompletionTokens,
totalCost,
userSummaries,
modelSummaries
);
return Ok(report);
}
}

View file

@ -0,0 +1,72 @@
using System;
using System.Security.Claims;
using System.Threading.Tasks;
using D3ROVoice.Api.Dtos;
using D3ROVoice.Api.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace D3ROVoice.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
private readonly IAuthService _authService;
public AuthController(IAuthService authService)
{
_authService = authService;
}
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterDto dto)
{
if (string.IsNullOrWhiteSpace(dto.Email) || string.IsNullOrWhiteSpace(dto.Password))
{
return BadRequest(new { message = "이메일과 비밀번호를 입력해주세요." });
}
try
{
var result = await _authService.RegisterAsync(dto);
return Ok(result);
}
catch (InvalidOperationException ex)
{
return Conflict(new { message = ex.Message });
}
}
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginDto dto)
{
if (string.IsNullOrWhiteSpace(dto.Email) || string.IsNullOrWhiteSpace(dto.Password))
{
return BadRequest(new { message = "이메일과 비밀번호를 입력해주세요." });
}
try
{
var result = await _authService.LoginAsync(dto);
return Ok(result);
}
catch (UnauthorizedAccessException ex)
{
return Unauthorized(new { message = ex.Message });
}
}
[Authorize]
[HttpGet("me")]
public async Task<IActionResult> GetMe()
{
var email = User.FindFirstValue(ClaimTypes.Email);
if (string.IsNullOrEmpty(email)) return Unauthorized();
var user = await _authService.GetUserByEmailAsync(email);
if (user == null) return NotFound();
return Ok(user);
}
}

View file

@ -0,0 +1,49 @@
using System;
using System.Security.Claims;
using System.Threading.Tasks;
using D3ROVoice.Api.Dtos;
using D3ROVoice.Api.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace D3ROVoice.Api.Controllers;
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class LlmController : ControllerBase
{
private readonly ILlmProxyService _llmService;
public LlmController(ILlmProxyService llmService)
{
_llmService = llmService;
}
[HttpPost("generate")]
public async Task<IActionResult> Generate([FromBody] LlmGenerateRequest request)
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
var userEmail = User.FindFirstValue(ClaimTypes.Email) ?? "unknown@user";
int userId = int.TryParse(userIdStr, out var id) ? id : 0;
if (string.IsNullOrWhiteSpace(request.Prompt))
{
return BadRequest(new { message = "Prompt는 필수 항목입니다." });
}
var result = await _llmService.GenerateAsync(userId, userEmail, request);
return Ok(result);
}
[HttpPost("chat")]
public async Task<IActionResult> Chat([FromBody] LlmChatRequest request)
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
var userEmail = User.FindFirstValue(ClaimTypes.Email) ?? "unknown@user";
int userId = int.TryParse(userIdStr, out var id) ? id : 0;
var result = await _llmService.ChatAsync(userId, userEmail, request);
return Ok(result);
}
}

View file

@ -0,0 +1,109 @@
using System;
using System.IO;
using System.Security.Claims;
using System.Threading.Tasks;
using D3ROVoice.Api.Data;
using D3ROVoice.Api.Dtos;
using D3ROVoice.Api.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace D3ROVoice.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class SttController : ControllerBase
{
private readonly ISttProxyService _sttService;
public SttController(ISttProxyService sttService)
{
_sttService = sttService;
}
[HttpPost("transcribe")]
[Consumes("application/json", "multipart/form-data")]
public async Task<IActionResult> Transcribe()
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
var userEmail = User.FindFirstValue(ClaimTypes.Email) ?? "user@d3ro.voice";
int userId = int.TryParse(userIdStr, out var id) ? id : 1;
if (Request.HasFormContentType)
{
var form = await Request.ReadFormAsync();
var file = form.Files.GetFile("file") ?? form.Files.GetFile("audio");
if (file == null || file.Length == 0)
{
return BadRequest(new { message = "전송할 오디오 파일(file 또는 audio)이 필요합니다." });
}
using var memoryStream = new MemoryStream();
await file.CopyToAsync(memoryStream);
var audioBytes = memoryStream.ToArray();
var language = form["language"].ToString();
var prompt = form["prompt"].ToString();
var model = form["model"].ToString();
var provider = form["provider"].ToString();
var request = new SttTranscribeRequest(
AudioBase64: null,
Language: string.IsNullOrWhiteSpace(language) ? "ko" : language,
InitialPrompt: string.IsNullOrWhiteSpace(prompt) ? null : prompt,
ModelId: string.IsNullOrWhiteSpace(model) ? null : model,
Provider: string.IsNullOrWhiteSpace(provider) ? null : provider
);
var result = await _sttService.TranscribeAsync(
userId,
userEmail,
request,
audioBytes,
file.ContentType ?? "audio/webm",
file.FileName ?? "recording.webm"
);
return Ok(result);
}
else
{
// Read JSON body
using var reader = new StreamReader(Request.Body);
var json = await reader.ReadToEndAsync();
if (string.IsNullOrWhiteSpace(json))
{
return BadRequest(new { message = "요청 본문이 비어있습니다." });
}
var request = System.Text.Json.JsonSerializer.Deserialize<SttTranscribeRequest>(
json,
new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }
);
if (request == null || string.IsNullOrWhiteSpace(request.AudioBase64))
{
return BadRequest(new { message = "AudioBase64 데이터가 필요합니다." });
}
var result = await _sttService.TranscribeAsync(userId, userEmail, request);
return Ok(result);
}
}
[HttpGet("providers")]
public async Task<IActionResult> GetActiveProviders()
{
var endpoints = await _sttService.GetAllEndpointsAsync();
return Ok(endpoints);
}
[HttpPost("test")]
public async Task<IActionResult> TestConnection([FromQuery] int endpointId = 0)
{
var result = await _sttService.TestEndpointAsync(endpointId);
return Ok(result);
}
}

View file

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.10" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.10" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.2.3" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.22.0" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,6 @@
@D3ROVoice.Api_HostAddress = http://localhost:5223
GET {{D3ROVoice.Api_HostAddress}}/weatherforecast/
Accept: application/json
###

View file

@ -0,0 +1,235 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace D3ROVoice.Api.Data;
public class User
{
[Key]
public int Id { get; set; }
[Required]
[MaxLength(150)]
public string Email { get; set; } = string.Empty;
[Required]
public string PasswordHash { get; set; } = string.Empty;
[Required]
[MaxLength(50)]
public string Role { get; set; } = "User"; // "Admin" or "User"
public bool IsActive { get; set; } = true;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime? LastLoginAt { get; set; }
}
public class ServiceModelEndpoint
{
[Key]
public int Id { get; set; }
[Required]
[MaxLength(100)]
public string ModelId { get; set; } = string.Empty;
[Required]
[MaxLength(150)]
public string ModelName { get; set; } = string.Empty;
[Required]
[MaxLength(50)]
public string Provider { get; set; } = "OpenAI"; // OpenAI, Anthropic, Custom
[Required]
[MaxLength(500)]
public string EndpointUrl { get; set; } = string.Empty;
[MaxLength(500)]
public string ApiKey { get; set; } = string.Empty;
[Column(TypeName = "decimal(18, 6)")]
public decimal CostPer1kPromptTokens { get; set; } = 0.00015m;
[Column(TypeName = "decimal(18, 6)")]
public decimal CostPer1kCompletionTokens { get; set; } = 0.00060m;
public bool IsActive { get; set; } = true;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
public class ApiUsageLog
{
[Key]
public int Id { get; set; }
public int UserId { get; set; }
[MaxLength(150)]
public string UserEmail { get; set; } = string.Empty;
public int ModelEndpointId { get; set; }
[MaxLength(100)]
public string ModelId { get; set; } = string.Empty;
public int PromptTokens { get; set; }
public int CompletionTokens { get; set; }
public int TotalTokens { get; set; }
[Column(TypeName = "decimal(18, 6)")]
public decimal CalculatedCost { get; set; }
public int RequestDurationMs { get; set; }
public int StatusCode { get; set; } = 200;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
public class ServerErrorLog
{
[Key]
public int Id { get; set; }
[Required]
[MaxLength(100)]
public string ErrorType { get; set; } = string.Empty;
[Required]
public string Message { get; set; } = string.Empty;
public string? StackTrace { get; set; }
[MaxLength(250)]
public string? Endpoint { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
public class SttProviderEndpoint
{
[Key]
public int Id { get; set; }
[Required]
[MaxLength(150)]
public string Name { get; set; } = string.Empty;
[Required]
[MaxLength(50)]
public string ProviderType { get; set; } = "groq"; // groq, openai, deepgram, google, assemblyai, azure, custom, local-sidecar
[Required]
[MaxLength(500)]
public string EndpointUrl { get; set; } = string.Empty;
[MaxLength(500)]
public string ApiKey { get; set; } = string.Empty;
[Required]
[MaxLength(100)]
public string ModelId { get; set; } = "whisper-large-v3-turbo";
[Required]
[MaxLength(50)]
public string Method { get; set; } = "multipart"; // multipart, binary-stream, json-base64, custom-rest
[MaxLength(20)]
public string Language { get; set; } = "ko";
[MaxLength(1000)]
public string? Prompt { get; set; }
public double Temperature { get; set; } = 0.0;
[Column(TypeName = "decimal(18, 6)")]
public decimal CostPerMinute { get; set; } = 0.000500m;
[Column(TypeName = "decimal(18, 6)")]
public decimal CostPerSecond { get; set; } = 0.000008m;
public bool IsDefault { get; set; } = false;
public bool IsActive { get; set; } = true;
public int FallbackPriority { get; set; } = 1;
[MaxLength(1000)]
public string? ExtraHeadersJson { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime? UpdatedAt { get; set; }
}
public class SttUsageLog
{
[Key]
public int Id { get; set; }
public int UserId { get; set; }
[MaxLength(150)]
public string UserEmail { get; set; } = string.Empty;
public int EndpointId { get; set; }
[MaxLength(50)]
public string Provider { get; set; } = string.Empty;
[MaxLength(100)]
public string ModelId { get; set; } = string.Empty;
public double AudioDurationSeconds { get; set; }
[Column(TypeName = "decimal(18, 6)")]
public decimal CalculatedCost { get; set; }
public int LatencyMs { get; set; }
public int StatusCode { get; set; } = 200;
[MaxLength(1000)]
public string TranscriptPreview { get; set; } = string.Empty;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<User> Users => Set<User>();
public DbSet<ServiceModelEndpoint> ModelEndpoints => Set<ServiceModelEndpoint>();
public DbSet<ApiUsageLog> UsageLogs => Set<ApiUsageLog>();
public DbSet<ServerErrorLog> ErrorLogs => Set<ServerErrorLog>();
public DbSet<SttProviderEndpoint> SttProviderEndpoints => Set<SttProviderEndpoint>();
public DbSet<SttUsageLog> SttUsageLogs => Set<SttUsageLog>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>()
.HasIndex(u => u.Email)
.IsUnique();
modelBuilder.Entity<ServiceModelEndpoint>()
.HasIndex(m => m.ModelId)
.IsUnique();
modelBuilder.Entity<SttProviderEndpoint>()
.HasIndex(s => s.Name);
modelBuilder.Entity<SttProviderEndpoint>()
.HasIndex(s => s.IsDefault);
}
}

View file

@ -0,0 +1,27 @@
# Multi-stage Docker build for D3RO Voice C# .NET API Backend & BackOffice
FROM mcr.microsoft.com/dotnet/sdk:10.0-preview AS build
WORKDIR /src
COPY D3ROVoice.Api.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o /app/out
FROM mcr.microsoft.com/dotnet/aspnet:10.0-preview AS runtime
WORKDIR /app
# Create persistent storage directory for SQLite database
RUN mkdir -p /app/data
COPY --from=build /app/out ./
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+:5000
ENV ASPNETCORE_ENVIRONMENT=Production
ENV DATA_DIR=/app/data
VOLUME ["/app/data"]
ENTRYPOINT ["dotnet", "D3ROVoice.Api.dll"]

View file

@ -0,0 +1,175 @@
using System;
using System.Collections.Generic;
namespace D3ROVoice.Api.Dtos;
// Auth DTOs
public record RegisterDto(string Email, string Password);
public record LoginDto(string Email, string Password);
public record AuthResponseDto(string Token, string Email, string Role, DateTime ExpiresAt);
public record UserInfoDto(int Id, string Email, string Role, DateTime CreatedAt, DateTime? LastLoginAt, bool IsActive);
// LLM DTOs
public record LlmGenerateRequest(string Prompt, string? Model = null, string? SystemPrompt = null, double Temperature = 0.7, int MaxTokens = 2048);
public record LlmGenerateResponse(string Text, string Model, int PromptTokens, int CompletionTokens, double TotalDurationMs, decimal Cost);
public record LlmChatMessage(string Role, string Content);
public record LlmChatRequest(List<LlmChatMessage> Messages, string? Model = null, double Temperature = 0.7, int MaxTokens = 2048);
// Admin DTOs
public record CreateModelEndpointDto(
string ModelId,
string ModelName,
string Provider,
string EndpointUrl,
string ApiKey,
decimal CostPer1kPromptTokens,
decimal CostPer1kCompletionTokens
);
public record UpdateModelEndpointDto(
string ModelName,
string Provider,
string EndpointUrl,
string ApiKey,
decimal CostPer1kPromptTokens,
decimal CostPer1kCompletionTokens,
bool IsActive
);
public record ServerStatsDto(
int TotalUsers,
int ActiveUsersToday,
int TotalRequests,
decimal TotalCost,
double ServerUptimeSeconds,
int ErrorCount,
List<ServerErrorLogDto> RecentErrors
);
public record ServerErrorLogDto(int Id, string ErrorType, string Message, string? Endpoint, DateTime CreatedAt);
public record UsageReportDto(
int TotalRequests,
int TotalPromptTokens,
int TotalCompletionTokens,
decimal TotalCost,
List<UserUsageSummaryDto> UserSummaries,
List<ModelUsageSummaryDto> ModelSummaries
);
public record UserUsageSummaryDto(int UserId, string Email, int TotalRequests, int TotalTokens, decimal TotalCost);
public record ModelUsageSummaryDto(string ModelId, string ModelName, int TotalRequests, int TotalTokens, decimal TotalCost);
// STT DTOs
public record SttTranscribeRequest(
string? AudioBase64 = null,
string? Language = "ko",
string? InitialPrompt = null,
string? ModelId = null,
string? Provider = null,
double? Temperature = 0.0
);
public record SttTranscribeResponse(
string Text,
double Confidence,
string Language,
double DurationSeconds,
string Provider,
string ModelId,
double LatencyMs,
decimal Cost
);
public record SttProviderEndpointDto(
int Id,
string Name,
string ProviderType,
string EndpointUrl,
string ApiKey,
string ModelId,
string Method,
string Language,
string? Prompt,
double Temperature,
decimal CostPerMinute,
decimal CostPerSecond,
bool IsDefault,
bool IsActive,
int FallbackPriority,
string? ExtraHeadersJson,
DateTime CreatedAt,
DateTime? UpdatedAt
);
public record CreateSttEndpointDto(
string Name,
string ProviderType,
string EndpointUrl,
string? ApiKey,
string ModelId,
string Method,
string? Language,
string? Prompt,
double Temperature,
decimal CostPerMinute,
decimal CostPerSecond,
bool IsDefault,
bool IsActive,
int FallbackPriority,
string? ExtraHeadersJson
);
public record UpdateSttEndpointDto(
string Name,
string ProviderType,
string EndpointUrl,
string? ApiKey,
string ModelId,
string Method,
string? Language,
string? Prompt,
double Temperature,
decimal CostPerMinute,
decimal CostPerSecond,
bool IsDefault,
bool IsActive,
int FallbackPriority,
string? ExtraHeadersJson
);
public record SttTestResultDto(
bool Success,
string Message,
double LatencyMs,
string? TranscriptPreview,
string? Provider,
string? ModelId
);
public record SttUsageReportDto(
int TotalTranscriptions,
double TotalAudioMinutes,
decimal TotalCost,
double AvgLatencyMs,
List<SttProviderUsageSummaryDto> ProviderSummaries,
List<SttUserUsageSummaryDto> UserSummaries
);
public record SttProviderUsageSummaryDto(
string Provider,
string ModelId,
int TotalRequests,
double TotalAudioMinutes,
decimal TotalCost,
double AvgLatencyMs
);
public record SttUserUsageSummaryDto(
int UserId,
string Email,
int TotalRequests,
double TotalAudioMinutes,
decimal TotalCost
);

278
apps/api-server/Program.cs Normal file
View file

@ -0,0 +1,278 @@
using System.Text;
using D3ROVoice.Api.Data;
using D3ROVoice.Api.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi;
var builder = WebApplication.CreateBuilder(args);
var serverStartTime = DateTime.UtcNow;
// Add Services to Container
builder.Services.AddControllers();
builder.Services.AddHttpClient();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "D3RO Voice Cloud API & BackOffice",
Version = "v1",
Description = "D3RO Voice Self-Hosted Cloud Backend for NAS & Docker"
});
});
// Database Connection (SQLite with configurable NAS volume directory)
var dataDir = builder.Configuration["DATA_DIR"]
?? (Directory.Exists("/app/data") ? "/app/data" : Path.Combine(AppContext.BaseDirectory, "data"));
var dbPath = builder.Configuration["DB_PATH"]
?? builder.Configuration["DATABASE_PATH"]
?? Path.Combine(dataDir, "d3ro_api.db");
var dbDirectory = Path.GetDirectoryName(dbPath);
if (!string.IsNullOrEmpty(dbDirectory) && !Directory.Exists(dbDirectory))
{
Directory.CreateDirectory(dbDirectory);
}
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlite($"Data Source={dbPath}"));
// Services Registration
builder.Services.AddScoped<IAuthService, AuthService>();
builder.Services.AddScoped<ILlmProxyService, LlmProxyService>();
builder.Services.AddScoped<ISttProxyService, SttProxyService>();
// JWT Authentication Configuration
var secretKey = builder.Configuration["Jwt:SecretKey"]
?? builder.Configuration["JWT_SECRET"]
?? "D3ROVoice_Super_Secure_Secret_Key_2026_Key!";
var keyBytes = Encoding.UTF8.GetBytes(secretKey);
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(keyBytes),
ValidateIssuer = false,
ValidateAudience = false,
ClockSkew = TimeSpan.Zero
};
});
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
var app = builder.Build();
// Ensure Database is Created & Initialized with default data
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
db.Database.EnsureCreated();
// Default Model Endpoints if empty
if (!db.ModelEndpoints.Any())
{
db.ModelEndpoints.AddRange(
new ServiceModelEndpoint
{
ModelId = "d3ro-gpt4o-mini",
ModelName = "D3RO Standard Model (GPT-4o Mini)",
Provider = "OpenAI",
EndpointUrl = "https://api.openai.com/v1/chat/completions",
CostPer1kPromptTokens = 0.00015m,
CostPer1kCompletionTokens = 0.00060m,
IsActive = true
},
new ServiceModelEndpoint
{
ModelId = "d3ro-claude-35-sonnet",
ModelName = "D3RO Pro Model (Claude 3.5 Sonnet)",
Provider = "Anthropic",
EndpointUrl = "https://api.anthropic.com/v1/messages",
CostPer1kPromptTokens = 0.00300m,
CostPer1kCompletionTokens = 0.01500m,
IsActive = true
}
);
db.SaveChanges();
}
// Default STT Provider Endpoints if empty
if (!db.SttProviderEndpoints.Any())
{
db.SttProviderEndpoints.AddRange(
new SttProviderEndpoint
{
Name = "Groq Whisper LPU Turbo (Ultra Fast)",
ProviderType = "groq",
EndpointUrl = "https://api.groq.com/openai/v1/audio/transcriptions",
ApiKey = builder.Configuration["GROQ_API_KEY"] ?? "",
ModelId = "whisper-large-v3-turbo",
Method = "multipart",
Language = "ko",
CostPerMinute = 0.000500m,
CostPerSecond = 0.000008m,
IsDefault = true,
IsActive = true,
FallbackPriority = 1,
CreatedAt = DateTime.UtcNow
},
new SttProviderEndpoint
{
Name = "OpenAI Whisper Official",
ProviderType = "openai",
EndpointUrl = "https://api.openai.com/v1/audio/transcriptions",
ApiKey = builder.Configuration["OPENAI_API_KEY"] ?? "",
ModelId = "whisper-1",
Method = "multipart",
Language = "ko",
CostPerMinute = 0.006000m,
CostPerSecond = 0.000100m,
IsDefault = false,
IsActive = true,
FallbackPriority = 2,
CreatedAt = DateTime.UtcNow
},
new SttProviderEndpoint
{
Name = "Deepgram Nova-3 Industry Standard",
ProviderType = "deepgram",
EndpointUrl = "https://api.deepgram.com/v1/listen",
ApiKey = builder.Configuration["DEEPGRAM_API_KEY"] ?? "",
ModelId = "nova-3",
Method = "binary-stream",
Language = "ko",
CostPerMinute = 0.004300m,
CostPerSecond = 0.000072m,
IsDefault = false,
IsActive = true,
FallbackPriority = 3,
CreatedAt = DateTime.UtcNow
},
new SttProviderEndpoint
{
Name = "Google Gemini 2.0 Flash / Cloud STT",
ProviderType = "google",
EndpointUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent",
ApiKey = builder.Configuration["GEMINI_API_KEY"] ?? builder.Configuration["GOOGLE_API_KEY"] ?? "",
ModelId = "gemini-2.0-flash",
Method = "json-base64",
Language = "ko",
CostPerMinute = 0.001000m,
CostPerSecond = 0.000017m,
IsDefault = false,
IsActive = true,
FallbackPriority = 4,
CreatedAt = DateTime.UtcNow
},
new SttProviderEndpoint
{
Name = "Local Sidecar / Self-Hosted Whisper",
ProviderType = "local-sidecar",
EndpointUrl = "http://localhost:8971/stt/transcribe",
ApiKey = "",
ModelId = "whisper-large-v3-turbo",
Method = "multipart",
Language = "ko",
CostPerMinute = 0.000000m,
CostPerSecond = 0.000000m,
IsDefault = false,
IsActive = true,
FallbackPriority = 5,
CreatedAt = DateTime.UtcNow
}
);
db.SaveChanges();
}
// Default Admin User seed & update password to Test1234!
var adminUser = db.Users.FirstOrDefault(u => u.Email == "admin" || u.Email == "admin@d3ro.voice");
var passwordHash = AuthService.HashPassword("Test1234!");
if (adminUser == null)
{
db.Users.AddRange(
new User
{
Email = "admin",
PasswordHash = passwordHash,
Role = "SuperAdmin",
CreatedAt = DateTime.UtcNow,
IsActive = true
},
new User
{
Email = "admin@d3ro.voice",
PasswordHash = passwordHash,
Role = "SuperAdmin",
CreatedAt = DateTime.UtcNow,
IsActive = true
}
);
db.SaveChanges();
}
else
{
adminUser.PasswordHash = passwordHash;
adminUser.Role = "SuperAdmin";
adminUser.IsActive = true;
db.SaveChanges();
}
}
app.UseSwagger();
app.UseSwaggerUI();
app.UseCors("AllowAll");
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
// Health Check Endpoints for Docker & NAS Container Monitoring
app.MapGet("/health", () => Results.Ok(new
{
status = "Healthy",
service = "D3RO Voice Cloud API",
version = "1.0.0",
uptimeSeconds = (DateTime.UtcNow - serverStartTime).TotalSeconds,
database = File.Exists(dbPath) ? "Connected" : "Initializing",
timestamp = DateTime.UtcNow
}));
app.MapGet("/api/health", () => Results.Ok(new
{
status = "Healthy",
service = "D3RO Voice Cloud API",
version = "1.0.0",
uptimeSeconds = (DateTime.UtcNow - serverStartTime).TotalSeconds,
database = File.Exists(dbPath) ? "Connected" : "Initializing",
timestamp = DateTime.UtcNow
}));
app.MapControllers();
// Fallback to Admin BackOffice UI index.html
app.MapFallbackToFile("/admin/{*path}", "admin/index.html");
app.Run();

View file

@ -0,0 +1,23 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "http://localhost:5223",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "https://localhost:7191;http://localhost:5223",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View file

@ -0,0 +1,121 @@
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using D3ROVoice.Api.Data;
using D3ROVoice.Api.Dtos;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
namespace D3ROVoice.Api.Services;
public interface IAuthService
{
Task<AuthResponseDto> RegisterAsync(RegisterDto dto);
Task<AuthResponseDto> LoginAsync(LoginDto dto);
Task<UserInfoDto?> GetUserByEmailAsync(string email);
}
public class AuthService : IAuthService
{
private readonly AppDbContext _db;
private readonly IConfiguration _config;
public AuthService(AppDbContext db, IConfiguration config)
{
_db = db;
_config = config;
}
public async Task<AuthResponseDto> RegisterAsync(RegisterDto dto)
{
var existing = await _db.Users.FirstOrDefaultAsync(u => u.Email.ToLower() == dto.Email.ToLower());
if (existing != null)
{
throw new InvalidOperationException("이미 등록된 이메일 주소입니다.");
}
var isFirstUser = !await _db.Users.AnyAsync();
var user = new User
{
Email = dto.Email.Trim().ToLower(),
PasswordHash = HashPassword(dto.Password),
Role = isFirstUser ? "Admin" : "User",
CreatedAt = DateTime.UtcNow,
IsActive = true
};
_db.Users.Add(user);
await _db.SaveChangesAsync();
return GenerateToken(user);
}
public async Task<AuthResponseDto> LoginAsync(LoginDto dto)
{
var user = await _db.Users.FirstOrDefaultAsync(u => u.Email.ToLower() == dto.Email.ToLower());
if (user == null || !VerifyPassword(dto.Password, user.PasswordHash))
{
throw new UnauthorizedAccessException("이메일 또는 비밀번호가 올바르지 않습니다.");
}
if (!user.IsActive)
{
throw new UnauthorizedAccessException("비활성화된 계정입니다. 관리자에게 문의하세요.");
}
user.LastLoginAt = DateTime.UtcNow;
await _db.SaveChangesAsync();
return GenerateToken(user);
}
public async Task<UserInfoDto?> GetUserByEmailAsync(string email)
{
var user = await _db.Users.AsNoTracking().FirstOrDefaultAsync(u => u.Email.ToLower() == email.ToLower());
if (user == null) return null;
return new UserInfoDto(user.Id, user.Email, user.Role, user.CreatedAt, user.LastLoginAt, user.IsActive);
}
private AuthResponseDto GenerateToken(User user)
{
var secretKey = _config["Jwt:SecretKey"] ?? "D3ROVoice_Super_Secure_Secret_Key_2026_Key!";
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Role, user.Role)
};
var expiresAt = DateTime.UtcNow.AddDays(30);
var token = new JwtSecurityToken(
issuer: _config["Jwt:Issuer"] ?? "D3ROVoiceApi",
audience: _config["Jwt:Audience"] ?? "D3ROVoiceClient",
claims: claims,
expires: expiresAt,
signingCredentials: creds
);
var tokenHandler = new JwtSecurityTokenHandler();
return new AuthResponseDto(tokenHandler.WriteToken(token), user.Email, user.Role, expiresAt);
}
public static string HashPassword(string password)
{
using var sha256 = SHA256.Create();
var bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(password + "D3RO_SALT_2026"));
return Convert.ToBase64String(bytes);
}
private static bool VerifyPassword(string password, string hash)
{
return HashPassword(password) == hash;
}
}

View file

@ -0,0 +1,185 @@
using System;
using System.Diagnostics;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using D3ROVoice.Api.Data;
using D3ROVoice.Api.Dtos;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace D3ROVoice.Api.Services;
public interface ILlmProxyService
{
Task<LlmGenerateResponse> GenerateAsync(int userId, string userEmail, LlmGenerateRequest request);
Task<LlmGenerateResponse> ChatAsync(int userId, string userEmail, LlmChatRequest request);
}
public class LlmProxyService : ILlmProxyService
{
private readonly AppDbContext _db;
private readonly IHttpClientFactory _httpClientFactory;
private readonly ILogger<LlmProxyService> _logger;
public LlmProxyService(AppDbContext db, IHttpClientFactory httpClientFactory, ILogger<LlmProxyService> logger)
{
_db = db;
_httpClientFactory = httpClientFactory;
_logger = logger;
}
public async Task<LlmGenerateResponse> GenerateAsync(int userId, string userEmail, LlmGenerateRequest request)
{
var modelId = string.IsNullOrWhiteSpace(request.Model) ? "d3ro-gpt4o-mini" : request.Model;
var endpoint = await _db.ModelEndpoints.FirstOrDefaultAsync(m => m.ModelId == modelId && m.IsActive);
if (endpoint == null)
{
// fallback: first active model endpoint or create default mockup endpoint
endpoint = await _db.ModelEndpoints.FirstOrDefaultAsync(m => m.IsActive);
if (endpoint == null)
{
endpoint = new ServiceModelEndpoint
{
ModelId = "d3ro-gpt4o-mini",
ModelName = "D3RO Default Model",
Provider = "Mock",
EndpointUrl = "https://api.openai.com/v1/chat/completions",
CostPer1kPromptTokens = 0.00015m,
CostPer1kCompletionTokens = 0.00060m,
IsActive = true
};
}
}
var sw = Stopwatch.StartNew();
int promptTokens = Math.Max(10, request.Prompt.Length / 4);
int completionTokens = 0;
string responseText = "";
if (endpoint.Provider == "Mock" || string.IsNullOrWhiteSpace(endpoint.ApiKey))
{
// Intelligent local echo / mock processing for standalone API testing
responseText = $"[D3RO Online Model - {endpoint.ModelName}] {request.Prompt}";
completionTokens = Math.Max(15, responseText.Length / 4);
sw.Stop();
}
else
{
try
{
var client = _httpClientFactory.CreateClient();
client.Timeout = TimeSpan.FromSeconds(60);
var payload = new
{
model = endpoint.ModelId,
messages = new[]
{
new { role = "system", content = request.SystemPrompt ?? "You are a helpful AI assistant." },
new { role = "user", content = request.Prompt }
},
temperature = request.Temperature,
max_tokens = request.MaxTokens
};
var httpRequest = new HttpRequestMessage(HttpMethod.Post, endpoint.EndpointUrl)
{
Content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")
};
if (!string.IsNullOrWhiteSpace(endpoint.ApiKey))
{
httpRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", endpoint.ApiKey);
}
var httpResponse = await client.SendAsync(httpRequest);
sw.Stop();
if (httpResponse.IsSuccessStatusCode)
{
var jsonStr = await httpResponse.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(jsonStr);
var root = doc.RootElement;
if (root.TryGetProperty("choices", out var choices) && choices.GetArrayLength() > 0)
{
var msg = choices[0].GetProperty("message").GetProperty("content").GetString();
responseText = msg ?? "";
}
if (root.TryGetProperty("usage", out var usage))
{
if (usage.TryGetProperty("prompt_tokens", out var pt)) promptTokens = pt.GetInt32();
if (usage.TryGetProperty("completion_tokens", out var ct)) completionTokens = ct.GetInt32();
}
}
else
{
_logger.LogWarning("Remote endpoint returned non-success status: {Status}", httpResponse.StatusCode);
responseText = $"[Processed via {endpoint.ModelName}] {request.Prompt}";
completionTokens = Math.Max(15, responseText.Length / 4);
}
}
catch (Exception ex)
{
sw.Stop();
_logger.LogError(ex, "Error calling model endpoint {Endpoint}", endpoint.EndpointUrl);
// Record Error log
_db.ErrorLogs.Add(new ServerErrorLog
{
ErrorType = "ModelProxyError",
Message = ex.Message,
StackTrace = ex.StackTrace,
Endpoint = endpoint.EndpointUrl,
CreatedAt = DateTime.UtcNow
});
responseText = $"[D3RO Fallback Service] {request.Prompt}";
completionTokens = Math.Max(15, responseText.Length / 4);
}
}
decimal promptCost = (promptTokens / 1000m) * endpoint.CostPer1kPromptTokens;
decimal completionCost = (completionTokens / 1000m) * endpoint.CostPer1kCompletionTokens;
decimal totalCost = promptCost + completionCost;
// Log usage to database
var usageLog = new ApiUsageLog
{
UserId = userId,
UserEmail = userEmail,
ModelEndpointId = endpoint.Id,
ModelId = endpoint.ModelId,
PromptTokens = promptTokens,
CompletionTokens = completionTokens,
TotalTokens = promptTokens + completionTokens,
CalculatedCost = totalCost,
RequestDurationMs = (int)sw.ElapsedMilliseconds,
StatusCode = 200,
CreatedAt = DateTime.UtcNow
};
_db.UsageLogs.Add(usageLog);
await _db.SaveChangesAsync();
return new LlmGenerateResponse(
responseText,
endpoint.ModelId,
promptTokens,
completionTokens,
sw.ElapsedMilliseconds,
totalCost
);
}
public async Task<LlmGenerateResponse> ChatAsync(int userId, string userEmail, LlmChatRequest request)
{
var lastMsg = request.Messages.Count > 0 ? request.Messages[^1].Content : "";
return await GenerateAsync(userId, userEmail, new LlmGenerateRequest(lastMsg, request.Model, null, request.Temperature, request.MaxTokens));
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View file

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View file

@ -0,0 +1,585 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v10.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v10.0": {
"D3ROVoice.Api/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": "10.0.10",
"Microsoft.AspNetCore.OpenApi": "10.0.8",
"Microsoft.EntityFrameworkCore.Sqlite": "10.0.10",
"Swashbuckle.AspNetCore": "10.2.3",
"System.IdentityModel.Tokens.Jwt": "8.22.0"
},
"runtime": {
"D3ROVoice.Api.dll": {}
}
},
"Microsoft.AspNetCore.Authentication.JwtBearer/10.0.10": {
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.19.2"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": {
"assemblyVersion": "10.0.10.0",
"fileVersion": "10.0.1026.32716"
}
}
},
"Microsoft.AspNetCore.OpenApi/10.0.8": {
"dependencies": {
"Microsoft.OpenApi": "2.7.5"
},
"runtime": {
"lib/net10.0/Microsoft.AspNetCore.OpenApi.dll": {
"assemblyVersion": "10.0.8.0",
"fileVersion": "10.0.826.23019"
}
}
},
"Microsoft.Bcl.Cryptography/10.0.2": {
"runtime": {
"lib/net10.0/Microsoft.Bcl.Cryptography.dll": {
"assemblyVersion": "10.0.0.2",
"fileVersion": "10.0.225.61305"
}
}
},
"Microsoft.Data.Sqlite.Core/10.0.10": {
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
},
"runtime": {
"lib/net8.0/Microsoft.Data.Sqlite.dll": {
"assemblyVersion": "10.0.10.0",
"fileVersion": "10.0.1026.32716"
}
}
},
"Microsoft.EntityFrameworkCore/10.0.10": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "10.0.10"
},
"runtime": {
"lib/net10.0/Microsoft.EntityFrameworkCore.dll": {
"assemblyVersion": "10.0.10.0",
"fileVersion": "10.0.1026.32716"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/10.0.10": {
"runtime": {
"lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"assemblyVersion": "10.0.10.0",
"fileVersion": "10.0.1026.32716"
}
}
},
"Microsoft.EntityFrameworkCore.Relational/10.0.10": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "10.0.10"
},
"runtime": {
"lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": {
"assemblyVersion": "10.0.10.0",
"fileVersion": "10.0.1026.32716"
}
}
},
"Microsoft.EntityFrameworkCore.Sqlite/10.0.10": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Sqlite.Core": "10.0.10",
"Microsoft.Extensions.DependencyModel": "10.0.10",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.EntityFrameworkCore.Sqlite.Core/10.0.10": {
"dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.10",
"Microsoft.EntityFrameworkCore.Relational": "10.0.10",
"Microsoft.Extensions.DependencyModel": "10.0.10",
"SQLitePCLRaw.core": "2.1.11"
},
"runtime": {
"lib/net10.0/Microsoft.EntityFrameworkCore.Sqlite.dll": {
"assemblyVersion": "10.0.10.0",
"fileVersion": "10.0.1026.32716"
}
}
},
"Microsoft.Extensions.DependencyModel/10.0.10": {
"runtime": {
"lib/net10.0/Microsoft.Extensions.DependencyModel.dll": {
"assemblyVersion": "10.0.0.10",
"fileVersion": "10.0.1026.32716"
}
}
},
"Microsoft.IdentityModel.Abstractions/8.22.0": {
"runtime": {
"lib/net10.0/Microsoft.IdentityModel.Abstractions.dll": {
"assemblyVersion": "8.22.0.0",
"fileVersion": "8.22.0.26208"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.22.0": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.22.0"
},
"runtime": {
"lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"assemblyVersion": "8.22.0.0",
"fileVersion": "8.22.0.26208"
}
}
},
"Microsoft.IdentityModel.Logging/8.22.0": {
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.22.0"
},
"runtime": {
"lib/net10.0/Microsoft.IdentityModel.Logging.dll": {
"assemblyVersion": "8.22.0.0",
"fileVersion": "8.22.0.26208"
}
}
},
"Microsoft.IdentityModel.Protocols/8.19.2": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.22.0"
},
"runtime": {
"lib/net10.0/Microsoft.IdentityModel.Protocols.dll": {
"assemblyVersion": "8.19.2.0",
"fileVersion": "8.19.2.26195"
}
}
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.19.2": {
"dependencies": {
"Microsoft.IdentityModel.Protocols": "8.19.2",
"System.IdentityModel.Tokens.Jwt": "8.22.0"
},
"runtime": {
"lib/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
"assemblyVersion": "8.19.2.0",
"fileVersion": "8.19.2.26195"
}
}
},
"Microsoft.IdentityModel.Tokens/8.22.0": {
"dependencies": {
"Microsoft.Bcl.Cryptography": "10.0.2",
"Microsoft.IdentityModel.Logging": "8.22.0"
},
"runtime": {
"lib/net10.0/Microsoft.IdentityModel.Tokens.dll": {
"assemblyVersion": "8.22.0.0",
"fileVersion": "8.22.0.26208"
}
}
},
"Microsoft.OpenApi/2.7.5": {
"runtime": {
"lib/net8.0/Microsoft.OpenApi.dll": {
"assemblyVersion": "2.7.5.0",
"fileVersion": "2.7.5.0"
}
}
},
"SQLitePCLRaw.bundle_e_sqlite3/2.1.11": {
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
},
"runtime": {
"lib/netstandard2.0/SQLitePCLRaw.batteries_v2.dll": {
"assemblyVersion": "2.1.11.2622",
"fileVersion": "2.1.11.2622"
}
}
},
"SQLitePCLRaw.core/2.1.11": {
"runtime": {
"lib/netstandard2.0/SQLitePCLRaw.core.dll": {
"assemblyVersion": "2.1.11.2622",
"fileVersion": "2.1.11.2622"
}
}
},
"SQLitePCLRaw.lib.e_sqlite3/2.1.11": {
"runtimeTargets": {
"runtimes/browser-wasm/nativeassets/net9.0/e_sqlite3.a": {
"rid": "browser-wasm",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-arm/native/libe_sqlite3.so": {
"rid": "linux-arm",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-arm64/native/libe_sqlite3.so": {
"rid": "linux-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-armel/native/libe_sqlite3.so": {
"rid": "linux-armel",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-mips64/native/libe_sqlite3.so": {
"rid": "linux-mips64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-musl-arm/native/libe_sqlite3.so": {
"rid": "linux-musl-arm",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-musl-arm64/native/libe_sqlite3.so": {
"rid": "linux-musl-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-musl-riscv64/native/libe_sqlite3.so": {
"rid": "linux-musl-riscv64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-musl-s390x/native/libe_sqlite3.so": {
"rid": "linux-musl-s390x",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-musl-x64/native/libe_sqlite3.so": {
"rid": "linux-musl-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-ppc64le/native/libe_sqlite3.so": {
"rid": "linux-ppc64le",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-riscv64/native/libe_sqlite3.so": {
"rid": "linux-riscv64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-s390x/native/libe_sqlite3.so": {
"rid": "linux-s390x",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-x64/native/libe_sqlite3.so": {
"rid": "linux-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-x86/native/libe_sqlite3.so": {
"rid": "linux-x86",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib": {
"rid": "maccatalyst-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/maccatalyst-x64/native/libe_sqlite3.dylib": {
"rid": "maccatalyst-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/osx-arm64/native/libe_sqlite3.dylib": {
"rid": "osx-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/osx-x64/native/libe_sqlite3.dylib": {
"rid": "osx-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/win-arm/native/e_sqlite3.dll": {
"rid": "win-arm",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/win-arm64/native/e_sqlite3.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/win-x64/native/e_sqlite3.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/win-x86/native/e_sqlite3.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"SQLitePCLRaw.provider.e_sqlite3/2.1.11": {
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
},
"runtime": {
"lib/net6.0/SQLitePCLRaw.provider.e_sqlite3.dll": {
"assemblyVersion": "2.1.11.2622",
"fileVersion": "2.1.11.2622"
}
}
},
"Swashbuckle.AspNetCore/10.2.3": {
"dependencies": {
"Swashbuckle.AspNetCore.Swagger": "10.2.3",
"Swashbuckle.AspNetCore.SwaggerGen": "10.2.3",
"Swashbuckle.AspNetCore.SwaggerUI": "10.2.3"
}
},
"Swashbuckle.AspNetCore.Swagger/10.2.3": {
"dependencies": {
"Microsoft.OpenApi": "2.7.5"
},
"runtime": {
"lib/net10.0/Swashbuckle.AspNetCore.Swagger.dll": {
"assemblyVersion": "10.2.3.0",
"fileVersion": "10.2.3.2721"
}
}
},
"Swashbuckle.AspNetCore.SwaggerGen/10.2.3": {
"dependencies": {
"Swashbuckle.AspNetCore.Swagger": "10.2.3"
},
"runtime": {
"lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
"assemblyVersion": "10.2.3.0",
"fileVersion": "10.2.3.2721"
}
}
},
"Swashbuckle.AspNetCore.SwaggerUI/10.2.3": {
"runtime": {
"lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
"assemblyVersion": "10.2.3.0",
"fileVersion": "10.2.3.2721"
}
}
},
"System.IdentityModel.Tokens.Jwt/8.22.0": {
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.22.0",
"Microsoft.IdentityModel.Tokens": "8.22.0"
},
"runtime": {
"lib/net10.0/System.IdentityModel.Tokens.Jwt.dll": {
"assemblyVersion": "8.22.0.0",
"fileVersion": "8.22.0.26208"
}
}
}
}
},
"libraries": {
"D3ROVoice.Api/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.AspNetCore.Authentication.JwtBearer/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VAcqS42zb9WJd9DjPdkVTS5YrQENmNzPNJuRu8VAW7x3TEWUipc4d4hHzVJdFB0h/KLdr4XcXZzRHcUOKVanMQ==",
"path": "microsoft.aspnetcore.authentication.jwtbearer/10.0.10",
"hashPath": "microsoft.aspnetcore.authentication.jwtbearer.10.0.10.nupkg.sha512"
},
"Microsoft.AspNetCore.OpenApi/10.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cw24xHE2QaWwyEG9GQwFbjboyabub6Vd80DIItUGENzcQOa/BEnTrXsg2GADqWTmY/3ycqk9ToLGjgvF/VRlGA==",
"path": "microsoft.aspnetcore.openapi/10.0.8",
"hashPath": "microsoft.aspnetcore.openapi.10.0.8.nupkg.sha512"
},
"Microsoft.Bcl.Cryptography/10.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LG9Yll3B5aNpxv0+D47g6LiOiKBIlodhcHdQwcYzo8VeexFLGqx5ymetmA2aBRyo9cCcWsQWrFsdbsr8LvmWDw==",
"path": "microsoft.bcl.cryptography/10.0.2",
"hashPath": "microsoft.bcl.cryptography.10.0.2.nupkg.sha512"
},
"Microsoft.Data.Sqlite.Core/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-TPCs0ldm7AWqcKmp6f/Xr+14sat7hx4rHfRlS4RgCURBH2thEWbAKEyX7cCWr63zVJVOJIJZTg2cBiUXa8ys6g==",
"path": "microsoft.data.sqlite.core/10.0.10",
"hashPath": "microsoft.data.sqlite.core.10.0.10.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-a0V7zj/VbYP6dTdWpUgE/r2PuLKtUGe2aJ0lVKkn/wP9ZhaxUz2kQydVfvOjCv2SKxlrqdBfHhPD4Cvlf+4ffA==",
"path": "microsoft.entityframeworkcore/10.0.10",
"hashPath": "microsoft.entityframeworkcore.10.0.10.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Abstractions/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bOzrFCl6uZCjaSh2bG1ToRQRdx+iXvxosCg9hFyG9OWeAzOFI4xev9OqKeWfKf/kAHyox2JnbcvLVf2ceA7sqA==",
"path": "microsoft.entityframeworkcore.abstractions/10.0.10",
"hashPath": "microsoft.entityframeworkcore.abstractions.10.0.10.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Relational/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-wNonj40aZxia+GtuBiiD6ZqVh4h6y5Nje1bGdmzZ8/ui0QRsAN+S0SIrLHFCEGbG9cDbeaE40sh+Lr7o9rRs6g==",
"path": "microsoft.entityframeworkcore.relational/10.0.10",
"hashPath": "microsoft.entityframeworkcore.relational.10.0.10.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Sqlite/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kzg9MuQNJvZQxAU+piSkEzc7/1tpW6n1nVSGGMObu2GgxLK8Nf+6fvZundaznTZ+O2KhfPZ8HFNCzMH3PWDUmA==",
"path": "microsoft.entityframeworkcore.sqlite/10.0.10",
"hashPath": "microsoft.entityframeworkcore.sqlite.10.0.10.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Sqlite.Core/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YbVWMIouzwTKBiLms8boa7xeRT88wI14R1msv3XExFk9n0/sa8nU7MwDa1CKtfLGMJs7O7QWuS9/xhcQ72AD2A==",
"path": "microsoft.entityframeworkcore.sqlite.core/10.0.10",
"hashPath": "microsoft.entityframeworkcore.sqlite.core.10.0.10.nupkg.sha512"
},
"Microsoft.Extensions.DependencyModel/10.0.10": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rfZA1RjR021RPqSmIPovfz2aOd79TGqJ9BengbjnzIISOVwjLmuSDnhCMmiY/1c6iYvGolQ1iNGzkav0u11XEA==",
"path": "microsoft.extensions.dependencymodel/10.0.10",
"hashPath": "microsoft.extensions.dependencymodel.10.0.10.nupkg.sha512"
},
"Microsoft.IdentityModel.Abstractions/8.22.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LU3V3owsu4vGpCg2kyL7SsQEuHwcoJ8FSNBqzLADzCf3/PcKUTcx5Plsd51DoTJMfK/WigXV/03UhaN5JXE6uQ==",
"path": "microsoft.identitymodel.abstractions/8.22.0",
"hashPath": "microsoft.identitymodel.abstractions.8.22.0.nupkg.sha512"
},
"Microsoft.IdentityModel.JsonWebTokens/8.22.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kv6peMLjALZLDAy2H3F77KjVRdwiscn2p/g3ui2chcbuEcAX2MpAbyDcYnJ7Vyh8jZ1aJWrniUMCDWoOgnu4NQ==",
"path": "microsoft.identitymodel.jsonwebtokens/8.22.0",
"hashPath": "microsoft.identitymodel.jsonwebtokens.8.22.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Logging/8.22.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-G9Tl0yXSlr2pkXv4EpXjO16M4q6oo9N/od+gNyOusZ8yM8LZg1H3f/QOMFuOJiV6znzY5MkAREU97JRRnqpEQw==",
"path": "microsoft.identitymodel.logging/8.22.0",
"hashPath": "microsoft.identitymodel.logging.8.22.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols/8.19.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-sGxSsSrZXNmca6D+jHH2rVRyo2nNRd/g4H9CFbPmLLq0xgoH1U0orLWE5minfijw7+zq49tBs7txenbfAErRoQ==",
"path": "microsoft.identitymodel.protocols/8.19.2",
"hashPath": "microsoft.identitymodel.protocols.8.19.2.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.19.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-1XOcyY36cVymzE3qKdzKaUEZ4Pzt7ZpSa14JZoPPK1NLFUkQDs85TCqpV6XDo0YjFXj6nVK00AfOHppjghjhtw==",
"path": "microsoft.identitymodel.protocols.openidconnect/8.19.2",
"hashPath": "microsoft.identitymodel.protocols.openidconnect.8.19.2.nupkg.sha512"
},
"Microsoft.IdentityModel.Tokens/8.22.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-i4lywKKUuVmheCUA+w/q8QNPReNI0qanHI9hhz48AFqD1ljyb8sxPL2RbXOGiPV13XdJ4kxieL9ukS7tD43LxA==",
"path": "microsoft.identitymodel.tokens/8.22.0",
"hashPath": "microsoft.identitymodel.tokens.8.22.0.nupkg.sha512"
},
"Microsoft.OpenApi/2.7.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-0FA67RSnRM4tcBKqiqVu/HPdZ9+QOKbmeRjxRUGTCjPU4C0bmUhd97Dso7Yild5P7nOV6GxJ2xrK0Kv/O9xp0w==",
"path": "microsoft.openapi/2.7.5",
"hashPath": "microsoft.openapi.2.7.5.nupkg.sha512"
},
"SQLitePCLRaw.bundle_e_sqlite3/2.1.11": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
"path": "sqlitepclraw.bundle_e_sqlite3/2.1.11",
"hashPath": "sqlitepclraw.bundle_e_sqlite3.2.1.11.nupkg.sha512"
},
"SQLitePCLRaw.core/2.1.11": {
"type": "package",
"serviceable": true,
"sha512": "sha512-PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA==",
"path": "sqlitepclraw.core/2.1.11",
"hashPath": "sqlitepclraw.core.2.1.11.nupkg.sha512"
},
"SQLitePCLRaw.lib.e_sqlite3/2.1.11": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ==",
"path": "sqlitepclraw.lib.e_sqlite3/2.1.11",
"hashPath": "sqlitepclraw.lib.e_sqlite3.2.1.11.nupkg.sha512"
},
"SQLitePCLRaw.provider.e_sqlite3/2.1.11": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
"path": "sqlitepclraw.provider.e_sqlite3/2.1.11",
"hashPath": "sqlitepclraw.provider.e_sqlite3.2.1.11.nupkg.sha512"
},
"Swashbuckle.AspNetCore/10.2.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8KNh1RWvofdU6DVLyBs4Z/OpUMnmf8oNvJQc0QxpwySRbi42bwLfdVMMrXZWANg5U5KQGQq1xW6r/hlcqw99tQ==",
"path": "swashbuckle.aspnetcore/10.2.3",
"hashPath": "swashbuckle.aspnetcore.10.2.3.nupkg.sha512"
},
"Swashbuckle.AspNetCore.Swagger/10.2.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-1jUUs3WQnrS0FUtaZPLSy1yYMEwS1zlvDmvQ2/eldPHUANX0LJSLVZecCMgSMdeGiRqeaRrIXLtSz++TCiTMww==",
"path": "swashbuckle.aspnetcore.swagger/10.2.3",
"hashPath": "swashbuckle.aspnetcore.swagger.10.2.3.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerGen/10.2.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-y7t4coDRAeFYChmvlMRiH2OjbiRrm9AVIDgt17fQfs3x9PVAI5PiwWYOhg+4F13R4Q36WDc9lqfoOnNa3tNbGg==",
"path": "swashbuckle.aspnetcore.swaggergen/10.2.3",
"hashPath": "swashbuckle.aspnetcore.swaggergen.10.2.3.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerUI/10.2.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nthWONRs/FJ4yyG206g1cC52WEG8EqrjuMWjGdR+5XG7lbjFto6NqcI9EMICgVFom/UivIjUVwI76ZHbHwTPfQ==",
"path": "swashbuckle.aspnetcore.swaggerui/10.2.3",
"hashPath": "swashbuckle.aspnetcore.swaggerui.10.2.3.nupkg.sha512"
},
"System.IdentityModel.Tokens.Jwt/8.22.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-CpXGfNhLl6EgYaOC9XYsc1p7Ci9HtAy0soHJDSBNGse647al4tTq9RDr+LQsrF4Ls79Dx7VfzN34km0W4DWPow==",
"path": "system.identitymodel.tokens.jwt/8.22.0",
"hashPath": "system.identitymodel.tokens.jwt.8.22.0.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,20 @@
{
"runtimeOptions": {
"tfm": "net10.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "10.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "10.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Reflection.NullabilityInfoContext.IsSupported": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"ContentRoots":["D:\\workspace\\D3ROVoice\\apps\\api-server\\wwwroot\\","D:\\workspace\\D3ROVoice\\apps\\api-server\\obj\\Debug\\net10.0\\compressed\\"],"Root":{"Children":{"favicon.svg":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"favicon.svg"},"Patterns":null},"favicon.svg.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"k8usrkd25d-{0}-i4ytlv2mnz-i4ytlv2mnz.gz"},"Patterns":null},"index.html":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"index.html"},"Patterns":null},"index.html.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"0oa1lcbz4d-{0}-e1w50tc880-e1w50tc880.gz"},"Patterns":null},"admin":{"Children":{"index.html":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"admin/index.html"},"Patterns":null},"index.html.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"ywp43jgxv3-{0}-mw01eamuej-mw01eamuej.gz"},"Patterns":null}},"Asset":null,"Patterns":null},"assets":{"Children":{"index-TLmV-V-z.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"assets/index-TLmV-V-z.js"},"Patterns":null},"index-TLmV-V-z.js.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"b6arkhq2qu-{0}-9xczhhykze-9xczhhykze.gz"},"Patterns":null},"index-X4t7Pkjb.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"assets/index-X4t7Pkjb.css"},"Patterns":null},"index-X4t7Pkjb.css.gz":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"wgxvrpfkf8-{0}-qb4ylyqfl5-qb4ylyqfl5.gz"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}

View file

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View file

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,515 @@
{
"format": 1,
"restore": {
"D:\\workspace\\D3ROVoice\\apps\\api-server\\D3ROVoice.Api.csproj": {}
},
"projects": {
"D:\\workspace\\D3ROVoice\\apps\\api-server\\D3ROVoice.Api.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\workspace\\D3ROVoice\\apps\\api-server\\D3ROVoice.Api.csproj",
"projectName": "D3ROVoice.Api",
"projectPath": "D:\\workspace\\D3ROVoice\\apps\\api-server\\D3ROVoice.Api.csproj",
"packagesPath": "C:\\Users\\encep\\.nuget\\packages\\",
"outputPath": "D:\\workspace\\D3ROVoice\\apps\\api-server\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\encep\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net10.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net10.0": {
"framework": "net10.0",
"targetAlias": "net10.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
},
"SdkAnalysisLevel": "10.0.300"
},
"frameworks": {
"net10.0": {
"framework": "net10.0",
"targetAlias": "net10.0",
"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": {
"target": "Package",
"version": "[10.0.10, )"
},
"Microsoft.AspNetCore.OpenApi": {
"target": "Package",
"version": "[10.0.8, )"
},
"Microsoft.EntityFrameworkCore.Sqlite": {
"target": "Package",
"version": "[10.0.10, )"
},
"Swashbuckle.AspNetCore": {
"target": "Package",
"version": "[10.2.3, )"
},
"System.IdentityModel.Tokens.Jwt": {
"target": "Package",
"version": "[8.22.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.AspNetCore.App": {
"privateAssets": "none"
},
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300/PortableRuntimeIdentifierGraph.json",
"packagesToPrune": {
"Microsoft.AspNetCore": "(,10.0.32767]",
"Microsoft.AspNetCore.Antiforgery": "(,10.0.32767]",
"Microsoft.AspNetCore.App": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.BearerToken": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.Cookies": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.OAuth": "(,10.0.32767]",
"Microsoft.AspNetCore.Authorization": "(,10.0.32767]",
"Microsoft.AspNetCore.Authorization.Policy": "(,10.0.32767]",
"Microsoft.AspNetCore.Components": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Authorization": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Endpoints": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Forms": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Server": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Web": "(,10.0.32767]",
"Microsoft.AspNetCore.Connections.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.CookiePolicy": "(,10.0.32767]",
"Microsoft.AspNetCore.Cors": "(,10.0.32767]",
"Microsoft.AspNetCore.Cryptography.Internal": "(,10.0.32767]",
"Microsoft.AspNetCore.Cryptography.KeyDerivation": "(,10.0.32767]",
"Microsoft.AspNetCore.DataProtection": "(,10.0.32767]",
"Microsoft.AspNetCore.DataProtection.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.DataProtection.Extensions": "(,10.0.32767]",
"Microsoft.AspNetCore.Diagnostics": "(,10.0.32767]",
"Microsoft.AspNetCore.Diagnostics.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Diagnostics.HealthChecks": "(,10.0.32767]",
"Microsoft.AspNetCore.HostFiltering": "(,10.0.32767]",
"Microsoft.AspNetCore.Hosting": "(,10.0.32767]",
"Microsoft.AspNetCore.Hosting.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Hosting.Server.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Html.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Http": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Connections": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Connections.Common": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Extensions": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Features": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Results": "(,10.0.32767]",
"Microsoft.AspNetCore.HttpLogging": "(,10.0.32767]",
"Microsoft.AspNetCore.HttpOverrides": "(,10.0.32767]",
"Microsoft.AspNetCore.HttpsPolicy": "(,10.0.32767]",
"Microsoft.AspNetCore.Identity": "(,10.0.32767]",
"Microsoft.AspNetCore.Localization": "(,10.0.32767]",
"Microsoft.AspNetCore.Localization.Routing": "(,10.0.32767]",
"Microsoft.AspNetCore.Metadata": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.ApiExplorer": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Cors": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.DataAnnotations": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Formatters.Json": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Formatters.Xml": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Localization": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Razor": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.RazorPages": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.TagHelpers": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.ViewFeatures": "(,10.0.32767]",
"Microsoft.AspNetCore.OutputCaching": "(,10.0.32767]",
"Microsoft.AspNetCore.RateLimiting": "(,10.0.32767]",
"Microsoft.AspNetCore.Razor": "(,10.0.32767]",
"Microsoft.AspNetCore.Razor.Runtime": "(,10.0.32767]",
"Microsoft.AspNetCore.RequestDecompression": "(,10.0.32767]",
"Microsoft.AspNetCore.ResponseCaching": "(,10.0.32767]",
"Microsoft.AspNetCore.ResponseCaching.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.ResponseCompression": "(,10.0.32767]",
"Microsoft.AspNetCore.Rewrite": "(,10.0.32767]",
"Microsoft.AspNetCore.Routing": "(,10.0.32767]",
"Microsoft.AspNetCore.Routing.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.HttpSys": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.IIS": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.IISIntegration": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Transport.Quic": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets": "(,10.0.32767]",
"Microsoft.AspNetCore.Session": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR.Common": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR.Protocols.Json": "(,10.0.32767]",
"Microsoft.AspNetCore.StaticAssets": "(,10.0.32767]",
"Microsoft.AspNetCore.StaticFiles": "(,10.0.32767]",
"Microsoft.AspNetCore.WebSockets": "(,10.0.32767]",
"Microsoft.AspNetCore.WebUtilities": "(,10.0.32767]",
"Microsoft.CSharp": "(,4.7.32767]",
"Microsoft.Extensions.Caching.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Caching.Memory": "(,10.0.32767]",
"Microsoft.Extensions.Configuration": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Binder": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.CommandLine": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.FileExtensions": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Ini": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Json": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.KeyPerFile": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.UserSecrets": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Xml": "(,10.0.32767]",
"Microsoft.Extensions.DependencyInjection": "(,10.0.32767]",
"Microsoft.Extensions.DependencyInjection.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics.HealthChecks": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Features": "(,10.0.32767]",
"Microsoft.Extensions.FileProviders.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.FileProviders.Composite": "(,10.0.32767]",
"Microsoft.Extensions.FileProviders.Physical": "(,10.0.32767]",
"Microsoft.Extensions.FileSystemGlobbing": "(,10.0.32767]",
"Microsoft.Extensions.Hosting": "(,10.0.32767]",
"Microsoft.Extensions.Hosting.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Http": "(,10.0.32767]",
"Microsoft.Extensions.Identity.Core": "(,10.0.32767]",
"Microsoft.Extensions.Identity.Stores": "(,10.0.32767]",
"Microsoft.Extensions.Localization": "(,10.0.32767]",
"Microsoft.Extensions.Localization.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Logging": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Configuration": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Console": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Debug": "(,10.0.32767]",
"Microsoft.Extensions.Logging.EventLog": "(,10.0.32767]",
"Microsoft.Extensions.Logging.EventSource": "(,10.0.32767]",
"Microsoft.Extensions.Logging.TraceSource": "(,10.0.32767]",
"Microsoft.Extensions.ObjectPool": "(,10.0.32767]",
"Microsoft.Extensions.Options": "(,10.0.32767]",
"Microsoft.Extensions.Options.ConfigurationExtensions": "(,10.0.32767]",
"Microsoft.Extensions.Options.DataAnnotations": "(,10.0.32767]",
"Microsoft.Extensions.Primitives": "(,10.0.32767]",
"Microsoft.Extensions.Validation": "(,10.0.32767]",
"Microsoft.Extensions.WebEncoders": "(,10.0.32767]",
"Microsoft.JSInterop": "(,10.0.32767]",
"Microsoft.Net.Http.Headers": "(,10.0.32767]",
"Microsoft.VisualBasic": "(,10.4.32767]",
"Microsoft.Win32.Primitives": "(,4.3.32767]",
"Microsoft.Win32.Registry": "(,5.0.32767]",
"runtime.any.System.Collections": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.any.System.Globalization": "(,4.3.32767]",
"runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.any.System.IO": "(,4.3.32767]",
"runtime.any.System.Reflection": "(,4.3.32767]",
"runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.any.System.Runtime": "(,4.3.32767]",
"runtime.any.System.Runtime.Handles": "(,4.3.32767]",
"runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.any.System.Text.Encoding": "(,4.3.32767]",
"runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.any.System.Threading.Tasks": "(,4.3.32767]",
"runtime.any.System.Threading.Timer": "(,4.3.32767]",
"runtime.aot.System.Collections": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.aot.System.Globalization": "(,4.3.32767]",
"runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.aot.System.IO": "(,4.3.32767]",
"runtime.aot.System.Reflection": "(,4.3.32767]",
"runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.aot.System.Runtime": "(,4.3.32767]",
"runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
"runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
"runtime.aot.System.Threading.Timer": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.unix.System.Console": "(,4.3.32767]",
"runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
"runtime.unix.System.Net.Primitives": "(,4.3.32767]",
"runtime.unix.System.Net.Sockets": "(,4.3.32767]",
"runtime.unix.System.Private.Uri": "(,4.3.32767]",
"runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.win.System.Console": "(,4.3.32767]",
"runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.win.System.IO.FileSystem": "(,4.3.32767]",
"runtime.win.System.Net.Primitives": "(,4.3.32767]",
"runtime.win.System.Net.Sockets": "(,4.3.32767]",
"runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7.System.Private.Uri": "(,4.3.32767]",
"runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
"System.AppContext": "(,4.3.32767]",
"System.Buffers": "(,5.0.32767]",
"System.Collections": "(,4.3.32767]",
"System.Collections.Concurrent": "(,4.3.32767]",
"System.Collections.Immutable": "(,10.0.32767]",
"System.Collections.NonGeneric": "(,4.3.32767]",
"System.Collections.Specialized": "(,4.3.32767]",
"System.ComponentModel": "(,4.3.32767]",
"System.ComponentModel.Annotations": "(,4.3.32767]",
"System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
"System.ComponentModel.Primitives": "(,4.3.32767]",
"System.ComponentModel.TypeConverter": "(,4.3.32767]",
"System.Console": "(,4.3.32767]",
"System.Data.Common": "(,4.3.32767]",
"System.Data.DataSetExtensions": "(,4.4.32767]",
"System.Diagnostics.Contracts": "(,4.3.32767]",
"System.Diagnostics.Debug": "(,4.3.32767]",
"System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
"System.Diagnostics.EventLog": "(,10.0.32767]",
"System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
"System.Diagnostics.Process": "(,4.3.32767]",
"System.Diagnostics.StackTrace": "(,4.3.32767]",
"System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
"System.Diagnostics.Tools": "(,4.3.32767]",
"System.Diagnostics.TraceSource": "(,4.3.32767]",
"System.Diagnostics.Tracing": "(,4.3.32767]",
"System.Drawing.Primitives": "(,4.3.32767]",
"System.Dynamic.Runtime": "(,4.3.32767]",
"System.Formats.Asn1": "(,10.0.32767]",
"System.Formats.Cbor": "(,10.0.32767]",
"System.Formats.Tar": "(,10.0.32767]",
"System.Globalization": "(,4.3.32767]",
"System.Globalization.Calendars": "(,4.3.32767]",
"System.Globalization.Extensions": "(,4.3.32767]",
"System.IO": "(,4.3.32767]",
"System.IO.Compression": "(,4.3.32767]",
"System.IO.Compression.ZipFile": "(,4.3.32767]",
"System.IO.FileSystem": "(,4.3.32767]",
"System.IO.FileSystem.AccessControl": "(,4.4.32767]",
"System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
"System.IO.FileSystem.Primitives": "(,4.3.32767]",
"System.IO.FileSystem.Watcher": "(,4.3.32767]",
"System.IO.IsolatedStorage": "(,4.3.32767]",
"System.IO.MemoryMappedFiles": "(,4.3.32767]",
"System.IO.Pipelines": "(,10.0.32767]",
"System.IO.Pipes": "(,4.3.32767]",
"System.IO.Pipes.AccessControl": "(,5.0.32767]",
"System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
"System.Linq": "(,4.3.32767]",
"System.Linq.AsyncEnumerable": "(,10.0.32767]",
"System.Linq.Expressions": "(,4.3.32767]",
"System.Linq.Parallel": "(,4.3.32767]",
"System.Linq.Queryable": "(,4.3.32767]",
"System.Memory": "(,5.0.32767]",
"System.Net.Http": "(,4.3.32767]",
"System.Net.Http.Json": "(,10.0.32767]",
"System.Net.NameResolution": "(,4.3.32767]",
"System.Net.NetworkInformation": "(,4.3.32767]",
"System.Net.Ping": "(,4.3.32767]",
"System.Net.Primitives": "(,4.3.32767]",
"System.Net.Requests": "(,4.3.32767]",
"System.Net.Security": "(,4.3.32767]",
"System.Net.ServerSentEvents": "(,10.0.32767]",
"System.Net.Sockets": "(,4.3.32767]",
"System.Net.WebHeaderCollection": "(,4.3.32767]",
"System.Net.WebSockets": "(,4.3.32767]",
"System.Net.WebSockets.Client": "(,4.3.32767]",
"System.Numerics.Vectors": "(,5.0.32767]",
"System.ObjectModel": "(,4.3.32767]",
"System.Private.DataContractSerialization": "(,4.3.32767]",
"System.Private.Uri": "(,4.3.32767]",
"System.Reflection": "(,4.3.32767]",
"System.Reflection.DispatchProxy": "(,6.0.32767]",
"System.Reflection.Emit": "(,4.7.32767]",
"System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
"System.Reflection.Emit.Lightweight": "(,4.7.32767]",
"System.Reflection.Extensions": "(,4.3.32767]",
"System.Reflection.Metadata": "(,10.0.32767]",
"System.Reflection.Primitives": "(,4.3.32767]",
"System.Reflection.TypeExtensions": "(,4.3.32767]",
"System.Resources.Reader": "(,4.3.32767]",
"System.Resources.ResourceManager": "(,4.3.32767]",
"System.Resources.Writer": "(,4.3.32767]",
"System.Runtime": "(,4.3.32767]",
"System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
"System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
"System.Runtime.Extensions": "(,4.3.32767]",
"System.Runtime.Handles": "(,4.3.32767]",
"System.Runtime.InteropServices": "(,4.3.32767]",
"System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
"System.Runtime.Loader": "(,4.3.32767]",
"System.Runtime.Numerics": "(,4.3.32767]",
"System.Runtime.Serialization.Formatters": "(,4.3.32767]",
"System.Runtime.Serialization.Json": "(,4.3.32767]",
"System.Runtime.Serialization.Primitives": "(,4.3.32767]",
"System.Runtime.Serialization.Xml": "(,4.3.32767]",
"System.Security.AccessControl": "(,6.0.32767]",
"System.Security.Claims": "(,4.3.32767]",
"System.Security.Cryptography.Algorithms": "(,4.3.32767]",
"System.Security.Cryptography.Cng": "(,5.0.32767]",
"System.Security.Cryptography.Csp": "(,4.3.32767]",
"System.Security.Cryptography.Encoding": "(,4.3.32767]",
"System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
"System.Security.Cryptography.Primitives": "(,4.3.32767]",
"System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
"System.Security.Cryptography.Xml": "(,10.0.32767]",
"System.Security.Principal": "(,4.3.32767]",
"System.Security.Principal.Windows": "(,5.0.32767]",
"System.Security.SecureString": "(,4.3.32767]",
"System.Text.Encoding": "(,4.3.32767]",
"System.Text.Encoding.CodePages": "(,10.0.32767]",
"System.Text.Encoding.Extensions": "(,4.3.32767]",
"System.Text.Encodings.Web": "(,10.0.32767]",
"System.Text.Json": "(,10.0.32767]",
"System.Text.RegularExpressions": "(,4.3.32767]",
"System.Threading": "(,4.3.32767]",
"System.Threading.AccessControl": "(,10.0.32767]",
"System.Threading.Channels": "(,10.0.32767]",
"System.Threading.Overlapped": "(,4.3.32767]",
"System.Threading.RateLimiting": "(,10.0.32767]",
"System.Threading.Tasks": "(,4.3.32767]",
"System.Threading.Tasks.Dataflow": "(,10.0.32767]",
"System.Threading.Tasks.Extensions": "(,5.0.32767]",
"System.Threading.Tasks.Parallel": "(,4.3.32767]",
"System.Threading.Thread": "(,4.3.32767]",
"System.Threading.ThreadPool": "(,4.3.32767]",
"System.Threading.Timer": "(,4.3.32767]",
"System.ValueTuple": "(,4.5.32767]",
"System.Xml.ReaderWriter": "(,4.3.32767]",
"System.Xml.XDocument": "(,4.3.32767]",
"System.Xml.XmlDocument": "(,4.3.32767]",
"System.Xml.XmlSerializer": "(,4.3.32767]",
"System.Xml.XPath": "(,4.3.32767]",
"System.Xml.XPath.XDocument": "(,5.0.32767]"
}
}
}
}
}
}

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\encep\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\encep\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\10.0.0\build\Microsoft.Extensions.ApiDescription.Server.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\10.0.0\build\Microsoft.Extensions.ApiDescription.Server.props')" />
<Import Project="$(NuGetPackageRoot)swashbuckle.aspnetcore\10.2.3\build\Swashbuckle.AspNetCore.props" Condition="Exists('$(NuGetPackageRoot)swashbuckle.aspnetcore\10.2.3\build\Swashbuckle.AspNetCore.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.10\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.10\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
</ImportGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgMicrosoft_Extensions_ApiDescription_Server Condition=" '$(PkgMicrosoft_Extensions_ApiDescription_Server)' == '' ">C:\Users\encep\.nuget\packages\microsoft.extensions.apidescription.server\10.0.0</PkgMicrosoft_Extensions_ApiDescription_Server>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\10.0.0\build\Microsoft.Extensions.ApiDescription.Server.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\10.0.0\build\Microsoft.Extensions.ApiDescription.Server.targets')" />
<Import Project="$(NuGetPackageRoot)sqlitepclraw.lib.e_sqlite3\2.1.11\buildTransitive\net9.0\SQLitePCLRaw.lib.e_sqlite3.targets" Condition="Exists('$(NuGetPackageRoot)sqlitepclraw.lib.e_sqlite3\2.1.11\buildTransitive\net9.0\SQLitePCLRaw.lib.e_sqlite3.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.openapi\10.0.8\build\Microsoft.AspNetCore.OpenApi.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.openapi\10.0.8\build\Microsoft.AspNetCore.OpenApi.targets')" />
</ImportGroup>
</Project>

View file

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]

View file

@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("D3ROVoice.Api")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5cd1de685968775e0ef3666436d68fe9e6b0e906")]
[assembly: System.Reflection.AssemblyProductAttribute("D3ROVoice.Api")]
[assembly: System.Reflection.AssemblyTitleAttribute("D3ROVoice.Api")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View file

@ -0,0 +1 @@
55edc22ee2e937f3669d60a2ace175b3a21f49551f88805450652b32ef5daee0

View file

@ -0,0 +1,24 @@
is_global = true
build_property.TargetFramework = net10.0
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v10.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb = true
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property.EntryPointFilePath =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = D3ROVoice.Api
build_property.RootNamespace = D3ROVoice.Api
build_property.ProjectDir = D:\workspace\D3ROVoice\apps\api-server\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 10.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = D:\workspace\D3ROVoice\apps\api-server
build_property._RazorSourceGeneratorDebug =
build_property.EffectiveAnalysisLevelStyle = 10.0
build_property.EnableCodeStyleSeverity =

View file

@ -0,0 +1,17 @@
// <auto-generated/>
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Routing;
global using Microsoft.Extensions.Configuration;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using Microsoft.Extensions.Logging;
global using System;
global using System.Collections.Generic;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Net.Http.Json;
global using System.Threading;
global using System.Threading.Tasks;

View file

@ -0,0 +1,17 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Microsoft.AspNetCore.OpenApi")]
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")]
// Generated by the MSBuild WriteCodeFragment class.

View file

@ -0,0 +1 @@
a94338223e30f0c6359bd5a11f30b52a88f5bf30c27ce1c8e3a39e3fe4f16fa5

View file

@ -0,0 +1,83 @@
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.csproj.AssemblyReference.cache
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\rpswa.dswa.cache.json
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.GeneratedMSBuildEditorConfig.editorconfig
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.AssemblyInfoInputs.cache
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.AssemblyInfo.cs
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.csproj.CoreCompileInputs.cache
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.MvcApplicationPartsAssemblyInfo.cs
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.MvcApplicationPartsAssemblyInfo.cache
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\appsettings.Development.json
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\appsettings.json
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\D3ROVoice.Api.staticwebassets.runtime.json
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\D3ROVoice.Api.staticwebassets.endpoints.json
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\D3ROVoice.Api.exe
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\D3ROVoice.Api.deps.json
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\D3ROVoice.Api.runtimeconfig.json
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\D3ROVoice.Api.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\D3ROVoice.Api.pdb
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.AspNetCore.Authentication.JwtBearer.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.AspNetCore.OpenApi.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.Bcl.Cryptography.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.Data.Sqlite.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.EntityFrameworkCore.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.EntityFrameworkCore.Abstractions.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.EntityFrameworkCore.Relational.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.EntityFrameworkCore.Sqlite.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.Extensions.DependencyModel.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.IdentityModel.Abstractions.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.IdentityModel.JsonWebTokens.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.IdentityModel.Logging.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.IdentityModel.Protocols.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.IdentityModel.Tokens.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Microsoft.OpenApi.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\SQLitePCLRaw.batteries_v2.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\SQLitePCLRaw.core.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\SQLitePCLRaw.provider.e_sqlite3.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Swashbuckle.AspNetCore.Swagger.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Swashbuckle.AspNetCore.SwaggerGen.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\Swashbuckle.AspNetCore.SwaggerUI.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\System.IdentityModel.Tokens.Jwt.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\browser-wasm\nativeassets\net9.0\e_sqlite3.a
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-arm\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-arm64\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-armel\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-mips64\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-musl-arm\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-musl-arm64\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-musl-riscv64\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-musl-s390x\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-musl-x64\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-ppc64le\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-riscv64\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-s390x\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-x64\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\linux-x86\native\libe_sqlite3.so
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\maccatalyst-arm64\native\libe_sqlite3.dylib
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\maccatalyst-x64\native\libe_sqlite3.dylib
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\osx-arm64\native\libe_sqlite3.dylib
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\osx-x64\native\libe_sqlite3.dylib
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\win-arm\native\e_sqlite3.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\win-arm64\native\e_sqlite3.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\win-x64\native\e_sqlite3.dll
D:\workspace\D3ROVoice\apps\api-server\bin\Debug\net10.0\runtimes\win-x86\native\e_sqlite3.dll
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\rjimswa.dswa.cache.json
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\rjsmrazor.dswa.cache.json
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\rjsmcshtml.dswa.cache.json
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\scopedcss\bundle\D3ROVoice.Api.styles.css
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\compressed\ywp43jgxv3-{0}-mw01eamuej-mw01eamuej.gz
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\staticwebassets.build.json
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\staticwebassets.build.json.cache
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\staticwebassets.development.json
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\staticwebassets.build.endpoints.json
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\swae.build.ex.cache
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoic.FECB580F.Up2Date
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.dll
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\refint\D3ROVoice.Api.dll
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.pdb
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\D3ROVoice.Api.genruntimeconfig.cache
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\ref\D3ROVoice.Api.dll
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\compressed\b6arkhq2qu-{0}-9xczhhykze-9xczhhykze.gz
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\compressed\wgxvrpfkf8-{0}-qb4ylyqfl5-qb4ylyqfl5.gz
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\compressed\k8usrkd25d-{0}-i4ytlv2mnz-i4ytlv2mnz.gz
D:\workspace\D3ROVoice\apps\api-server\obj\Debug\net10.0\compressed\0oa1lcbz4d-{0}-e1w50tc880-e1w50tc880.gz

Binary file not shown.

View file

@ -0,0 +1 @@
67efd6a138a158f59611be91d523d3d45d3ec9b9039e0c189cfeff63c9e38342

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more