dolphin-server-modules 1.5.4 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ // curd/crud.test.ts
3
4
  const crud_1 = require("./crud");
4
- class MockDB {
5
+ // Simple in-memory adapter for testing
6
+ class TestAdapter {
5
7
  data = {};
6
- async createUser() { return {}; }
7
- async findUserByEmail() { return {}; }
8
- async findUserById() { return {}; }
9
- async updateUser() { return {}; }
10
- async saveRefreshToken() { }
11
- async findRefreshToken() { }
12
- async deleteRefreshToken() { }
13
8
  async create(collection, doc) {
14
9
  if (!this.data[collection])
15
10
  this.data[collection] = [];
@@ -17,147 +12,95 @@ class MockDB {
17
12
  return doc;
18
13
  }
19
14
  async read(collection, query) {
20
- return this.data[collection] || [];
15
+ const items = this.data[collection] || [];
16
+ if (!query || Object.keys(query).length === 0)
17
+ return items;
18
+ return items.filter((item) => {
19
+ for (const [key, val] of Object.entries(query)) {
20
+ if (key === 'id' && item.id !== val)
21
+ return false;
22
+ if (key === '_id' && item.id !== val)
23
+ return false;
24
+ if (item[key] !== val)
25
+ return false;
26
+ }
27
+ return true;
28
+ });
21
29
  }
22
30
  async update(collection, query, data) {
23
- if (!this.data[collection])
24
- return null;
25
- const docIndex = this.data[collection].findIndex(d => d.id === query.id);
26
- if (docIndex === -1 && query.id)
27
- return null;
28
- // For many
29
- for (let i = 0; i < this.data[collection].length; i++) {
30
- if (!query.id || this.data[collection][i].id === query.id) {
31
- this.data[collection][i] = { ...this.data[collection][i], ...data };
31
+ const items = this.data[collection] || [];
32
+ for (let i = 0; i < items.length; i++) {
33
+ if (query.id && items[i].id === query.id) {
34
+ this.data[collection][i] = { ...items[i], ...data };
35
+ return this.data[collection][i];
36
+ }
37
+ if (query._id && items[i].id === query._id) {
38
+ this.data[collection][i] = { ...items[i], ...data };
39
+ return this.data[collection][i];
32
40
  }
33
41
  }
34
- return data;
42
+ return null;
35
43
  }
36
44
  async delete(collection, query) {
37
45
  if (!this.data[collection])
38
46
  return null;
39
- // Just simple mock for id match or flush
40
47
  if (query.id) {
41
- this.data[collection] = this.data[collection].filter(d => d.id !== query.id?.['$eq'] && d.id !== query.id);
48
+ this.data[collection] = this.data[collection].filter((d) => d.id !== query.id);
49
+ return { deleted: true };
50
+ }
51
+ if (query._id) {
52
+ this.data[collection] = this.data[collection].filter((d) => d.id !== query._id);
53
+ return { deleted: true };
42
54
  }
43
- else {
55
+ if (Object.keys(query).length === 0) {
44
56
  this.data[collection] = [];
57
+ return { deleted: true };
45
58
  }
46
- return true;
59
+ return null;
47
60
  }
61
+ // Required methods for DatabaseAdapter interface
62
+ async createUser() { return {}; }
63
+ async findUserByEmail() { return null; }
64
+ async findUserById() { return null; }
65
+ async updateUser() { return {}; }
66
+ async saveRefreshToken() { }
67
+ async findRefreshToken() { return null; }
68
+ async deleteRefreshToken() { }
48
69
  }
49
- describe('CRUD Factory', () => {
50
- let db;
51
- beforeEach(() => {
52
- db = new MockDB();
53
- });
54
- it('creates and reads documents with softdelete enabled', async () => {
55
- const crud = (0, crud_1.createCRUD)(db, { softDelete: true, enforceOwnership: false });
56
- const user = 'user_1';
57
- const doc1 = await crud.create('posts', { title: 'Hello', rating: 5 }, user);
58
- expect(doc1.title).toBe('Hello');
59
- expect(doc1.userId).toBe(user);
60
- const doc2 = await crud.create('posts', { title: 'World', rating: 4 }, user);
61
- let list = await crud.read('posts');
62
- expect(list.length).toBe(2);
63
- // Delete one
64
- await crud.deleteOne('posts', doc1.id);
65
- list = await crud.read('posts');
66
- expect(list.length).toBe(1); // One is soft deleted
67
- // Restore
68
- await crud.restore('posts', doc1.id);
69
- list = await crud.read('posts');
70
- expect(list.length).toBe(2); // Restored
71
- });
72
- it('applies complex filters correctly', async () => {
73
- const crud = (0, crud_1.createCRUD)(db, { enforceOwnership: false });
74
- await crud.createMany('items', [
75
- { category: 'A', price: 10 },
76
- { category: 'A', price: 20 },
77
- { category: 'B', price: 15 },
78
- { category: 'B', price: 5 }
79
- ]);
80
- const res1 = await crud.read('items', { category: { $in: ['A'] } });
81
- expect(res1.length).toBe(2);
82
- const res2 = await crud.read('items', { price: { $gt: 10 } });
83
- expect(res2.length).toBe(2);
84
- const res3 = await crud.read('items', {
85
- $or: [
86
- { price: { $lte: 5 } },
87
- { category: 'A' }
88
- ]
89
- });
90
- expect(res3.length).toBe(3); // A items + price<=5
91
- });
92
- it('supports pagination and sorting', async () => {
93
- const crud = (0, crud_1.createCRUD)(db, { enforceOwnership: false });
94
- await crud.createMany('scores', [
95
- { p: 10 }, { p: 50 }, { p: 20 }, { p: 30 }
96
- ]);
97
- const page1 = await crud.paginate('scores', {}, 1, 2);
98
- expect(page1.items.length).toBe(2);
99
- expect(page1.total).toBe(4);
100
- expect(page1.totalPages).toBe(2);
101
- expect(page1.hasNext).toBe(true);
102
- const sorted = await crud.read('scores', {}, { sort: { p: 'desc' } });
103
- expect(sorted[0].p).toBe(50);
104
- expect(sorted[3].p).toBe(10);
105
- });
106
- });
107
- describe('CRUD Controller', () => {
70
+ describe('CRUD Tests', () => {
71
+ let crud;
108
72
  let db;
109
73
  beforeEach(() => {
110
- db = new MockDB();
74
+ db = new TestAdapter();
75
+ crud = (0, crud_1.createCRUD)(db, { softDelete: false, enforceOwnership: false });
111
76
  });
112
- const mockCtx = (overrides = {}) => ({
113
- query: {},
114
- params: {},
115
- body: {},
116
- req: { user: { id: 'user_1' } },
117
- json: jest.fn(),
118
- status: jest.fn().mockReturnThis(),
119
- ...overrides
77
+ it('should create item', async () => {
78
+ const item = await crud.create('products', { name: 'Test', price: 100 });
79
+ expect(item.id).toBeDefined();
80
+ expect(item.name).toBe('Test');
120
81
  });
121
- it('handles getAll with query filters', async () => {
122
- const adapter = new MockDB();
123
- await adapter.create('posts', { id: '1', title: 'A', userId: 'user_1' });
124
- await adapter.create('posts', { id: '2', title: 'B', userId: 'user_1' });
125
- // Model metadata format
126
- const model = { adapter, collection: 'posts' };
127
- const controller = require('./crud').createCrudController(model);
128
- const ctx = mockCtx({ query: { title: 'A' } });
129
- await controller.getAll(ctx);
130
- expect(ctx.json).toHaveBeenCalledWith(expect.arrayContaining([expect.objectContaining({ title: 'A' })]));
131
- expect(ctx.json.mock.calls[0][0].length).toBe(1);
82
+ it('should read items', async () => {
83
+ await crud.create('products', { name: 'Product 1' });
84
+ await crud.create('products', { name: 'Product 2' });
85
+ const items = await crud.read('products');
86
+ expect(items).toHaveLength(2);
132
87
  });
133
- it('handles create and returns 201', async () => {
134
- const adapter = new MockDB();
135
- const model = { adapter, collection: 'items' };
136
- const controller = require('./crud').createCrudController(model);
137
- const ctx = mockCtx({ body: { name: 'New Item' } });
138
- await controller.create(ctx);
139
- expect(ctx.status).toHaveBeenCalledWith(201);
140
- expect(ctx.json).toHaveBeenCalledWith(expect.objectContaining({ name: 'New Item', userId: 'user_1' }));
88
+ it('should update item', async () => {
89
+ const created = await crud.create('products', { name: 'Old' });
90
+ const updated = await crud.updateOne('products', created.id, { name: 'New' });
91
+ expect(updated?.name).toBe('New');
141
92
  });
142
- it('handles getOne and returns 404 if not found', async () => {
143
- const adapter = new MockDB();
144
- const model = { adapter, collection: 'items' };
145
- const controller = require('./crud').createCrudController(model);
146
- const ctx = mockCtx({ params: { id: 'nonexistent' } });
147
- await controller.getOne(ctx);
148
- expect(ctx.status).toHaveBeenCalledWith(404);
149
- expect(ctx.json).toHaveBeenCalledWith({ error: 'Not Found' });
93
+ it('should delete item', async () => {
94
+ const created = await crud.create('products', { name: 'Delete Me' });
95
+ await crud.deleteOne('products', created.id);
96
+ const items = await crud.read('products');
97
+ expect(items).toHaveLength(0);
150
98
  });
151
- it('handles delete and returns success', async () => {
152
- const adapter = new MockDB();
153
- const doc = await adapter.create('items', { id: '123', userId: 'user_1' });
154
- const model = { adapter, collection: 'items' };
155
- const controller = require('./crud').createCrudController(model);
156
- const ctx = mockCtx({ params: { id: '123' } });
157
- await controller.delete(ctx);
158
- expect(ctx.json).toHaveBeenCalledWith(expect.objectContaining({ success: true }));
159
- const remaining = await adapter.read('items', { id: '123' });
160
- expect(remaining.length).toBe(0);
99
+ it('should read one item by id', async () => {
100
+ const created = await crud.create('products', { name: 'Find Me' });
101
+ const found = await crud.readOne('products', created.id);
102
+ expect(found).toBeDefined();
103
+ expect(found.name).toBe('Find Me');
161
104
  });
162
105
  });
163
106
  //# sourceMappingURL=crud.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crud.test.js","sourceRoot":"","sources":["../../curd/crud.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crud.test.js","sourceRoot":"","sources":["../../curd/crud.test.ts"],"names":[],"mappings":";;AAAA,oBAAoB;AACpB,iCAAoC;AAEpC,uCAAuC;AACvC,MAAM,WAAW;IACP,IAAI,GAA0B,EAAE,CAAC;IAEzC,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,GAAQ;QACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,KAAU;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAE5D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE;YAChC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG;oBAAE,OAAO,KAAK,CAAC;gBAClD,IAAI,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG;oBAAE,OAAO,KAAK,CAAC;gBACnD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG;oBAAE,OAAO,KAAK,CAAC;YACtC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,KAAU,EAAE,IAAS;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,KAAU;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAExC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;YACrF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACjC,KAAK,CAAC,eAAe,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,YAAY,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACrC,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACjC,KAAK,CAAC,gBAAgB,KAAI,CAAC;IAC3B,KAAK,CAAC,gBAAgB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACzC,KAAK,CAAC,kBAAkB,KAAI,CAAC;CAC9B;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,IAAS,CAAC;IACd,IAAI,EAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;QACvB,IAAI,GAAG,IAAA,iBAAU,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAErD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAE9E,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAEzD,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const mongoose_1 = __importStar(require("mongoose"));
37
+ const mongodb_memory_server_1 = require("mongodb-memory-server");
38
+ const server_1 = require("./server/server");
39
+ const crud_1 = require("./curd/crud");
40
+ const mongoose_2 = require("./adapters/mongoose");
41
+ // ===== Mongoose Models =====
42
+ const ProductSchema = new mongoose_1.Schema({
43
+ id: { type: String },
44
+ name: { type: String, required: true },
45
+ price: { type: Number },
46
+ category: { type: String },
47
+ userId: { type: String },
48
+ createdAt: { type: String },
49
+ updatedAt: { type: String },
50
+ }, { timestamps: false });
51
+ const UserSchema = new mongoose_1.Schema({ email: String, password: String });
52
+ const RefreshTokenSchema = new mongoose_1.Schema({ token: String, userId: String });
53
+ const Product = mongoose_1.default.model('Product', ProductSchema);
54
+ const User = mongoose_1.default.model('User', UserSchema);
55
+ const RefreshToken = mongoose_1.default.model('RefreshToken', RefreshTokenSchema);
56
+ async function bootstrap() {
57
+ // 1. Start in-process MongoDB (real Mongoose engine, no external server needed)
58
+ console.log('⏳ MongoDB इन्जिन start गर्दै...');
59
+ const mongod = await mongodb_memory_server_1.MongoMemoryServer.create();
60
+ const uri = mongod.getUri();
61
+ await mongoose_1.default.connect(uri);
62
+ console.log('✅ MongoDB connected:', uri);
63
+ // 2. Build real Mongoose adapter
64
+ const mongoAdapter = (0, mongoose_2.createMongooseAdapter)({
65
+ User,
66
+ RefreshToken,
67
+ models: { Product },
68
+ leanByDefault: true,
69
+ softDelete: false,
70
+ });
71
+ // 3. CRUD service — enforceOwnership: false (auth नचाहिने)
72
+ const service = (0, crud_1.createCRUD)(mongoAdapter, { enforceOwnership: false });
73
+ const COLLECTION = 'Product';
74
+ // 4. Dolphin server
75
+ const app = (0, server_1.createDolphinServer)();
76
+ // ===== CORRECT ROUTE MAPPINGS =====
77
+ // GET all products
78
+ app.get('/products', async (ctx) => {
79
+ const { limit, offset, ...filters } = ctx.query;
80
+ const results = await service.read(COLLECTION, filters, {
81
+ limit: limit ? parseInt(limit) : undefined,
82
+ offset: offset ? parseInt(offset) : undefined,
83
+ });
84
+ ctx.json(results);
85
+ });
86
+ // GET single product by ID
87
+ app.get('/products/:id', async (ctx) => {
88
+ const result = await service.readOne(COLLECTION, ctx.params.id);
89
+ if (!result)
90
+ return ctx.status(404).json({ error: 'Product not found' });
91
+ ctx.json(result);
92
+ });
93
+ // POST create product
94
+ app.post('/products', async (ctx) => {
95
+ const result = await service.create(COLLECTION, ctx.body);
96
+ ctx.status(201).json(result);
97
+ });
98
+ // PUT update product by ID
99
+ app.put('/products/:id', async (ctx) => {
100
+ const result = await service.updateOne(COLLECTION, ctx.params.id, ctx.body);
101
+ if (!result)
102
+ return ctx.status(404).json({ error: 'Product not found' });
103
+ ctx.json(result);
104
+ });
105
+ // DELETE product by ID
106
+ app.delete('/products/:id', async (ctx) => {
107
+ const result = await service.deleteOne(COLLECTION, ctx.params.id);
108
+ if (!result)
109
+ return ctx.status(404).json({ error: 'Product not found' });
110
+ ctx.json({ success: true, deleted: result });
111
+ });
112
+ // ===== Utility Routes =====
113
+ app.get('/api/health', (ctx) => {
114
+ ctx.json({
115
+ status: 'ok',
116
+ db: mongoose_1.default.connection.readyState === 1 ? 'connected' : 'disconnected',
117
+ uptime: process.uptime(),
118
+ timestamp: new Date().toISOString(),
119
+ });
120
+ });
121
+ app.post('/api/echo', (ctx) => {
122
+ ctx.json({ echo: ctx.body, received_at: new Date().toISOString() });
123
+ });
124
+ app.get('/api/info', (ctx) => {
125
+ ctx.json({
126
+ name: 'Dolphin Framework',
127
+ version: '1.5.5',
128
+ adapter: 'Real Mongoose (mongodb-memory-server)',
129
+ mongoUri: uri,
130
+ });
131
+ });
132
+ app.get('/', (ctx) => {
133
+ ctx.html(`<!DOCTYPE html>
134
+ <html lang="en">
135
+ <head>
136
+ <meta charset="UTF-8">
137
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
138
+ <title>Dolphin Framework — Mongoose</title>
139
+ <style>
140
+ * { box-sizing: border-box; margin: 0; padding: 0; }
141
+ body {
142
+ font-family: 'Segoe UI', system-ui, sans-serif;
143
+ background: linear-gradient(135deg, #0f2027, #203a43, #2c5364);
144
+ min-height: 100vh; color: #fff; padding: 2rem;
145
+ }
146
+ .container { max-width: 860px; margin: 0 auto; }
147
+ .header { text-align: center; margin-bottom: 2.5rem; }
148
+ .logo { font-size: 4rem; }
149
+ h1 { font-size: 2.3rem; font-weight: 700; margin: 0.5rem 0; }
150
+ .tagline { color: #a0c4d8; font-size: 1rem; }
151
+ .badge {
152
+ display: inline-block; background: rgba(255,255,255,0.1);
153
+ border: 1px solid rgba(255,255,255,0.2); padding: 0.25rem 0.75rem;
154
+ border-radius: 999px; font-size: 0.82rem; margin: 0.2rem;
155
+ }
156
+ .green { border-color: #4ade80; color: #4ade80; }
157
+ .section { margin-bottom: 2rem; }
158
+ .section h2 { font-size: 1rem; color: #7ecfff; margin-bottom: 0.8rem; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 0.4rem; }
159
+ .ep {
160
+ display: flex; align-items: center; gap: 0.8rem;
161
+ padding: 0.6rem 1rem; background: rgba(255,255,255,0.05);
162
+ border-radius: 8px; margin-bottom: 0.4rem; font-size: 0.87rem;
163
+ }
164
+ .method {
165
+ font-weight: bold; font-size: 0.72rem; padding: 0.2rem 0.45rem;
166
+ border-radius: 4px; min-width: 55px; text-align: center; flex-shrink: 0;
167
+ }
168
+ .get { background: #1a6b3f; color: #4ade80; }
169
+ .post { background: #1a3b6b; color: #60a5fa; }
170
+ .put { background: #5c3a00; color: #fbbf24; }
171
+ .del { background: #6b1a1a; color: #f87171; }
172
+ code { background: rgba(255,255,255,0.1); padding: 0.1rem 0.4rem; border-radius: 3px; font-family: monospace; }
173
+ .note { font-size: 0.8rem; color: #7a9fb0; margin-top: 0.5rem; }
174
+ </style>
175
+ </head>
176
+ <body>
177
+ <div class="container">
178
+ <div class="header">
179
+ <div class="logo">🐬</div>
180
+ <h1>Dolphin Framework</h1>
181
+ <p class="tagline">Real Mongoose Adapter · MongoDB Engine · CRUD Verified</p>
182
+ <div style="margin-top:1rem;">
183
+ <span class="badge green">✅ MongoDB Connected</span>
184
+ <span class="badge">Mongoose ORM</span>
185
+ <span class="badge">enforceOwnership: false</span>
186
+ </div>
187
+ </div>
188
+
189
+ <div class="section">
190
+ <h2>Products CRUD API (Real Mongoose)</h2>
191
+ <div class="ep"><span class="method get">GET</span><code>/products</code><span>सबै products ल्याउनु</span></div>
192
+ <div class="ep"><span class="method get">GET</span><code>/products/:id</code><span>ID बाट एउटा product ल्याउनु</span></div>
193
+ <div class="ep"><span class="method post">POST</span><code>/products</code><span>नयाँ product बनाउनु (body: JSON)</span></div>
194
+ <div class="ep"><span class="method put">PUT</span><code>/products/:id</code><span>ID बाट product update गर्नु</span></div>
195
+ <div class="ep"><span class="method del">DELETE</span><code>/products/:id</code><span>ID बाट product मेटाउनु</span></div>
196
+ <p class="note">* mongodb-memory-server — Real Mongoose engine, server restart भएमा data reset हुन्छ</p>
197
+ </div>
198
+
199
+ <div class="section">
200
+ <h2>Utility Endpoints</h2>
201
+ <div class="ep"><span class="method get">GET</span><code>/api/health</code><span>Health + DB status</span></div>
202
+ <div class="ep"><span class="method get">GET</span><code>/api/info</code><span>Framework + adapter info</span></div>
203
+ <div class="ep"><span class="method post">POST</span><code>/api/echo</code><span>Request body echo</span></div>
204
+ </div>
205
+ </div>
206
+ </body>
207
+ </html>`);
208
+ });
209
+ // 5. Start server
210
+ const PORT = 5000;
211
+ app.listen(PORT, () => {
212
+ console.log(`🐬 Dolphin + Real Mongoose running at http://0.0.0.0:${PORT}`);
213
+ console.log(` MongoDB URI: ${uri}`);
214
+ console.log(` CRUD: GET/POST /products | GET/PUT/DELETE /products/:id`);
215
+ });
216
+ }
217
+ bootstrap().catch(err => {
218
+ console.error('❌ Bootstrap failed:', err);
219
+ process.exit(1);
220
+ });
221
+ //# sourceMappingURL=demo-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-server.js","sourceRoot":"","sources":["../demo-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};