diff --git a/Controllers/WondersController.cs b/Controllers/WondersController.cs index 2eae7dd..97ee6a1 100644 --- a/Controllers/WondersController.cs +++ b/Controllers/WondersController.cs @@ -6,6 +6,9 @@ using WondersAPI.Models; namespace Ghaymah.WondersAPI.Controllers { + /// + /// API controller to manage Wonders (CRUD + Random). + /// [ApiController] [Route("api/[controller]")] public class WondersController : ControllerBase @@ -19,87 +22,155 @@ namespace Ghaymah.WondersAPI.Controllers _logger = logger; } + // -------------------- GET ALL -------------------- + /// + /// Get all wonders. + /// + /// List of all wonders. [HttpGet] - public async Task GetAll() + [ProducesResponseType(typeof(IEnumerable), 200)] + public async Task GetAllWonders() { - var wonders = await _context.Wonders.ToListAsync(); - _logger.LogInformation("Fetched {Count} wonders from database", wonders.Count); + var wonders = await FetchAllWonders(); + LogFetchedWonders(wonders.Count); return Ok(wonders); } + private async Task> FetchAllWonders() => + await _context.Wonders.ToListAsync(); + private void LogFetchedWonders(int count) => + _logger.LogInformation("Fetched {Count} wonders from database", count); + + // -------------------- GET BY ID -------------------- + /// + /// Get a specific wonder by its ID. + /// + /// The ID of the wonder. + /// The wonder with the specified ID. [HttpGet("{id}")] - public async Task GetById(int id) + [ProducesResponseType(typeof(Wonder), 200)] + [ProducesResponseType(404)] + public async Task GetWonderById(int wonderId) { - var wonder = await _context.Wonders.FindAsync(id); - if (wonder == null) - { - _logger.LogWarning("Wonder with ID {Id} not found", id); - return NotFound(new { message = $"Wonder with ID {id} not found" }); - } + var wonder = await FindWonderOrNotFound(wonderId); + if (wonder is null) return NotFound(new { message = $"Wonder with ID {wonderId} not found" }); return Ok(wonder); } + private async Task FindWonderOrNotFound(int wonderId) => + await _context.Wonders.FindAsync(wonderId); + + // -------------------- CREATE -------------------- + /// + /// Create a new wonder. + /// + /// The wonder to create. + /// The created wonder. [HttpPost] - public async Task Create(Wonder wonder) + [ProducesResponseType(typeof(Wonder), 201)] + public async Task CreateWonder([FromBody] Wonder newWonder) => + await SaveNewWonder(newWonder); + + private async Task SaveNewWonder(Wonder wonder) { _context.Wonders.Add(wonder); await _context.SaveChangesAsync(); - _logger.LogInformation("Created new wonder: {Name}", wonder.Name); - return CreatedAtAction(nameof(GetById), new { id = wonder.Id }, wonder); + LogCreatedWonder(wonder.Name); + return CreatedAtAction(nameof(GetWonderById), new { wonderId = wonder.Id }, wonder); } - + private void LogCreatedWonder(string name) => + _logger.LogInformation("Created new wonder: {Name}", name); + + // -------------------- UPDATE -------------------- + /// + /// Update an existing wonder. + /// + /// The ID of the wonder to update. + /// The updated wonder data. [HttpPut("{id}")] - public async Task Update(int id, Wonder updatedWonder) + [ProducesResponseType(204)] + [ProducesResponseType(404)] + public async Task UpdateWonder(int wonderId, [FromBody] Wonder updatedWonder) { - var existing = await _context.Wonders.FindAsync(id); - if (existing == null) - { - _logger.LogWarning("Update failed: Wonder with ID {Id} not found", id); - return NotFound(); - } + var existingWonder = await FindWonderOrNotFound(wonderId); + if (existingWonder is null) return NotFound(); - existing.Name = updatedWonder.Name; - existing.Country = updatedWonder.Country; - existing.Era = updatedWonder.Era; - existing.Type = updatedWonder.Type; - existing.Description = updatedWonder.Description; - existing.DiscoveryYear = updatedWonder.DiscoveryYear; + return await SaveUpdatedWonder(existingWonder, updatedWonder); + } + private async Task SaveUpdatedWonder(Wonder target, Wonder source) + { + CopyWonderValues(target, source); await _context.SaveChangesAsync(); - _logger.LogInformation("Updated wonder with ID {Id}", id); + LogUpdatedWonder(target.Id); return NoContent(); } - [HttpDelete("{id}")] - public async Task Delete(int id) + private void CopyWonderValues(Wonder target, Wonder source) { - var wonder = await _context.Wonders.FindAsync(id); - if (wonder == null) - { - _logger.LogWarning("Delete failed: Wonder with ID {Id} not found", id); - return NotFound(); - } + target.Name = source.Name; + target.Country = source.Country; + target.Era = source.Era; + target.Type = source.Type; + target.Description = source.Description; + target.DiscoveryYear = source.DiscoveryYear; + } + private void LogUpdatedWonder(int wonderId) => + _logger.LogInformation("Updated wonder with ID {Id}", wonderId); + + // -------------------- DELETE -------------------- + /// + /// Delete a wonder by ID. + /// + /// The ID of the wonder to delete. + [HttpDelete("{id}")] + [ProducesResponseType(204)] + [ProducesResponseType(404)] + public async Task DeleteWonder(int wonderId) + { + var wonder = await FindWonderOrNotFound(wonderId); + if (wonder is null) return NotFound(); + + await RemoveWonder(wonder); + return NoContent(); + } + + private async Task RemoveWonder(Wonder wonder) + { _context.Wonders.Remove(wonder); await _context.SaveChangesAsync(); - _logger.LogInformation("Deleted wonder with ID {Id}", id); - return NoContent(); + LogDeletedWonder(wonder.Id); } + private void LogDeletedWonder(int wonderId) => + _logger.LogInformation("Deleted wonder with ID {Id}", wonderId); + // -------------------- GET RANDOM -------------------- + /// + /// Get a random wonder. + /// + /// A randomly selected wonder. [HttpGet("random")] - public async Task GetRandom() + [ProducesResponseType(typeof(Wonder), 200)] + [ProducesResponseType(404)] + public async Task GetRandomWonder() { - var wonders = await _context.Wonders.ToListAsync(); - if (!wonders.Any()) - return NotFound(); + var allWonders = await FetchAllWonders(); + if (!allWonders.Any()) return NotFound(); - var random = wonders[new Random().Next(wonders.Count)]; - _logger.LogInformation("Returned random wonder: {Name}", random.Name); - return Ok(random); + var randomWonder = SelectRandomWonder(allWonders); + LogRandomWonder(randomWonder.Name); + return Ok(randomWonder); } + + private Wonder SelectRandomWonder(List wonders) => + wonders[new Random().Next(wonders.Count)]; + + private void LogRandomWonder(string name) => + _logger.LogInformation("Returned random wonder: {Name}", name); } } diff --git a/Data/DataSeedingApplication.cs b/Data/DataSeedingApplication.cs index 6fe06b5..a0d32db 100644 --- a/Data/DataSeedingApplication.cs +++ b/Data/DataSeedingApplication.cs @@ -5,18 +5,25 @@ namespace WondersAPI.Data { public static class DataSeedingApplication { - public static List SeedWonders(string filePath) - { - if (!File.Exists(filePath)) - throw new FileNotFoundException($"Seed data file not found: {filePath}"); + public static List LoadWondersFromJsonFile(string jsonFilePath) => + ReadAndConvertJsonToWonders(jsonFilePath); - var json = File.ReadAllText(filePath); - var wonders = JsonSerializer.Deserialize>(json, new JsonSerializerOptions + private static List ReadAndConvertJsonToWonders(string jsonFilePath) + { + ThrowIfJsonFileDoesNotExist(jsonFilePath); + return ConvertJsonStringToWonderList(File.ReadAllText(jsonFilePath)); + } + + private static void ThrowIfJsonFileDoesNotExist(string jsonFilePath) + { + if (!File.Exists(jsonFilePath)) + throw new FileNotFoundException($"The seed data file was not found at path: {jsonFilePath}"); + } + + private static List ConvertJsonStringToWonderList(string jsonString) => + JsonSerializer.Deserialize>(jsonString, new JsonSerializerOptions { PropertyNameCaseInsensitive = true - }); - - return wonders ?? new List(); - } + }) ?? new List(); } -} \ No newline at end of file +} diff --git a/Ghaymah.WondersAPI.csproj b/Ghaymah.WondersAPI.csproj index 1f2a810..21dd497 100644 --- a/Ghaymah.WondersAPI.csproj +++ b/Ghaymah.WondersAPI.csproj @@ -4,6 +4,8 @@ net8.0 enable enable + true + $(NoWarn);1591 @@ -17,3 +19,4 @@ + diff --git a/Logs/app-log2025100520251005.json b/Logs/app-log2025100520251005.json index 79fb0e6..eca5f74 100644 --- a/Logs/app-log2025100520251005.json +++ b/Logs/app-log2025100520251005.json @@ -192,3 +192,141 @@ {"Timestamp":"2025-10-05T21:02:15.2858617+03:00","Level":"Information","MessageTemplate":"Executed action {ActionName} in {ElapsedMilliseconds}ms","TraceId":"bc1a1941a3f5665181256569f425d784","SpanId":"c92119d25df98d03","Properties":{"ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.Create (Ghaymah.WondersAPI)","ElapsedMilliseconds":7.9125,"EventId":{"Id":105,"Name":"ActionExecuted"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker","RequestId":"0HNG473QJG7AA:00000015","RequestPath":"/api/Wonders","ConnectionId":"0HNG473QJG7AA"}} {"Timestamp":"2025-10-05T21:02:15.2893868+03:00","Level":"Information","MessageTemplate":"Executed endpoint '{EndpointName}'","TraceId":"bc1a1941a3f5665181256569f425d784","SpanId":"c92119d25df98d03","Properties":{"EndpointName":"Ghaymah.WondersAPI.Controllers.WondersController.Create (Ghaymah.WondersAPI)","EventId":{"Id":1,"Name":"ExecutedEndpoint"},"SourceContext":"Microsoft.AspNetCore.Routing.EndpointMiddleware","RequestId":"0HNG473QJG7AA:00000015","RequestPath":"/api/Wonders","ConnectionId":"0HNG473QJG7AA"}} {"Timestamp":"2025-10-05T21:02:15.2981489+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"bc1a1941a3f5665181256569f425d784","SpanId":"c92119d25df98d03","Properties":{"ElapsedMilliseconds":27.0407,"StatusCode":201,"ContentType":"application/json; charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"POST","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/api/Wonders","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG473QJG7AA:00000015","RequestPath":"/api/Wonders","ConnectionId":"0HNG473QJG7AA"}} +{"Timestamp":"2025-10-05T22:43:52.8163005+03:00","Level":"Information","MessageTemplate":"Saved {count} entities to in-memory store.","Properties":{"count":6,"EventId":{"Id":30100,"Name":"Microsoft.EntityFrameworkCore.Update.ChangesSaved"},"SourceContext":"Microsoft.EntityFrameworkCore.Update"}} +{"Timestamp":"2025-10-05T22:43:52.8466061+03:00","Level":"Information","MessageTemplate":" Wonders API application started successfully at {time}","Properties":{"time":"2025-10-05T22:43:52.8449750+03:00","SourceContext":"Program"}} +{"Timestamp":"2025-10-05T22:43:52.9429761+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"https://localhost:7247","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:43:52.9452180+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"http://localhost:5004","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:43:52.9731821+03:00","Level":"Information","MessageTemplate":"Application started. Press Ctrl+C to shut down.","Properties":{"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:43:52.9753853+03:00","Level":"Information","MessageTemplate":"Hosting environment: {EnvName}","Properties":{"EnvName":"Development","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:43:52.9766758+03:00","Level":"Information","MessageTemplate":"Content root path: {ContentRoot}","Properties":{"ContentRoot":"D:\\WebApplication1","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:43:53.4543481+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"441af267688667e824b7663621389c6d","SpanId":"15759860b270fb4f","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:43:53.6072482+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"441af267688667e824b7663621389c6d","SpanId":"15759860b270fb4f","Properties":{"ElapsedMilliseconds":154.0382,"StatusCode":200,"ContentType":"text/html;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:43:53.6280719+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"91697344f7e25830c7e3e48a20eb3163","SpanId":"e16ea39b34af7254","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:43:53.6341260+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"91697344f7e25830c7e3e48a20eb3163","SpanId":"e16ea39b34af7254","Properties":{"ElapsedMilliseconds":6.0067,"StatusCode":200,"ContentType":"application/javascript; charset=utf-8","ContentLength":16520,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:43:53.6705619+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"92dd2da7d28a3663d0dd55b4d2e6233e","SpanId":"586a1e9408ef8a81","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:43:53.7410755+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"92dd2da7d28a3663d0dd55b4d2e6233e","SpanId":"586a1e9408ef8a81","Properties":{"ElapsedMilliseconds":70.4959,"StatusCode":200,"ContentType":"text/javascript; charset=UTF-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:43:53.9536364+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"cdb579ea4c443ad8a8a9dc852842ae6f","SpanId":"e4c0d9d681a48b23","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:43:53.9710307+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"cdb579ea4c443ad8a8a9dc852842ae6f","SpanId":"e4c0d9d681a48b23","Properties":{"ElapsedMilliseconds":17.3749,"StatusCode":200,"ContentType":"application/json;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL0:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG48U1RROL0"}} +{"Timestamp":"2025-10-05T22:54:07.6472943+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/api/Wonders/random","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:07.6632110+03:00","Level":"Information","MessageTemplate":"Executing endpoint '{EndpointName}'","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"EndpointName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","EventId":{"Name":"ExecutingEndpoint"},"SourceContext":"Microsoft.AspNetCore.Routing.EndpointMiddleware","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:07.6898842+03:00","Level":"Information","MessageTemplate":"Route matched with {RouteData}. Executing controller action with signature {MethodInfo} on controller {Controller} ({AssemblyName}).","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"RouteData":"{action = \"GetRandom\", controller = \"Wonders\"}","MethodInfo":"System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] GetRandom()","Controller":"Ghaymah.WondersAPI.Controllers.WondersController","AssemblyName":"Ghaymah.WondersAPI","EventId":{"Id":102,"Name":"ControllerActionExecuting"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker","ActionId":"ee5eaec8-c08a-4476-baf7-7c361c2abb67","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:07.7960755+03:00","Level":"Information","MessageTemplate":"Returned random wonder: {Name}","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"Name":"Taj Mahal","SourceContext":"Ghaymah.WondersAPI.Controllers.WondersController","ActionId":"ee5eaec8-c08a-4476-baf7-7c361c2abb67","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:07.8054744+03:00","Level":"Information","MessageTemplate":"Executing {ObjectResultType}, writing value of type '{Type}'.","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"ObjectResultType":"OkObjectResult","Type":"WondersAPI.Models.Wonder","EventId":{"Id":1,"Name":"ObjectResultExecuting"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor","ActionId":"ee5eaec8-c08a-4476-baf7-7c361c2abb67","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:07.8164979+03:00","Level":"Information","MessageTemplate":"Executed action {ActionName} in {ElapsedMilliseconds}ms","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","ElapsedMilliseconds":117.4076,"EventId":{"Id":105,"Name":"ActionExecuted"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:07.8189688+03:00","Level":"Information","MessageTemplate":"Executed endpoint '{EndpointName}'","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"EndpointName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","EventId":{"Id":1,"Name":"ExecutedEndpoint"},"SourceContext":"Microsoft.AspNetCore.Routing.EndpointMiddleware","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:07.8219189+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"5439457e900afbf3586ae3ba74cddcec","SpanId":"2261f87d4b11e3d6","Properties":{"ElapsedMilliseconds":174.6041,"StatusCode":200,"ContentType":"application/json; charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/api/Wonders/random","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL1:00000001","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.1873155+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/api/Wonders/random","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.1917765+03:00","Level":"Information","MessageTemplate":"Executing endpoint '{EndpointName}'","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"EndpointName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","EventId":{"Name":"ExecutingEndpoint"},"SourceContext":"Microsoft.AspNetCore.Routing.EndpointMiddleware","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.1931048+03:00","Level":"Information","MessageTemplate":"Route matched with {RouteData}. Executing controller action with signature {MethodInfo} on controller {Controller} ({AssemblyName}).","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"RouteData":"{action = \"GetRandom\", controller = \"Wonders\"}","MethodInfo":"System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] GetRandom()","Controller":"Ghaymah.WondersAPI.Controllers.WondersController","AssemblyName":"Ghaymah.WondersAPI","EventId":{"Id":102,"Name":"ControllerActionExecuting"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker","ActionId":"ee5eaec8-c08a-4476-baf7-7c361c2abb67","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.2178974+03:00","Level":"Information","MessageTemplate":"Returned random wonder: {Name}","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"Name":"Hanging Gardens of Babylon","SourceContext":"Ghaymah.WondersAPI.Controllers.WondersController","ActionId":"ee5eaec8-c08a-4476-baf7-7c361c2abb67","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.2213940+03:00","Level":"Information","MessageTemplate":"Executing {ObjectResultType}, writing value of type '{Type}'.","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"ObjectResultType":"OkObjectResult","Type":"WondersAPI.Models.Wonder","EventId":{"Id":1,"Name":"ObjectResultExecuting"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor","ActionId":"ee5eaec8-c08a-4476-baf7-7c361c2abb67","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.2234349+03:00","Level":"Information","MessageTemplate":"Executed action {ActionName} in {ElapsedMilliseconds}ms","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","ElapsedMilliseconds":27.6853,"EventId":{"Id":105,"Name":"ActionExecuted"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.2256614+03:00","Level":"Information","MessageTemplate":"Executed endpoint '{EndpointName}'","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"EndpointName":"Ghaymah.WondersAPI.Controllers.WondersController.GetRandom (Ghaymah.WondersAPI)","EventId":{"Id":1,"Name":"ExecutedEndpoint"},"SourceContext":"Microsoft.AspNetCore.Routing.EndpointMiddleware","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:54:13.2269681+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"07edcb11c05b8df37dd2fc2a7df26bae","SpanId":"7e4fe67e8074d756","Properties":{"ElapsedMilliseconds":39.6424,"StatusCode":200,"ContentType":"application/json; charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/api/Wonders/random","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG48U1RROL1:00000003","RequestPath":"/api/Wonders/random","ConnectionId":"0HNG48U1RROL1"}} +{"Timestamp":"2025-10-05T22:55:28.1483657+03:00","Level":"Information","MessageTemplate":"Saved {count} entities to in-memory store.","Properties":{"count":6,"EventId":{"Id":30100,"Name":"Microsoft.EntityFrameworkCore.Update.ChangesSaved"},"SourceContext":"Microsoft.EntityFrameworkCore.Update"}} +{"Timestamp":"2025-10-05T22:55:28.2063630+03:00","Level":"Information","MessageTemplate":"Wonders API application started successfully at {time}","Properties":{"time":"2025-10-05T22:55:28.2045730+03:00","SourceContext":"Program"}} +{"Timestamp":"2025-10-05T22:55:28.3885149+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"https://localhost:7247","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:55:28.3910137+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"http://localhost:5004","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:55:28.4560082+03:00","Level":"Information","MessageTemplate":"Application started. Press Ctrl+C to shut down.","Properties":{"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:55:28.4606181+03:00","Level":"Information","MessageTemplate":"Hosting environment: {EnvName}","Properties":{"EnvName":"Development","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:55:28.4625797+03:00","Level":"Information","MessageTemplate":"Content root path: {ContentRoot}","Properties":{"ContentRoot":"D:\\WebApplication1","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:55:28.6173692+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"265a5980276951eb8cbab86e7571554e","SpanId":"7dd91b2c6cd4e21c","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:28.6962852+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"265a5980276951eb8cbab86e7571554e","SpanId":"7dd91b2c6cd4e21c","Properties":{"ElapsedMilliseconds":80.4669,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:28.7060984+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"265a5980276951eb8cbab86e7571554e","SpanId":"7dd91b2c6cd4e21c","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:52.1021489+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"ebcf5287755ae570b715a9621b9a4377","SpanId":"b952d0c5f7918124","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000003","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:52.1149282+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"ebcf5287755ae570b715a9621b9a4377","SpanId":"b952d0c5f7918124","Properties":{"ElapsedMilliseconds":12.7319,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000003","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:52.1227048+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"ebcf5287755ae570b715a9621b9a4377","SpanId":"b952d0c5f7918124","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000003","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:53.1851934+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"6955ddd0b524983b956c4ee78b3afeec","SpanId":"2ab37f9800a877a3","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000005","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:53.1951266+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"6955ddd0b524983b956c4ee78b3afeec","SpanId":"2ab37f9800a877a3","Properties":{"ElapsedMilliseconds":9.9153,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000005","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:53.2054201+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"6955ddd0b524983b956c4ee78b3afeec","SpanId":"2ab37f9800a877a3","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000005","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:58.6851157+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"66ea6878d92db78bfa2634f6ec3c5f0d","SpanId":"8eec27a8ff71de8c","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000007","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:58.6908365+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"66ea6878d92db78bfa2634f6ec3c5f0d","SpanId":"8eec27a8ff71de8c","Properties":{"ElapsedMilliseconds":5.7041,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000007","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:55:58.6967492+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"66ea6878d92db78bfa2634f6ec3c5f0d","SpanId":"8eec27a8ff71de8c","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000007","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:07.1333791+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"18779937eb3aaac6253fb85c8d7ce9fa","SpanId":"780dc1d58645af63","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000009","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:07.1429007+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"18779937eb3aaac6253fb85c8d7ce9fa","SpanId":"780dc1d58645af63","Properties":{"ElapsedMilliseconds":9.5122,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000009","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:07.1563963+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"18779937eb3aaac6253fb85c8d7ce9fa","SpanId":"780dc1d58645af63","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:00000009","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:07.9238519+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"480adf6556b59f7672559cb9d3fab4a5","SpanId":"2bebc3a3fcb46986","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000B","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:07.9320585+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"480adf6556b59f7672559cb9d3fab4a5","SpanId":"2bebc3a3fcb46986","Properties":{"ElapsedMilliseconds":8.1878,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000B","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:07.9413332+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"480adf6556b59f7672559cb9d3fab4a5","SpanId":"2bebc3a3fcb46986","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000B","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:08.1305435+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"694898692d28be458d5d4cc4205a7b03","SpanId":"e8b697a8cd3c924b","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000D","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:08.1368225+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"694898692d28be458d5d4cc4205a7b03","SpanId":"e8b697a8cd3c924b","Properties":{"ElapsedMilliseconds":6.3979,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000D","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:08.1419861+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"694898692d28be458d5d4cc4205a7b03","SpanId":"e8b697a8cd3c924b","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000D","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:08.2920750+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"9fd85d73864515fed6df1104283d18db","SpanId":"2a1ad65edf96356d","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000F","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:08.2995719+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"9fd85d73864515fed6df1104283d18db","SpanId":"2a1ad65edf96356d","Properties":{"ElapsedMilliseconds":7.479,"StatusCode":404,"ContentType":null,"ContentLength":0,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000F","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:56:08.3050539+03:00","Level":"Information","MessageTemplate":"Request reached the end of the middleware pipeline without being handled by application code. Request path: {Method} {Scheme}://{Host}{PathBase}{Path}, Response status code: {StatusCode}","TraceId":"9fd85d73864515fed6df1104283d18db","SpanId":"2a1ad65edf96356d","Properties":{"Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","StatusCode":404,"EventId":{"Id":16},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG494H2BI2H:0000000F","RequestPath":"/swagger/index.html","ConnectionId":"0HNG494H2BI2H"}} +{"Timestamp":"2025-10-05T22:58:26.0387005+03:00","Level":"Information","MessageTemplate":"Saved {count} entities to in-memory store.","Properties":{"count":6,"EventId":{"Id":30100,"Name":"Microsoft.EntityFrameworkCore.Update.ChangesSaved"},"SourceContext":"Microsoft.EntityFrameworkCore.Update"}} +{"Timestamp":"2025-10-05T22:58:26.0654235+03:00","Level":"Information","MessageTemplate":"Wonders API application started successfully at {time}","Properties":{"time":"2025-10-05T22:58:26.0637350+03:00","SourceContext":"Program"}} +{"Timestamp":"2025-10-05T22:58:26.1576385+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"https://localhost:7247","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:58:26.1586441+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"http://localhost:5004","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:58:26.1896682+03:00","Level":"Information","MessageTemplate":"Application started. Press Ctrl+C to shut down.","Properties":{"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:58:26.1907537+03:00","Level":"Information","MessageTemplate":"Hosting environment: {EnvName}","Properties":{"EnvName":"Development","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:58:26.1915471+03:00","Level":"Information","MessageTemplate":"Content root path: {ContentRoot}","Properties":{"ContentRoot":"D:\\WebApplication1","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T22:58:26.5653482+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"0f9fae3afaa25528c567144b843fa203","SpanId":"c8e14834c08d4537","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:26.6721942+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"0f9fae3afaa25528c567144b843fa203","SpanId":"c8e14834c08d4537","Properties":{"ElapsedMilliseconds":107.7529,"StatusCode":200,"ContentType":"text/html;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:26.7050309+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"e0e2b2b271a909184752fac9c6bed216","SpanId":"d795ff29b3606737","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:26.7120888+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"e0e2b2b271a909184752fac9c6bed216","SpanId":"d795ff29b3606737","Properties":{"ElapsedMilliseconds":7.0178,"StatusCode":200,"ContentType":"application/javascript; charset=utf-8","ContentLength":16520,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:26.7987107+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"f82ef1f31263de7acef63b713c88b4c2","SpanId":"9cb022f853645894","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:26.8238328+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"f82ef1f31263de7acef63b713c88b4c2","SpanId":"9cb022f853645894","Properties":{"ElapsedMilliseconds":25.1075,"StatusCode":200,"ContentType":"text/javascript; charset=UTF-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:27.0620606+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"374a19a2a95b767c59972a8f38251eaf","SpanId":"190427042e5642ab","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:27.0763979+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"374a19a2a95b767c59972a8f38251eaf","SpanId":"190427042e5642ab","Properties":{"ElapsedMilliseconds":14.2708,"StatusCode":200,"ContentType":"application/json;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.4232168+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/api/Wonders","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.4358610+03:00","Level":"Information","MessageTemplate":"Executing endpoint '{EndpointName}'","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"EndpointName":"Ghaymah.WondersAPI.Controllers.WondersController.GetAll (Ghaymah.WondersAPI)","EventId":{"Name":"ExecutingEndpoint"},"SourceContext":"Microsoft.AspNetCore.Routing.EndpointMiddleware","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.4617749+03:00","Level":"Information","MessageTemplate":"Route matched with {RouteData}. Executing controller action with signature {MethodInfo} on controller {Controller} ({AssemblyName}).","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"RouteData":"{action = \"GetAll\", controller = \"Wonders\"}","MethodInfo":"System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] GetAll()","Controller":"Ghaymah.WondersAPI.Controllers.WondersController","AssemblyName":"Ghaymah.WondersAPI","EventId":{"Id":102,"Name":"ControllerActionExecuting"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker","ActionId":"1d5890ac-6f36-4655-9eae-0b1631e8dd22","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetAll (Ghaymah.WondersAPI)","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.5677477+03:00","Level":"Information","MessageTemplate":"Fetched {Count} wonders from database","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"Count":6,"SourceContext":"Ghaymah.WondersAPI.Controllers.WondersController","ActionId":"1d5890ac-6f36-4655-9eae-0b1631e8dd22","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetAll (Ghaymah.WondersAPI)","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.5769390+03:00","Level":"Information","MessageTemplate":"Executing {ObjectResultType}, writing value of type '{Type}'.","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"ObjectResultType":"OkObjectResult","Type":"System.Collections.Generic.List`1[[WondersAPI.Models.Wonder, Ghaymah.WondersAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]","EventId":{"Id":1,"Name":"ObjectResultExecuting"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor","ActionId":"1d5890ac-6f36-4655-9eae-0b1631e8dd22","ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetAll (Ghaymah.WondersAPI)","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.5936262+03:00","Level":"Information","MessageTemplate":"Executed action {ActionName} in {ElapsedMilliseconds}ms","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"ActionName":"Ghaymah.WondersAPI.Controllers.WondersController.GetAll (Ghaymah.WondersAPI)","ElapsedMilliseconds":119.4104,"EventId":{"Id":105,"Name":"ActionExecuted"},"SourceContext":"Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.5962257+03:00","Level":"Information","MessageTemplate":"Executed endpoint '{EndpointName}'","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"EndpointName":"Ghaymah.WondersAPI.Controllers.WondersController.GetAll (Ghaymah.WondersAPI)","EventId":{"Id":1,"Name":"ExecutedEndpoint"},"SourceContext":"Microsoft.AspNetCore.Routing.EndpointMiddleware","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T22:58:47.6010872+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"5df9d7675a58fbbc0ef62dd29ad0ece3","SpanId":"1098ffd7989c1ec6","Properties":{"ElapsedMilliseconds":177.6702,"StatusCode":200,"ContentType":"application/json; charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/api/Wonders","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG49662V56R:00000009","RequestPath":"/api/Wonders","ConnectionId":"0HNG49662V56R"}} +{"Timestamp":"2025-10-05T23:02:49.8675629+03:00","Level":"Information","MessageTemplate":"Saved {count} entities to in-memory store.","Properties":{"count":6,"EventId":{"Id":30100,"Name":"Microsoft.EntityFrameworkCore.Update.ChangesSaved"},"SourceContext":"Microsoft.EntityFrameworkCore.Update"}} +{"Timestamp":"2025-10-05T23:02:49.8994187+03:00","Level":"Information","MessageTemplate":"Wonders API application started successfully at {time}","Properties":{"time":"2025-10-05T23:02:49.8976830+03:00","SourceContext":"Program"}} +{"Timestamp":"2025-10-05T23:02:50.0230785+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"https://localhost:7247","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:02:50.0255486+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"http://localhost:5004","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:02:50.0621318+03:00","Level":"Information","MessageTemplate":"Application started. Press Ctrl+C to shut down.","Properties":{"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:02:50.0651588+03:00","Level":"Information","MessageTemplate":"Hosting environment: {EnvName}","Properties":{"EnvName":"Development","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:02:50.0694204+03:00","Level":"Information","MessageTemplate":"Content root path: {ContentRoot}","Properties":{"ContentRoot":"D:\\WebApplication1","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:02:52.5325906+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"7b5690e4616e1c3957222dab2ca16079","SpanId":"a0a909fb08fd4fb5","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:02:52.6430844+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"7b5690e4616e1c3957222dab2ca16079","SpanId":"a0a909fb08fd4fb5","Properties":{"ElapsedMilliseconds":111.8747,"StatusCode":200,"ContentType":"text/html;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:02:54.8298554+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"24600c8420fc5a306be9936bdb508789","SpanId":"01107324c7406707","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:02:54.8373390+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"24600c8420fc5a306be9936bdb508789","SpanId":"01107324c7406707","Properties":{"ElapsedMilliseconds":7.4147,"StatusCode":200,"ContentType":"application/javascript; charset=utf-8","ContentLength":16520,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:02:55.7054183+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"85239b90fe33434e3fbf9652b40ed87e","SpanId":"5cedc22f81fe1910","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:02:55.7452167+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"85239b90fe33434e3fbf9652b40ed87e","SpanId":"5cedc22f81fe1910","Properties":{"ElapsedMilliseconds":39.8812,"StatusCode":200,"ContentType":"text/javascript; charset=UTF-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:03:29.5287918+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"f2c6c0e22b5bbc648f72ea29ecbea6dd","SpanId":"ad925c30ec960a62","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:03:29.5623706+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"f2c6c0e22b5bbc648f72ea29ecbea6dd","SpanId":"ad925c30ec960a62","Properties":{"ElapsedMilliseconds":33.5323,"StatusCode":200,"ContentType":"application/json;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG498KMFFH5:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG498KMFFH5"}} +{"Timestamp":"2025-10-05T23:55:47.7793441+03:00","Level":"Information","MessageTemplate":"Saved {count} entities to in-memory store.","Properties":{"count":6,"EventId":{"Id":30100,"Name":"Microsoft.EntityFrameworkCore.Update.ChangesSaved"},"SourceContext":"Microsoft.EntityFrameworkCore.Update"}} +{"Timestamp":"2025-10-05T23:55:47.8176539+03:00","Level":"Information","MessageTemplate":"Wonders API application started successfully at {time}","Properties":{"time":"2025-10-05T23:55:47.8159430+03:00","SourceContext":"Program"}} +{"Timestamp":"2025-10-05T23:55:47.9850819+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"https://localhost:7247","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:55:47.9895700+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"http://localhost:5004","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:55:48.0235277+03:00","Level":"Information","MessageTemplate":"Application started. Press Ctrl+C to shut down.","Properties":{"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:55:48.0266600+03:00","Level":"Information","MessageTemplate":"Hosting environment: {EnvName}","Properties":{"EnvName":"Development","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:55:48.0280170+03:00","Level":"Information","MessageTemplate":"Content root path: {ContentRoot}","Properties":{"ContentRoot":"D:\\WebApplication1","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:55:48.4894161+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"3a74d31b0edea37d91ea4e24cb438d62","SpanId":"ce2e108488608dfb","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:55:48.6072249+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"3a74d31b0edea37d91ea4e24cb438d62","SpanId":"ce2e108488608dfb","Properties":{"ElapsedMilliseconds":118.7348,"StatusCode":200,"ContentType":"text/html;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:55:48.6343999+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"d50f2af868781ed643bd70f96d918d0c","SpanId":"5955dcd680b08ff5","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:55:48.6706694+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"d50f2af868781ed643bd70f96d918d0c","SpanId":"5955dcd680b08ff5","Properties":{"ElapsedMilliseconds":36.1377,"StatusCode":200,"ContentType":"application/javascript; charset=utf-8","ContentLength":16521,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:55:48.7449310+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"61424a79537f9146cca129d056b0a037","SpanId":"98c233b17bcdd42e","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:55:48.8329831+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"61424a79537f9146cca129d056b0a037","SpanId":"98c233b17bcdd42e","Properties":{"ElapsedMilliseconds":88.0349,"StatusCode":200,"ContentType":"text/javascript; charset=UTF-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:55:49.0441599+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"4f2ed325d40f7a74bc1539011c8806bd","SpanId":"23b65e92634ffe7b","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:55:49.0600998+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"4f2ed325d40f7a74bc1539011c8806bd","SpanId":"23b65e92634ffe7b","Properties":{"ElapsedMilliseconds":15.9206,"StatusCode":200,"ContentType":"application/json;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A67QVD2V:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4A67QVD2V"}} +{"Timestamp":"2025-10-05T23:57:21.5287842+03:00","Level":"Information","MessageTemplate":"Saved {count} entities to in-memory store.","Properties":{"count":6,"EventId":{"Id":30100,"Name":"Microsoft.EntityFrameworkCore.Update.ChangesSaved"},"SourceContext":"Microsoft.EntityFrameworkCore.Update"}} +{"Timestamp":"2025-10-05T23:57:21.5562703+03:00","Level":"Information","MessageTemplate":"Wonders API application started successfully at {time}","Properties":{"time":"2025-10-05T23:57:21.5546279+03:00","SourceContext":"Program"}} +{"Timestamp":"2025-10-05T23:57:21.6485161+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"https://localhost:7247","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:57:21.6518596+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"http://localhost:5004","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:57:21.6830581+03:00","Level":"Information","MessageTemplate":"Application started. Press Ctrl+C to shut down.","Properties":{"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:57:21.6885673+03:00","Level":"Information","MessageTemplate":"Hosting environment: {EnvName}","Properties":{"EnvName":"Development","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:57:21.6907677+03:00","Level":"Information","MessageTemplate":"Content root path: {ContentRoot}","Properties":{"ContentRoot":"D:\\WebApplication1","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-05T23:57:21.9788447+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"6c0e12a5d3b4206fbb33fa167ea6de5b","SpanId":"1ccb38800572c951","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:22.0776142+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"6c0e12a5d3b4206fbb33fa167ea6de5b","SpanId":"1ccb38800572c951","Properties":{"ElapsedMilliseconds":99.6063,"StatusCode":200,"ContentType":"text/html;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:22.1445375+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"cc86144ccf678e7b34bb4da0e8639d3f","SpanId":"45a1076f576af9cd","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:22.1445376+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"402742f9786784ba7c74f4e381fabc95","SpanId":"173ad97435eddbbc","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:22.1572473+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"cc86144ccf678e7b34bb4da0e8639d3f","SpanId":"45a1076f576af9cd","Properties":{"ElapsedMilliseconds":12.6686,"StatusCode":200,"ContentType":"application/javascript; charset=utf-8","ContentLength":16521,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000003","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:22.1803351+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"402742f9786784ba7c74f4e381fabc95","SpanId":"173ad97435eddbbc","Properties":{"ElapsedMilliseconds":35.7893,"StatusCode":200,"ContentType":"text/javascript; charset=UTF-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000005","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:22.5490622+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"d01914a02d777553f26fa4d33437ecbe","SpanId":"33e2dc2b01549623","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:22.5784841+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"d01914a02d777553f26fa4d33437ecbe","SpanId":"33e2dc2b01549623","Properties":{"ElapsedMilliseconds":29.4022,"StatusCode":200,"ContentType":"application/json;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:30.9186844+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"7d1661519f7f97b784d05b3c21546a38","SpanId":"bd55ca131e18ba56","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000009","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:30.9317299+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"7d1661519f7f97b784d05b3c21546a38","SpanId":"bd55ca131e18ba56","Properties":{"ElapsedMilliseconds":13.0467,"StatusCode":200,"ContentType":"text/html;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:00000009","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:30.9592826+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"d14bc8ec5b9e3a0757d787d4139fe4f9","SpanId":"2d07472ac83ca24d","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:0000000B","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:30.9602031+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"b6fa0b216f8c89849a13d1605fa9cd0a","SpanId":"ceba29eb0e19f6d4","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:0000000D","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:30.9830625+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"b6fa0b216f8c89849a13d1605fa9cd0a","SpanId":"ceba29eb0e19f6d4","Properties":{"ElapsedMilliseconds":22.8234,"StatusCode":200,"ContentType":"application/javascript; charset=utf-8","ContentLength":16521,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:0000000D","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:30.9878707+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"d14bc8ec5b9e3a0757d787d4139fe4f9","SpanId":"2d07472ac83ca24d","Properties":{"ElapsedMilliseconds":28.5476,"StatusCode":200,"ContentType":"text/javascript; charset=UTF-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:0000000B","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:31.0700581+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"c0fa38e6b1ba7fe20a50555065ada91e","SpanId":"c3179354b40cbdfc","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:0000000F","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4A73NV274"}} +{"Timestamp":"2025-10-05T23:57:31.0859224+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"c0fa38e6b1ba7fe20a50555065ada91e","SpanId":"c3179354b40cbdfc","Properties":{"ElapsedMilliseconds":15.8452,"StatusCode":200,"ContentType":"application/json;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4A73NV274:0000000F","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4A73NV274"}} diff --git a/Logs/app-log2025100620251006.json b/Logs/app-log2025100620251006.json new file mode 100644 index 0000000..6f54ec0 --- /dev/null +++ b/Logs/app-log2025100620251006.json @@ -0,0 +1,15 @@ +{"Timestamp":"2025-10-06T00:12:30.2229555+03:00","Level":"Information","MessageTemplate":"Saved {count} entities to in-memory store.","Properties":{"count":6,"EventId":{"Id":30100,"Name":"Microsoft.EntityFrameworkCore.Update.ChangesSaved"},"SourceContext":"Microsoft.EntityFrameworkCore.Update"}} +{"Timestamp":"2025-10-06T00:12:30.2530393+03:00","Level":"Information","MessageTemplate":"Wonders API application started successfully at {time}","Properties":{"time":"2025-10-06T00:12:30.2513909+03:00","SourceContext":"Program"}} +{"Timestamp":"2025-10-06T00:12:30.3654722+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"https://localhost:7247","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-06T00:12:30.3676395+03:00","Level":"Information","MessageTemplate":"Now listening on: {address}","Properties":{"address":"http://localhost:5004","EventId":{"Id":14,"Name":"ListeningOnAddress"},"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-06T00:12:30.3976443+03:00","Level":"Information","MessageTemplate":"Application started. Press Ctrl+C to shut down.","Properties":{"SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-06T00:12:30.4008189+03:00","Level":"Information","MessageTemplate":"Hosting environment: {EnvName}","Properties":{"EnvName":"Development","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-06T00:12:30.4024309+03:00","Level":"Information","MessageTemplate":"Content root path: {ContentRoot}","Properties":{"ContentRoot":"D:\\WebApplication1","SourceContext":"Microsoft.Hosting.Lifetime"}} +{"Timestamp":"2025-10-06T00:12:30.6362110+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"7b67f5d89f3cc4ffbea56bf307c08d87","SpanId":"b8ed155941065664","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4AFIHH3V3"}} +{"Timestamp":"2025-10-06T00:12:30.7367429+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"7b67f5d89f3cc4ffbea56bf307c08d87","SpanId":"b8ed155941065664","Properties":{"ElapsedMilliseconds":101.3249,"StatusCode":200,"ContentType":"text/html;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/index.html","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000001","RequestPath":"/swagger/index.html","ConnectionId":"0HNG4AFIHH3V3"}} +{"Timestamp":"2025-10-06T00:12:30.8154161+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"9f8cf99b3112a957c3a7c70e60c4d5cd","SpanId":"c92011c523de8693","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000005","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4AFIHH3V3"}} +{"Timestamp":"2025-10-06T00:12:30.8154157+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"fb0bd1e51f28f1cf0fb291afee6b819d","SpanId":"9f5b563d89858d56","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000003","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4AFIHH3V3"}} +{"Timestamp":"2025-10-06T00:12:30.8281149+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"9f8cf99b3112a957c3a7c70e60c4d5cd","SpanId":"c92011c523de8693","Properties":{"ElapsedMilliseconds":12.6812,"StatusCode":200,"ContentType":"application/javascript; charset=utf-8","ContentLength":16521,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_framework/aspnetcore-browser-refresh.js","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000005","RequestPath":"/_framework/aspnetcore-browser-refresh.js","ConnectionId":"0HNG4AFIHH3V3"}} +{"Timestamp":"2025-10-06T00:12:30.8548787+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"fb0bd1e51f28f1cf0fb291afee6b819d","SpanId":"9f5b563d89858d56","Properties":{"ElapsedMilliseconds":39.4774,"StatusCode":200,"ContentType":"text/javascript; charset=UTF-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/_vs/browserLink","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000003","RequestPath":"/_vs/browserLink","ConnectionId":"0HNG4AFIHH3V3"}} +{"Timestamp":"2025-10-06T00:12:31.7959676+03:00","Level":"Information","MessageTemplate":"Request starting {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {ContentType} {ContentLength}","TraceId":"64818be885f30c18a92380891dd3b405","SpanId":"b0070e09567e350d","Properties":{"Protocol":"HTTP/2","Method":"GET","ContentType":null,"ContentLength":null,"Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":1},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4AFIHH3V3"}} +{"Timestamp":"2025-10-06T00:12:31.8310673+03:00","Level":"Information","MessageTemplate":"Request finished {Protocol} {Method} {Scheme}://{Host}{PathBase}{Path}{QueryString} - {StatusCode} {ContentLength} {ContentType} {ElapsedMilliseconds}ms","TraceId":"64818be885f30c18a92380891dd3b405","SpanId":"b0070e09567e350d","Properties":{"ElapsedMilliseconds":35.1181,"StatusCode":200,"ContentType":"application/json;charset=utf-8","ContentLength":null,"Protocol":"HTTP/2","Method":"GET","Scheme":"https","Host":"localhost:7247","PathBase":"","Path":"/swagger/v1/swagger.json","QueryString":"","EventId":{"Id":2},"SourceContext":"Microsoft.AspNetCore.Hosting.Diagnostics","RequestId":"0HNG4AFIHH3V3:00000007","RequestPath":"/swagger/v1/swagger.json","ConnectionId":"0HNG4AFIHH3V3"}} diff --git a/Models/Wonder.cs b/Models/Wonder.cs index d598b19..ba03a6a 100644 --- a/Models/Wonder.cs +++ b/Models/Wonder.cs @@ -1,14 +1,50 @@ namespace WondersAPI.Models { + /// + /// Represents a wonder of the world. + /// public class Wonder { + /// + /// The unique identifier of the wonder. + /// + /// 1 public int Id { get; set; } - public string Name { get; set; } = string.Empty; - public string Country { get; set; } = string.Empty; - public string Era { get; set; } = string.Empty; - public string Type { get; set; } = string.Empty; - public int DiscoveryYear { get; set; } - public string Description { get; set; } = string.Empty; + /// + /// The name of the wonder. + /// + /// Pyramids of Giza + public string Name { get; set; } + + /// + /// The country where the wonder is located. + /// + /// Egypt + public string Country { get; set; } + + /// + /// The historical era of the wonder. + /// + /// Ancient + public string Era { get; set; } + + /// + /// The type of the wonder. + /// + /// Tomb + public string Type { get; set; } + + /// + /// A short description of the wonder. + /// + /// One of the Seven Wonders of the Ancient World. + public string Description { get; set; } + + /// + /// The year the wonder was discovered or built. + /// + /// -2560 + public int DiscoveryYear { get; set; } } -} \ No newline at end of file +} diff --git a/Program.cs b/Program.cs index dde90e2..396a9a8 100644 --- a/Program.cs +++ b/Program.cs @@ -1,11 +1,13 @@ using Microsoft.EntityFrameworkCore; +using Serilog; +using Serilog.Formatting.Json; using WondersAPI.Data; using WondersAPI.Models; -using Serilog; -using Serilog.Formatting.Json; +using System.Reflection; var builder = WebApplication.CreateBuilder(args); +// Logging setup builder.Logging.ClearProviders(); builder.Logging.AddSimpleConsole(options => { @@ -14,11 +16,11 @@ builder.Logging.AddSimpleConsole(options => options.TimestampFormat = "yyyy-MM-dd HH:mm:ss "; }); - +// Serilog file path var logFilePath = Path.Combine(Directory.GetCurrentDirectory(), "Logs", $"app-log{DateTime.Now:yyyyMMdd}.json"); Directory.CreateDirectory(Path.GetDirectoryName(logFilePath)!); - +// Serilog configuration Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File(new JsonFormatter(), logFilePath, rollingInterval: RollingInterval.Day) @@ -29,13 +31,20 @@ builder.Host.UseSerilog(); builder.Services.AddDbContext(options => options.UseInMemoryDatabase("WondersDb")); - builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); + +// Swagger + XML Comments +builder.Services.AddSwaggerGen(c => +{ + var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; + var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); + c.IncludeXmlComments(xmlPath); +}); var app = builder.Build(); +// Database seeding using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService(); @@ -51,22 +60,24 @@ using (var scope = app.Services.CreateScope()) } else { - Console.WriteLine(" seed-data.json not found. No data was seeded."); + Console.WriteLine("seed-data.json not found. No data was seeded."); } } } +// Logging app start var logger = app.Services.GetRequiredService>(); -logger.LogInformation(" Wonders API application started successfully at {time}", DateTime.Now); +logger.LogInformation("Wonders API application started successfully at {time}", DateTime.Now); -if (app.Environment.IsDevelopment()) +// Swagger Middleware +app.UseSwagger(); +app.UseSwaggerUI(options => { - app.UseSwagger(); - app.UseSwaggerUI(); -} + options.SwaggerEndpoint("/swagger/v1/swagger.json", "Wonders API V1"); + options.DocumentTitle = "Wonders API Docs"; +}); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); - app.Run();