using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using RadicadeServer.DB; using RadicadeServer.Extensions; using RadicadeServer.RecNet.Enums.Inventions; using RadicadeServer.RecNet.Inventions; namespace RadicadeServer.API.Inventions.V2 { [Route("api/inventions/v2")] public class InventionsV2(RecDBContext db) : Controller { [HttpGet("search")] public async Task> SearchInventions([FromQuery] int? take, [FromQuery] string? value) { if (take == null) take = 50; List? foundInventions = null; if (value != null) { foundInventions = await db.Inventions.Where(x => !x.HideFromPlayer && x.IsPublished && (x.Name.Contains(value) || x.Description.Contains(value) || x.Tags.Contains(value)) ).OrderByDescending(x => x.ModifiedAt).Take((int)take).ToListAsync(); } else { foundInventions = await db.Inventions.Where(x => !x.HideFromPlayer && x.IsPublished) .OrderByDescending(x => x.ModifiedAt).Take((int)take).ToListAsync(); } var converted = new List(); foreach (var i in foundInventions) { var invention = i.ToInvention(); converted.Add(invention); } return converted; } [HttpGet("batch"), Authorize] public async Task?> GetBatchInventions_V2([FromQuery] List id) { var userId = User.GetUserId(); var inventions = new List(); foreach (var i in id) { var invention = await db.Inventions.FirstOrDefaultAsync(x => x.InventionId == i); if (invention == null) continue; inventions.Add(invention.ToInvention()); } return inventions; } [HttpGet("mine"), Authorize] public async Task> GetOwnedInventions() { var userId = User.GetUserId(); var unlocks = await db.Unlocks.FirstOrDefaultAsync(x => x.AccountId == userId); if (unlocks == null) return []; var ownedInventions = unlocks.Inventions.FromJson>() ?? new List(); var allInventions = new List(); foreach (var invention in ownedInventions) { var foundInvention = await db.Inventions.FirstOrDefaultAsync(x => x.InventionId == invention); if (foundInvention != null) allInventions.Add(foundInvention.ToInvention()); } return allInventions; } } }