using Microsoft.AspNetCore.Mvc; using MongoDB.Bson; using MongoDB.Driver; using QrScanner.Models; namespace server.Controllers; [ApiController] [Route("")] public class QrScannerController : ControllerBase { const string db_connection_url = @"mongodb://localhost:27017"; const string db_name = @"qr_scanner"; const string col_codes = @"scans"; const string col_info = @"info"; MongoClient client; IMongoDatabase db; public QrScannerController(){ client = new MongoClient(db_connection_url); db = client.GetDatabase(db_name); } [HttpGet("ping")] public ActionResult ping(){ string message = "Ping received from server."; Console.WriteLine($"Sent message: {message}"); return Ok(message); } [HttpGet("info")] public IActionResult info(){ return Ok(); } [HttpGet("scan")] public async Task scan(string code){ return await _store_code(code); } [HttpGet("codes")] public async Task>> get_codes(){ return await _fetch_all_codes(); } public async Task _store_code(string code){ Console.WriteLine(code); QrCode qr_code = new(); qr_code.id = Guid.NewGuid().ToString(); // qr_code.timestamp = DateTime.Now; qr_code.data = code; var col = db.GetCollection(col_codes); await col.InsertOneAsync(qr_code); return Ok(code); } public async Task _fetch_one(string collection){ Console.WriteLine($"_fetch_one(): Fetching first found data from '{db_name}.{col_codes}'"); var col = db.GetCollection(collection); return await col.Find(new BsonDocument{}).FirstOrDefaultAsync(); } public async Task> _fetch_code(string field, T value){ Console.WriteLine($"_fetch_code(): Fetching QR code from '{db_name}.{col_codes}'"); var col = db.GetCollection(col_codes); var filter = Builders.Filter.Eq(field, value); return Ok(await col.Find(filter).FirstOrDefaultAsync()); } public async Task>> _fetch_all_codes(){ var col = db.GetCollection(col_codes); return await col.Find(f => true).ToListAsync(); } }