Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System.Net.Mime;
using AutoMapper;
using GettingBetter.API.Event_System.Domain.Models;
using GettingBetter.API.Event_System.Domain.Services;
using GettingBetter.API.Event_System.Resources;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;

namespace GettingBetter.API.Event_System.Controllers;

[ApiController]
[Route("/api/v1/cybers/{cyberId}/events")]
[Produces(MediaTypeNames.Application.Json)]
public class EventCybersController : ControllerBase
{
private readonly IEventService _eventService;
private readonly IMapper _mapper;

public EventCybersController(IEventService eventService, IMapper mapper)
{
_eventService = eventService;
_mapper = mapper;
}

[HttpGet]
[SwaggerOperation(
Summary = "Get All Events for given Cybers",
Description = "Get existing Events associated with the specified Cybers",
OperationId = "GetCyberEvents",
Tags = new[] { "Cybers" }
)]
public async Task<IEnumerable<EventResource>> GetAllByCategoryIdAsync(int categoryId)
{
var events = await _eventService.ListByCyberIdAsync(categoryId);

var resources = _mapper.Map<IEnumerable<Event>, IEnumerable<EventResource>>(events);

return resources;
}
}
82 changes: 82 additions & 0 deletions GettingBetter.API/Event System/Controllers/EventsController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
using AutoMapper;
using GettingBetter.API.Event_System.Domain.Models;
using GettingBetter.API.Shared.Extensions;
using GettingBetter.API.Event_System.Domain.Services;
using GettingBetter.API.Event_System.Resources;
using Microsoft.AspNetCore.Mvc;

namespace GettingBetter.API.Event_System.Controllers;

[ApiController]
[Route("/api/v1/[controller]")]
public class EventsController : ControllerBase
{
private readonly IEventService _eventService;
private readonly IMapper _mapper;

public EventsController(IEventService eventService, IMapper mapper)
{
_eventService = eventService;
_mapper = mapper;
}

[HttpGet]
public async Task<IEnumerable<EventResource>> GetAllAsync()
{
var events = await _eventService.ListAsync();
var resources = _mapper.Map<IEnumerable<Event>, IEnumerable<EventResource>>(events);

return resources;

}

[HttpPost]
public async Task<IActionResult> PostAsync([FromBody] SaveEventResource resource)
{
if (!ModelState.IsValid)
return BadRequest(ModelState.GetErrorMessages());

var evento = _mapper.Map<SaveEventResource, Event>(resource);

var result = await _eventService.SaveAsync(evento);

if (!result.Success)
return BadRequest(result.Message);

var eventResource = _mapper.Map<Event, EventResource>(result.Resource);

return Ok(eventResource);
}

[HttpPut("{id}")]
public async Task<IActionResult> PutAsync(int id, [FromBody] SaveEventResource resource)
{
if (!ModelState.IsValid)
return BadRequest(ModelState.GetErrorMessages());

var evento = _mapper.Map<SaveEventResource, Event>(resource);

var result = await _eventService.UpdateAsync(id, evento);

if (!result.Success)
return BadRequest(result.Message);

var eventResource = _mapper.Map<Event, EventResource>(result.Resource);

return Ok(eventResource);
}

[HttpDelete("{id}")]
public async Task<IActionResult> DeleteAsync(int id)
{
var result = await _eventService.DeleteAsync(id);

if (!result.Success)
return BadRequest(result.Message);

var eventResource = _mapper.Map<Event, EventResource>(result.Resource);

return Ok(eventResource);
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
namespace GettingBetter.API.Event_System.Domain;

using GettingBetter.API.GettingBetter_System.Domain.Models;

namespace GettingBetter.API.Event_System.Domain.Models;

public class Event
{
Expand All @@ -8,4 +11,9 @@ public class Event
public string Title { get; set; }
public string Description { get; set; }
public string Address { get; set; }
// Relationship

public int CyberId { get; set; }
public Cyber Cyber { get; set; }

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using GettingBetter.API.Event_System.Domain.Models;

namespace GettingBetter.API.Event_System.Domain.Repositories;

public interface IEventRepository
{
Task<IEnumerable<Event>> ListAsync();
Task AddAsync(Event evento);
Task<Event> FindByIdAsync(int eventId);
Task<IEnumerable<Event>> FindByCyberIdAsync(int cyberId);
void Update(Event evento);
void Remove(Event evento);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using GettingBetter.API.Shared.Domain.Services.Communication;
using GettingBetter.API.Event_System.Domain.Models;

namespace GettingBetter.API.Event_System.Domain.Services.Communication;

public class EventResponse : BaseResponse<Event>
{
public EventResponse(string message) : base(message)
{
}

public EventResponse(Event resource) : base(resource)
{
}
}
13 changes: 13 additions & 0 deletions GettingBetter.API/Event System/Domain/Services/IEventService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using GettingBetter.API.Event_System.Domain.Models;
using GettingBetter.API.Event_System.Domain.Services.Communication;

namespace GettingBetter.API.Event_System.Domain.Services;

public interface IEventService
{
Task<IEnumerable<Event>> ListAsync();
Task<IEnumerable<Event>> ListByCyberIdAsync(int cyberId);
Task<EventResponse> SaveAsync(Event evento);
Task<EventResponse> UpdateAsync(int eventId, Event evento);
Task<EventResponse> DeleteAsync(int eventId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using GettingBetter.API.Shared.Persistence.Contexts;
using GettingBetter.API.Shared.Persistence.Repositories;
using GettingBetter.API.Event_System.Domain.Models;
using GettingBetter.API.Event_System.Domain.Repositories;
using Microsoft.EntityFrameworkCore;

namespace GettingBetter.API.Event_System.Persistence.Repositories;

public class EventRepository : BaseRepository, IEventRepository
{
public EventRepository(AppDbContext context) : base(context)
{
}

public async Task<IEnumerable<Event>> ListAsync()
{
return await _context.Events
.Include(p => p.Cyber)
.ToListAsync();

}

public async Task AddAsync(Event evento)
{
await _context.Events.AddAsync(evento);
}

public async Task<Event> FindByIdAsync(int eventId)
{
return await _context.Events
.Include(p => p.Cyber)
.FirstOrDefaultAsync(p => p.Id == eventId);

}

public async Task<IEnumerable<Event>> FindByCyberIdAsync(int cyberId)
{
return await _context.Events
.Where(p => p.CyberId == cyberId)
.Include(p => p.Cyber)
.ToListAsync();
}


public void Update(Event evento)
{
_context.Events.Update(evento);
}

public void Remove(Event evento)
{
_context.Events.Remove(evento);
}
}
21 changes: 21 additions & 0 deletions GettingBetter.API/Event System/Resources/EventResource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using GettingBetter.API.GettingBetter_System.Resources;

namespace GettingBetter.API.Event_System.Resources;

public class EventResource
{
public int Id { get; set; }

public string ImageEvent { get; set; }

public string UrlPublication { get; set; }

public string Title { get; set; }

public string Description { get; set; }

public string Address { get; set; }
// Relationships

public CyberResource Cyber { get; set; }
}
31 changes: 31 additions & 0 deletions GettingBetter.API/Event System/Resources/SaveEventResource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System.ComponentModel.DataAnnotations;

namespace GettingBetter.API.Event_System.Resources;

public class SaveEventResource
{
[Required]
[MaxLength(50)]
public string ImageEvent { get; set; }

[Required]
[MaxLength(50)]
public string UrlPublication { get; set; }

[Required]
[MaxLength(30)]
public string Title { get; set; }

[Required]
[MaxLength(50)]
public string Description { get; set; }

[Required]
[MaxLength(30)]
public string Address { get; set; }
// Relationship

[Required]
public int CyberId { get; set; }

}
Loading