#11 changing uploads api

This commit is contained in:
Hamid Reza Mohammadi 2020-10-04 19:30:55 +03:30
parent bcd2db2e2f
commit a1864b9084
10 changed files with 1541 additions and 99 deletions

View File

@ -77,7 +77,7 @@ namespace RMuseum.Controllers
/// <returns></returns>
[HttpGet("uploads")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<UploadSessionViewModel>))]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<dynamic>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]

View File

@ -139,6 +139,11 @@ namespace RMuseum.DbContext
/// </summary>
public DbSet<UploadSession> UploadSessions { get; set; }
/// <summary>
/// Uploaded files
/// </summary>
public DbSet<UploadSessionFile> UploadedFiles { get; set; }
/// <summary>
/// User Narration Profiles
/// </summary>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,89 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace RMuseum.Migrations
{
public partial class UploadedFiles : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_UploadSessionFile_UploadSessions_UploadSessionId",
table: "UploadSessionFile");
migrationBuilder.DropPrimaryKey(
name: "PK_UploadSessionFile",
table: "UploadSessionFile");
migrationBuilder.RenameTable(
name: "UploadSessionFile",
newName: "UploadedFiles");
migrationBuilder.RenameIndex(
name: "IX_UploadSessionFile_UploadSessionId",
table: "UploadedFiles",
newName: "IX_UploadedFiles_UploadSessionId");
migrationBuilder.AlterColumn<Guid>(
name: "UploadSessionId",
table: "UploadedFiles",
nullable: false,
oldClrType: typeof(Guid),
oldType: "uniqueidentifier",
oldNullable: true);
migrationBuilder.AddPrimaryKey(
name: "PK_UploadedFiles",
table: "UploadedFiles",
column: "Id");
migrationBuilder.AddForeignKey(
name: "FK_UploadedFiles_UploadSessions_UploadSessionId",
table: "UploadedFiles",
column: "UploadSessionId",
principalTable: "UploadSessions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_UploadedFiles_UploadSessions_UploadSessionId",
table: "UploadedFiles");
migrationBuilder.DropPrimaryKey(
name: "PK_UploadedFiles",
table: "UploadedFiles");
migrationBuilder.RenameTable(
name: "UploadedFiles",
newName: "UploadSessionFile");
migrationBuilder.RenameIndex(
name: "IX_UploadedFiles_UploadSessionId",
table: "UploadSessionFile",
newName: "IX_UploadSessionFile_UploadSessionId");
migrationBuilder.AlterColumn<Guid>(
name: "UploadSessionId",
table: "UploadSessionFile",
type: "uniqueidentifier",
nullable: true,
oldClrType: typeof(Guid));
migrationBuilder.AddPrimaryKey(
name: "PK_UploadSessionFile",
table: "UploadSessionFile",
column: "Id");
migrationBuilder.AddForeignKey(
name: "FK_UploadSessionFile_UploadSessions_UploadSessionId",
table: "UploadSessionFile",
column: "UploadSessionId",
principalTable: "UploadSessions",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
}
}

View File

@ -764,14 +764,14 @@ namespace RMuseum.Migrations
b.Property<string>("ProcessResultMsg")
.HasColumnType("nvarchar(max)");
b.Property<Guid?>("UploadSessionId")
b.Property<Guid>("UploadSessionId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("UploadSessionId");
b.ToTable("UploadSessionFile");
b.ToTable("UploadedFiles");
});
modelBuilder.Entity("RSecurityBackend.Models.Audit.Db.REvent", b =>
@ -1355,7 +1355,9 @@ namespace RMuseum.Migrations
{
b.HasOne("RMuseum.Models.UploadSession.UploadSession", null)
.WithMany("UploadedFiles")
.HasForeignKey("UploadSessionId");
.HasForeignKey("UploadSessionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("RSecurityBackend.Models.Auth.Db.RAppUser", b =>

View File

@ -13,6 +13,11 @@ namespace RMuseum.Models.UploadSession
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// Upload Session Id
/// </summary>
public Guid UploadSessionId { get; set; }
/// <summary>
/// ContentDisposition
/// </summary>

View File

@ -1,81 +0,0 @@
using Org.BouncyCastle.Crypto.Tls;
using RSecurityBackend.Models.Auth.ViewModels;
using System;
using System.Collections.Generic;
namespace RMuseum.Models.UploadSession.ViewModels
{
/// <summary>
/// Upload session view model
/// </summary>
public class UploadSessionViewModel
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="src"></param>
public UploadSessionViewModel(UploadSession src)
{
Id = src.Id;
SessionType = src.SessionType;
User = new PublicRAppUser(src.User);
UploadStartTime = src.UploadStartTime;
UploadEndTime = src.UploadEndTime;
ProcessStartTime = src.ProcessStartTime;
ProcessEndTime = src.ProcessEndTime;
ProcessProgress = src.ProcessProgress;
Status = src.Status;
UploadedFiles = src.UploadedFiles;
}
/// <summary>
/// Id
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// Session Type
/// </summary>
public UploadSessionType SessionType { get; set; }
/// <summary>
/// User
/// </summary>
public PublicRAppUser User { get; set; }
/// <summary>
/// Upload Start Time
/// </summary>
public DateTime UploadStartTime { get; set; }
/// <summary>
/// Upload End Time
/// </summary>
public DateTime UploadEndTime { get; set; }
/// <summary>
/// Process Start Time
/// </summary>
public DateTime ProcessStartTime { get; set; }
/// <summary>
/// Process End Time
/// </summary>
public DateTime ProcessEndTime { get; set; }
/// <summary>
/// Process Progress
/// </summary>
public int ProcessProgress { get; set; }
/// <summary>
/// Status
/// </summary>
public UploadSessionProcessStatus Status { get; set; }
/// <summary>
/// Uploaded Files
/// </summary>
public ICollection<UploadSessionFile> UploadedFiles { get; set; }
}
}

View File

@ -860,6 +860,11 @@
Upload Sessions
</summary>
</member>
<member name="P:RMuseum.DbContext.RMuseumDbContext.UploadedFiles">
<summary>
Uploaded files
</summary>
</member>
<member name="P:RMuseum.DbContext.RMuseumDbContext.UserNarrationProfiles">
<summary>
User Narration Profiles
@ -2929,6 +2934,11 @@
Id
</summary>
</member>
<member name="P:RMuseum.Models.UploadSession.UploadSessionFile.UploadSessionId">
<summary>
Upload Session Id
</summary>
</member>
<member name="P:RMuseum.Models.UploadSession.UploadSessionFile.ContentDisposition">
<summary>
ContentDisposition

View File

@ -94,7 +94,7 @@ namespace RMuseum.Services
/// <param name="paging"></param>
/// <param name="userId">if userId is empty all user uploads would be returned</param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, UploadSessionViewModel[] Items)>> GetUploads(PagingParameterModel paging, Guid userId);
Task<RServiceResult<(PaginationMetadata PagingMeta, dynamic[] Items)>> GetUploads(PagingParameterModel paging, Guid userId);
}

View File

@ -605,33 +605,39 @@ namespace RMuseum.Services.Implementation
/// <param name="paging"></param>
/// <param name="userId">if userId is empty all user uploads would be returned</param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, UploadSessionViewModel[] Items)>> GetUploads(PagingParameterModel paging, Guid userId)
public async Task<RServiceResult<(PaginationMetadata PagingMeta, dynamic[] Items)>> GetUploads(PagingParameterModel paging, Guid userId)
{
try
{
var source =
(
from file in _context.UploadedFiles
join session in _context.UploadSessions.Include(s => s.User)
on file.UploadSessionId equals session.Id
where userId == Guid.Empty || session.UseId == userId
orderby session.UploadEndTime descending
select new
{ file.FileName, file.ProcessResult, file.ProcessResultMsg, session.UploadEndTime, session.User.UserName, session.ProcessStartTime, session.ProcessProgress, session.ProcessEndTime }
).AsQueryable();
/*
_context.UploadSessions
.Include(u => u.User)
.Include(u => u.UploadedFiles)
.Where(u => userId == Guid.Empty || u.UseId == userId )
.OrderByDescending(u => u.UploadEndTime)
.AsQueryable();
.AsQueryable();*/
(PaginationMetadata PagingMeta, dynamic[] Items) paginatedResult =
await QueryablePaginator<dynamic>.Paginate(source, paging);
(PaginationMetadata PagingMeta, UploadSession[] Items) paginatedResult =
await QueryablePaginator<UploadSession>.Paginate(source, paging);
List<UploadSessionViewModel> res = new List<UploadSessionViewModel>();
foreach (UploadSession upload in paginatedResult.Items)
{
res.Add(new UploadSessionViewModel(upload));
}
return new RServiceResult<(PaginationMetadata PagingMeta, UploadSessionViewModel[] Items)>((paginatedResult.PagingMeta, res.ToArray()));
return new RServiceResult<(PaginationMetadata PagingMeta, dynamic[] Items)>((paginatedResult.PagingMeta, paginatedResult.Items));
}
catch (Exception exp)
{
return new RServiceResult<(PaginationMetadata PagingMeta, UploadSessionViewModel[] Items)>((PagingMeta: null, Items: null), exp.ToString());
return new RServiceResult<(PaginationMetadata PagingMeta, dynamic[] Items)>((PagingMeta: null, Items: null), exp.ToString());
}
}