Skip to content

Commit 042dc8e

Browse files
committed
Implement build
1 parent c0e6d02 commit 042dc8e

File tree

41 files changed

+616
-326
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+616
-326
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@ node_modules
33
__pycache__
44
*.pyc
55
dist
6-
.idea
6+
.idea
7+
devup_model
8+
*.db
9+
test-*-revisions

Cargo.lock

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

Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ members = [
1010
"libs/node/model",
1111
]
1212

13-
1413
[profile.release]
1514
lto = true
1615
strip = "symbols"
16+
17+
[profile.dev]
18+
opt-level = 1

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
2+
# Devup API
3+
4+
## Command
5+
6+
7+
### Release Build
8+
```
9+
pnpm build
10+
```
11+
12+
### Test
13+
```
14+
pnpm build:debug && pnpm test
15+
```
16+
17+
118
```mermaid
219
graph TD
320
;

__tests__/sql/index.test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'reflect-metadata'
22

3-
import { existsSync, unlinkSync, writeFileSync } from 'node:fs'
3+
import { existsSync, rmdirSync, unlinkSync, writeFileSync } from 'node:fs'
44

55
import {
66
Column,
@@ -15,8 +15,13 @@ describe.sequential('sqlite', async () => {
1515
unlinkSync('./test.db')
1616
}
1717
writeFileSync('./test.db', '')
18+
19+
if (existsSync('./test-index-revisions')) {
20+
rmdirSync('./test-index-revisions', { recursive: true })
21+
}
1822
const pool = await createSqliteConnection({
1923
url: 'sqlite:./test.db',
24+
revisionPath: './test-index-revisions',
2025
})
2126
it.each([
2227
['SELECT 1 as value', { value: 1 }],
@@ -87,7 +92,7 @@ describe.sequential('sqlite', async () => {
8792
// get current revision
8893
expect(await pool.getCurrentRevision()).toBe(0)
8994
// create revision
90-
const nextRevision = await pool.createRevision()
95+
const nextRevision = await pool.createRevision('First', 'First revision')
9196
expect(nextRevision).toBe(1)
9297
const revisionSql = await pool.getRevisionSql(nextRevision, true)
9398
expect(revisionSql).toEqual([

__tests__/sql/migrate.test.ts

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
import 'reflect-metadata'
2+
3+
import { existsSync, rmdirSync, unlinkSync, writeFileSync } from 'node:fs'
4+
5+
import {
6+
Column,
7+
DevupModel,
8+
DevupModelColumnType,
9+
Func,
10+
Model,
11+
} from '@devup-api/model'
12+
import { createSqliteConnection } from '@devup-sql/sqlite'
13+
describe.sequential('sqlite', async () => {
14+
if (existsSync('./migrate.db')) {
15+
unlinkSync('./migrate.db')
16+
}
17+
writeFileSync('./migrate.db', '')
18+
if (existsSync('./test-migrate-revisions')) {
19+
rmdirSync('./test-migrate-revisions', { recursive: true })
20+
}
21+
22+
const pool = await createSqliteConnection({
23+
url: 'sqlite:./migrate.db',
24+
revisionPath: './test-migrate-revisions',
25+
})
26+
describe('migrate', () => {
27+
it('test', async () => {
28+
@Model()
29+
class User extends DevupModel {
30+
@Column({
31+
name: 'id',
32+
primaryKey: true,
33+
autoIncrement: true,
34+
})
35+
id: number
36+
37+
@Column({
38+
// server default
39+
default: 'devup',
40+
})
41+
username: string
42+
43+
@Column({
44+
// local default
45+
default: () => 'Hello',
46+
nullable: true,
47+
type: DevupModelColumnType.Text,
48+
})
49+
tag?: string
50+
51+
@Column({
52+
default: Func.now(),
53+
type: DevupModelColumnType.DateTime,
54+
})
55+
createdAt: Date
56+
}
57+
58+
const hasRevision = await pool.hasRevision()
59+
expect(hasRevision).toBe(false)
60+
if (!hasRevision) {
61+
await pool.setupRevision()
62+
}
63+
{
64+
// get current revision
65+
expect(await pool.getCurrentRevision()).toBe(0)
66+
// create revision
67+
const nextRevision = await pool.createRevision('First', 'Create User')
68+
expect(nextRevision).toBe(1)
69+
const revisionSql = await pool.getRevisionSql(nextRevision, true)
70+
expect(revisionSql).toEqual([
71+
{
72+
sql: `CREATE TABLE user (id INTEGER NOT NULL, username VARCHAR(255) NOT NULL DEFAULT \`devup\`, tag TEXT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id))`,
73+
params: [],
74+
},
75+
])
76+
expect(await pool.getCurrentRevision()).toBe(0)
77+
// migrate to next revision
78+
await pool.migrate(nextRevision)
79+
80+
expect(await pool.getCurrentRevision()).toBe(1)
81+
}
82+
83+
@Model()
84+
class Setting extends DevupModel {
85+
@Column({
86+
name: 'id',
87+
primaryKey: true,
88+
autoIncrement: true,
89+
})
90+
id: number
91+
92+
@Column({
93+
type: DevupModelColumnType.Text,
94+
})
95+
description: string
96+
}
97+
98+
{
99+
// get current revision
100+
expect(await pool.getCurrentRevision()).toBe(1)
101+
// create revision
102+
const nextRevision = await pool.createRevision(
103+
'Second',
104+
'Create Setting',
105+
)
106+
expect(nextRevision).toBe(2)
107+
const revisionSql = await pool.getRevisionSql(nextRevision, true)
108+
expect(revisionSql).toEqual([
109+
{
110+
sql: `CREATE TABLE setting (id INTEGER NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id))`,
111+
params: [],
112+
},
113+
])
114+
expect(await pool.getCurrentRevision()).toBe(1)
115+
// migrate to next revision
116+
await pool.migrate(nextRevision)
117+
118+
expect(await pool.getCurrentRevision()).toBe(2)
119+
}
120+
})
121+
})
122+
})

apps/sql-demo/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
"devDependencies": {
1414
"typescript": "^5.8.3",
15-
"vite": "^6.3.3"
15+
"vite": "^6.3.5"
1616
},
17-
"packageManager": "pnpm@10.9.0"
17+
"packageManager": "pnpm@10.11.0"
1818
}

0 commit comments

Comments
 (0)