@volontariapp/domain-post 3.0.2 → 3.1.0
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.
- package/CHANGELOG.md +13 -0
- package/dist/entities/comment.entity.d.ts +9 -0
- package/dist/entities/comment.entity.d.ts.map +1 -0
- package/dist/entities/comment.entity.js +9 -0
- package/dist/entities/comment.entity.js.map +1 -0
- package/dist/entities/index.d.ts +1 -0
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +1 -0
- package/dist/entities/index.js.map +1 -1
- package/dist/models/comment.model.d.ts +9 -0
- package/dist/models/comment.model.d.ts.map +1 -0
- package/dist/models/comment.model.js +49 -0
- package/dist/models/comment.model.js.map +1 -0
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1 -0
- package/dist/models/index.js.map +1 -1
- package/dist/models/mapper.d.ts.map +1 -1
- package/dist/models/mapper.js +3 -1
- package/dist/models/mapper.js.map +1 -1
- package/dist/models/post.model.d.ts.map +1 -1
- package/dist/models/post.model.js +2 -2
- package/dist/models/post.model.js.map +1 -1
- package/dist/repositories/index.d.ts +1 -0
- package/dist/repositories/index.d.ts.map +1 -1
- package/dist/repositories/index.js +1 -0
- package/dist/repositories/index.js.map +1 -1
- package/dist/repositories/interfaces/comment.repository.d.ts +9 -0
- package/dist/repositories/interfaces/comment.repository.d.ts.map +1 -0
- package/dist/repositories/interfaces/comment.repository.js +2 -0
- package/dist/repositories/interfaces/comment.repository.js.map +1 -0
- package/dist/repositories/interfaces/index.d.ts +1 -0
- package/dist/repositories/interfaces/index.d.ts.map +1 -1
- package/dist/repositories/interfaces/index.js +1 -0
- package/dist/repositories/interfaces/index.js.map +1 -1
- package/dist/repositories/interfaces/post.repository.d.ts +2 -0
- package/dist/repositories/interfaces/post.repository.d.ts.map +1 -1
- package/dist/repositories/postgres-comment.repository.d.ts +10 -0
- package/dist/repositories/postgres-comment.repository.d.ts.map +1 -0
- package/dist/repositories/postgres-comment.repository.js +35 -0
- package/dist/repositories/postgres-comment.repository.js.map +1 -0
- package/dist/repositories/postgres-post.repository.d.ts +2 -1
- package/dist/repositories/postgres-post.repository.d.ts.map +1 -1
- package/dist/repositories/postgres-post.repository.js +4 -0
- package/dist/repositories/postgres-post.repository.js.map +1 -1
- package/dist/services/comment.service.d.ts +14 -0
- package/dist/services/comment.service.d.ts.map +1 -0
- package/dist/services/comment.service.js +82 -0
- package/dist/services/comment.service.js.map +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/post.service.d.ts +2 -0
- package/dist/services/post.service.d.ts.map +1 -1
- package/dist/services/post.service.js +13 -1
- package/dist/services/post.service.js.map +1 -1
- package/dist/test/__test-utils__/factories/comment.factory.d.ts +6 -0
- package/dist/test/__test-utils__/factories/comment.factory.d.ts.map +1 -0
- package/dist/test/__test-utils__/factories/comment.factory.js +18 -0
- package/dist/test/__test-utils__/factories/comment.factory.js.map +1 -0
- package/dist/test/__test-utils__/factories/post.factory.js +1 -1
- package/dist/test/__test-utils__/factories/post.factory.js.map +1 -1
- package/dist/test/data-source.d.ts.map +1 -1
- package/dist/test/data-source.js +9 -3
- package/dist/test/data-source.js.map +1 -1
- package/dist/test/integration/comment.repository.int.spec.d.ts +2 -0
- package/dist/test/integration/comment.repository.int.spec.d.ts.map +1 -0
- package/dist/test/integration/comment.repository.int.spec.js +92 -0
- package/dist/test/integration/comment.repository.int.spec.js.map +1 -0
- package/dist/test/integration/post.repository.int.spec.js +44 -4
- package/dist/test/integration/post.repository.int.spec.js.map +1 -1
- package/dist/test/integration/scenario.int.spec.d.ts +2 -0
- package/dist/test/integration/scenario.int.spec.d.ts.map +1 -0
- package/dist/test/integration/scenario.int.spec.js +113 -0
- package/dist/test/integration/scenario.int.spec.js.map +1 -0
- package/dist/test/migrations/1776000000001-AddUniqueConstraintToPostTitle.d.ts +7 -0
- package/dist/test/migrations/1776000000001-AddUniqueConstraintToPostTitle.d.ts.map +1 -0
- package/dist/test/migrations/1776000000001-AddUniqueConstraintToPostTitle.js +10 -0
- package/dist/test/migrations/1776000000001-AddUniqueConstraintToPostTitle.js.map +1 -0
- package/dist/test/migrations/1780000000000-InitialCommentSchema.d.ts +7 -0
- package/dist/test/migrations/1780000000000-InitialCommentSchema.d.ts.map +1 -0
- package/dist/test/migrations/1780000000000-InitialCommentSchema.js +14 -0
- package/dist/test/migrations/1780000000000-InitialCommentSchema.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.service.js","sourceRoot":"","sources":["../../src/services/post.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"post.service.js","sourceRoot":"","sources":["../../src/services/post.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CommentEntity } from '../../../entities/comment.entity.js';
|
|
2
|
+
export declare class CommentFactory {
|
|
3
|
+
static build(overrides?: Partial<CommentEntity>): CommentEntity;
|
|
4
|
+
static buildMany(count: number, overrides?: Partial<CommentEntity>): CommentEntity[];
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=comment.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment.factory.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/comment.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,qBAAa,cAAc;IACzB,MAAM,CAAC,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,aAAa;IAWnE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,aAAa,EAAE;CAGzF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { CommentEntity } from '../../../entities/comment.entity.js';
|
|
3
|
+
export class CommentFactory {
|
|
4
|
+
static build(overrides = {}) {
|
|
5
|
+
const comment = new CommentEntity();
|
|
6
|
+
comment.id = overrides.id ?? randomUUID();
|
|
7
|
+
comment.postId = overrides.postId ?? randomUUID();
|
|
8
|
+
comment.authorId = overrides.authorId ?? randomUUID();
|
|
9
|
+
comment.content = overrides.content ?? 'Test Comment Content';
|
|
10
|
+
comment.createdAt = overrides.createdAt ?? new Date();
|
|
11
|
+
comment.updatedAt = overrides.updatedAt ?? new Date();
|
|
12
|
+
return comment;
|
|
13
|
+
}
|
|
14
|
+
static buildMany(count, overrides = {}) {
|
|
15
|
+
return Array.from({ length: count }, () => CommentFactory.build(overrides));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=comment.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment.factory.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/comment.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,KAAK,CAAC,YAAoC,EAAE;QACjD,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;QACpC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QAClD,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;QACtD,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,sBAAsB,CAAC;QAC9D,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QACtD,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,YAAoC,EAAE;QACpE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC;CACF"}
|
|
@@ -5,7 +5,7 @@ export class PostFactory {
|
|
|
5
5
|
const post = new PostEntity();
|
|
6
6
|
post.id = overrides.id ?? randomUUID();
|
|
7
7
|
post.authorId = overrides.authorId ?? randomUUID();
|
|
8
|
-
post.title = overrides.title ??
|
|
8
|
+
post.title = overrides.title ?? `Test Title ${randomUUID()}`;
|
|
9
9
|
post.content = overrides.content ?? 'Test Content';
|
|
10
10
|
post.createdAt = overrides.createdAt ?? new Date();
|
|
11
11
|
post.updatedAt = overrides.updatedAt ?? new Date();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.factory.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/post.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAiC,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"post.factory.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/post.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAiC,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,cAAc,UAAU,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,cAAc,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,YAAiC,EAAE;QACjE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-source.d.ts","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAWrC,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"data-source.d.ts","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAWrC,eAAO,MAAM,cAAc,YAkBzB,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,cAAc,UAAU,CAAC,KAAG,UAAU,CAAC,CAAC,CACpB,CAAC;AAEvE,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAQrD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAIhD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAEhD,CAAC"}
|
package/dist/test/data-source.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { DataSource } from 'typeorm';
|
|
2
|
-
import { PostModel } from '../models/index.js';
|
|
2
|
+
import { PostModel, CommentModel } from '../models/index.js';
|
|
3
3
|
import { registerPostMappings } from '../models/mapper.js';
|
|
4
4
|
import { InitialPostSchema1776000000000 } from './migrations/1776000000000-InitialPostSchema.js';
|
|
5
5
|
import { JobsOutboxAndEventQueue1776785940565 } from './migrations/1776785940565-JobsOutboxAndEventQueue.js';
|
|
6
6
|
import { JobsOutboxAndEventQueueWithTraceId1776975278062 } from './migrations/1776975278062-JobsOutboxAndEventQueueWithTraceId.js';
|
|
7
7
|
import { UpdateOutboxModels1777630651338 } from './migrations/1777630651338-UpdateOutboxModels.js';
|
|
8
|
+
import { AddUniqueConstraintToPostTitle1776000000001 } from './migrations/1776000000001-AddUniqueConstraintToPostTitle.js';
|
|
9
|
+
import { InitialCommentSchema1780000000000 } from './migrations/1780000000000-InitialCommentSchema.js';
|
|
8
10
|
export const testDataSource = new DataSource({
|
|
9
11
|
type: 'postgres',
|
|
10
12
|
host: 'localhost',
|
|
@@ -12,12 +14,14 @@ export const testDataSource = new DataSource({
|
|
|
12
14
|
username: 'user',
|
|
13
15
|
password: 'password',
|
|
14
16
|
database: 'ms_post',
|
|
15
|
-
entities: [PostModel],
|
|
17
|
+
entities: [PostModel, CommentModel],
|
|
16
18
|
migrations: [
|
|
17
19
|
InitialPostSchema1776000000000,
|
|
18
20
|
JobsOutboxAndEventQueue1776785940565,
|
|
19
21
|
JobsOutboxAndEventQueueWithTraceId1776975278062,
|
|
20
22
|
UpdateOutboxModels1777630651338,
|
|
23
|
+
AddUniqueConstraintToPostTitle1776000000001,
|
|
24
|
+
InitialCommentSchema1780000000000,
|
|
21
25
|
],
|
|
22
26
|
synchronize: false,
|
|
23
27
|
logging: false,
|
|
@@ -26,6 +30,8 @@ export const getTestRepository = (ModelClass) => testDataSource.getRepository(Mo
|
|
|
26
30
|
export const initializeTestDb = async () => {
|
|
27
31
|
if (!testDataSource.isInitialized) {
|
|
28
32
|
await testDataSource.initialize();
|
|
33
|
+
await testDataSource.dropDatabase();
|
|
34
|
+
await testDataSource.runMigrations();
|
|
29
35
|
}
|
|
30
36
|
registerPostMappings();
|
|
31
37
|
};
|
|
@@ -35,6 +41,6 @@ export const closeTestDb = async () => {
|
|
|
35
41
|
}
|
|
36
42
|
};
|
|
37
43
|
export const truncateAll = async () => {
|
|
38
|
-
await testDataSource.query('TRUNCATE TABLE posts RESTART IDENTITY CASCADE');
|
|
44
|
+
await testDataSource.query('TRUNCATE TABLE posts, comments RESTART IDENTITY CASCADE');
|
|
39
45
|
};
|
|
40
46
|
//# sourceMappingURL=data-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../src/test/data-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAE,oCAAoC,EAAE,MAAM,uDAAuD,CAAC;AAC7G,OAAO,EAAE,+CAA+C,EAAE,MAAM,kEAAkE,CAAC;AACnI,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AACnG,OAAO,EAAE,2CAA2C,EAAE,MAAM,8DAA8D,CAAC;AAC3H,OAAO,EAAE,iCAAiC,EAAE,MAAM,oDAAoD,CAAC;AAEvG,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;IAC3C,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IACnC,UAAU,EAAE;QACV,8BAA8B;QAC9B,oCAAoC;QACpC,+CAA+C;QAC/C,+BAA+B;QAC/B,2CAA2C;QAC3C,iCAAiC;KAClC;IACD,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAmB,UAAuB,EAAiB,EAAE,CAC5F,cAAc,CAAC,aAAa,CAAC,UAAU,CAA6B,CAAC;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAmB,EAAE;IACxD,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED,oBAAoB,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;QACjC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,cAAc,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;AACxF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment.repository.int.spec.d.ts","sourceRoot":"","sources":["../../../src/test/integration/comment.repository.int.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll, beforeEach } from '@jest/globals';
|
|
2
|
+
import { PostgresCommentRepository } from '../../repositories/postgres-comment.repository.js';
|
|
3
|
+
import { PostgresPostRepository } from '../../repositories/postgres-post.repository.js';
|
|
4
|
+
import { CommentModel } from '../../models/comment.model.js';
|
|
5
|
+
import { PostModel } from '../../models/post.model.js';
|
|
6
|
+
import { CommentFactory } from '../__test-utils__/factories/comment.factory.js';
|
|
7
|
+
import { PostFactory } from '../__test-utils__/factories/post.factory.js';
|
|
8
|
+
import { initializeTestDb, closeTestDb, truncateAll, getTestRepository } from '../data-source.js';
|
|
9
|
+
describe('PostgresCommentRepository (Integration)', () => {
|
|
10
|
+
let commentRepository;
|
|
11
|
+
let postRepository;
|
|
12
|
+
beforeAll(async () => {
|
|
13
|
+
await initializeTestDb();
|
|
14
|
+
commentRepository = new PostgresCommentRepository(getTestRepository(CommentModel));
|
|
15
|
+
postRepository = new PostgresPostRepository(getTestRepository(PostModel));
|
|
16
|
+
});
|
|
17
|
+
afterAll(async () => {
|
|
18
|
+
await closeTestDb();
|
|
19
|
+
});
|
|
20
|
+
beforeEach(async () => {
|
|
21
|
+
await truncateAll();
|
|
22
|
+
});
|
|
23
|
+
describe('create()', () => {
|
|
24
|
+
it('should create a comment successfully', async () => {
|
|
25
|
+
const post = PostFactory.build();
|
|
26
|
+
await postRepository.create(post);
|
|
27
|
+
const comment = CommentFactory.build({ postId: post.id, content: 'Nice post!' });
|
|
28
|
+
const created = await commentRepository.create(comment);
|
|
29
|
+
expect(created.id).toBeDefined();
|
|
30
|
+
expect(created.content).toBe('Nice post!');
|
|
31
|
+
expect(created.postId).toBe(post.id);
|
|
32
|
+
});
|
|
33
|
+
it('should throw if creating a comment with missing required fields', async () => {
|
|
34
|
+
const comment = CommentFactory.build();
|
|
35
|
+
comment.content = null;
|
|
36
|
+
await expect(commentRepository.create(comment)).rejects.toThrow();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('findById()', () => {
|
|
40
|
+
it('should return null when comment does not exist', async () => {
|
|
41
|
+
const result = await commentRepository.findById('00000000-0000-0000-0000-000000000000');
|
|
42
|
+
expect(result).toBeNull();
|
|
43
|
+
});
|
|
44
|
+
it('should return the comment when it exists', async () => {
|
|
45
|
+
const post = PostFactory.build();
|
|
46
|
+
await postRepository.create(post);
|
|
47
|
+
const comment = CommentFactory.build({ postId: post.id });
|
|
48
|
+
await commentRepository.create(comment);
|
|
49
|
+
const found = await commentRepository.findById(comment.id);
|
|
50
|
+
expect(found).toBeDefined();
|
|
51
|
+
expect(found?.id).toBe(comment.id);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('listPaginatedByPostId()', () => {
|
|
55
|
+
it('should return empty list when post has no comments', async () => {
|
|
56
|
+
const result = await commentRepository.listPaginatedByPostId('00000000-0000-0000-0000-000000000000', 1, 10);
|
|
57
|
+
expect(result.data).toHaveLength(0);
|
|
58
|
+
expect(result.total).toBe(0);
|
|
59
|
+
});
|
|
60
|
+
it('should paginate comments correctly', async () => {
|
|
61
|
+
const post = PostFactory.build();
|
|
62
|
+
await postRepository.create(post);
|
|
63
|
+
for (let i = 0; i < 5; i++) {
|
|
64
|
+
await commentRepository.create(CommentFactory.build({ postId: post.id }));
|
|
65
|
+
}
|
|
66
|
+
const page1 = await commentRepository.listPaginatedByPostId(post.id, 1, 2);
|
|
67
|
+
expect(page1.total).toBe(5);
|
|
68
|
+
expect(page1.data).toHaveLength(2);
|
|
69
|
+
const page2 = await commentRepository.listPaginatedByPostId(post.id, 2, 2);
|
|
70
|
+
expect(page2.data).toHaveLength(2);
|
|
71
|
+
const page3 = await commentRepository.listPaginatedByPostId(post.id, 3, 2);
|
|
72
|
+
expect(page3.data).toHaveLength(1);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('delete()', () => {
|
|
76
|
+
it('should return false when deleting non-existent comment', async () => {
|
|
77
|
+
const result = await commentRepository.delete('00000000-0000-0000-0000-000000000000');
|
|
78
|
+
expect(result).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
it('should return true and delete comment when it exists', async () => {
|
|
81
|
+
const post = PostFactory.build();
|
|
82
|
+
await postRepository.create(post);
|
|
83
|
+
const comment = CommentFactory.build({ postId: post.id });
|
|
84
|
+
await commentRepository.create(comment);
|
|
85
|
+
const result = await commentRepository.delete(comment.id);
|
|
86
|
+
expect(result).toBe(true);
|
|
87
|
+
const found = await commentRepository.findById(comment.id);
|
|
88
|
+
expect(found).toBeNull();
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=comment.repository.int.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment.repository.int.spec.js","sourceRoot":"","sources":["../../../src/test/integration/comment.repository.int.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,9 @@ describe('PostgresPostRepository (Integration)', () => {
|
|
|
40
40
|
await repository.create(PostFactory.build({ authorId: '00000000-0000-0000-0000-000000000002' }));
|
|
41
41
|
const result = await repository.findByAuthorId(authorId);
|
|
42
42
|
expect(result).toHaveLength(3);
|
|
43
|
-
result.forEach(p => {
|
|
43
|
+
result.forEach((p) => {
|
|
44
|
+
expect(p.authorId).toBe(authorId);
|
|
45
|
+
});
|
|
44
46
|
});
|
|
45
47
|
it('should return an empty array if author has no posts', async () => {
|
|
46
48
|
const result = await repository.findByAuthorId('00000000-0000-0000-0000-000000000003');
|
|
@@ -53,7 +55,7 @@ describe('PostgresPostRepository (Integration)', () => {
|
|
|
53
55
|
await repository.create(PostFactory.build({ title: 'Post 2' }));
|
|
54
56
|
const result = await repository.findAll();
|
|
55
57
|
expect(result).toHaveLength(2);
|
|
56
|
-
const titles = result.map(p => p.title);
|
|
58
|
+
const titles = result.map((p) => p.title);
|
|
57
59
|
expect(titles).toContain('Post 1');
|
|
58
60
|
expect(titles).toContain('Post 2');
|
|
59
61
|
});
|
|
@@ -68,6 +70,12 @@ describe('PostgresPostRepository (Integration)', () => {
|
|
|
68
70
|
expect(found).toBeDefined();
|
|
69
71
|
expect(found?.title).toBe('Persisted Post');
|
|
70
72
|
});
|
|
73
|
+
it('should throw an error when creating a post with a duplicate title', async () => {
|
|
74
|
+
const post1 = PostFactory.build({ title: 'Unique Title' });
|
|
75
|
+
const post2 = PostFactory.build({ title: 'Unique Title' });
|
|
76
|
+
await repository.create(post1);
|
|
77
|
+
await expect(repository.create(post2)).rejects.toThrow();
|
|
78
|
+
});
|
|
71
79
|
});
|
|
72
80
|
describe('update()', () => {
|
|
73
81
|
it('should update an existing post', async () => {
|
|
@@ -79,7 +87,9 @@ describe('PostgresPostRepository (Integration)', () => {
|
|
|
79
87
|
expect(found?.title).toBe('New Title');
|
|
80
88
|
});
|
|
81
89
|
it('should return null when updating a non-existent post', async () => {
|
|
82
|
-
const result = await repository.update('00000000-0000-0000-0000-000000000000', {
|
|
90
|
+
const result = await repository.update('00000000-0000-0000-0000-000000000000', {
|
|
91
|
+
title: 'New',
|
|
92
|
+
});
|
|
83
93
|
expect(result).toBeNull();
|
|
84
94
|
});
|
|
85
95
|
});
|
|
@@ -103,7 +113,7 @@ describe('PostgresPostRepository (Integration)', () => {
|
|
|
103
113
|
await repository.create(PostFactory.build({ title: 'Goodbye' }));
|
|
104
114
|
const result = await repository.search('hello');
|
|
105
115
|
expect(result).toHaveLength(2);
|
|
106
|
-
const titles = result.map(p => p.title.toUpperCase());
|
|
116
|
+
const titles = result.map((p) => p.title.toUpperCase());
|
|
107
117
|
expect(titles).toContain('HELLO WORLD');
|
|
108
118
|
expect(titles).toContain('HELLO GALAXY');
|
|
109
119
|
});
|
|
@@ -132,5 +142,35 @@ describe('PostgresPostRepository (Integration)', () => {
|
|
|
132
142
|
expect(result).toBe(0);
|
|
133
143
|
});
|
|
134
144
|
});
|
|
145
|
+
describe('listPaginated()', () => {
|
|
146
|
+
it('should paginate posts correctly', async () => {
|
|
147
|
+
for (let i = 0; i < 15; i++) {
|
|
148
|
+
await repository.create(PostFactory.build({ title: `Paginated Post ${String(i)}` }));
|
|
149
|
+
}
|
|
150
|
+
const resultPage1 = await repository.listPaginated(1, 10);
|
|
151
|
+
const resultPage2 = await repository.listPaginated(2, 10);
|
|
152
|
+
expect(resultPage1.data).toHaveLength(10);
|
|
153
|
+
expect(resultPage1.total).toBe(15);
|
|
154
|
+
expect(resultPage1.page).toBe(1);
|
|
155
|
+
expect(resultPage1.limit).toBe(10);
|
|
156
|
+
expect(resultPage1.totalPages).toBe(2);
|
|
157
|
+
expect(resultPage1.hasNextPage).toBe(true);
|
|
158
|
+
expect(resultPage2.data).toHaveLength(5);
|
|
159
|
+
expect(resultPage2.page).toBe(2);
|
|
160
|
+
expect(resultPage2.hasNextPage).toBe(false);
|
|
161
|
+
});
|
|
162
|
+
it('should filter paginated posts by authorId', async () => {
|
|
163
|
+
const authorId = '00000000-0000-0000-0000-000000000088';
|
|
164
|
+
await repository.create(PostFactory.build({ title: 'A', authorId }));
|
|
165
|
+
await repository.create(PostFactory.build({ title: 'B', authorId }));
|
|
166
|
+
await repository.create(PostFactory.build({ title: 'C', authorId: '00000000-0000-0000-0000-000000000099' }));
|
|
167
|
+
const result = await repository.listPaginated(1, 10, authorId);
|
|
168
|
+
expect(result.data).toHaveLength(2);
|
|
169
|
+
expect(result.total).toBe(2);
|
|
170
|
+
result.data.forEach((p) => {
|
|
171
|
+
expect(p.authorId).toBe(authorId);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
});
|
|
135
175
|
});
|
|
136
176
|
//# sourceMappingURL=post.repository.int.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.repository.int.spec.js","sourceRoot":"","sources":["../../../src/test/integration/post.repository.int.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAElG,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAI,UAAkC,CAAC;IAEvC,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,gBAAgB,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACjD,UAAU,GAAG,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAIH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAE1C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YACvD,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAG9B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAGlD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YAEzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;YAGjF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAIH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAE7D,MAAM,QAAQ,GAAG,sCAAsC,CAAC;YACxD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,UAAU,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"post.repository.int.spec.js","sourceRoot":"","sources":["../../../src/test/integration/post.repository.int.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario.int.spec.d.ts","sourceRoot":"","sources":["../../../src/test/integration/scenario.int.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll, beforeEach } from '@jest/globals';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { PostgresPostRepository } from '../../repositories/postgres-post.repository.js';
|
|
4
|
+
import { PostgresCommentRepository } from '../../repositories/postgres-comment.repository.js';
|
|
5
|
+
import { PostService } from '../../services/post.service.js';
|
|
6
|
+
import { CommentService } from '../../services/comment.service.js';
|
|
7
|
+
import { PostModel, CommentModel } from '../../models/index.js';
|
|
8
|
+
import { initializeTestDb, closeTestDb, truncateAll, getTestRepository } from '../data-source.js';
|
|
9
|
+
describe('Domain Post & Comment Scenario (Integration)', () => {
|
|
10
|
+
let postService;
|
|
11
|
+
let commentService;
|
|
12
|
+
let postRepository;
|
|
13
|
+
let commentRepository;
|
|
14
|
+
beforeAll(async () => {
|
|
15
|
+
await initializeTestDb();
|
|
16
|
+
postRepository = new PostgresPostRepository(getTestRepository(PostModel));
|
|
17
|
+
commentRepository = new PostgresCommentRepository(getTestRepository(CommentModel));
|
|
18
|
+
postService = new PostService(postRepository);
|
|
19
|
+
commentService = new CommentService(commentRepository, postRepository);
|
|
20
|
+
});
|
|
21
|
+
afterAll(async () => {
|
|
22
|
+
await closeTestDb();
|
|
23
|
+
});
|
|
24
|
+
beforeEach(async () => {
|
|
25
|
+
await truncateAll();
|
|
26
|
+
});
|
|
27
|
+
it('should execute a complete scenario: create post, retrieve, comment, paginate, and delete', async () => {
|
|
28
|
+
const author1 = randomUUID();
|
|
29
|
+
const author2 = randomUUID();
|
|
30
|
+
const postPayload = {
|
|
31
|
+
authorId: author1,
|
|
32
|
+
title: 'Mon Super Scenario Post',
|
|
33
|
+
content: 'Contenu du super post',
|
|
34
|
+
};
|
|
35
|
+
const createdPost = await postService.create(postPayload);
|
|
36
|
+
expect(createdPost.id).toBeDefined();
|
|
37
|
+
expect(createdPost.title).toBe('Mon Super Scenario Post');
|
|
38
|
+
const paginatedPosts = await postService.listPosts(1, 10);
|
|
39
|
+
expect(paginatedPosts.total).toBe(1);
|
|
40
|
+
expect(paginatedPosts.data[0].id).toBe(createdPost.id);
|
|
41
|
+
const comment1 = await commentService.create({
|
|
42
|
+
postId: createdPost.id,
|
|
43
|
+
authorId: author2,
|
|
44
|
+
content: 'Super article !',
|
|
45
|
+
});
|
|
46
|
+
expect(comment1.id).toBeDefined();
|
|
47
|
+
expect(comment1.content).toBe('Super article !');
|
|
48
|
+
const comment2 = await commentService.create({
|
|
49
|
+
postId: createdPost.id,
|
|
50
|
+
authorId: author1,
|
|
51
|
+
content: 'Merci beaucoup !',
|
|
52
|
+
});
|
|
53
|
+
expect(comment2.id).toBeDefined();
|
|
54
|
+
const comment3 = await commentService.create({
|
|
55
|
+
postId: createdPost.id,
|
|
56
|
+
authorId: author2,
|
|
57
|
+
content: "Tu comptes en écrire d'autres ?",
|
|
58
|
+
});
|
|
59
|
+
expect(comment3.id).toBeDefined();
|
|
60
|
+
const commentsPage1 = await commentService.listPaginatedByPostId(createdPost.id, 1, 2);
|
|
61
|
+
expect(commentsPage1.total).toBe(3);
|
|
62
|
+
expect(commentsPage1.data).toHaveLength(2);
|
|
63
|
+
const commentsPage2 = await commentService.listPaginatedByPostId(createdPost.id, 2, 2);
|
|
64
|
+
expect(commentsPage2.total).toBe(3);
|
|
65
|
+
expect(commentsPage2.data).toHaveLength(1);
|
|
66
|
+
const fakePostId = randomUUID();
|
|
67
|
+
await expect(commentService.create({
|
|
68
|
+
postId: fakePostId,
|
|
69
|
+
authorId: author2,
|
|
70
|
+
content: 'This should fail',
|
|
71
|
+
})).rejects.toThrow(/not found/i);
|
|
72
|
+
const deleteResult = await commentService.delete(comment2.id);
|
|
73
|
+
expect(deleteResult).toBe(true);
|
|
74
|
+
const deletedComment = await commentService.findById(comment2.id);
|
|
75
|
+
expect(deletedComment).toBeNull();
|
|
76
|
+
const updatedComments = await commentService.listPaginatedByPostId(createdPost.id, 1, 10);
|
|
77
|
+
expect(updatedComments.total).toBe(2);
|
|
78
|
+
await postService.delete(createdPost.id);
|
|
79
|
+
await expect(postService.findById(createdPost.id)).rejects.toThrow(/not found/i);
|
|
80
|
+
});
|
|
81
|
+
it('should test intensive pagination with many comments on a single post', async () => {
|
|
82
|
+
const author1 = randomUUID();
|
|
83
|
+
const commenter = randomUUID();
|
|
84
|
+
const postPayload = {
|
|
85
|
+
authorId: author1,
|
|
86
|
+
title: 'Post avec plein de commentaires',
|
|
87
|
+
content: 'Test intensif',
|
|
88
|
+
};
|
|
89
|
+
const createdPost = await postService.create(postPayload);
|
|
90
|
+
const createPromises = [];
|
|
91
|
+
for (let i = 0; i < 55; i++) {
|
|
92
|
+
createPromises.push(commentService.create({
|
|
93
|
+
postId: createdPost.id,
|
|
94
|
+
authorId: commenter,
|
|
95
|
+
content: `Comment numéro ${String(i + 1)}`,
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
await Promise.all(createPromises);
|
|
99
|
+
const page1 = await commentService.listPaginatedByPostId(createdPost.id, 1, 10);
|
|
100
|
+
expect(page1.total).toBe(55);
|
|
101
|
+
expect(page1.data).toHaveLength(10);
|
|
102
|
+
const page3 = await commentService.listPaginatedByPostId(createdPost.id, 3, 15);
|
|
103
|
+
expect(page3.total).toBe(55);
|
|
104
|
+
expect(page3.data).toHaveLength(15);
|
|
105
|
+
const page6 = await commentService.listPaginatedByPostId(createdPost.id, 6, 10);
|
|
106
|
+
expect(page6.total).toBe(55);
|
|
107
|
+
expect(page6.data).toHaveLength(5);
|
|
108
|
+
const page10 = await commentService.listPaginatedByPostId(createdPost.id, 10, 10);
|
|
109
|
+
expect(page10.total).toBe(55);
|
|
110
|
+
expect(page10.data).toHaveLength(0);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=scenario.int.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario.int.spec.js","sourceRoot":"","sources":["../../../src/test/integration/scenario.int.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class AddUniqueConstraintToPostTitle1776000000001 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=1776000000001-AddUniqueConstraintToPostTitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1776000000001-AddUniqueConstraintToPostTitle.d.ts","sourceRoot":"","sources":["../../../src/test/migrations/1776000000001-AddUniqueConstraintToPostTitle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,2CAA4C,YAAW,kBAAkB;IACpF,IAAI,SAAiD;IAExC,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export class AddUniqueConstraintToPostTitle1776000000001 {
|
|
2
|
+
name = 'AddUniqueConstraintToPostTitle1776000000001';
|
|
3
|
+
async up(queryRunner) {
|
|
4
|
+
await queryRunner.query(`ALTER TABLE "posts" ADD CONSTRAINT "UQ_posts_title" UNIQUE ("title")`);
|
|
5
|
+
}
|
|
6
|
+
async down(queryRunner) {
|
|
7
|
+
await queryRunner.query(`ALTER TABLE "posts" DROP CONSTRAINT "UQ_posts_title"`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=1776000000001-AddUniqueConstraintToPostTitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1776000000001-AddUniqueConstraintToPostTitle.js","sourceRoot":"","sources":["../../../src/test/migrations/1776000000001-AddUniqueConstraintToPostTitle.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,2CAA2C;IACtD,IAAI,GAAG,6CAA6C,CAAC;IAE9C,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAClG,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAClF,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class InitialCommentSchema1780000000000 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=1780000000000-InitialCommentSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1780000000000-InitialCommentSchema.d.ts","sourceRoot":"","sources":["../../../src/test/migrations/1780000000000-InitialCommentSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,iCAAkC,YAAW,kBAAkB;IAC1E,IAAI,SAAuC;IAE9B,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class InitialCommentSchema1780000000000 {
|
|
2
|
+
name = 'InitialCommentSchema1780000000000';
|
|
3
|
+
async up(queryRunner) {
|
|
4
|
+
await queryRunner.query(`CREATE TABLE "comments" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "postId" uuid NOT NULL, "authorId" uuid NOT NULL, "content" character varying(1000) NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "PK_comments_id" PRIMARY KEY ("id"))`);
|
|
5
|
+
await queryRunner.query(`CREATE INDEX "IDX_comments_postId" ON "comments" ("postId")`);
|
|
6
|
+
await queryRunner.query(`CREATE INDEX "IDX_comments_authorId" ON "comments" ("authorId")`);
|
|
7
|
+
}
|
|
8
|
+
async down(queryRunner) {
|
|
9
|
+
await queryRunner.query(`DROP INDEX "public"."IDX_comments_authorId"`);
|
|
10
|
+
await queryRunner.query(`DROP INDEX "public"."IDX_comments_postId"`);
|
|
11
|
+
await queryRunner.query(`DROP TABLE "comments"`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=1780000000000-InitialCommentSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1780000000000-InitialCommentSchema.js","sourceRoot":"","sources":["../../../src/test/migrations/1780000000000-InitialCommentSchema.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iCAAiC;IAC5C,IAAI,GAAG,mCAAmC,CAAC;IAEpC,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CACrB,mTAAmT,CACpT,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACvF,MAAM,WAAW,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAC7F,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACvE,MAAM,WAAW,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACrE,MAAM,WAAW,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACnD,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volontariapp/domain-post",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"provenance": true
|
|
@@ -54,12 +54,12 @@
|
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@nestjs/common": "^11.0.1",
|
|
57
|
-
"@volontariapp/contracts": "4.
|
|
58
|
-
"@volontariapp/database": "3.3.
|
|
57
|
+
"@volontariapp/contracts": "4.2.0",
|
|
58
|
+
"@volontariapp/database": "3.3.4",
|
|
59
59
|
"@volontariapp/errors": "0.6.0",
|
|
60
60
|
"@volontariapp/errors-nest": "0.13.0",
|
|
61
61
|
"@volontariapp/logger": "0.2.5",
|
|
62
|
-
"@volontariapp/messaging": "2.7.
|
|
62
|
+
"@volontariapp/messaging": "2.7.3",
|
|
63
63
|
"class-transformer": "^0.5.1"
|
|
64
64
|
}
|
|
65
65
|
}
|