212 lines
7.6 KiB
C#
212 lines
7.6 KiB
C#
using NeDvachAPI.Models;
|
||
using Npgsql;
|
||
|
||
namespace NeDvachAPI.DBControllers
|
||
{
|
||
public class DBchat
|
||
{
|
||
public static List<Post> PostsList(string boardName, int thread)
|
||
{
|
||
List<Post> posts = new List<Post>();
|
||
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, 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())
|
||
{
|
||
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);
|
||
}
|
||
reader.Close();
|
||
}
|
||
}
|
||
return posts;
|
||
}
|
||
|
||
public static List<Post> ThreadsList(string boardName)
|
||
{
|
||
List<Post> posts = new List<Post>();
|
||
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, post_text, content, post_timestamp, is_op, thread_id
|
||
FROM posts
|
||
WHERE
|
||
is_op = {true}
|
||
ORDER BY thread_id DESC
|
||
) subquery
|
||
ORDER BY thread_id ASC", conn))
|
||
{
|
||
|
||
var reader = command.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
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);
|
||
}
|
||
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))
|
||
{
|
||
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);
|
||
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))
|
||
{
|
||
|
||
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();
|
||
|
||
}
|
||
}
|
||
}
|