This commit is contained in:
2025-09-12 19:04:54 +04:30
parent 338895a1ad
commit c7d97fe9bd
23 changed files with 193 additions and 40 deletions
@@ -1,20 +1,30 @@
using Microsoft.AspNetCore.Mvc;
using Vizhtalk.CDN.Presentation.Application;
using Vizhtalk.CDN.Presentation.Domain.TypeIds;
namespace Vizhtalk.CDN.Presentation.Controllers
{
[Route("api/[controller]")]
[Route("[controller]")]
[ApiController]
public class FileController : ControllerBase
public class FileController(IUnitOfWork unitOfWork) : ControllerBase
{
[HttpGet("{id}")]
public IActionResult Get(MediaGroupMediaId id)
public async Task<IActionResult> Get(Guid id)
{
var mediaGroupMedia = await unitOfWork.MediaGroupMedia
.GetDetailsById(new MediaGroupMediaId(id));
if (mediaGroupMedia == null)
return NotFound();
return Unauthorized();
if(!mediaGroupMedia.MediaGroup.IsSecure)
{
var fileBytes = System.IO.File.ReadAllBytes(mediaGroupMedia.Media.Path);
return File(fileBytes, mediaGroupMedia.Media.ContentType.Value);
}
return NotFound();
}
}
@@ -23,8 +23,8 @@ public class MediaGroupMedia : Entity<MediaGroupMediaId>
public FileName Name { get; private set; }
public MediaId MediaId { get; private set; }
public MediaGroupId MediaGroupId { get; private set; }
public Media Media { get; private set; }
public MediaGroup MediaGroup { get; private set; }
public Media Media { get; set; }
public MediaGroup MediaGroup { get; set; }
public IReadOnlyList<MediaPermission> MediaPermissions => _mediaPermissions;
internal static MediaGroupMedia CreateNew(FileName fileName,
@@ -4,4 +4,7 @@ using VizhTalk.BuildingBlocks.Domain;
namespace Vizhtalk.CDN.Presentation.Domain.Repositories;
public interface IMediaGroupMediaRepository : IRepositoryBase<MediaGroupMedia, MediaGroupMediaId>;
public interface IMediaGroupMediaRepository : IRepositoryBase<MediaGroupMedia, MediaGroupMediaId>
{
Task<MediaGroupMedia?> GetDetailsById(MediaGroupMediaId mediaGroupMediaId,CancellationToken cancellationToken = default);
}
@@ -9,8 +9,29 @@ namespace Vizhtalk.CDN.Presentation.Infrastructure.Repositories
{
public class MediaGroupMediaRepository : RepositoryBase<MediaGroupMedia, MediaGroupMediaId>, IMediaGroupMediaRepository
{
private readonly CDNDbContext dbContext;
public MediaGroupMediaRepository(CDNDbContext dbContext) : base(dbContext)
{
this.dbContext = dbContext;
}
public async Task<MediaGroupMedia?> GetDetailsById(MediaGroupMediaId mediaGroupMediaId, CancellationToken cancellationToken = default)
{
var mediaGroupMedia = await dbContext.Set<MediaGroupMedia>()
.FirstOrDefaultAsync(x => x.Id == mediaGroupMediaId, cancellationToken);
if (mediaGroupMedia == null)
return null;
// پر کردن دستی navigation properties
mediaGroupMedia.MediaGroup = await dbContext.Set<MediaGroup>()
.FirstOrDefaultAsync(mg => mg.Id == mediaGroupMedia.MediaGroupId, cancellationToken);
mediaGroupMedia.Media = await dbContext.Set<Media>()
.FirstOrDefaultAsync(m => m.Id == mediaGroupMedia.MediaId, cancellationToken);
return mediaGroupMedia;
}
}
}
+3 -2
View File
@@ -8,6 +8,7 @@ var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("VizhTalk.CDN")!;
var databaseName = builder.Configuration.GetConnectionString("VizhTalk.CDN.DatabaseName")!;
builder.Services.AddControllers();
builder.Services.Initialize(connectionString, databaseName);
builder.Services.AddGrpc(op =>
{
@@ -18,10 +19,10 @@ var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.UseRouting();
app.MapGrpcService<CDNService>();
app.MapControllers();
//app.UseCDNModule();
app.Run();