ProjetoService.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using ConcursoProjetos.Data;
  2. using ConcursoProjetos.Domain.Entities;
  3. using Microsoft.CodeAnalysis;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace ConcursoProjetos.Service;
  6. public interface IProjetoService
  7. {
  8. Projeto Adicionar(Projeto projeto);
  9. Projeto Alterar(Projeto projeto);
  10. bool Excluir(long projetoId);
  11. string Path(long projetoId);
  12. Projeto ObterPorId(long projetoId);
  13. Projeto ObterPorCodigo(Guid codigo);
  14. IEnumerable<Projeto> Listar(long candidatoId);
  15. }
  16. public class ProjetoService : IProjetoService
  17. {
  18. private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory;
  19. public ProjetoService(IDbContextFactory<ApplicationDbContext> dbContextFactory)
  20. {
  21. _dbContextFactory = dbContextFactory;
  22. }
  23. public Projeto Adicionar(Projeto projeto)
  24. {
  25. using var context = _dbContextFactory.CreateDbContext();
  26. context.Projeto.Add(projeto);
  27. context.SaveChanges();
  28. return projeto;
  29. }
  30. public Projeto Alterar(Projeto projeto)
  31. {
  32. using var context = _dbContextFactory.CreateDbContext();
  33. var existingProjeto = context.Projeto.Find(projeto.Id);
  34. if (existingProjeto != null)
  35. {
  36. context.Entry(existingProjeto).CurrentValues.SetValues(projeto);
  37. context.SaveChanges();
  38. return projeto;
  39. }
  40. return null;
  41. }
  42. public bool Excluir(long projetoId)
  43. {
  44. using var context = _dbContextFactory.CreateDbContext();
  45. var projeto = context.Projeto.Find(projetoId);
  46. if (projeto != null)
  47. {
  48. context.Projeto.Remove(projeto);
  49. context.SaveChanges();
  50. ExcluirArquivosDoProjeto(projetoId);
  51. return true;
  52. }
  53. return false;
  54. }
  55. public Projeto ObterPorId(long projetoId)
  56. {
  57. using var context = _dbContextFactory.CreateDbContext();
  58. return context.Projeto.Find(projetoId);
  59. }
  60. public IEnumerable<Projeto> Listar(long candidatoId)
  61. {
  62. using var context = _dbContextFactory.CreateDbContext();
  63. return context.Projeto.Include(p => p.Documentos).Where(p => p.CandidatoId == candidatoId).ToList();
  64. }
  65. public string Path(long projetoId)
  66. {
  67. string projectPath = $"{Environment.CurrentDirectory}\\files\\{projetoId}";
  68. return projectPath;
  69. }
  70. private void ExcluirArquivosDoProjeto(long projetoId)
  71. {
  72. string path = Path(projetoId);
  73. if (Directory.Exists(path))
  74. {
  75. // Obtém todos os arquivos no diretório
  76. string[] arquivos = Directory.GetFiles(path);
  77. // Remove cada arquivo
  78. foreach (string arquivo in arquivos)
  79. {
  80. File.Delete(arquivo);
  81. }
  82. // Após remover todos os arquivos, remove o diretório
  83. Directory.Delete(path);
  84. }
  85. }
  86. public Projeto ObterPorCodigo(Guid codigo)
  87. {
  88. using var context = _dbContextFactory.CreateDbContext();
  89. return context.Projeto.Where(p => p.Codigo == codigo).FirstOrDefault();
  90. }
  91. }