feat: finalize core modules and gateway

This commit is contained in:
2025-11-23 18:53:12 +08:00
parent 429d4fb747
commit ae273e510a
115 changed files with 4695 additions and 223 deletions

View File

@@ -0,0 +1,46 @@
using TakeoutSaaS.Application.Storage.Enums;
namespace TakeoutSaaS.Application.Storage.Contracts;
/// <summary>
/// 直传凭证请求模型。
/// </summary>
public sealed class DirectUploadRequest
{
/// <summary>
/// 创建直传请求。
/// </summary>
public DirectUploadRequest(UploadFileType fileType, string fileName, string contentType, long contentLength, string? requestOrigin)
{
FileType = fileType;
FileName = fileName;
ContentType = contentType;
ContentLength = contentLength;
RequestOrigin = requestOrigin;
}
/// <summary>
/// 文件类型。
/// </summary>
public UploadFileType FileType { get; }
/// <summary>
/// 文件名。
/// </summary>
public string FileName { get; }
/// <summary>
/// 内容类型。
/// </summary>
public string ContentType { get; }
/// <summary>
/// 文件长度。
/// </summary>
public long ContentLength { get; }
/// <summary>
/// 请求来源Origin/Referer
/// </summary>
public string? RequestOrigin { get; }
}

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
namespace TakeoutSaaS.Application.Storage.Contracts;
/// <summary>
/// 直传凭证响应模型。
/// </summary>
public sealed class DirectUploadResponse
{
/// <summary>
/// 预签名上传地址。
/// </summary>
public string UploadUrl { get; set; } = string.Empty;
/// <summary>
/// 表单直传所需字段PUT 直传为空)。
/// </summary>
public IReadOnlyDictionary<string, string> FormFields { get; set; } = new Dictionary<string, string>();
/// <summary>
/// 预签名过期时间。
/// </summary>
public DateTimeOffset ExpiresAt { get; set; }
/// <summary>
/// 对象键。
/// </summary>
public string ObjectKey { get; set; } = string.Empty;
/// <summary>
/// 直传完成后的访问链接(包含签名)。
/// </summary>
public string? DownloadUrl { get; set; }
}

View File

@@ -0,0 +1,22 @@
namespace TakeoutSaaS.Application.Storage.Contracts;
/// <summary>
/// 上传完成后的返回模型。
/// </summary>
public sealed class FileUploadResponse
{
/// <summary>
/// 访问 URL已包含签名
/// </summary>
public string Url { get; set; } = string.Empty;
/// <summary>
/// 文件名。
/// </summary>
public string FileName { get; set; } = string.Empty;
/// <summary>
/// 文件大小。
/// </summary>
public long FileSize { get; set; }
}

View File

@@ -0,0 +1,59 @@
using System.IO;
using TakeoutSaaS.Application.Storage.Enums;
namespace TakeoutSaaS.Application.Storage.Contracts;
/// <summary>
/// 上传文件请求模型。
/// </summary>
public sealed class UploadFileRequest
{
/// <summary>
/// 创建上传文件请求。
/// </summary>
public UploadFileRequest(
UploadFileType fileType,
Stream content,
string fileName,
string contentType,
long contentLength,
string? requestOrigin)
{
FileType = fileType;
Content = content;
FileName = fileName;
ContentType = contentType;
ContentLength = contentLength;
RequestOrigin = requestOrigin;
}
/// <summary>
/// 文件分类。
/// </summary>
public UploadFileType FileType { get; }
/// <summary>
/// 文件流。
/// </summary>
public Stream Content { get; }
/// <summary>
/// 原始文件名。
/// </summary>
public string FileName { get; }
/// <summary>
/// 内容类型。
/// </summary>
public string ContentType { get; }
/// <summary>
/// 文件大小。
/// </summary>
public long ContentLength { get; }
/// <summary>
/// 请求来源Origin/Referer
/// </summary>
public string? RequestOrigin { get; }
}