# dialtone_sqlx
The sqlx crate that integrates a dialtone server with PostgreSQL.
### About dialtone
Dialtone is an un-imagined Activity Pub system. What does "un-imagined" mean? Basically, there is no intent to silo this software into a specific vertical "marketplace". Instead, emergent use cases will be addressed.
This software is under active, initial development and is far from feature complete or ready for use.
### License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the
Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.
## Some notes....
Did you know you can embed your migrations in your application binary?
On startup, after creating your database connection or pool, add:
sqlx::migrate!().run(<&your_pool OR &mut your_connection>).await?;
Note that the compiler won't pick up new migrations if no Rust source files have changed.
You can create a Cargo build script to work around this with `sqlx migrate build-script`.
See: https://docs.rs/sqlx/0.5/sqlx/macro.migrate.html
## Implementation Notes
Test table:
```postgresql
create table user_test (
acct varchar not null primary key, -- user_name@host_name
login_data jsonb
);
```
```postgresql
insert into user_test (acct, login_data)
values ('test', '[]'::jsonb );
```
this will update the json data but cap the number of entries in the
array to the last 5.
````postgresql
update user_test
````
Checking for valid login while logging the attempt with a CTE:
```postgresql
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;
```