diff --git a/Controllers/RandomQuoteController.cs b/Controllers/RandomQuoteController.cs new file mode 100644 index 0000000..b5bd70a --- /dev/null +++ b/Controllers/RandomQuoteController.cs @@ -0,0 +1,63 @@ +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 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() + }; + + return Ok(dto); + + } + + + } +} \ No newline at end of file diff --git a/DTOs/RandomQuote.cs b/DTOs/RandomQuote.cs new file mode 100644 index 0000000..88f4c35 --- /dev/null +++ b/DTOs/RandomQuote.cs @@ -0,0 +1,9 @@ +public record class RandomQuote +{ + public string Text { get; set; } = string.Empty; + public string Author { get; set; } = string.Empty; + public string? ImageUrl { get; set; } + public List Categories { get; set; } = new(); + +}; +