diff --git a/Controllers/ProjectsController.cs b/Controllers/ProjectsController.cs index 49fe5b1..f2e7d1f 100644 --- a/Controllers/ProjectsController.cs +++ b/Controllers/ProjectsController.cs @@ -17,11 +17,11 @@ namespace TicketManager.Controllers [ApiController] public class ProjectsController : ControllerBase { - private readonly AppDbContext _context; + private readonly IProjectRepository _projectRepo; - public ProjectsController(AppDbContext context) + public ProjectsController(IProjectRepository projectRepo) { - _context = context; + _projectRepo = projectRepo; } /// @@ -36,9 +36,10 @@ namespace TicketManager.Controllers /// Returns all existing projects [HttpGet] [ProducesResponseType(StatusCodes.Status200OK)] - public async Task>> GetProjects() + public async Task> GetProjects() { - return await GetAllProjectsAsync(); + return await _projectRepo.ListAsync(); + // GetAllProjectsAsync(); } /// @@ -57,11 +58,8 @@ namespace TicketManager.Controllers [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task> GetProject(int id) { - Project project = await GetProjectByIdAsync(id); - if (project == null) - { - return NotFound(); - } + Project project = await _projectRepo.GetByIdAsync(id); + if (project == null) { return NotFound(); } return project; } @@ -91,20 +89,15 @@ namespace TicketManager.Controllers [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task PutProject(int id, Project project) { - if (id != project.Id) - { - return BadRequest(); - } - - _context.Entry(project).State = EntityState.Modified; + if (id != project.Id) { return BadRequest(); } try { - await _context.SaveChangesAsync(); + await _projectRepo.UpdateAsync(project); } catch (DbUpdateConcurrencyException) { - if (!ProjectExists(id)) + if (!_projectRepo.Exists(id)) { return NotFound(); } @@ -139,8 +132,8 @@ namespace TicketManager.Controllers [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task> PostProject(Project project) { - _context.Projects.Add(project); - await _context.SaveChangesAsync(); + if (!ModelState.IsValid) { return BadRequest(); } + await _projectRepo.AddAsync(project); return CreatedAtAction("GetProject", new { id = project.Id }, project); } @@ -163,13 +156,12 @@ namespace TicketManager.Controllers [HttpDelete("{id}")] public async Task> DeleteProject(int id) { - var project = await _context.Projects.FindAsync(id); + var project = await _projectRepo.GetByIdAsync(id); if (project == null) { return NotFound(); } - _context.Projects.Remove(project); - await _context.SaveChangesAsync(); + await _projectRepo.DeleteAsync(id); return project; } @@ -188,7 +180,7 @@ namespace TicketManager.Controllers [HttpGet("{id}/members")] public async Task>> GetProjectMembers(int id) { - Project project = await GetProjectByIdAsync(id); + Project project = await _projectRepo.GetByIdAsync(id); if (project == null) { return NotFound(); } return project.GetMembers(); @@ -216,11 +208,11 @@ namespace TicketManager.Controllers [HttpPut("{id}/members")] public async Task> SetProjectMembers(int id, List projectMembers) { - Project project = await GetProjectByIdAsync(id); + Project project = await _projectRepo.GetByIdAsync(id); project.SetMembers(projectMembers); try { - await _context.SaveChangesAsync(); + await _projectRepo.UpdateAsync(project); } catch (DbUpdateException /* ex */) { @@ -314,31 +306,8 @@ namespace TicketManager.Controllers // return NoContent(); // } - private bool ProjectExists(int id) - { - return _context.Projects.Any(e => e.Id == id); - } - private async Task>> GetAllProjectsAsync() - { - return await makeProjectsQueryAsync() - .ToListAsync(); - } - private async Task GetProjectByIdAsync(int id) - { - return await makeProjectsQueryAsync() - .FirstOrDefaultAsync(p => p.Id == id); - } - private IQueryable makeProjectsQueryAsync() - { - return _context.Projects - .Include(p => p.Assignments) - .ThenInclude(a => a.User) - .Include(p => p.Tickets) - .Include(p => p.Manager) - .Include(p => p.Files); - } } } diff --git a/Models/Assignment.cs b/Models/Assignment.cs index 4d3c496..d31396e 100644 --- a/Models/Assignment.cs +++ b/Models/Assignment.cs @@ -4,7 +4,6 @@ namespace TicketManager.Models { public class Assignment { - // public int Id { get; set; } public AppUser User { get; set; } public Guid UserId { get; set; } public Project Project { get; set; } diff --git a/Startup.cs b/Startup.cs index b169da0..9c41d9c 100644 --- a/Startup.cs +++ b/Startup.cs @@ -37,6 +37,7 @@ namespace TicketManager { services.AddDbContext(options => options.UseSqlite(Configuration.GetConnectionString("Sqlite"))); + services.AddScoped(); services.AddControllers() .AddNewtonsoftJson(options => { @@ -72,11 +73,14 @@ namespace TicketManager // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); + var repository = serviceProvider.GetRequiredService(); + + // InitializeDatabaseAsync(repository).Wait() } else {