using System.Dynamic; using System.Net; using MySql.Data.MySqlClient; using Newtonsoft.Json; namespace TimelogBackend; public class Getuser : Route { public static void HandleRequest(HttpListenerRequest request, HttpListenerResponse response) { try { var queryString = request.QueryString; string? userid = queryString["userid"]; if (string.IsNullOrEmpty(userid)) { throw new Exception("Missing userid"); } // prepare SQL query string query = @"SELECT p.name, SUM(t.time) FROM Timelog t INNER JOIN Project p ON p.id=t.project INNER JOIN User u ON u.id=t.user WHERE User = @userid GROUP BY name;"; MySqlCommand cmd = new(query); cmd.Parameters.AddWithValue("@userid", userid); var expando = ExtractDataFromDB(cmd); // serialize JSON string jsonResponse = JsonConvert.SerializeObject(expando); // prepare response SendSuccess(response, jsonResponse); } catch (Exception ex) { SendError(response, ex); } } private static dynamic ExtractDataFromDB(MySqlCommand cmd) { using MySqlConnection conn = new(connectionString); conn.Open(); cmd.Connection = conn; // execute query and read results MySqlDataReader reader = cmd.ExecuteReader(); dynamic expando = new ExpandoObject(); while (reader.Read()) { ((IDictionary)expando)[reader["name"].ToString()] = reader[ "SUM(t.time)" ]; } return expando; } }