feat: Split into Controller/Application/Domain

This commit is contained in:
2026-03-16 10:53:09 +01:00
parent 59344ce6a9
commit 4b1152614e
7 changed files with 88 additions and 33 deletions

View File

@@ -1,33 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace TicketAppIncrArchi.Controllers;
[ApiController]
[Route("api/tickets")]
public class TicketsController : ControllerBase
{
private static List<Ticket> Tickets = new();
[HttpGet]
public IEnumerable<Ticket> Get() => Tickets;
[HttpPost]
public IActionResult Create(Ticket ticket)
{
ticket.Id = Guid.NewGuid();
Tickets.Add(ticket);
return CreatedAtAction(nameof(Get), new {id = ticket.Id}, ticket);
}
public class Ticket
{
public Guid Id {get;set;}
public string Title {get;set;} = "";
public string Description {get;set;} = "";
//public string Status {get;set;} = "";
}
}

View File

@@ -1,3 +1,8 @@
using TicketAppIncrArchi.API.Controllers;
using TicketAppIncrArchi.Application.Interfaces;
using TicketAppIncrArchi.Application.Services;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
@@ -5,6 +10,11 @@ builder.Services.AddControllers();
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddScoped<ITicketService, TicketService>();
var app = builder.Build();
@@ -12,6 +22,8 @@ var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
app.UseSwagger();
app.UseSwaggerUI();
}
//---Disabled for dev purpose

View File

@@ -0,0 +1,28 @@
using Microsoft.AspNetCore.Mvc;
using TicketAppIncrArchi.Application.Interfaces;
using TicketAppIncrArchi.Domain.Entities;
namespace TicketAppIncrArchi.API.Controllers;
[ApiController]
[Route("api/tickets")]
public class TicketsController : ControllerBase
{
private readonly ITicketService _service;
public TicketsController(ITicketService service)
{
_service = service;
}
[HttpGet]
public IEnumerable<Ticket> Get() => _service.GetAll();
[HttpPost]
public IActionResult Create(Ticket ticket)
{
var created = _service.Create(ticket);
return CreatedAtAction(nameof(Get), new {id=created.Id}, created);
}
}

View File

@@ -0,0 +1,11 @@
using TicketAppIncrArchi.Domain.Entities;
namespace TicketAppIncrArchi.Application.Interfaces;
public interface ITicketService
{
IEnumerable<Ticket> GetAll();
Ticket? GetById(Guid id);
Ticket Create(Ticket ticket);
}

View File

@@ -0,0 +1,28 @@
using System.Runtime.CompilerServices;
using TicketAppIncrArchi.Application.Interfaces;
using TicketAppIncrArchi.Domain.Entities;
namespace TicketAppIncrArchi.Application.Services;
public class TicketService : ITicketService
{
private readonly List<Ticket> _tickets = new();
public IEnumerable<Ticket> GetAll() => _tickets;
public Ticket? GetById(Guid id)
{
return _tickets.FirstOrDefault(ticket => ticket.Id == id);
}
public Ticket Create(Ticket ticket)
{
ticket.Id = Guid.NewGuid();
_tickets.Add(ticket);
return ticket;
}
}

View File

@@ -0,0 +1,8 @@
namespace TicketAppIncrArchi.Domain.Entities;
public class Ticket
{
public Guid Id {get;set;}
public string Title {get;set;} = "";
public string Description {get;set;} = "";
//public string Status {get;set;} = "";
}

View File

@@ -8,6 +8,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.5" />
</ItemGroup>
</Project>