migrate all sql queries to postgres
This commit is contained in:
parent
406527d1ab
commit
fa27bb575f
7 changed files with 91 additions and 76 deletions
|
|
@ -13,6 +13,21 @@ CREATE TABLE "user"
|
||||||
CREATE INDEX idx_user_tg_id
|
CREATE INDEX idx_user_tg_id
|
||||||
ON "user"(tg_id);
|
ON "user"(tg_id);
|
||||||
|
|
||||||
|
CREATE FUNCTION set_admin()
|
||||||
|
RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
IF new.is_admin THEN
|
||||||
|
UPDATE "user" SET can_download = true WHERE "user".id = new.id;
|
||||||
|
END IF;
|
||||||
|
RETURN new;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE TRIGGER set_admin
|
||||||
|
AFTER UPDATE OF is_admin ON "user"
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION set_admin();
|
||||||
|
|
||||||
CREATE TABLE "chat"
|
CREATE TABLE "chat"
|
||||||
(
|
(
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
|
|
@ -34,8 +49,8 @@ CREATE TABLE "link"
|
||||||
auto_download BOOLEAN NOT NULL
|
auto_download BOOLEAN NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX idx_link_domain
|
CREATE INDEX idx_link_domain_path
|
||||||
ON "link"(domain);
|
ON "link"(domain, path);
|
||||||
|
|
||||||
CREATE TABLE "request"
|
CREATE TABLE "request"
|
||||||
(
|
(
|
||||||
|
|
@ -53,7 +68,7 @@ CREATE FUNCTION approve()
|
||||||
RETURNS TRIGGER AS $$
|
RETURNS TRIGGER AS $$
|
||||||
BEGIN
|
BEGIN
|
||||||
IF new.is_approved THEN
|
IF new.is_approved THEN
|
||||||
UPDATE "user" SET can_download = TRUE WHERE "user".id = new.requested_by;
|
UPDATE "user" SET can_download = true WHERE "user".id = new.requested_by;
|
||||||
END IF;
|
END IF;
|
||||||
RETURN new;
|
RETURN new;
|
||||||
END;
|
END;
|
||||||
|
|
@ -82,7 +97,7 @@ CREATE FUNCTION approve_chat()
|
||||||
RETURNS TRIGGER AS $$
|
RETURNS TRIGGER AS $$
|
||||||
BEGIN
|
BEGIN
|
||||||
IF new.is_approved THEN
|
IF new.is_approved THEN
|
||||||
UPDATE "chat" SET can_download = TRUE WHERE "chat".id = new.requested_for;
|
UPDATE "chat" SET can_download = true WHERE "chat".id = new.requested_for;
|
||||||
END IF;
|
END IF;
|
||||||
RETURN new;
|
RETURN new;
|
||||||
END;
|
END;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use super::types::HandlerResult;
|
||||||
|
|
||||||
pub async fn notify_admins(bot: &Bot, db: &DbPool, message: String) -> HandlerResult {
|
pub async fn notify_admins(bot: &Bot, db: &DbPool, message: String) -> HandlerResult {
|
||||||
let admins: Vec<User> =
|
let admins: Vec<User> =
|
||||||
sqlx::query_as("SELECT * FROM user WHERE is_admin = 1 AND has_private_chat = 1;")
|
sqlx::query_as(r#"SELECT * FROM "user" WHERE is_admin = true AND has_private_chat = true;"#)
|
||||||
.fetch_all(db)
|
.fetch_all(db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use crate::db::user::find_or_create_user;
|
||||||
use crate::db::DbPool;
|
use crate::db::DbPool;
|
||||||
|
|
||||||
pub async fn cmd_op(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
pub async fn cmd_op(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
||||||
let admins: i64 = sqlx::query("SELECT COUNT(*) FROM user WHERE is_admin = 1")
|
let admins: i64 = sqlx::query(r#"SELECT COUNT(*) FROM "user" WHERE is_admin = true"#)
|
||||||
.fetch_one(&db)
|
.fetch_one(&db)
|
||||||
.await?
|
.await?
|
||||||
.get(0);
|
.get(0);
|
||||||
|
|
@ -16,7 +16,7 @@ pub async fn cmd_op(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
||||||
if let Some(tg_user) = msg.from() {
|
if let Some(tg_user) = msg.from() {
|
||||||
if admins == 0 {
|
if admins == 0 {
|
||||||
let user = find_or_create_user(&db, tg_user).await?;
|
let user = find_or_create_user(&db, tg_user).await?;
|
||||||
sqlx::query("UPDATE user SET can_download = 1, is_admin = 1 WHERE id = $1;")
|
sqlx::query(r#"UPDATE "user" SET is_admin = true WHERE id = $1;"#)
|
||||||
.bind(user.id)
|
.bind(user.id)
|
||||||
.execute(&db)
|
.execute(&db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
@ -30,10 +30,10 @@ pub async fn cmd_op(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
||||||
bot.send_message(msg.chat.id, t!("op_yourself")).await?;
|
bot.send_message(msg.chat.id, t!("op_yourself")).await?;
|
||||||
} else {
|
} else {
|
||||||
let user = find_or_create_user(&db, tg_user).await?;
|
let user = find_or_create_user(&db, tg_user).await?;
|
||||||
if user.is_admin == 1 {
|
if user.is_admin {
|
||||||
if let Some(target) = msg.reply_to_message().and_then(|m| m.from()) {
|
if let Some(target) = msg.reply_to_message().and_then(|m| m.from()) {
|
||||||
let target = find_or_create_user(&db, target).await?;
|
let target = find_or_create_user(&db, target).await?;
|
||||||
sqlx::query("UPDATE user SET can_download = 1, is_admin = 1 WHERE id = $1;")
|
sqlx::query(r#"UPDATE "user" SET is_admin = 1 WHERE id = $1;"#)
|
||||||
.bind(target.id)
|
.bind(target.id)
|
||||||
.execute(&db)
|
.execute(&db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@ pub async fn cmd_request(bot: Bot, msg: Message, text: String, db: DbPool) -> Ha
|
||||||
|
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
if user.can_download == 1 {
|
if user.can_download {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "already_can_download");
|
reply_i18n_and_return!(bot, msg.chat.id, "already_can_download");
|
||||||
}
|
}
|
||||||
|
|
||||||
let requests: i64 = sqlx::query("SELECT COUNT(1) FROM request WHERE requested_by = $1;")
|
let requests: i64 = sqlx::query(r#"SELECT COUNT(1) FROM "request" WHERE requested_by = $1;"#)
|
||||||
.bind(user.id)
|
.bind(user.id)
|
||||||
.fetch_one(&db)
|
.fetch_one(&db)
|
||||||
.await?
|
.await?
|
||||||
|
|
@ -33,7 +33,7 @@ pub async fn cmd_request(bot: Bot, msg: Message, text: String, db: DbPool) -> Ha
|
||||||
}
|
}
|
||||||
|
|
||||||
// put the request
|
// put the request
|
||||||
sqlx::query("INSERT INTO request (requested_by,message,is_approved) VALUES ($1,$2,$3);")
|
sqlx::query(r#"INSERT INTO "request" (requested_by,message,is_approved) VALUES ($1,$2,$3);"#)
|
||||||
.bind(user.id)
|
.bind(user.id)
|
||||||
.bind(text)
|
.bind(text)
|
||||||
.bind(0)
|
.bind(0)
|
||||||
|
|
@ -57,7 +57,7 @@ pub async fn cmd_request(bot: Bot, msg: Message, text: String, db: DbPool) -> Ha
|
||||||
|
|
||||||
#[derive(sqlx::FromRow, Debug)]
|
#[derive(sqlx::FromRow, Debug)]
|
||||||
struct RequestWithUser {
|
struct RequestWithUser {
|
||||||
pub request_id: i64,
|
pub request_id: i32,
|
||||||
pub message: String,
|
pub message: String,
|
||||||
#[sqlx(flatten)]
|
#[sqlx(flatten)]
|
||||||
pub user: User,
|
pub user: User,
|
||||||
|
|
@ -66,15 +66,15 @@ struct RequestWithUser {
|
||||||
pub async fn cmd_listrequests(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
pub async fn cmd_listrequests(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
if user.is_admin != 1 {
|
if !user.is_admin {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
||||||
}
|
}
|
||||||
|
|
||||||
let requests: Vec<RequestWithUser> = sqlx::query_as(
|
let requests: Vec<RequestWithUser> = sqlx::query_as(
|
||||||
"SELECT request.id AS request_id, request.message, user.*
|
r#"SELECT "request".id AS request_id, "request".message, "user".*
|
||||||
FROM request
|
FROM "request"
|
||||||
INNER JOIN user ON request.requested_by = user.id
|
INNER JOIN "user" ON "request".requested_by = "user".id
|
||||||
WHERE request.is_approved = 0;",
|
WHERE "request".is_approved = false;"#,
|
||||||
)
|
)
|
||||||
.fetch_all(&db)
|
.fetch_all(&db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
@ -99,17 +99,17 @@ pub async fn cmd_approve(bot: Bot, msg: Message, id: String, db: DbPool) -> Hand
|
||||||
|
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
if user.is_admin != 1 {
|
if !user.is_admin {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
||||||
}
|
}
|
||||||
|
|
||||||
// get request
|
// get request
|
||||||
let res: Result<RequestWithUser, sqlx::Error> = sqlx::query_as(
|
let res: Result<RequestWithUser, sqlx::Error> = sqlx::query_as(
|
||||||
"SELECT request.id AS request_id, request.message, user.*
|
r#"SELECT "request".id AS request_id, "request".message, "user".*
|
||||||
FROM request
|
FROM "request"
|
||||||
INNER JOIN user ON request.requested_by = user.id
|
INNER JOIN "user" ON "request".requested_by = "user".id
|
||||||
WHERE request_id = $1 AND request.is_approved = 0
|
WHERE request_id = $1 AND "request".is_approved = false
|
||||||
LIMIT 1;",
|
LIMIT 1;"#,
|
||||||
)
|
)
|
||||||
.bind(id)
|
.bind(id)
|
||||||
.fetch_one(&db)
|
.fetch_one(&db)
|
||||||
|
|
@ -127,7 +127,7 @@ pub async fn cmd_approve(bot: Bot, msg: Message, id: String, db: DbPool) -> Hand
|
||||||
};
|
};
|
||||||
|
|
||||||
// approve request
|
// approve request
|
||||||
sqlx::query("UPDATE request SET approved_by = $1, is_approved = 1 WHERE id = $2;")
|
sqlx::query(r#"UPDATE "request" SET approved_by = $1, is_approved = true WHERE id = $2;"#)
|
||||||
.bind(user.id)
|
.bind(user.id)
|
||||||
.bind(request.request_id)
|
.bind(request.request_id)
|
||||||
.execute(&db)
|
.execute(&db)
|
||||||
|
|
@ -143,7 +143,7 @@ pub async fn cmd_approve(bot: Bot, msg: Message, id: String, db: DbPool) -> Hand
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// notify target user
|
// notify target user
|
||||||
if request.user.has_private_chat == 1 {
|
if request.user.has_private_chat {
|
||||||
bot.send_message(
|
bot.send_message(
|
||||||
Recipient::Id(ChatId(request.user.tg_id)),
|
Recipient::Id(ChatId(request.user.tg_id)),
|
||||||
t!("your_request_approved"),
|
t!("your_request_approved"),
|
||||||
|
|
@ -160,17 +160,17 @@ pub async fn cmd_decline(bot: Bot, msg: Message, id: String, db: DbPool) -> Hand
|
||||||
|
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
if user.is_admin != 1 {
|
if !user.is_admin {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
||||||
}
|
}
|
||||||
|
|
||||||
// get request
|
// get request
|
||||||
let res: Result<RequestWithUser, sqlx::Error> = sqlx::query_as(
|
let res: Result<RequestWithUser, sqlx::Error> = sqlx::query_as(
|
||||||
"SELECT request.id AS request_id, request.message, user.*
|
r#"SELECT "request".id AS request_id, "request".message, "user".*
|
||||||
FROM request
|
FROM "request"
|
||||||
INNER JOIN user ON request.requested_by = user.id
|
INNER JOIN "user" ON "request".requested_by = "user".id
|
||||||
WHERE request_id = $1 AND request.is_approved = 0
|
WHERE request_id = $1 AND "request".is_approved = false
|
||||||
LIMIT 1;",
|
LIMIT 1;"#,
|
||||||
)
|
)
|
||||||
.bind(id)
|
.bind(id)
|
||||||
.fetch_one(&db)
|
.fetch_one(&db)
|
||||||
|
|
@ -188,7 +188,7 @@ pub async fn cmd_decline(bot: Bot, msg: Message, id: String, db: DbPool) -> Hand
|
||||||
};
|
};
|
||||||
|
|
||||||
// decline request
|
// decline request
|
||||||
sqlx::query("DELETE FROM request WHERE id = $1;")
|
sqlx::query(r#"DELETE FROM "request" WHERE id = $1;"#)
|
||||||
.bind(request.request_id)
|
.bind(request.request_id)
|
||||||
.execute(&db)
|
.execute(&db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
@ -203,7 +203,7 @@ pub async fn cmd_decline(bot: Bot, msg: Message, id: String, db: DbPool) -> Hand
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// notify target user
|
// notify target user
|
||||||
if request.user.has_private_chat == 1 {
|
if request.user.has_private_chat {
|
||||||
bot.send_message(
|
bot.send_message(
|
||||||
Recipient::Id(ChatId(request.user.tg_id)),
|
Recipient::Id(ChatId(request.user.tg_id)),
|
||||||
t!("your_request_declined"),
|
t!("your_request_declined"),
|
||||||
|
|
|
||||||
|
|
@ -22,12 +22,12 @@ pub async fn cmd_request_chat(bot: Bot, msg: Message, text: String, db: DbPool)
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
let chat = find_or_create_chat(&db, &msg.chat).await?;
|
let chat = find_or_create_chat(&db, &msg.chat).await?;
|
||||||
|
|
||||||
if chat.can_download == 1 {
|
if chat.can_download {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "chat_already_can_download");
|
reply_i18n_and_return!(bot, msg.chat.id, "chat_already_can_download");
|
||||||
}
|
}
|
||||||
|
|
||||||
let requests: i64 =
|
let requests: i64 =
|
||||||
sqlx::query("SELECT COUNT(1) FROM request_chat WHERE requested_for = $1;")
|
sqlx::query(r#"SELECT COUNT(1) FROM "request_chat" WHERE requested_for = $1;"#)
|
||||||
.bind(chat.id)
|
.bind(chat.id)
|
||||||
.fetch_one(&db)
|
.fetch_one(&db)
|
||||||
.await?
|
.await?
|
||||||
|
|
@ -37,7 +37,7 @@ pub async fn cmd_request_chat(bot: Bot, msg: Message, text: String, db: DbPool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// put the chat request
|
// put the chat request
|
||||||
sqlx::query("INSERT INTO request_chat (requested_by,requested_for,message,is_approved) VALUES ($1,$2,$3,$4);")
|
sqlx::query(r#"INSERT INTO "request_chat" (requested_by,requested_for,message,is_approved) VALUES ($1,$2,$3,$4);"#)
|
||||||
.bind(user.id)
|
.bind(user.id)
|
||||||
.bind(chat.id)
|
.bind(chat.id)
|
||||||
.bind(text)
|
.bind(text)
|
||||||
|
|
@ -63,7 +63,7 @@ pub async fn cmd_request_chat(bot: Bot, msg: Message, text: String, db: DbPool)
|
||||||
|
|
||||||
#[derive(sqlx::FromRow, Debug)]
|
#[derive(sqlx::FromRow, Debug)]
|
||||||
struct RequestChatWithChat {
|
struct RequestChatWithChat {
|
||||||
pub request_id: i64,
|
pub request_id: i32,
|
||||||
pub message: String,
|
pub message: String,
|
||||||
#[sqlx(flatten)]
|
#[sqlx(flatten)]
|
||||||
pub chat: Chat,
|
pub chat: Chat,
|
||||||
|
|
@ -72,15 +72,15 @@ struct RequestChatWithChat {
|
||||||
pub async fn cmd_listrequests_chat(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
pub async fn cmd_listrequests_chat(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
if user.is_admin != 1 {
|
if !user.is_admin {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
||||||
}
|
}
|
||||||
|
|
||||||
let requests: Vec<RequestChatWithChat> = sqlx::query_as(
|
let requests: Vec<RequestChatWithChat> = sqlx::query_as(
|
||||||
"SELECT request_chat.id AS request_id, request_chat.message, chat.*
|
r#"SELECT "request_chat".id AS request_id, "request_chat".message, "chat".*
|
||||||
FROM request_chat
|
FROM "request_chat"
|
||||||
INNER JOIN chat ON request_chat.requested_for = chat.id
|
INNER JOIN "chat" ON "request_chat".requested_for = "chat".id
|
||||||
WHERE request_chat.is_approved = 0;",
|
WHERE "request_chat".is_approved = false;"#,
|
||||||
)
|
)
|
||||||
.fetch_all(&db)
|
.fetch_all(&db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
@ -105,17 +105,17 @@ pub async fn cmd_approve_chat(bot: Bot, msg: Message, id: String, db: DbPool) ->
|
||||||
|
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
if user.is_admin != 1 {
|
if !user.is_admin {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
||||||
}
|
}
|
||||||
|
|
||||||
// get request
|
// get request
|
||||||
let res: Result<RequestChatWithChat, sqlx::Error> = sqlx::query_as(
|
let res: Result<RequestChatWithChat, sqlx::Error> = sqlx::query_as(
|
||||||
"SELECT request_chat.id AS request_id, request_chat.message, chat.*
|
r#"SELECT "request_chat".id AS request_id, "request_chat".message, "chat".*
|
||||||
FROM request_chat
|
FROM "request_chat"
|
||||||
INNER JOIN chat ON request_chat.requested_for = chat.id
|
INNER JOIN "chat" ON "request_chat".requested_for = "chat".id
|
||||||
WHERE request_chat.is_approved = 0
|
WHERE "request_chat".is_approved = false
|
||||||
LIMIT 1;",
|
LIMIT 1;"#,
|
||||||
)
|
)
|
||||||
.bind(id)
|
.bind(id)
|
||||||
.fetch_one(&db)
|
.fetch_one(&db)
|
||||||
|
|
@ -133,7 +133,7 @@ pub async fn cmd_approve_chat(bot: Bot, msg: Message, id: String, db: DbPool) ->
|
||||||
};
|
};
|
||||||
|
|
||||||
// approve request
|
// approve request
|
||||||
sqlx::query("UPDATE request_chat SET approved_by = $1, is_approved = 1 WHERE id = $2;")
|
sqlx::query(r#"UPDATE "request_chat" SET approved_by = $1, is_approved = true WHERE id = $2;"#)
|
||||||
.bind(user.id)
|
.bind(user.id)
|
||||||
.bind(request.request_id)
|
.bind(request.request_id)
|
||||||
.execute(&db)
|
.execute(&db)
|
||||||
|
|
@ -161,17 +161,17 @@ pub async fn cmd_decline_chat(bot: Bot, msg: Message, id: String, db: DbPool) ->
|
||||||
|
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
if user.is_admin != 1 {
|
if !user.is_admin {
|
||||||
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
reply_i18n_and_return!(bot, msg.chat.id, "not_an_admin");
|
||||||
}
|
}
|
||||||
|
|
||||||
// get request
|
// get request
|
||||||
let res: Result<RequestChatWithChat, sqlx::Error> = sqlx::query_as(
|
let res: Result<RequestChatWithChat, sqlx::Error> = sqlx::query_as(
|
||||||
"SELECT request_chat.id AS request_id, request_chat.message, chat.*
|
r#"SELECT "request_chat".id AS request_id, "request_chat".message, "chat".*
|
||||||
FROM request_chat
|
FROM "request_chat"
|
||||||
INNER JOIN chat ON request_chat.requested_for = chat.id
|
INNER JOIN "chat" ON "request_chat".requested_for = "chat".id
|
||||||
WHERE request_chat.is_approved = 0
|
WHERE "request_chat".is_approved = false
|
||||||
LIMIT 1;",
|
LIMIT 1;"#,
|
||||||
)
|
)
|
||||||
.bind(id)
|
.bind(id)
|
||||||
.fetch_one(&db)
|
.fetch_one(&db)
|
||||||
|
|
@ -189,7 +189,7 @@ pub async fn cmd_decline_chat(bot: Bot, msg: Message, id: String, db: DbPool) ->
|
||||||
};
|
};
|
||||||
|
|
||||||
// decline request
|
// decline request
|
||||||
sqlx::query("DELETE FROM request_chat WHERE id = $1;")
|
sqlx::query(r#"DELETE FROM request_chat WHERE id = $1;"#)
|
||||||
.bind(request.request_id)
|
.bind(request.request_id)
|
||||||
.execute(&db)
|
.execute(&db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ pub async fn cmd_start(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
|
||||||
if msg.chat.is_private() {
|
if msg.chat.is_private() {
|
||||||
if let Some(user) = msg.from() {
|
if let Some(user) = msg.from() {
|
||||||
let user = find_or_create_user(&db, user).await?;
|
let user = find_or_create_user(&db, user).await?;
|
||||||
sqlx::query("UPDATE user SET has_private_chat = 1 WHERE id = $1;")
|
sqlx::query(r#"UPDATE "user" SET has_private_chat = true WHERE id = $1;"#)
|
||||||
.bind(user.id)
|
.bind(user.id)
|
||||||
.execute(&db)
|
.execute(&db)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
||||||
36
src/db.rs
36
src/db.rs
|
|
@ -8,14 +8,14 @@ pub type DbPool = PgPool;
|
||||||
|
|
||||||
#[derive(sqlx::FromRow, Debug)]
|
#[derive(sqlx::FromRow, Debug)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
pub id: i64,
|
pub id: i32,
|
||||||
pub tg_id: i64,
|
pub tg_id: i64,
|
||||||
pub username: Option<String>,
|
pub username: Option<String>,
|
||||||
pub first_name: String,
|
pub first_name: String,
|
||||||
pub last_name: Option<String>,
|
pub last_name: Option<String>,
|
||||||
pub can_download: i64,
|
pub can_download: bool,
|
||||||
pub is_admin: i64,
|
pub is_admin: bool,
|
||||||
pub has_private_chat: i64,
|
pub has_private_chat: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for User {
|
impl fmt::Display for User {
|
||||||
|
|
@ -34,11 +34,11 @@ pub mod user;
|
||||||
|
|
||||||
#[derive(sqlx::FromRow, Debug)]
|
#[derive(sqlx::FromRow, Debug)]
|
||||||
pub struct Chat {
|
pub struct Chat {
|
||||||
pub id: i64,
|
pub id: i32,
|
||||||
pub tg_id: i64,
|
pub tg_id: i64,
|
||||||
pub username: Option<String>,
|
pub username: Option<String>,
|
||||||
pub title: String,
|
pub title: String,
|
||||||
pub can_download: i64,
|
pub can_download: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for Chat {
|
impl fmt::Display for Chat {
|
||||||
|
|
@ -57,30 +57,30 @@ pub mod chat;
|
||||||
|
|
||||||
#[derive(sqlx::FromRow, Debug)]
|
#[derive(sqlx::FromRow, Debug)]
|
||||||
pub struct Link {
|
pub struct Link {
|
||||||
pub id: i64,
|
pub id: i32,
|
||||||
pub domain: String,
|
pub domain: String,
|
||||||
pub path: Option<String>,
|
pub path: Option<String>,
|
||||||
pub download_allowed: i64,
|
pub download_allowed: bool,
|
||||||
pub auto_download: i64,
|
pub auto_download: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(sqlx::FromRow, Debug)]
|
#[derive(sqlx::FromRow, Debug)]
|
||||||
pub struct Request {
|
pub struct Request {
|
||||||
pub id: i64,
|
pub id: i32,
|
||||||
pub requested_by: i64,
|
pub requested_by: i32,
|
||||||
pub approved_by: Option<i64>,
|
pub approved_by: Option<i32>,
|
||||||
pub message: String,
|
pub message: String,
|
||||||
pub is_approved: i64,
|
pub is_approved: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(sqlx::FromRow, Debug)]
|
#[derive(sqlx::FromRow, Debug)]
|
||||||
pub struct RequestChat {
|
pub struct RequestChat {
|
||||||
pub id: i64,
|
pub id: i32,
|
||||||
pub requested_by: i64,
|
pub requested_by: i32,
|
||||||
pub requested_for: i64,
|
pub requested_for: i32,
|
||||||
pub approved_by: Option<i64>,
|
pub approved_by: Option<i32>,
|
||||||
pub message: String,
|
pub message: String,
|
||||||
pub is_approved: i64,
|
pub is_approved: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn make_database_url() -> String {
|
pub fn make_database_url() -> String {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue