using NeDvachAPI.Models; using Npgsql; using static System.Net.Mime.MediaTypeNames; namespace NeDvachAPI.DBControllers { public class DBchat { // Obtain connection string information from the portal public static List PostsList(string boardName, int thread) { // Build connection string using parameters from portal //Post[] posts = new Post[10]; List posts = new List(); //int postCount = 0; string received = ""; string connString = string.Format( "Server={0}; User Id={1}; Database={2}; Port={3}; Password={4};SSLMode=Prefer", AuthInfo.DB.Host, AuthInfo.DB.User, AuthInfo.DB.DBname, AuthInfo.DB.Port, AuthInfo.DB.Password); using (var conn = new NpgsqlConnection(connString)) { conn.Open(); // using ( var command = new NpgsqlCommand(@" // SELECT * FROM // (SELECT post_id, substring(post,1,200) // FROM dvach // ORDER BY post_id DESC // limit 10 // ) // subquery // ORDER BY post_id ASC", conn) ) using (var command = new NpgsqlCommand($@" SELECT * FROM ( SELECT post_id, post_text, content, post_timestamp FROM posts WHERE thread_id = {thread} ORDER BY post_id DESC ) subquery ORDER BY post_id ASC", conn)) { var reader = command.ExecuteReader(); while (reader.Read()) { //received +=( //string.Format( //"#{0}: {1}" + "\n", // reader.GetInt32(0).ToString(), //reader.GetString(1) //) //); Post receivedPost = new() { Id = reader.GetInt32(0), Text = reader.GetString(1), ImgURL = reader.IsDBNull(2) ? null : reader.GetFieldValue(2), Timestamp = reader.GetString(3) }; posts.Add(receivedPost); //posts[postCount] = receivedPost; //postCount++; } reader.Close(); } } return posts; } public static List ThreadsList(string boardName) { // Build connection string using parameters from portal //Post[] posts = new Post[10]; List posts = new List(); //int postCount = 0; string received = ""; string connString = string.Format( "Server={0}; User Id={1}; Database={2}; Port={3}; Password={4};SSLMode=Prefer", AuthInfo.DB.Host, AuthInfo.DB.User, AuthInfo.DB.DBname, AuthInfo.DB.Port, AuthInfo.DB.Password); using (var conn = new NpgsqlConnection(connString)) { conn.Open(); // using ( var command = new NpgsqlCommand(@" // SELECT * FROM // (SELECT post_id, substring(post,1,200) // FROM dvach // ORDER BY post_id DESC // limit 10 // ) // subquery // ORDER BY post_id ASC", conn) ) using (var command = new NpgsqlCommand($@" SELECT * FROM ( SELECT post_id, post_text, content, post_timestamp, is_op, thread_id FROM posts WHERE is_op = {true} ORDER BY post_id DESC ) subquery ORDER BY post_id ASC", conn)) { var reader = command.ExecuteReader(); while (reader.Read()) { //received +=( //string.Format( //"#{0}: {1}" + "\n", // reader.GetInt32(0).ToString(), //reader.GetString(1) //) //); Post receivedPost = new() { Id = reader.GetInt32(0), Text = reader.GetString(1), ImgURL = reader.IsDBNull(2) ? null : reader.GetFieldValue(2), Timestamp = reader.GetString(3), Is_OP = reader.GetBoolean(4), Thread_Id = reader.GetInt32(5) }; posts.Add(receivedPost); //posts[postCount] = receivedPost; //postCount++; } reader.Close(); } } return posts; } public static void DbUpdate(string id, string text) { string connString = string.Format( "Server={0}; User Id={1}; Database={2}; Port={3}; Password={4};SSLMode=Prefer", AuthInfo.DB.Host, AuthInfo.DB.User, AuthInfo.DB.DBname, AuthInfo.DB.Port, AuthInfo.DB.Password); using (var conn = new NpgsqlConnection(connString)) { conn.Open(); using (var command = new NpgsqlCommand("UPDATE dvach " + "SET post = @postText WHERE post_id = @ID", conn)) { command.Parameters.AddWithValue("ID", int.Parse(id)); command.Parameters.AddWithValue("postText", text); int nRows = command.ExecuteNonQuery(); Console.Out.WriteLine(string.Format("Number of rows updated={0}", nRows)); } } Console.WriteLine("Данные обновлены!"); Console.ReadLine(); } public static void SendPost(Post postToSend) //sending post to database { string connString = string.Format( "Server={0}; User Id={1}; Database={2}; Port={3}; Password={4};SSLMode=Prefer", AuthInfo.DB.Host, AuthInfo.DB.User, AuthInfo.DB.DBname, AuthInfo.DB.Port, AuthInfo.DB.Password); using (var conn = new NpgsqlConnection(connString)) { Console.Out.WriteLine("Opening connection"); conn.Open(); int postNum = 14; using (var command = new NpgsqlCommand(@" INSERT INTO posts (post_id, post_text, post_number, content, thread_id, auth_ip, is_op, post_timestamp) VALUES ( DEFAULT, @postText, @postNum, @postImgUrl, @threadId, @ip, false, ( SELECT date_trunc( 'second', (now()::timestamp(0) AT TIME ZONE 'UTC+10')::TIMESTAMP ) ) )", conn)) { command.Parameters.AddWithValue("postText", postToSend.Text); command.Parameters.AddWithValue("postNum", postNum); command.Parameters.AddWithValue("postImgUrl", postToSend.ImgURL); command.Parameters.AddWithValue("threadId", postToSend.Thread_Id); command.Parameters.AddWithValue("ip", postToSend.Ip); //command.Parameters.AddWithValue("postTimeStamp", DateTime.Now.ToString("dd/MM/yyyy HH:mm")); int nRows = command.ExecuteNonQuery(); Console.Out.WriteLine("Добавлен пост с текстом " + postToSend.Text + " номером " + 22); } } } public static void DeletePost(string idToDel) //удалялка { string connString = string.Format( "Server={0}; User Id={1}; Database={2}; Port={3}; Password={4};SSLMode=Prefer", AuthInfo.DB.Host, AuthInfo.DB.User, AuthInfo.DB.DBname, AuthInfo.DB.Port, AuthInfo.DB.Password); using (var conn = new NpgsqlConnection(connString)) { //Console.Out.WriteLine("Opening connection"); conn.Open(); using (var command = new NpgsqlCommand(@" DELETE FROM dvach WHERE post_id = @ID", conn)) { command.Parameters.AddWithValue("ID", int.Parse(idToDel)); ; int nRows = command.ExecuteNonQuery(); Console.Out.WriteLine(string.Format("Number of rows updated={0}", nRows)); } } Console.WriteLine("Данные удалены!"); Console.ReadLine(); } } }