Files
QuotifyBE/Controllers/RandomQuoteController.cs
2025-07-15 12:24:09 +02:00

63 lines
1.8 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using QuotifyBE.Data;
using QuotifyBE.Entities;
namespace QuotifyBE.Controllers
{
[ApiController]
[Route("controller")]
public class QuotesController_2 : ControllerBase
{
private readonly ApplicationDbContext _db;
public QuotesController_2(ApplicationDbContext db)
{
_db = db;
}
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> GetRandomQuote()
{
var totalQuotes = await _db.Quotes.CountAsync();
if (totalQuotes == 0)
return NotFound(new { status = "error", error_msg = "brak cytatow" });
var random = new Random();
var skip = random.Next(0, totalQuotes);
var quote = await _db.Quotes
.Include(q => q.QuoteCategories)
.ThenInclude(qc => qc.Category)
.Skip(skip)
.Take(1)
.FirstOrDefaultAsync();
if (quote == null)
return NotFound();
Image? image = null;
if (quote.ImageId != 0)
{
image = await _db.Images.FirstOrDefaultAsync(i => i.Id == quote.ImageId);
}
var dto = new RandomQuote
{
Text = quote.Text,
Author = quote.Author,
ImageUrl = image?.Url,
Categories = quote.QuoteCategories?
.Select(qc => qc.Category?.Name ?? "")
.Where(name => !string.IsNullOrEmpty(name))
.ToList() ?? new List<string>()
};
return Ok(dto);
}
}
}