DotNet

// ===============================
// HOW TO RUN THIS PROJECT (VS CODE)
// ===============================
//
// 1. Install .NET SDK (6 or above)
//    Check using: dotnet --version
//
// 2. Open project folder in VS Code
//    code .
//
// 3. Restore packages (one time)
//    dotnet restore
//
// 4. Run application
//    dotnet watch run
//
// 5. Open browser and test APIs
//    http://localhost:5293/
//    http://localhost:5293/todos
//
// ===============================


// Import MySQL client library
using MySql.Data.MySqlClient;

// Import Dapper (shortcut for DB queries)
using Dapper;

var builder = WebApplication.CreateBuilder(args);

// ===============================
// SERVICES (Framework features)
// ===============================
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// ===============================
// MIDDLEWARE (Request pipeline)
// ===============================
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

// ===============================
// BASIC TEST APIs
// ===============================

// Simple GET API
app.MapGet("/", () => "Hello Shailesh 👋 C# Web Service is running!");

// Query parameter example
// URL: /square?num=5
app.MapGet("/square", (int num) => new
{
    number = num,
    square = num * num
});

// Route parameter example
// URL: /cube/3
app.MapGet("/cube/{num:int}", (int num) => new
{
    number = num,
    cube = num * num * num
});

// JSON body example
// POST /sum
// Body: { "a": 5, "b": 6 }
app.MapPost("/sum", (SumRequest req) =>
{
    int result = req.a + req.b;
    return $"{req.a} + {req.b} = {result}";
});

// ===============================
// DATABASE CONFIGURATION
// ===============================

// MySQL connection string
// NOTE: In real projects, keep this in appsettings.json
string connStr = "Server=ciacloud.in;Database=tpdb;Uid=tpuser;Password=%TGBbgt5;";

// ===============================
// DATABASE API (SELECT ALL)
// ===============================
//
// Equivalent Node.js code:
// db.query("SELECT * FROM todo", (err, rows) => res.json(rows));
//
// Dapper automatically converts DB rows to JSON-friendly objects
//
app.MapGet("/todos", () =>
{
    using var conn = new MySqlConnection(connStr);
    return conn.Query("SELECT * FROM todo");
});

// ===============================
// START APPLICATION
// ===============================
app.Run();

// ===============================
// MODELS
// ===============================

// Used for POST /sum JSON body
record SumRequest(int a, int b);