Erste lauffähige Version
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
using TodoTicketApp.Models;
|
||||
|
||||
namespace TodoTicketApp.Services;
|
||||
|
||||
public interface ITicketService
|
||||
{
|
||||
void AddTicket(Ticket ticket);
|
||||
IEnumerable<Ticket> GetPendingTickets();
|
||||
Ticket? GetNextTicket();
|
||||
void CompleteTicket(Guid id);
|
||||
void AddComment(Guid ticketId, TicketComment comment);
|
||||
|
||||
Ticket? GetTicketById(Guid id);
|
||||
void UpdateTicket(Ticket ticket);
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using TodoTicketApp.Data;
|
||||
using TodoTicketApp.Models;
|
||||
|
||||
namespace TodoTicketApp.Services;
|
||||
|
||||
public class SqliteTicketService : ITicketService
|
||||
{
|
||||
private readonly AppDbContext _context;
|
||||
|
||||
public SqliteTicketService(AppDbContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public void AddTicket(Ticket ticket)
|
||||
{
|
||||
_context.Tickets.Add(ticket);
|
||||
_context.SaveChanges();
|
||||
}
|
||||
|
||||
public IEnumerable<Ticket> GetPendingTickets()
|
||||
{
|
||||
// Wichtig: .Include(t => t.Comments) sorgt dafür, dass die Kommentare mitgeladen werden
|
||||
return _context.Tickets
|
||||
.Include(t => t.Comments)
|
||||
.Where(t => !t.IsCompleted)
|
||||
.OrderByDescending(t => t.Priority)
|
||||
.ThenBy(t => t.CreatedAt)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public Ticket? GetTicketById(Guid id)
|
||||
{
|
||||
return _context.Tickets
|
||||
.Include(t => t.Comments)
|
||||
.FirstOrDefault(t => t.Id == id);
|
||||
}
|
||||
|
||||
public Ticket? GetNextTicket()
|
||||
{
|
||||
return GetPendingTickets().FirstOrDefault();
|
||||
}
|
||||
|
||||
public void CompleteTicket(Guid id)
|
||||
{
|
||||
var ticket = _context.Tickets.FirstOrDefault(t => t.Id == id);
|
||||
if (ticket != null)
|
||||
{
|
||||
ticket.IsCompleted = true;
|
||||
_context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
public void AddComment(Guid ticketId, TicketComment comment)
|
||||
{
|
||||
comment.TicketId = ticketId;
|
||||
_context.Comments.Add(comment);
|
||||
_context.SaveChanges();
|
||||
}
|
||||
|
||||
public void UpdateTicket(Ticket ticket)
|
||||
{
|
||||
_context.Tickets.Update(ticket);
|
||||
_context.SaveChanges();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using TodoTicketApp.Models;
|
||||
|
||||
namespace TodoTicketApp.Services;
|
||||
|
||||
public class InMemoryTicketService : ITicketService
|
||||
{
|
||||
// In-Memory Speicher. In einer echten App wäre das der DbContext.
|
||||
private readonly List<Ticket> _tickets = new();
|
||||
|
||||
public void AddTicket(Ticket ticket)
|
||||
{
|
||||
_tickets.Add(ticket);
|
||||
}
|
||||
|
||||
public IEnumerable<Ticket> GetPendingTickets()
|
||||
{
|
||||
// Hier ist deine Kernlogik:
|
||||
// 1. Höchste Priorität zuerst (OrderByDescending)
|
||||
// 2. Bei gleicher Priorität: Älteste zuerst (ThenBy -> FIFO-Prinzip)
|
||||
return _tickets
|
||||
.Where(t => !t.IsCompleted)
|
||||
.OrderByDescending(t => t.Priority)
|
||||
.ThenBy(t => t.CreatedAt);
|
||||
}
|
||||
|
||||
public Ticket? GetNextTicket()
|
||||
{
|
||||
// Holt genau das Ticket, das als nächstes bearbeitet werden muss
|
||||
return GetPendingTickets().FirstOrDefault();
|
||||
}
|
||||
|
||||
public void CompleteTicket(Guid id)
|
||||
{
|
||||
var ticket = _tickets.FirstOrDefault(t => t.Id == id);
|
||||
if (ticket != null)
|
||||
{
|
||||
ticket.IsCompleted = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void AddComment(Guid ticketId, TicketComment comment)
|
||||
{
|
||||
var ticket = _tickets.FirstOrDefault(t => t.Id == ticketId);
|
||||
if (ticket != null)
|
||||
{
|
||||
ticket.Comments.Add(comment);
|
||||
}
|
||||
}
|
||||
public Ticket? GetTicketById(Guid id) => _tickets.FirstOrDefault(t => t.Id == id);
|
||||
|
||||
public void UpdateTicket(Ticket ticket)
|
||||
{
|
||||
var existing = GetTicketById(ticket.Id);
|
||||
if (existing != null)
|
||||
{
|
||||
existing.Title = ticket.Title;
|
||||
existing.Description = ticket.Description;
|
||||
existing.Priority = ticket.Priority;
|
||||
existing.IsCompleted = ticket.IsCompleted;
|
||||
// In-Memory Update passiert hier automatisch durch Referenz,
|
||||
// aber für DB-Logik wäre hier das Markieren als "Modified" nötig.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user