Rewritten diesel_crud to be more flexible

This commit is contained in:
Martin Berg Alstad
2024-08-24 19:29:54 +02:00
parent 3318aacf7c
commit 17c81f4da1
15 changed files with 385 additions and 348 deletions

View File

@ -10,3 +10,7 @@ homepage.workspace = true
diesel = { workspace = true }
diesel-async = { workspace = true }
lib = { path = "../../../lib", features = ["diesel", "derive"] }
[dev-dependencies]
tokio = { version = "1.39", features = ["macros"] }
dotenvy_macro = "0.15"

View File

@ -1,11 +1,8 @@
#![allow(unused)]
use diesel::{AsChangeset, Insertable, Queryable, Selectable};
use diesel_async::pooled_connection::deadpool::Pool;
use diesel_async::pooled_connection::AsyncDieselConnectionManager;
use diesel_async::AsyncPgConnection;
use diesel_async::{AsyncConnection, AsyncPgConnection};
use dotenvy_macro::dotenv;
use lib::diesel_crud_derive::{
DieselCrud, DieselCrudCreate, DieselCrudDelete, DieselCrudList, DieselCrudRead,
DieselCrudUpdate,
DieselCrudCreate, DieselCrudDelete, DieselCrudList, DieselCrudRead, DieselCrudUpdate,
};
use lib::diesel_crud_trait::DieselCrudCreate;
@ -16,67 +13,40 @@ diesel::table! {
}
}
#[derive(Queryable, Selectable, Insertable, AsChangeset)]
#[derive(
Queryable,
Selectable,
Insertable,
AsChangeset,
DieselCrudCreate,
DieselCrudDelete,
DieselCrudList,
DieselCrudRead,
DieselCrudUpdate,
)]
#[diesel_crud(insert = InsertUser)]
#[diesel(table_name = user)]
struct User {
#[diesel_crud(pk)]
email: String,
}
#[derive(Insertable)]
#[derive(Clone, Insertable)]
#[diesel(table_name = user)]
struct InsertUser {
email: String,
}
#[derive(DieselCrud)]
#[diesel_crud(table = user, entity = User, pk = String, pk_field = email, create = InsertUser, update = User)]
struct TestService {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudCreate, DieselCrudRead, DieselCrudUpdate, DieselCrudDelete, DieselCrudList)]
#[diesel_crud(table = user, entity = User, pk = String, pk_field = email, create = InsertUser, update = User)]
struct TestServiceSeparate {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudCreate)]
#[diesel_crud(table = user, entity = User, create = InsertUser)]
struct TestServiceCreate {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudRead)]
#[diesel_crud(table = user, entity = User, pk = String)]
struct TestServiceRead {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudUpdate)]
#[diesel_crud(table = user, update = User)]
struct TestServiceUpdate {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudDelete)]
#[diesel_crud(table = user, pk = String, pk_field = email)]
struct TestServiceDelete {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudList)]
#[diesel_crud(table = user, entity = User)]
struct TestServiceList {
pool: Pool<AsyncPgConnection>,
}
#[test]
fn test_insert_user() {
let config = AsyncDieselConnectionManager::<AsyncPgConnection>::new("");
let pool = Pool::builder(config).max_size(10).build().unwrap();
let service = TestServiceCreate { pool };
service.create(&InsertUser {
email: "test".to_string(),
});
#[tokio::test]
async fn test_insert_user() {
let database_url = dotenv!("DATABASE_URL");
let mut conn = AsyncPgConnection::establish(database_url).await.unwrap();
conn.begin_test_transaction().await.unwrap();
let _user = User::create(
InsertUser {
email: "test".to_string(),
},
&mut conn,
)
.await;
}