feat(docker): add Dockerfile and SQLx offline query cache

This commit is contained in:
End 2026-04-02 15:30:25 -07:00
parent 6ca832b25d
commit 2a19f022e7
No known key found for this signature in database
38 changed files with 1084 additions and 2 deletions

View file

@ -6,6 +6,6 @@ SLACK_SIGNING_SECRET=
# make sure to enable encryption in the feature flags to use this!
# highly recommened for production
# ENCRYPTION_KEY=
DATABASE_URL=sqlite://slackbot.db
DATABASE_URL=sqlite://plura.db
# no trailing / please!
BASE_URL=https://slack-system-bot.wobbl.in
BASE_URL=https://plura.foxes.codes

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n members.id as 'id: Id<Trusted>'\n FROM members\n JOIN systems ON members.system_id = systems.id\n WHERE members.id = $1 AND systems.owner_id = $2\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false
]
},
"hash": "04fdce04aa13b6811ecdc0cbaa944ea11b0df9b267294dd734f41d9e9be91615"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n DELETE FROM system_oauth_process\n WHERE csrf = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "0b21ef3cf3bf9af1800134943518bc2b0f71f6e198a2479b99562e83d135af3c"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n owner_id as \"owner_id: user::Id<Trusted>\"\n FROM\n system_oauth_process\n WHERE csrf = $1\n ",
"describe": {
"columns": [
{
"name": "owner_id: user::Id<Trusted>",
"ordinal": 0,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false
]
},
"hash": "0d4a813957e336ae85b4300db9f05a1c13aefbb33b9b69590b604884bfa32732"
}

View file

@ -0,0 +1,38 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO aliases (member_id, system_id, alias)\n VALUES ($1, $2, $3)\n RETURNING\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n system_id as \"system_id: system::Id<Trusted>\",\n alias\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "system_id: system::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "alias",
"ordinal": 3,
"type_info": "Text"
}
],
"parameters": {
"Right": 3
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "11e30e5ce59cf0822e6ebd41bf76a5af7c7e8cdd7667439452b502eaa1073697"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "SELECT\n id as 'id: Id<Trusted>'\n FROM members\n WHERE id = $1 AND system_id = $2",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false
]
},
"hash": "1d4b80a8d013d14f336ad19a87447d3419fa8e11ee98d93ef07687deedd77bcd"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n DELETE FROM aliases\n WHERE id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "1ec4205c64775babbb9e3390e0f473bdb5c4e6d17b8dcd3b2b3db274a3d0dc79"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "SELECT\n id as 'id: Id<Trusted>'\n FROM aliases\n WHERE id = $1 AND system_id = $2",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false
]
},
"hash": "2780cd7eb560384850f1ddf60b4f6c4b361e8ea7dec98d9661726573b4d2caa4"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "UPDATE members SET enabled = $1 WHERE id = $2",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "2be64e1d7acc534d6afe2a205a463a8cf384951dca74c28ffb5b25da87f17309"
}

View file

@ -0,0 +1,44 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n system_id as \"system_id: system::Id<Trusted>\",\n text,\n typ\n FROM\n triggers\n WHERE\n system_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "system_id: system::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "text",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "typ",
"ordinal": 4,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "2d94941a58c917d9a7d324b04ffd0a106d06565345a70f760eb5dc9c81ecff4d"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n UPDATE systems\n SET currently_fronting_member_id = $1\n WHERE id = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "2e030f837049b2992ed340b9ea6a091d2a9a06eb6eb72f1b4df5d8f3f863d3c7"
}

View file

@ -0,0 +1,80 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n system_id as \"system_id: system::Id<Trusted>\",\n full_name,\n display_name,\n profile_picture_url,\n title,\n pronouns,\n name_pronunciation,\n name_recording_url,\n enabled,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM members\n WHERE id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "system_id: system::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "full_name",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "display_name",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "profile_picture_url",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "title",
"ordinal": 5,
"type_info": "Text"
},
{
"name": "pronouns",
"ordinal": 6,
"type_info": "Text"
},
{
"name": "name_pronunciation",
"ordinal": 7,
"type_info": "Text"
},
{
"name": "name_recording_url",
"ordinal": 8,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 9,
"type_info": "Bool"
},
{
"name": "created_at: time::PrimitiveDateTime",
"ordinal": 10,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true,
true,
false,
false
]
},
"hash": "4bcec39a53cba278c87c43b849749c6f7a91160c2514b05bb858e51cbb7f62eb"
}

View file

@ -0,0 +1,44 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n system_id as \"system_id: system::Id<Trusted>\",\n text,\n typ\n FROM\n triggers\n WHERE member_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "system_id: system::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "text",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "typ",
"ordinal": 4,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "4ec129418f30d63744d239ce6b430b2553dc8279119783b43f779bc643b1f9a6"
}

View file

@ -0,0 +1,38 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n system_id as \"system_id: system::Id<Trusted>\",\n alias\n FROM\n aliases\n WHERE\n system_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "system_id: system::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "alias",
"ordinal": 3,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "6f8391494c3d7a309fba8e621cedf525d814b05ad3b824d51275a79d616e46d2"
}

View file

@ -0,0 +1,32 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n message_id\n FROM\n message_logs\n WHERE\n member_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "message_id",
"ordinal": 2,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false
]
},
"hash": "72b92254bed36439057fe11e11e8da8e7c24b48da20a885fb6b21d8ee4b8aa63"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "SELECT\n id as 'id: Id<Trusted>'\n FROM triggers\n WHERE id = $1 AND system_id = $2",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false
]
},
"hash": "74767c5301f932a80fde568387d0d1d3543e92d5c6c134981b1ace845c569135"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO system_oauth_process (owner_id, csrf)\n VALUES ($1, $2)\n ON CONFLICT (owner_id) DO UPDATE SET csrf = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "7848fe19184280fc87ba466b55f8fa61ac7f7d5987c78fe561ee44da46244ef1"
}

View file

@ -0,0 +1,50 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n owner_id as \"owner_id: user::Id<Trusted>\",\n currently_fronting_member_id as \"currently_fronting_member_id: member::Id<Trusted>\",\n auto_switch_on_trigger,\n slack_oauth_token,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM\n systems\n WHERE owner_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "owner_id: user::Id<Trusted>",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "currently_fronting_member_id: member::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "auto_switch_on_trigger",
"ordinal": 3,
"type_info": "Bool"
},
{
"name": "slack_oauth_token",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "created_at: time::PrimitiveDateTime",
"ordinal": 5,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
true,
false,
false,
false
]
},
"hash": "7e43c0e944c2a60ef369978b848680384a8a5aef846941930c777dc94ba4b60e"
}

View file

@ -0,0 +1,80 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: member::Id<Trusted>\",\n system_id as \"system_id: Id<Trusted>\",\n full_name,\n display_name,\n profile_picture_url,\n title,\n pronouns,\n name_pronunciation,\n name_recording_url,\n enabled,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM\n members\n WHERE system_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: member::Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "system_id: Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "full_name",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "display_name",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "profile_picture_url",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "title",
"ordinal": 5,
"type_info": "Text"
},
{
"name": "pronouns",
"ordinal": 6,
"type_info": "Text"
},
{
"name": "name_pronunciation",
"ordinal": 7,
"type_info": "Text"
},
{
"name": "name_recording_url",
"ordinal": 8,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 9,
"type_info": "Bool"
},
{
"name": "created_at: time::PrimitiveDateTime",
"ordinal": 10,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true,
true,
false,
false
]
},
"hash": "83319616c9a81980005676b35befdd41ec95a3117dc8b7f4215a54bf855950ca"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n UPDATE members\n SET full_name = $1, display_name = $2, profile_picture_url = $3, title = $4, pronouns = $5, name_pronunciation = $6, name_recording_url = $7\n WHERE id = $8\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 8
},
"nullable": []
},
"hash": "8bd32a0c8934610e14a9fe524220e92423d9e38aa7c45198d0ec3a215c12d6c8"
}

View file

@ -0,0 +1,50 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n owner_id as \"owner_id: user::Id<Trusted>\",\n currently_fronting_member_id as \"currently_fronting_member_id: member::Id<Trusted>\",\n auto_switch_on_trigger,\n slack_oauth_token,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM systems\n WHERE id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "owner_id: user::Id<Trusted>",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "currently_fronting_member_id: member::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "auto_switch_on_trigger",
"ordinal": 3,
"type_info": "Bool"
},
{
"name": "slack_oauth_token",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "created_at: time::PrimitiveDateTime",
"ordinal": 5,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
true,
false,
false,
false
]
},
"hash": "a0857365f6f46169cedc2098d1c0c282b4380aac28674f37ba08aeea83626dee"
}

View file

@ -0,0 +1,32 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n message_id\n FROM\n message_logs\n WHERE message_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "message_id",
"ordinal": 2,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false
]
},
"hash": "b0e278b61cecabadfe070e2806fc0303fedc4c86b81c9cada598b63ecb47badf"
}

View file

@ -0,0 +1,44 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO triggers (member_id, system_id, typ, text)\n VALUES ($1, $2, $3, $4)\n RETURNING\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n system_id as \"system_id: system::Id<Trusted>\",\n typ,\n text\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "system_id: system::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "typ",
"ordinal": 3,
"type_info": "Integer"
},
{
"name": "text",
"ordinal": 4,
"type_info": "Text"
}
],
"parameters": {
"Right": 4
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "bfab0dd41442bcf5fede67398ad5453d7e723a5df43a540d44cf83f83e0dbd11"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "SELECT enabled FROM members WHERE id = $1",
"describe": {
"columns": [
{
"name": "enabled",
"ordinal": 0,
"type_info": "Bool"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false
]
},
"hash": "c1330cef195b203f42fd1916c45a59715621353db22d5ee3f4c2b56b711241b8"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO members (full_name, display_name, profile_picture_url, title, pronouns, name_pronunciation, name_recording_url, system_id)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n RETURNING id\n ",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 8
},
"nullable": [
false
]
},
"hash": "c9de717842b3012917cfef30428e98666a25504d5c03f222afecfefb759f00d7"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n DELETE FROM message_logs\n WHERE message_id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "d28d88839f91859aa410470a5240d65bb0f46a99a198c06ff4d886bf8ba94784"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "SELECT\n member_id AS 'id: Id<Trusted>'\n FROM aliases\n WHERE alias = $1 AND system_id = $2",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false
]
},
"hash": "dba6daa7ea09507aa91463a41e78424ae372d7e0c8b1bf2150d4e6588da2e9ab"
}

View file

@ -0,0 +1,44 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n members.id as \"id: member::Id<Trusted>\",\n display_name,\n profile_picture_url,\n triggers.text as trigger_text,\n triggers.typ\n FROM\n members\n JOIN\n triggers ON members.id = triggers.member_id\n WHERE\n -- See trigger.rs file for all types and names\n members.enabled = TRUE AND\n ((triggers.typ = 0 AND $1 LIKE '%' || triggers.text) OR\n (triggers.typ = 1 AND $1 LIKE triggers.text || '%'))\n ",
"describe": {
"columns": [
{
"name": "id: member::Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "display_name",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "profile_picture_url",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "trigger_text",
"ordinal": 3,
"type_info": "Text"
},
{
"name": "typ",
"ordinal": 4,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
true,
false,
false
]
},
"hash": "dbf3ee22f8ee9f2935acf109c4e620b5a5522a05a3def3a8d12140f77dc486f4"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "\n UPDATE triggers\n SET\n typ = coalesce($2, typ),\n text = coalesce($3, text)\n WHERE id = $1\n RETURNING\n id as \"id: Id<Trusted>\"\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 3
},
"nullable": [
false
]
},
"hash": "df793c15ed1ca3a4af1148ec9fec377aab3ccf7cfc38250515b4301f21f8809b"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: system::Id<Trusted>\"\n FROM\n systems\n ",
"describe": {
"columns": [
{
"name": "id: system::Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 0
},
"nullable": [
false
]
},
"hash": "e811964cfde379fed00e5941f976b9a384ca7c76324209ea15351a01f4dd5d64"
}

View file

@ -0,0 +1,44 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n members.id,\n display_name,\n full_name,\n enabled,\n GROUP_CONCAT(aliases.alias, ', ') as aliases\n FROM\n members\n JOIN\n aliases ON members.id = aliases.member_id\n WHERE\n members.system_id = $1\n GROUP BY members.id\n ",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "display_name",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "full_name",
"ordinal": 2,
"type_info": "Text"
},
{
"name": "enabled",
"ordinal": 3,
"type_info": "Bool"
},
{
"name": "aliases",
"ordinal": 4,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "e86320673d997dea93a80b855e7492b06aacee4ef9c6513f9bb745c03e69b2ac"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n DELETE FROM triggers\n WHERE id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "e8684fdb0052090f83b4e7a6950e8c36a75390ca1f24e2da867db5d4a2589224"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n UPDATE aliases\n SET alias = $2\n WHERE id = $1\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "f1a53ac9fd2ed276b8b3b1f034f4ddcf493423533287f68b39aa81fe22d0297b"
}

View file

@ -0,0 +1,38 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n system_id as \"system_id: system::Id<Trusted>\",\n alias\n FROM\n aliases\n WHERE member_id = $1\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "system_id: system::Id<Trusted>",
"ordinal": 2,
"type_info": "Integer"
},
{
"name": "alias",
"ordinal": 3,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "f29cae5d678ee34feb0d2811cbe283976da87c3fc97e279e74e0edde8d540544"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO systems (owner_id, slack_oauth_token)\n VALUES ($1, $2)\n ON CONFLICT (owner_id) DO UPDATE SET slack_oauth_token = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "f67cd8c94467cfbaefe6bbfb8940144eda3cb92cf447d6d77736837e2cc04b9e"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "SQLite",
"query": "\n SELECT currently_fronting_member_id as \"id: member::Id<Trusted>\"\n FROM systems\n WHERE id = $1\n ",
"describe": {
"columns": [
{
"name": "id: member::Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
}
],
"parameters": {
"Right": 1
},
"nullable": [
true
]
},
"hash": "fb70767a8f81b4a0ff80331e9a2a3ef4d5b84f8bbaf713b6cc2db988786ed9b4"
}

View file

@ -0,0 +1,32 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO message_logs (member_id, message_id)\n VALUES ($1, $2)\n RETURNING\n id as \"id: Id<Trusted>\",\n member_id as \"member_id: member::Id<Trusted>\",\n message_id\n ",
"describe": {
"columns": [
{
"name": "id: Id<Trusted>",
"ordinal": 0,
"type_info": "Integer"
},
{
"name": "member_id: member::Id<Trusted>",
"ordinal": 1,
"type_info": "Integer"
},
{
"name": "message_id",
"ordinal": 2,
"type_info": "Text"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false,
false,
false
]
},
"hash": "fd7f6f5bb12f059c5c8ffb310d6ed2d5d4c9d525fd1bf2ee948fb1c07a6115f1"
}

52
Dockerfile Normal file
View file

@ -0,0 +1,52 @@
FROM rust:1.92 AS builder
ARG APP_NAME=plura
WORKDIR /app
RUN apt-get update && \
apt-get install -y \
clang \
llvm-dev \
libclang-dev \
pkg-config \
sqlite3 \
libsqlite3-dev \
git \
musl-tools
COPY . .
ENV SQLX_OFFLINE=true
RUN rustup target add x86_64-unknown-linux-musl && \
cargo build --release --target x86_64-unknown-linux-musl && \
cp ./target/x86_64-unknown-linux-musl/release/$APP_NAME /bin/server
FROM alpine:latest AS final
ARG UID=10001
# create non-root user
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
appuser
# create app + data dirs
WORKDIR /app
RUN mkdir -p /data && \
chown -R appuser:appuser /app /data
# copy binary
COPY --from=builder /bin/server /app/plura
# switch to non-root
USER appuser
EXPOSE 8080
CMD ["./plura"]