using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace ScrumTaskboard.Controllers { [Route("[controller]")] [ApiController] public class TasksController : ControllerBase { private readonly TaskContext _context; public TasksController(TaskContext context) { _context = context; } // GET: api/tasks [HttpGet] public async Task>> GetTasks([FromQuery]string? title, [FromQuery]int? userstoryid, [FromQuery]int? statusid, [FromQuery]int? assignedtoid, [FromQuery]int? projectid, [FromQuery]ScrumPrio? priority) { var filtered = _context.Tasks.AsQueryable(); if (title != null) { filtered = filtered.Where(t => t.title.Contains(title)); } if (userstoryid != null) { filtered = filtered.Where(t => t.userstoryid == userstoryid); } if (statusid != null) { filtered = filtered.Where(t => t.statusid == statusid); } if (assignedtoid != null) { filtered = filtered.Where(t => t.assignedtoid == assignedtoid); } if (projectid != null) { filtered = filtered.Where(t => t.projectid == projectid); } if (priority != null) { filtered = filtered.Where(t => t.priority == priority); } return await filtered.ToListAsync(); } // GET: api/tasks/5 [HttpGet("{id}")] public async Task> GetTask(int id) { var task = await _context.Tasks.FindAsync(id); if (task == null) { return NotFound(); } return task; } // PUT: api/tasks/5 [HttpPut("{id}")] public async Task PutTask(int id, ScrumTask task) { // Die ID des Tasks darf nicht geändert werden if (id != task.id) { return BadRequest(); } // Speichere den geänderten Task im Context _context.Entry(task).State = EntityState.Modified; try { // Übernehme die Änderungen in die Datenbank await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { // Wenn der Task nicht existiert, gib Statuscode 404 zurück if (!TaskExists(id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/tasks [HttpPost] public async Task> PostTask(ScrumTask task) { _context.Tasks.Add(task); await _context.SaveChangesAsync(); // Der neue Task wurde erstellt und kann über die GetTask Methode abgerufen werden. return CreatedAtAction("GetTask", new { id = task.id }, task); } // DELETE: api/tasks/5 [HttpDelete("{id}")] public async Task> DeleteTask(int id) { var scrumTask = await _context.Tasks.FindAsync(id); if (scrumTask == null) { return NotFound(); } // Entferne den Task aus dem Context _context.Tasks.Remove(scrumTask); // Speichere die Änderungen in der Datenbank await _context.SaveChangesAsync(); return scrumTask; } /// /// Prüft, ob ein Task mit der angegebenen ID bereits existiert. /// private bool TaskExists(int id) { return _context.Tasks.Any(e => e.id == id); } } }