Files
FileShare/FileShare-Services/Services/FileLibrary/FileStreamService.cs
T
admin777andClaude Opus 4.7 d93098638d docs: 补全 C# XML 文档注释,覆盖所有公开与内部成员
为 14 个项目中缺少 XML 注释的类、接口、方法、属性、字段、record、
枚举等成员补全中文文档注释。接口方法在接口层定义完整注释,实现类
使用 <inheritdoc /> 引用。私有辅助方法结合业务语义编写注释。

扫描结果:missing-csharp-docs.txt 缺失项归零。
构建结果:0 警告,0 错误。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 14:45:07 +08:00

51 lines
1.9 KiB
C#

using FileShare_EFCore.Database;
using FileShare_EFCore.Models;
using FileShare_Services.Core;
using Microsoft.EntityFrameworkCore;
namespace FileShare_Services.Services.FileLibrary
{
/// <summary>
/// 文件流服务接口,根据文件记录 ID 返回物理文件流信息。
/// </summary>
public interface IFileStreamService
{
/// <summary>
/// 获取指定文件的流式传输响应,包含文件路径、名称、Content-Type 和修改时间。
/// </summary>
/// <param name="id">文件记录 ID。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>文件流响应,文件不存在时返回 null。</returns>
Task<FileStreamResponse?> GetFileStreamAsync(int id, CancellationToken cancellationToken = default);
}
/// <summary>
/// 文件流服务实现,从数据库查询文件记录并构建 <see cref="FileStreamResponse"/>。
/// </summary>
public sealed class FileStreamService(AppDataContext db) : IFileStreamService
{
/// <inheritdoc />
public async Task<FileStreamResponse?> GetFileStreamAsync(int id, CancellationToken cancellationToken = default)
{
var file = await db.ManagedFileRecords
.AsNoTracking()
.Include(item => item.LibraryRoot)
.FirstOrDefaultAsync(item =>
item.Id == id
&& item.Exists
&& item.LibraryRoot != null
&& item.LibraryRoot.IsAvailable,
cancellationToken);
if (file is null || !System.IO.File.Exists(file.AbsolutePath))
return null;
return new FileStreamResponse(
file.AbsolutePath,
file.FileName,
file.ContentType,
file.LastWriteTimeUtc);
}
}
}