1 个不稳定版本

0.1.0 2022年7月4日

#10 in #federation


3 个crate中使用

MIT/Apache

225KB
6K SLoC

dialtone_sqlx

sqlx crate 集成 dialtone 服务器与 PostgreSQL。

关于 dialtone

Dialtone 是一个未预想的 Activity Pub 系统。什么是“未预想”?基本上,没有意图将此软件锁定在特定垂直“市场”中。相反,将解决新兴的使用案例。

此软件处于积极、初始开发阶段,功能远未完善,也不适合使用。

许可证

许可协议为以下之一

贡献

除非你明确声明,否则任何提交以包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应以上述双重许可,不附加任何额外条款或条件。

一些注意事项....

你知道你可以将迁移嵌入到你的应用程序二进制文件中吗?在启动时,创建数据库连接或池之后,添加

sqlx::migrate!().run(<&your_pool OR &mut your_connection>).await?;

请注意,如果没有任何 Rust 源文件已更改,编译器不会选择新的迁移。你可以创建一个 Cargo 构建脚本来解决这个问题,使用 sqlx migrate build-script

参见:https://docs.rs/sqlx/0.5/sqlx/macro.migrate.html

实现说明

测试表

create table user_test (
                                acct varchar not null primary key, -- user_name@host_name
                                login_data jsonb
);
insert into user_test (acct, login_data) 
values ('test', '[]'::jsonb );

这将更新 JSON 数据,但将数组中的条目数限制为最后 5 个。

update user_test 
set login_data = jsonb_path_query_array('"foo"'::jsonb || login_data, '$[0 to 4]')
where acct = 'test';

使用 CTE 记录尝试登录时检查有效登录

with pcheck as (
  select exists (
    select true from user_principal
    where
      acct = 'test8@test4.example'
    and
      status = 'Active'
    and
      (auth_data->'password_auth'->'bcrypt_password'->>'crypted_password') = 
        '$2b$12$x6ot7Gd6mvQBZF1p6iWbROyRIABByIBSwGbOkcRP8NHTSpI8S42Ou'
  ) as success
)
update user_principal
  set last_login_data = 
    jsonb_path_query_array(
      jsonb_build_object('from', '$FROM', 'at', '$AT', 'success', pcheck.success)
        || last_login_data, '$[0 to 10]')
  from pcheck
  where
    acct = 'test8@test4.example'
  returning last_login_data;

依赖项

~30–42MB
~832K SLoC