Files
Bewerbungs-Portfolio/RazorPagesMovie/Controllers/Api/V1/ContactController.cs
T
Francesco Lorenzo D'Amico 51522e1f3f
Deploy Staging / deploy (push) Successful in 1m11s
Replace polling with push-based Telegram notification queue
2026-08-24 14:41:56 +02:00

40 lines
1.3 KiB
C#

using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using RazorPagesMovie.Api.V1.Contact;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
using RazorPagesMovie.Services;
namespace RazorPagesMovie.Controllers.Api.V1;
[ApiController]
[Route("api/v1/[controller]")]
public class ContactController(RazorPagesMovieContext context, IContactMessageNotificationQueue notificationQueue) : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Post(ContactDto request)
{
var contactMessage = new ContactMessage
{
Name = request.Name ?? string.Empty,
Email = request.Email ?? string.Empty,
Phone = request.Phone,
Subject = request.Subject ?? string.Empty,
Message = request.Message ?? string.Empty
};
var validationResults = new List<ValidationResult>();
if (!Validator.TryValidateObject(contactMessage, new ValidationContext(contactMessage), validationResults, validateAllProperties: true))
{
return BadRequest(new { error = "Bitte alle Pflichtfelder korrekt ausfüllen." });
}
context.ContactMessage.Add(contactMessage);
await context.SaveChangesAsync();
notificationQueue.Enqueue(contactMessage.Id);
return Ok(new { success = true });
}
}