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();