#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> /// <returns></returns>
[HttpGet("uploads")] [HttpGet("uploads")]
[Authorize] [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.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))] [ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]

View File

@ -139,6 +139,11 @@ namespace RMuseum.DbContext
/// </summary> /// </summary>
public DbSet<UploadSession> UploadSessions { get; set; } public DbSet<UploadSession> UploadSessions { get; set; }
/// <summary>
/// Uploaded files
/// </summary>
public DbSet<UploadSessionFile> UploadedFiles { get; set; }
/// <summary> /// <summary>
/// User Narration Profiles /// User Narration Profiles
/// </summary> /// </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") b.Property<string>("ProcessResultMsg")
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
b.Property<Guid?>("UploadSessionId") b.Property<Guid>("UploadSessionId")
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("UploadSessionId"); b.HasIndex("UploadSessionId");
b.ToTable("UploadSessionFile"); b.ToTable("UploadedFiles");
}); });
modelBuilder.Entity("RSecurityBackend.Models.Audit.Db.REvent", b => modelBuilder.Entity("RSecurityBackend.Models.Audit.Db.REvent", b =>
@ -1355,7 +1355,9 @@ namespace RMuseum.Migrations
{ {
b.HasOne("RMuseum.Models.UploadSession.UploadSession", null) b.HasOne("RMuseum.Models.UploadSession.UploadSession", null)
.WithMany("UploadedFiles") .WithMany("UploadedFiles")
.HasForeignKey("UploadSessionId"); .HasForeignKey("UploadSessionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
}); });
modelBuilder.Entity("RSecurityBackend.Models.Auth.Db.RAppUser", b => modelBuilder.Entity("RSecurityBackend.Models.Auth.Db.RAppUser", b =>

View File

@ -13,6 +13,11 @@ namespace RMuseum.Models.UploadSession
/// </summary> /// </summary>
public Guid Id { get; set; } public Guid Id { get; set; }
/// <summary>
/// Upload Session Id
/// </summary>
public Guid UploadSessionId { get; set; }
/// <summary> /// <summary>
/// ContentDisposition /// ContentDisposition
/// </summary> /// </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 Upload Sessions
</summary> </summary>
</member> </member>
<member name="P:RMuseum.DbContext.RMuseumDbContext.UploadedFiles">
<summary>
Uploaded files
</summary>
</member>
<member name="P:RMuseum.DbContext.RMuseumDbContext.UserNarrationProfiles"> <member name="P:RMuseum.DbContext.RMuseumDbContext.UserNarrationProfiles">
<summary> <summary>
User Narration Profiles User Narration Profiles
@ -2929,6 +2934,11 @@
Id Id
</summary> </summary>
</member> </member>
<member name="P:RMuseum.Models.UploadSession.UploadSessionFile.UploadSessionId">
<summary>
Upload Session Id
</summary>
</member>
<member name="P:RMuseum.Models.UploadSession.UploadSessionFile.ContentDisposition"> <member name="P:RMuseum.Models.UploadSession.UploadSessionFile.ContentDisposition">
<summary> <summary>
ContentDisposition ContentDisposition

View File

@ -94,7 +94,7 @@ namespace RMuseum.Services
/// <param name="paging"></param> /// <param name="paging"></param>
/// <param name="userId">if userId is empty all user uploads would be returned</param> /// <param name="userId">if userId is empty all user uploads would be returned</param>
/// <returns></returns> /// <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="paging"></param>
/// <param name="userId">if userId is empty all user uploads would be returned</param> /// <param name="userId">if userId is empty all user uploads would be returned</param>
/// <returns></returns> /// <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 try
{ {
var source = 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 _context.UploadSessions
.Include(u => u.User) .Include(u => u.User)
.Include(u => u.UploadedFiles) .Include(u => u.UploadedFiles)
.Where(u => userId == Guid.Empty || u.UseId == userId ) .Where(u => userId == Guid.Empty || u.UseId == userId )
.OrderByDescending(u => u.UploadEndTime) .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>(); return new RServiceResult<(PaginationMetadata PagingMeta, dynamic[] Items)>((paginatedResult.PagingMeta, paginatedResult.Items));
foreach (UploadSession upload in paginatedResult.Items)
{
res.Add(new UploadSessionViewModel(upload));
}
return new RServiceResult<(PaginationMetadata PagingMeta, UploadSessionViewModel[] Items)>((paginatedResult.PagingMeta, res.ToArray()));
} }
catch (Exception exp) 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());
} }
} }