267 lines
9.7 KiB
C#
267 lines
9.7 KiB
C#
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<Post> PostsList(string boardName, int thread)
|
||
{
|
||
// Build connection string using parameters from portal
|
||
//Post[] posts = new Post[10];
|
||
List<Post> posts = new List<Post>();
|
||
//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<string[]>(2),
|
||
Timestamp = reader.GetString(3)
|
||
|
||
};
|
||
posts.Add(receivedPost);
|
||
//posts[postCount] = receivedPost;
|
||
//postCount++;
|
||
}
|
||
reader.Close();
|
||
}
|
||
}
|
||
return posts;
|
||
}
|
||
|
||
public static List<Post> ThreadsList(string boardName)
|
||
{
|
||
// Build connection string using parameters from portal
|
||
//Post[] posts = new Post[10];
|
||
List<Post> posts = new List<Post>();
|
||
//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<string[]>(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();
|
||
|
||
}
|
||
}
|
||
}
|