diff --git a/nginx-aspnet-mysql/backend/Program.cs b/nginx-aspnet-mysql/backend/Program.cs index 535d9b8..eaee20a 100644 --- a/nginx-aspnet-mysql/backend/Program.cs +++ b/nginx-aspnet-mysql/backend/Program.cs @@ -1,84 +1,62 @@ -using System; -using System.IO; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Routing; -using Microsoft.Extensions.Primitives; -using MySql.Data; -using MySql.Data.MySqlClient; +using MySqlConnector; -class Program -{ - public static void Main(string[] args) => WebHost.CreateDefaultBuilder(args) - .Configure(async app => +var builder = WebApplication.CreateBuilder(args); + +string password = File.ReadAllText("/run/secrets/db-password"); +string connectionString = $"server=db;user=root;database=example;port=3306;password={password}"; + +builder.Services.AddTransient((_provider) => new MySqlConnection(connectionString)); + +var app = builder.Build(); + +app.MapGet("/", (MySqlConnection connection) => { + var titles = new List(); + + try + { + Console.WriteLine("Connecting to MySQL..."); + connection.Open(); + + string sql = "SELECT title FROM blog"; + using var cmd = new MySqlCommand(sql, connection); + using MySqlDataReader reader = cmd.ExecuteReader(); + + while (reader.Read()) { - app.UseRouting(); - - string password = File.ReadAllText("/run/secrets/db-password"); - string connectionString = $"server=db;user=root;database=example;port=3306;password={password}"; - - app.UseEndpoints(e => - { - e.MapGet("/", context => { - using MySqlConnection connection = new MySqlConnection(connectionString); - var titles = new List(); - - try - { - Console.WriteLine("Connecting to MySQL..."); - connection.Open(); - - string sql = "SELECT title FROM blog"; - using var cmd = new MySqlCommand(sql, connection); - using MySqlDataReader reader = cmd.ExecuteReader(); - - while (reader.Read()) - { - titles.Add(reader.GetString(0)); - } - reader.Close(); - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - context.Response.StatusCode = 500; - return Task.CompletedTask; - } - connection.Close(); - - context.Response.StatusCode = 200; - context.Response.WriteAsJsonAsync(titles); - - return Task.CompletedTask; - }); - }); - Prepare(connectionString); - - }).Build().Run(); - - private static void Prepare(string connectionString) - { - using MySqlConnection connection = new MySqlConnection(connectionString); - - connection.Open(); - using var transation = connection.BeginTransaction(); - - using MySqlCommand cmd1 = new MySqlCommand("DROP TABLE IF EXISTS blog", connection, transation); - cmd1.ExecuteNonQuery(); - - using MySqlCommand cmd2 = new MySqlCommand("CREATE TABLE IF NOT EXISTS blog (id int NOT NULL AUTO_INCREMENT, title varchar(255), PRIMARY KEY (id))", connection, transation); - cmd2.ExecuteNonQuery(); - - for (int i = 0; i < 5; i++) - { - using MySqlCommand insertCommand = new MySqlCommand( $"INSERT INTO blog (title) VALUES ('Blog post #{i}');", connection, transation); - insertCommand.ExecuteNonQuery(); - } - transation.Commit(); - connection.Close(); + titles.Add(reader.GetString(0)); } + reader.Close(); + } + catch (Exception ex) + { + return Results.Problem(detail: ex.ToString()); + } + connection.Close(); + + return Results.Ok(titles); +}); +Prepare(connectionString); + +app.Run(); + +void Prepare(string connectionString) +{ + using MySqlConnection connection = new MySqlConnection(connectionString); + + connection.Open(); + using var transation = connection.BeginTransaction(); + + using MySqlCommand cmd1 = new MySqlCommand("DROP TABLE IF EXISTS blog", connection, transation); + cmd1.ExecuteNonQuery(); + + using MySqlCommand cmd2 = new MySqlCommand("CREATE TABLE IF NOT EXISTS blog (id int NOT NULL AUTO_INCREMENT, title varchar(255), PRIMARY KEY (id))", connection, transation); + cmd2.ExecuteNonQuery(); + + for (int i = 0; i < 5; i++) + { + using MySqlCommand insertCommand = new MySqlCommand( $"INSERT INTO blog (title) VALUES ('Blog post #{i}');", connection, transation); + insertCommand.ExecuteNonQuery(); + } + transation.Commit(); + connection.Close(); } \ No newline at end of file