This repository has been archived on 2023-06-30. You can view files and clone it, but cannot push or open issues or pull requests.
2chBackAPI/DBControllers/DBchat.cs
RakVhalate e16d6258c3
All checks were successful
continuous-integration/drone/push Build is passing
Previev Sorting Algorytm
2022-12-21 12:06:10 +05:00

212 lines
7.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}