Files

199 lines
6.1 KiB
C#

using DocumentFormat.OpenXml.Office2010.Excel;
using FamilyTreeAPI.Entities;
using FamilyTreeAPI.Helper;
using FamilyTreeAPI.Interface;
using FamilyTreeAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace FamilyTreeAPI.Repository
{
public class PersonPhotoRepository: IPersonPhoto
{
private readonly FamilyTreeDBContext _context;
private readonly IHttpContextAccessor _httpContext;
private readonly IConfiguration _config;
public PersonPhotoRepository(IConfiguration config,
FamilyTreeDBContext context,
IRelationShipd relationship,
IHttpContextAccessor httpContext)
{
_context = context;
_config = config;
_httpContext = httpContext;
}
private PersonPhotoDto FillDto(PersonPhoto model)
{
PersonPhotoDto dto = new();
dto.Id = model.Id;
dto.PersonId = model.PersonId;
dto.Photo = model.Photo;
dto.PhotoType = model.PhotoType;
return dto;
}
private PersonPhoto FillModel(PersonPhoto model, int personId, string filename)
{
model.PersonId = personId;
model.Photo = filename;
model.PhotoType = System.IO.Path.GetExtension(filename);
return model;
}
public async Task<ResultModel<int>> SaveAsync(UploadCriteria criteria)
{
int result = default(int);
int statuscode = 0;
string error = "";
HttpContext? httpContext = _httpContext.HttpContext;
string loginName = "";
if (httpContext != null)
{
UserDto? user = (UserDto?)httpContext.Items["User"];
if (user != null)
loginName = user.FirstName + " " + user.LastName;
}
try
{
IFormFile formfile = criteria.File;
PersonPhoto model;
model = new();
model = FillModel(model,criteria.PersonId, formfile.FileName);
using (var stream = new MemoryStream())
{
await formfile.CopyToAsync(stream);
model.ImagePhoto = stream.ToArray();
}
_context.PersonPhotos.Add(model);
await _context.SaveChangesAsync();
result = model.Id;
statuscode = 1;
}
catch (Exception ex)
{
error = ex.ToString();
statuscode = -1;
}
//var dto = await Task.Run(() => result);
return new ResultModel<int>()
{
Data = result,
StatusCode = statuscode,
Message = error
};
}
public async Task<ResultModel<FileContent>> DownloadPersonPhoto(int id, string? filename)
{
int statusCode = -1;
string error = "";
PersonPhoto? model = null;
FileContent fileContent = new();
if (id < 1)
{
var rlist = await _context.PersonPhotos.Where(x => x.Photo == filename).ToListAsync();
if (rlist != null)
{
if (rlist.Count > 0)
{
model = rlist[0];
}
}
}
else
{
model = await _context.PersonPhotos.FindAsync(id);
}
if (model != null)
{
fileContent.ContentType = Helpers.GetFileContent(model.PhotoType);
fileContent.Content = (byte[])model.ImagePhoto;
fileContent.FileName = model.Photo;
statusCode = 1;
}
return new ResultModel<FileContent>()
{
Data = fileContent,
StatusCode = statusCode,
Message = error
};
}
public async Task<ResultModel<int>> DeletePersonPhoto(int id)
{
int result = default(int);
int statuscode = 0;
string error = "";
try
{
PersonPhoto? model = await _context.PersonPhotos.FindAsync(id);
if (model != null)
{
_context.PersonPhotos.Remove(model);
await _context.SaveChangesAsync();
statuscode = 1;
}
}
catch (Exception ex)
{
error = ex.ToString();
statuscode = -1;
}
//var dto = await Task.Run(() => result);
return new ResultModel<int>()
{
Data = result,
StatusCode = statuscode,
Message = error
};
}
public async Task<ResultModel<List<PersonPhotoDto>>> LoadPersonPhoto(int personId)
{
List<PersonPhotoDto> result = new();
int statuscode = 0;
string error = "";
PersonPhotoDto dto;
PersonPhoto? model;
try
{
List<PersonPhoto?> mlist = await _context.PersonPhotos.Where( x => x.PersonId == personId ).ToListAsync();
for (int i = 0; i< mlist.Count; i++)
{
model = mlist[i];
if (model != null)
{
dto = FillDto(model);
result.Add(dto);
}
statuscode = 1;
}
}
catch (Exception ex)
{
error = ex.ToString();
statuscode = -1;
}
return new ResultModel<List<PersonPhotoDto>>()
{
Data = result,
StatusCode = statuscode,
Message = error
};
}
}
}