Skip to content

Commit c0e6d02

Browse files
committed
Implement save
1 parent 41c282c commit c0e6d02

File tree

35 files changed

+1131
-653
lines changed

35 files changed

+1131
-653
lines changed

Cargo.lock

Lines changed: 0 additions & 56 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

__tests__/sql/index.test.ts

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,32 @@ describe.sequential('sqlite', async () => {
101101
await pool.migrate(nextRevision)
102102

103103
expect(await pool.getCurrentRevision()).toBe(1)
104+
const date = new Date()
104105
const user = User.create({
105106
username: 'devup',
106-
createdAt: new Date(),
107+
createdAt: date,
108+
id: 1,
109+
tag: '',
110+
})
111+
expect(user).toEqual({
112+
username: 'devup',
113+
createdAt: date.toISOString(),
107114
id: 1,
108115
tag: '',
116+
__devup_name: 'User',
109117
})
110118
await pool.save(user)
119+
120+
expect(user).toEqual({
121+
username: 'devup',
122+
createdAt: date.toISOString(),
123+
id: 1,
124+
tag: '',
125+
__devup_instance_id: {
126+
id: 1,
127+
},
128+
__devup_name: 'User',
129+
})
111130
expect(await pool.fetchAll('SELECT COUNT(*) as count FROM user')).toEqual(
112131
[
113132
{
@@ -117,15 +136,13 @@ describe.sequential('sqlite', async () => {
117136
)
118137
const ac = await pool.begin()
119138
// assign __devup_instance_id to user
120-
await pool.save(
121-
User.create({
122-
username: 'devup',
123-
createdAt: new Date(),
124-
id: 3,
125-
tag: '',
126-
}),
127-
ac,
128-
)
139+
const user2 = User.create({
140+
username: 'devup',
141+
createdAt: new Date(),
142+
id: 3,
143+
tag: '',
144+
})
145+
await pool.save(user2, ac)
129146

130147
expect(await pool.fetchAll('SELECT COUNT(*) as count FROM user')).toEqual(
131148
[
@@ -143,7 +160,13 @@ describe.sequential('sqlite', async () => {
143160
},
144161
],
145162
)
146-
console.log(user)
163+
164+
const user3 = User.create({
165+
username: 'devup',
166+
tag: '',
167+
})
168+
await pool.save(user3)
169+
console.log(user, user2, user3)
147170

148171
// user.id = 100
149172
// await pool.save(user)

core/api/src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ pub mod router;
55
use crate::router::{AuthRouter, CrudRouter, CustomRouter, ProxyRouter, SingletonRouter};
66
use once_cell::sync::Lazy;
77
use schema::DevupSchema;
8-
use std::collections::HashMap;
9-
use std::error::Error;
10-
use std::sync::{Arc, Mutex};
8+
use std::{
9+
collections::HashMap,
10+
error::Error,
11+
sync::{Arc, Mutex},
12+
};
1113

1214
// Router
1315
static CRUD_ROUTER_MAP: Lazy<Mutex<HashMap<String, Arc<CrudRouter>>>> =

core/api/src/router/mod.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ mod custom_router;
44
mod proxy_router;
55
mod singleton_router;
66

7-
pub use crate::router::auth_router::AuthRouter;
8-
pub use crate::router::crud_router::CrudRouter;
9-
pub use crate::router::custom_router::CustomRouter;
10-
pub use crate::router::proxy_router::ProxyRouter;
11-
pub use crate::router::singleton_router::SingletonRouter;
7+
pub use crate::router::{
8+
auth_router::AuthRouter, crud_router::CrudRouter, custom_router::CustomRouter,
9+
proxy_router::ProxyRouter, singleton_router::SingletonRouter,
10+
};
1211
use serde::{Deserialize, Serialize};
1312

1413
#[derive(Debug, Serialize, Deserialize)]

core/model/src/lib.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,10 @@ pub struct DevupModel {
2121
static INIT: Lazy<Mutex<bool>> = Lazy::new(|| Mutex::new(false));
2222

2323
fn get_shmem_ptr() -> Result<Shmem, ShmemError> {
24-
let shmem = match ShmemConf::new()
25-
.size(4096)
26-
.os_id("devup_model_map")
27-
.create()
28-
{
24+
let shmem = match ShmemConf::new().size(4096).os_id("devup_model").create() {
2925
Ok(m) => m,
3026
Err(ShmemError::MappingIdExists | ShmemError::LinkExists) => {
31-
ShmemConf::new().os_id("devup_model_map").open().unwrap()
27+
ShmemConf::new().os_id("devup_model").open().unwrap()
3228
}
3329
Err(e) => {
3430
eprintln!("Unable to create or open shmem file devup_model_map : {e}");
@@ -56,7 +52,6 @@ pub fn add_model(model: DevupModel) -> Result<(), Box<dyn std::error::Error>> {
5652
unsafe {
5753
shmem.as_slice_mut()[0..serialized.len()].copy_from_slice(&serialized);
5854
};
59-
6055
Ok(())
6156
}
6257

core/utils/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::error::Error;
33

44
/// Collect all files
55
pub fn collect_files(dir: &str, extension: &str) -> Result<Vec<String>, Box<dyn Error>> {
6-
Ok(glob(&format!("{}/**/*.{}", dir, extension))?
6+
Ok(glob(&format!("{dir}/**/*.{extension}"))?
77
.map(|path| path.unwrap().to_str().unwrap().to_string())
88
.collect())
99
}

libs/node/model/main.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export class DevupModel {
44
this: T,
55
// eslint-disable-next-line @typescript-eslint/no-unused-vars
66
params: {
7-
[key in ExtractFieldKeys<InstanceType<T>>]: InstanceType<T>[key]
7+
[key in ExtractFieldKeys<InstanceType<T>>]?: InstanceType<T>[key]
88
},
99
): InstanceType<T> {
1010
throw new Error('Method not implemented.')

libs/node/model/src/model.rs

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
use model::{DevupModel, add_model};
1+
use model::{DevupModel, add_model, get_all_models, get_model};
22
use napi::{Env, JsFunction, JsObject, JsString, bindgen_prelude::*};
33

4-
use crate::utils::{console_dir, log};
4+
use crate::utils::console_dir;
55

66
/// Model decorator
77
#[napi(js_name = "Model")]
@@ -20,35 +20,20 @@ pub fn model(env: Env, name: Option<String>) -> Result<JsFunction> {
2020
.unwrap()
2121
.to_string()
2222
});
23-
let cls = cls.into_unknown();
2423

25-
println!("get_metadata:");
26-
let f = get_metadata.call(
27-
None,
28-
&[
29-
&ctx.env.create_string("devup-api:fields")?.into_unknown(),
30-
&cls,
31-
],
32-
)?;
33-
{
34-
let f = get_metadata.call(
24+
let model = DevupModel {
25+
name: model_name.clone(),
26+
fields: ctx.env.from_js_value(get_metadata.call(
3527
None,
3628
&[
3729
&ctx.env.create_string("devup-api:fields")?.into_unknown(),
38-
&cls,
30+
&cls.into_unknown(),
3931
],
40-
)?;
41-
console_dir(&env, f)?;
42-
}
43-
44-
let fields = ctx.env.from_js_value(f);
45-
println!("fields: {:?}", fields);
46-
add_model(DevupModel {
47-
name: model_name,
48-
fields: fields?,
49-
})
50-
.map_err(|e| napi::Error::from_reason(e.to_string()))?;
32+
)?)?,
33+
};
34+
add_model(model).map_err(|e| napi::Error::from_reason(e.to_string()))?;
5135

36+
get_all_models().unwrap();
5237
Ok(ctx.env.get_undefined())
5338
})
5439
}

libs/python/model/src/lib.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
mod py_utils;
22
use pyo3_stub_gen::{
3-
define_stub_info_gatherer, derive::gen_stub_pyclass, derive::gen_stub_pyfunction,
3+
define_stub_info_gatherer,
4+
derive::{gen_stub_pyclass, gen_stub_pyfunction},
45
};
56
use std::sync::Mutex;
67

78
use api::add_model;
8-
use model::DevupModel;
9-
use model::column::{DevupModelColumn, DevupModelColumnType, DevupModelFieldType};
9+
use model::{
10+
DevupModel,
11+
column::{DevupModelColumn, DevupModelColumnType, DevupModelFieldType},
12+
};
1013
use once_cell::sync::Lazy;
11-
use pyo3::prelude::*;
12-
use pyo3::types::{PyDict, PyType};
13-
use schema::DevupSchema;
14-
use schema::field::DevupSchemaField;
14+
use pyo3::{
15+
prelude::*,
16+
types::{PyDict, PyType},
17+
};
18+
use schema::{DevupSchema, field::DevupSchemaField};
1519
use utils::collect_files;
1620

1721
#[gen_stub_pyclass]

libs/python/model/src/py_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ pub fn convert_to_route_path(path: &str) -> String {
7171
}
7272

7373
if !result.starts_with("/") {
74-
result = format!("/{}", result);
74+
result = format!("/{result}");
7575
}
7676

7777
if result.len() > 1 && result.ends_with("/") {

0 commit comments

Comments
 (0)