@s-hirano-ist/s-core 0.0.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/LICENSE +661 -0
- package/README.md +124 -0
- package/dist/articles/entities/article-entity.d.ts +75 -0
- package/dist/articles/entities/article-entity.d.ts.map +1 -0
- package/dist/articles/entities/article-entity.js +84 -0
- package/dist/articles/entities/article-entity.js.map +1 -0
- package/dist/articles/events/article-created-event.d.ts +12 -0
- package/dist/articles/events/article-created-event.d.ts.map +1 -0
- package/dist/articles/events/article-created-event.js +15 -0
- package/dist/articles/events/article-created-event.js.map +1 -0
- package/dist/articles/events/article-deleted-event.d.ts +9 -0
- package/dist/articles/events/article-deleted-event.d.ts.map +1 -0
- package/dist/articles/events/article-deleted-event.js +12 -0
- package/dist/articles/events/article-deleted-event.js.map +1 -0
- package/dist/articles/events/article-updated-event.d.ts +12 -0
- package/dist/articles/events/article-updated-event.d.ts.map +1 -0
- package/dist/articles/events/article-updated-event.js +15 -0
- package/dist/articles/events/article-updated-event.js.map +1 -0
- package/dist/articles/index.d.ts +12 -0
- package/dist/articles/index.d.ts.map +1 -0
- package/dist/articles/index.js +17 -0
- package/dist/articles/index.js.map +1 -0
- package/dist/articles/repositories/articles-command-repository.interface.d.ts +8 -0
- package/dist/articles/repositories/articles-command-repository.interface.d.ts.map +1 -0
- package/dist/articles/repositories/articles-command-repository.interface.js +2 -0
- package/dist/articles/repositories/articles-command-repository.interface.js.map +1 -0
- package/dist/articles/repositories/articles-query-repository.interface.d.ts +44 -0
- package/dist/articles/repositories/articles-query-repository.interface.d.ts.map +1 -0
- package/dist/articles/repositories/articles-query-repository.interface.js +2 -0
- package/dist/articles/repositories/articles-query-repository.interface.js.map +1 -0
- package/dist/articles/repositories/category-query-repository.interface.d.ts +9 -0
- package/dist/articles/repositories/category-query-repository.interface.d.ts.map +1 -0
- package/dist/articles/repositories/category-query-repository.interface.js +2 -0
- package/dist/articles/repositories/category-query-repository.interface.js.map +1 -0
- package/dist/articles/services/articles-domain-service.d.ts +18 -0
- package/dist/articles/services/articles-domain-service.d.ts.map +1 -0
- package/dist/articles/services/articles-domain-service.js +58 -0
- package/dist/articles/services/articles-domain-service.js.map +1 -0
- package/dist/articles/types/cache-strategy.d.ts +6 -0
- package/dist/articles/types/cache-strategy.d.ts.map +1 -0
- package/dist/articles/types/cache-strategy.js +2 -0
- package/dist/articles/types/cache-strategy.js.map +1 -0
- package/dist/articles/types/query-params.d.ts +23 -0
- package/dist/articles/types/query-params.d.ts.map +1 -0
- package/dist/articles/types/query-params.js +2 -0
- package/dist/articles/types/query-params.js.map +1 -0
- package/dist/articles/types/sort-order.d.ts +2 -0
- package/dist/articles/types/sort-order.d.ts.map +1 -0
- package/dist/articles/types/sort-order.js +2 -0
- package/dist/articles/types/sort-order.js.map +1 -0
- package/dist/books/entities/books-entity.d.ts +84 -0
- package/dist/books/entities/books-entity.d.ts.map +1 -0
- package/dist/books/entities/books-entity.js +71 -0
- package/dist/books/entities/books-entity.js.map +1 -0
- package/dist/books/events/book-created-event.d.ts +10 -0
- package/dist/books/events/book-created-event.d.ts.map +1 -0
- package/dist/books/events/book-created-event.js +13 -0
- package/dist/books/events/book-created-event.js.map +1 -0
- package/dist/books/events/book-deleted-event.d.ts +9 -0
- package/dist/books/events/book-deleted-event.d.ts.map +1 -0
- package/dist/books/events/book-deleted-event.js +12 -0
- package/dist/books/events/book-deleted-event.js.map +1 -0
- package/dist/books/events/book-updated-event.d.ts +10 -0
- package/dist/books/events/book-updated-event.d.ts.map +1 -0
- package/dist/books/events/book-updated-event.js +13 -0
- package/dist/books/events/book-updated-event.js.map +1 -0
- package/dist/books/index.d.ts +11 -0
- package/dist/books/index.d.ts.map +1 -0
- package/dist/books/index.js +16 -0
- package/dist/books/index.js.map +1 -0
- package/dist/books/repositories/books-command-repository.interface.d.ts +9 -0
- package/dist/books/repositories/books-command-repository.interface.d.ts.map +1 -0
- package/dist/books/repositories/books-command-repository.interface.js +2 -0
- package/dist/books/repositories/books-command-repository.interface.js.map +1 -0
- package/dist/books/repositories/books-query-repository.interface.d.ts +54 -0
- package/dist/books/repositories/books-query-repository.interface.d.ts.map +1 -0
- package/dist/books/repositories/books-query-repository.interface.js +2 -0
- package/dist/books/repositories/books-query-repository.interface.js.map +1 -0
- package/dist/books/services/books-domain-service.d.ts +18 -0
- package/dist/books/services/books-domain-service.d.ts.map +1 -0
- package/dist/books/services/books-domain-service.js +57 -0
- package/dist/books/services/books-domain-service.js.map +1 -0
- package/dist/books/types/cache-strategy.d.ts +6 -0
- package/dist/books/types/cache-strategy.d.ts.map +1 -0
- package/dist/books/types/cache-strategy.js +2 -0
- package/dist/books/types/cache-strategy.js.map +1 -0
- package/dist/books/types/query-params.d.ts +14 -0
- package/dist/books/types/query-params.d.ts.map +1 -0
- package/dist/books/types/query-params.js +2 -0
- package/dist/books/types/query-params.js.map +1 -0
- package/dist/books/types/sort-order.d.ts +2 -0
- package/dist/books/types/sort-order.d.ts.map +1 -0
- package/dist/books/types/sort-order.js +2 -0
- package/dist/books/types/sort-order.js.map +1 -0
- package/dist/common/entities/common-entity.d.ts +25 -0
- package/dist/common/entities/common-entity.d.ts.map +1 -0
- package/dist/common/entities/common-entity.js +38 -0
- package/dist/common/entities/common-entity.js.map +1 -0
- package/dist/common/events/base-domain-event.d.ts +15 -0
- package/dist/common/events/base-domain-event.d.ts.map +1 -0
- package/dist/common/events/base-domain-event.js +14 -0
- package/dist/common/events/base-domain-event.js.map +1 -0
- package/dist/common/events/domain-event.interface.d.ts +13 -0
- package/dist/common/events/domain-event.interface.d.ts.map +1 -0
- package/dist/common/events/domain-event.interface.js +2 -0
- package/dist/common/events/domain-event.interface.js.map +1 -0
- package/dist/common/events/system-error-event.d.ts +12 -0
- package/dist/common/events/system-error-event.d.ts.map +1 -0
- package/dist/common/events/system-error-event.js +15 -0
- package/dist/common/events/system-error-event.js.map +1 -0
- package/dist/common/events/system-warning-event.d.ts +12 -0
- package/dist/common/events/system-warning-event.d.ts.map +1 -0
- package/dist/common/events/system-warning-event.js +15 -0
- package/dist/common/events/system-warning-event.js.map +1 -0
- package/dist/common/index.d.ts +9 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +13 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/services/entity-factory.d.ts +2 -0
- package/dist/common/services/entity-factory.d.ts.map +1 -0
- package/dist/common/services/entity-factory.js +13 -0
- package/dist/common/services/entity-factory.js.map +1 -0
- package/dist/common/services/id-generator.d.ts +5 -0
- package/dist/common/services/id-generator.d.ts.map +1 -0
- package/dist/common/services/id-generator.js +4 -0
- package/dist/common/services/id-generator.js.map +1 -0
- package/dist/common/types/search-types.d.ts +31 -0
- package/dist/common/types/search-types.d.ts.map +1 -0
- package/dist/common/types/search-types.js +2 -0
- package/dist/common/types/search-types.js.map +1 -0
- package/dist/errors/error-classes.d.ts +16 -0
- package/dist/errors/error-classes.d.ts.map +1 -0
- package/dist/errors/error-classes.js +31 -0
- package/dist/errors/error-classes.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/images/entities/image-entity.d.ts +98 -0
- package/dist/images/entities/image-entity.d.ts.map +1 -0
- package/dist/images/entities/image-entity.js +90 -0
- package/dist/images/entities/image-entity.js.map +1 -0
- package/dist/images/events/image-created-event.d.ts +9 -0
- package/dist/images/events/image-created-event.d.ts.map +1 -0
- package/dist/images/events/image-created-event.js +12 -0
- package/dist/images/events/image-created-event.js.map +1 -0
- package/dist/images/events/image-deleted-event.d.ts +9 -0
- package/dist/images/events/image-deleted-event.d.ts.map +1 -0
- package/dist/images/events/image-deleted-event.js +12 -0
- package/dist/images/events/image-deleted-event.js.map +1 -0
- package/dist/images/events/image-updated-event.d.ts +10 -0
- package/dist/images/events/image-updated-event.d.ts.map +1 -0
- package/dist/images/events/image-updated-event.js +13 -0
- package/dist/images/events/image-updated-event.js.map +1 -0
- package/dist/images/index.d.ts +11 -0
- package/dist/images/index.d.ts.map +1 -0
- package/dist/images/index.js +16 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/repositories/images-command-repository.interface.d.ts +9 -0
- package/dist/images/repositories/images-command-repository.interface.d.ts.map +1 -0
- package/dist/images/repositories/images-command-repository.interface.js +2 -0
- package/dist/images/repositories/images-command-repository.interface.js.map +1 -0
- package/dist/images/repositories/images-query-repository.interface.d.ts +26 -0
- package/dist/images/repositories/images-query-repository.interface.d.ts.map +1 -0
- package/dist/images/repositories/images-query-repository.interface.js +2 -0
- package/dist/images/repositories/images-query-repository.interface.js.map +1 -0
- package/dist/images/services/images-domain-service.d.ts +17 -0
- package/dist/images/services/images-domain-service.d.ts.map +1 -0
- package/dist/images/services/images-domain-service.js +42 -0
- package/dist/images/services/images-domain-service.js.map +1 -0
- package/dist/images/types/cache-strategy.d.ts +6 -0
- package/dist/images/types/cache-strategy.d.ts.map +1 -0
- package/dist/images/types/cache-strategy.js +2 -0
- package/dist/images/types/cache-strategy.js.map +1 -0
- package/dist/images/types/query-params.d.ts +14 -0
- package/dist/images/types/query-params.d.ts.map +1 -0
- package/dist/images/types/query-params.js +2 -0
- package/dist/images/types/query-params.js.map +1 -0
- package/dist/images/types/sort-order.d.ts +2 -0
- package/dist/images/types/sort-order.d.ts.map +1 -0
- package/dist/images/types/sort-order.js +2 -0
- package/dist/images/types/sort-order.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/notes/entities/note-entity.d.ts +43 -0
- package/dist/notes/entities/note-entity.d.ts.map +1 -0
- package/dist/notes/entities/note-entity.js +48 -0
- package/dist/notes/entities/note-entity.js.map +1 -0
- package/dist/notes/events/note-created-event.d.ts +10 -0
- package/dist/notes/events/note-created-event.d.ts.map +1 -0
- package/dist/notes/events/note-created-event.js +13 -0
- package/dist/notes/events/note-created-event.js.map +1 -0
- package/dist/notes/events/note-deleted-event.d.ts +9 -0
- package/dist/notes/events/note-deleted-event.d.ts.map +1 -0
- package/dist/notes/events/note-deleted-event.js +12 -0
- package/dist/notes/events/note-deleted-event.js.map +1 -0
- package/dist/notes/events/note-updated-event.d.ts +10 -0
- package/dist/notes/events/note-updated-event.d.ts.map +1 -0
- package/dist/notes/events/note-updated-event.js +13 -0
- package/dist/notes/events/note-updated-event.js.map +1 -0
- package/dist/notes/index.d.ts +11 -0
- package/dist/notes/index.d.ts.map +1 -0
- package/dist/notes/index.js +16 -0
- package/dist/notes/index.js.map +1 -0
- package/dist/notes/repositories/notes-command-repository.interface.d.ts +8 -0
- package/dist/notes/repositories/notes-command-repository.interface.d.ts.map +1 -0
- package/dist/notes/repositories/notes-command-repository.interface.js +2 -0
- package/dist/notes/repositories/notes-command-repository.interface.js.map +1 -0
- package/dist/notes/repositories/notes-query-repository.interface.d.ts +22 -0
- package/dist/notes/repositories/notes-query-repository.interface.d.ts.map +1 -0
- package/dist/notes/repositories/notes-query-repository.interface.js +2 -0
- package/dist/notes/repositories/notes-query-repository.interface.js.map +1 -0
- package/dist/notes/services/notes-domain-service.d.ts +15 -0
- package/dist/notes/services/notes-domain-service.d.ts.map +1 -0
- package/dist/notes/services/notes-domain-service.js +42 -0
- package/dist/notes/services/notes-domain-service.js.map +1 -0
- package/dist/notes/types/cache-strategy.d.ts +6 -0
- package/dist/notes/types/cache-strategy.d.ts.map +1 -0
- package/dist/notes/types/cache-strategy.js +2 -0
- package/dist/notes/types/cache-strategy.js.map +1 -0
- package/dist/notes/types/query-params.d.ts +14 -0
- package/dist/notes/types/query-params.d.ts.map +1 -0
- package/dist/notes/types/query-params.js +2 -0
- package/dist/notes/types/query-params.js.map +1 -0
- package/dist/notes/types/sort-order.d.ts +2 -0
- package/dist/notes/types/sort-order.d.ts.map +1 -0
- package/dist/notes/types/sort-order.js +2 -0
- package/dist/notes/types/sort-order.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +70 -0
package/README.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# @s-hirano-ist/s-core
|
|
2
|
+
|
|
3
|
+
Domain layer for s-private application, following Clean Architecture and Domain-Driven Design principles.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This package contains the core domain logic for the s-private content management system, including:
|
|
8
|
+
|
|
9
|
+
- **Domain Entities**: Core business objects with their invariants
|
|
10
|
+
- **Repository Interfaces**: Abstraction for data access (dependency inversion)
|
|
11
|
+
- **Domain Services**: Complex business logic that doesn't belong to a single entity
|
|
12
|
+
- **Domain Events**: Events emitted during domain operations
|
|
13
|
+
- **Value Objects & Types**: Domain-specific types and constants
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @s-hirano-ist/s-core
|
|
19
|
+
# or
|
|
20
|
+
pnpm add @s-hirano-ist/s-core
|
|
21
|
+
# or
|
|
22
|
+
yarn add @s-hirano-ist/s-core
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
### Import all domains (with namespaces)
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { Articles, Books, Notes, Images, Common, Errors } from "@s-hirano-ist/s-core";
|
|
31
|
+
|
|
32
|
+
// Usage
|
|
33
|
+
const article = new Articles.ArticleEntity(...);
|
|
34
|
+
const book = new Books.BooksEntity(...);
|
|
35
|
+
const note = new Notes.NoteEntity(...);
|
|
36
|
+
const image = new Images.ImageEntity(...);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Import specific domain (recommended)
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// Articles domain
|
|
43
|
+
import { ArticleEntity, ArticlesDomainService } from "@s-hirano-ist/s-core/articles";
|
|
44
|
+
|
|
45
|
+
// Books domain
|
|
46
|
+
import { BooksEntity, BooksDomainService } from "@s-hirano-ist/s-core/books";
|
|
47
|
+
|
|
48
|
+
// Notes domain
|
|
49
|
+
import { NoteEntity, NotesDomainService } from "@s-hirano-ist/s-core/notes";
|
|
50
|
+
|
|
51
|
+
// Images domain
|
|
52
|
+
import { ImageEntity, ImagesDomainService } from "@s-hirano-ist/s-core/images";
|
|
53
|
+
|
|
54
|
+
// Common utilities
|
|
55
|
+
import { CommonEntity, IdGenerator } from "@s-hirano-ist/s-core/common";
|
|
56
|
+
|
|
57
|
+
// Error classes
|
|
58
|
+
import { DomainError } from "@s-hirano-ist/s-core/errors";
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Importing specific exports from domain
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
// Direct import from domain module
|
|
65
|
+
import * as Articles from "@s-hirano-ist/s-core/articles";
|
|
66
|
+
|
|
67
|
+
// Use the exports
|
|
68
|
+
const service = new Articles.ArticlesDomainService();
|
|
69
|
+
const entity = new Articles.ArticleEntity(...);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Package Structure
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
@s-hirano-ist/s-core/
|
|
76
|
+
├── articles/ # Article domain (news/link management)
|
|
77
|
+
├── books/ # Book domain (ISBN-based tracking)
|
|
78
|
+
├── common/ # Shared domain utilities
|
|
79
|
+
├── errors/ # Domain error classes
|
|
80
|
+
├── images/ # Image domain (file metadata)
|
|
81
|
+
└── notes/ # Note domain (markdown content)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Each domain module contains:
|
|
85
|
+
- `entities/` - Domain entities
|
|
86
|
+
- `events/` - Domain events
|
|
87
|
+
- `repositories/` - Repository interfaces
|
|
88
|
+
- `services/` - Domain services
|
|
89
|
+
- `types/` - Domain-specific types
|
|
90
|
+
|
|
91
|
+
## Architecture
|
|
92
|
+
|
|
93
|
+
This package follows Clean Architecture principles:
|
|
94
|
+
|
|
95
|
+
- **Dependency Inversion**: Repository interfaces defined in domain, implementations elsewhere
|
|
96
|
+
- **Domain Independence**: No dependencies on frameworks or infrastructure
|
|
97
|
+
- **Business Logic Isolation**: Pure TypeScript domain logic
|
|
98
|
+
|
|
99
|
+
## Dependencies
|
|
100
|
+
|
|
101
|
+
- `zod` - Runtime validation
|
|
102
|
+
- `uuid` - ID generation
|
|
103
|
+
- `sharp` - Image processing types
|
|
104
|
+
|
|
105
|
+
## Development
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Build the package
|
|
109
|
+
pnpm build
|
|
110
|
+
|
|
111
|
+
# Clean build artifacts
|
|
112
|
+
pnpm clean
|
|
113
|
+
|
|
114
|
+
# Run tests (from workspace root)
|
|
115
|
+
pnpm test:domains
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## License
|
|
119
|
+
|
|
120
|
+
AGPL-3.0
|
|
121
|
+
|
|
122
|
+
## Repository
|
|
123
|
+
|
|
124
|
+
https://github.com/s-hirano-ist/s-private
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { UserId } from "../../common/entities/common-entity";
|
|
3
|
+
declare const CategoryName: z.core.$ZodBranded<z.ZodString, "CategoryName">;
|
|
4
|
+
export type CategoryName = z.infer<typeof CategoryName>;
|
|
5
|
+
export declare const makeCategoryName: (v: string) => CategoryName;
|
|
6
|
+
declare const ArticleTitle: z.core.$ZodBranded<z.ZodString, "ArticleTitle">;
|
|
7
|
+
export type ArticleTitle = z.infer<typeof ArticleTitle>;
|
|
8
|
+
export declare const makeArticleTitle: (v: string) => ArticleTitle;
|
|
9
|
+
declare const Quote: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "Quote">;
|
|
10
|
+
export type Quote = z.infer<typeof Quote>;
|
|
11
|
+
export declare const makeQuote: (v: string | null | undefined) => Quote;
|
|
12
|
+
declare const Url: z.core.$ZodBranded<z.ZodURL, "Url">;
|
|
13
|
+
export type Url = z.infer<typeof Url>;
|
|
14
|
+
export declare const makeUrl: (v: string) => Url;
|
|
15
|
+
declare const OgTitle: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgTitle">;
|
|
16
|
+
export type OgTitle = z.infer<typeof OgTitle>;
|
|
17
|
+
export declare const makeOgTitle: (v: string | null | undefined) => OgTitle;
|
|
18
|
+
declare const OgDescription: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgDescription">;
|
|
19
|
+
export type OgDescription = z.infer<typeof OgDescription>;
|
|
20
|
+
export declare const makeOgDescription: (v: string | null | undefined) => OgDescription;
|
|
21
|
+
declare const OgImageUrl: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgImageUrl">;
|
|
22
|
+
export type OgImageUrl = z.infer<typeof OgImageUrl>;
|
|
23
|
+
export declare const makeOgImageUrl: (v: string | null | undefined) => OgImageUrl;
|
|
24
|
+
export declare const UnexportedArticle: z.ZodObject<{
|
|
25
|
+
id: z.core.$ZodBranded<z.ZodDefault<z.ZodUUID>, "Id">;
|
|
26
|
+
userId: z.core.$ZodBranded<z.ZodString, "UserId">;
|
|
27
|
+
categoryName: z.core.$ZodBranded<z.ZodString, "CategoryName">;
|
|
28
|
+
categoryId: z.core.$ZodBranded<z.ZodDefault<z.ZodUUID>, "Id">;
|
|
29
|
+
title: z.core.$ZodBranded<z.ZodString, "ArticleTitle">;
|
|
30
|
+
quote: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "Quote">;
|
|
31
|
+
url: z.core.$ZodBranded<z.ZodURL, "Url">;
|
|
32
|
+
createdAt: z.core.$ZodBranded<z.ZodDate, "CreatedAt">;
|
|
33
|
+
ogTitle: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgTitle">;
|
|
34
|
+
ogDescription: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgDescription">;
|
|
35
|
+
ogImageUrl: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgImageUrl">;
|
|
36
|
+
status: z.ZodLiteral<"UNEXPORTED">;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export type UnexportedArticle = Readonly<z.infer<typeof UnexportedArticle>>;
|
|
39
|
+
declare const ExportedArticle: z.ZodObject<{
|
|
40
|
+
id: z.core.$ZodBranded<z.ZodDefault<z.ZodUUID>, "Id">;
|
|
41
|
+
userId: z.core.$ZodBranded<z.ZodString, "UserId">;
|
|
42
|
+
categoryName: z.core.$ZodBranded<z.ZodString, "CategoryName">;
|
|
43
|
+
categoryId: z.core.$ZodBranded<z.ZodDefault<z.ZodUUID>, "Id">;
|
|
44
|
+
title: z.core.$ZodBranded<z.ZodString, "ArticleTitle">;
|
|
45
|
+
quote: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "Quote">;
|
|
46
|
+
url: z.core.$ZodBranded<z.ZodURL, "Url">;
|
|
47
|
+
createdAt: z.core.$ZodBranded<z.ZodDate, "CreatedAt">;
|
|
48
|
+
ogTitle: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgTitle">;
|
|
49
|
+
ogDescription: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgDescription">;
|
|
50
|
+
ogImageUrl: z.core.$ZodBranded<z.ZodOptional<z.ZodNullable<z.ZodString>>, "OgImageUrl">;
|
|
51
|
+
status: z.ZodLiteral<"EXPORTED">;
|
|
52
|
+
exportedAt: z.core.$ZodBranded<z.ZodDate, "ExportedAt">;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
type ExportedArticle = Readonly<z.infer<typeof ExportedArticle>>;
|
|
55
|
+
type CreateArticleArgs = Readonly<{
|
|
56
|
+
userId: UserId;
|
|
57
|
+
categoryName: CategoryName;
|
|
58
|
+
title: ArticleTitle;
|
|
59
|
+
quote?: Quote;
|
|
60
|
+
url: Url;
|
|
61
|
+
}>;
|
|
62
|
+
type UpdateArticleArgs = Readonly<{
|
|
63
|
+
title: ArticleTitle;
|
|
64
|
+
quote: Quote;
|
|
65
|
+
ogTitle: OgTitle;
|
|
66
|
+
ogDescription: OgDescription;
|
|
67
|
+
ogImageUrl: OgImageUrl;
|
|
68
|
+
}>;
|
|
69
|
+
export declare const articleEntity: {
|
|
70
|
+
create: (args: CreateArticleArgs) => UnexportedArticle;
|
|
71
|
+
update: (article: UnexportedArticle, args: UpdateArticleArgs) => UnexportedArticle;
|
|
72
|
+
export: (article: UnexportedArticle) => ExportedArticle;
|
|
73
|
+
};
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=article-entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-entity.d.ts","sourceRoot":"","sources":["../../../articles/entities/article-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAQN,MAAM,EACN,MAAM,qCAAqC,CAAC;AAK7C,QAAA,MAAM,YAAY,iDAKO,CAAC;AAC1B,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,KAAG,YACvB,CAAC;AAEvB,QAAA,MAAM,YAAY,iDAIO,CAAC;AAC1B,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,KAAG,YACvB,CAAC;AAEvB,QAAA,MAAM,KAAK,wEAKO,CAAC;AACnB,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;AAC1C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,KAC1C,CAAC;AAEhB,QAAA,MAAM,GAAG,qCAgBO,CAAC;AACjB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;AACtC,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,KAAG,GAAmB,CAAC;AAExD,QAAA,MAAM,OAAO,0EAAsD,CAAC;AACpE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAC9C,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OAC1C,CAAC;AAElB,QAAA,MAAM,aAAa,gFAA4D,CAAC;AAChF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAO,MAAM,iBAAiB,GAC7B,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KAC1B,aAAuC,CAAC;AAE3C,QAAA,MAAM,UAAU,6EAAyD,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AACpD,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,UAC1C,CAAC;AAkBrB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;iBAA4C,CAAC;AAC3E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAE5E,QAAA,MAAM,eAAe;;;;;;;;;;;;;;iBAAoC,CAAC;AAC1D,KAAK,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC;AAEjE,KAAK,iBAAiB,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;CACT,CAAC,CAAC;AAEH,KAAK,iBAAiB,GAAG,QAAQ,CAAC;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC,CAAC;AAEH,eAAO,MAAM,aAAa;mBACV,iBAAiB,KAAG,iBAAiB;sBAY1C,iBAAiB,QACpB,iBAAiB,KACrB,iBAAiB;sBAKF,iBAAiB,KAAG,eAAe;CASrD,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { CreatedAt, ExportedStatus, Id, makeCreatedAt, makeExportedStatus, makeId, UnexportedStatus, UserId, } from "../../common/entities/common-entity";
|
|
3
|
+
import { createEntityWithErrorHandling } from "../../common/services/entity-factory";
|
|
4
|
+
// Value objects
|
|
5
|
+
const CategoryName = z
|
|
6
|
+
.string({ message: "required" })
|
|
7
|
+
.trim()
|
|
8
|
+
.min(1, { message: "required" })
|
|
9
|
+
.max(16, { message: "tooLong" })
|
|
10
|
+
.brand();
|
|
11
|
+
export const makeCategoryName = (v) => CategoryName.parse(v);
|
|
12
|
+
const ArticleTitle = z
|
|
13
|
+
.string({ message: "required" })
|
|
14
|
+
.min(1, { message: "required" })
|
|
15
|
+
.max(128, { message: "tooLong" })
|
|
16
|
+
.brand();
|
|
17
|
+
export const makeArticleTitle = (v) => ArticleTitle.parse(v);
|
|
18
|
+
const Quote = z
|
|
19
|
+
.string()
|
|
20
|
+
.max(512, { message: "tooLong" })
|
|
21
|
+
.nullable()
|
|
22
|
+
.optional()
|
|
23
|
+
.brand();
|
|
24
|
+
export const makeQuote = (v) => Quote.parse(v);
|
|
25
|
+
const Url = z
|
|
26
|
+
.url({ message: "invalidFormat" })
|
|
27
|
+
.min(1, { message: "required" })
|
|
28
|
+
.refine((url) => {
|
|
29
|
+
try {
|
|
30
|
+
const urlObject = new URL(url);
|
|
31
|
+
return (urlObject.protocol === "http:" || urlObject.protocol === "https:");
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}, { message: "invalidFormat" })
|
|
37
|
+
.brand();
|
|
38
|
+
export const makeUrl = (v) => Url.parse(v);
|
|
39
|
+
const OgTitle = z.string().nullable().optional().brand();
|
|
40
|
+
export const makeOgTitle = (v) => OgTitle.parse(v);
|
|
41
|
+
const OgDescription = z.string().nullable().optional().brand();
|
|
42
|
+
export const makeOgDescription = (v) => OgDescription.parse(v);
|
|
43
|
+
const OgImageUrl = z.string().nullable().optional().brand();
|
|
44
|
+
export const makeOgImageUrl = (v) => OgImageUrl.parse(v);
|
|
45
|
+
// Entities
|
|
46
|
+
const Base = z.object({
|
|
47
|
+
id: Id,
|
|
48
|
+
userId: UserId,
|
|
49
|
+
categoryName: CategoryName,
|
|
50
|
+
categoryId: Id,
|
|
51
|
+
title: ArticleTitle,
|
|
52
|
+
quote: Quote,
|
|
53
|
+
url: Url,
|
|
54
|
+
createdAt: CreatedAt,
|
|
55
|
+
ogTitle: OgTitle,
|
|
56
|
+
ogDescription: OgDescription,
|
|
57
|
+
ogImageUrl: OgImageUrl,
|
|
58
|
+
});
|
|
59
|
+
export const UnexportedArticle = Base.extend({ status: UnexportedStatus });
|
|
60
|
+
const ExportedArticle = Base.extend(ExportedStatus.shape);
|
|
61
|
+
export const articleEntity = {
|
|
62
|
+
create: (args) => {
|
|
63
|
+
return createEntityWithErrorHandling(() => Object.freeze({
|
|
64
|
+
id: makeId(),
|
|
65
|
+
status: "UNEXPORTED",
|
|
66
|
+
categoryId: makeId(),
|
|
67
|
+
createdAt: makeCreatedAt(),
|
|
68
|
+
...args,
|
|
69
|
+
}));
|
|
70
|
+
},
|
|
71
|
+
update: (article, args) => {
|
|
72
|
+
return createEntityWithErrorHandling(() => Object.freeze({ ...article, ...args }));
|
|
73
|
+
},
|
|
74
|
+
export: (article) => {
|
|
75
|
+
return createEntityWithErrorHandling(() => {
|
|
76
|
+
const exportedStatus = makeExportedStatus();
|
|
77
|
+
return Object.freeze({
|
|
78
|
+
...article,
|
|
79
|
+
...exportedStatus,
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=article-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-entity.js","sourceRoot":"","sources":["../../../articles/entities/article-entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseDomainEvent } from "../../common/events/base-domain-event";
|
|
2
|
+
export declare class ArticleCreatedEvent extends BaseDomainEvent {
|
|
3
|
+
constructor(data: {
|
|
4
|
+
title: string;
|
|
5
|
+
url: string;
|
|
6
|
+
quote: string;
|
|
7
|
+
categoryName: string;
|
|
8
|
+
userId: string;
|
|
9
|
+
caller: string;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=article-created-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-created-event.d.ts","sourceRoot":"","sources":["../../../articles/events/article-created-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,qBAAa,mBAAoB,SAAQ,eAAe;gBAC3C,IAAI,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf;CAeD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseDomainEvent } from "../../common/events/base-domain-event";
|
|
2
|
+
export class ArticleCreatedEvent extends BaseDomainEvent {
|
|
3
|
+
constructor(data) {
|
|
4
|
+
super("article.created", {
|
|
5
|
+
title: data.title,
|
|
6
|
+
url: data.url,
|
|
7
|
+
quote: data.quote,
|
|
8
|
+
categoryName: data.categoryName,
|
|
9
|
+
}, {
|
|
10
|
+
caller: data.caller,
|
|
11
|
+
userId: data.userId,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=article-created-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-created-event.js","sourceRoot":"","sources":["../../../articles/events/article-created-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACvD,YAAY,IAOX;QACA,KAAK,CACJ,iBAAiB,EACjB;YACC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;SAC/B,EACD;YACC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CACD,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseDomainEvent } from "../../common/events/base-domain-event";
|
|
2
|
+
export declare class ArticleDeletedEvent extends BaseDomainEvent {
|
|
3
|
+
constructor(data: {
|
|
4
|
+
title: string;
|
|
5
|
+
userId: string;
|
|
6
|
+
caller: string;
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=article-deleted-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-deleted-event.d.ts","sourceRoot":"","sources":["../../../articles/events/article-deleted-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,qBAAa,mBAAoB,SAAQ,eAAe;gBAC3C,IAAI,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf;CAYD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseDomainEvent } from "../../common/events/base-domain-event";
|
|
2
|
+
export class ArticleDeletedEvent extends BaseDomainEvent {
|
|
3
|
+
constructor(data) {
|
|
4
|
+
super("article.deleted", {
|
|
5
|
+
title: data.title,
|
|
6
|
+
}, {
|
|
7
|
+
caller: data.caller,
|
|
8
|
+
userId: data.userId,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=article-deleted-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-deleted-event.js","sourceRoot":"","sources":["../../../articles/events/article-deleted-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACvD,YAAY,IAIX;QACA,KAAK,CACJ,iBAAiB,EACjB;YACC,KAAK,EAAE,IAAI,CAAC,KAAK;SACjB,EACD;YACC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CACD,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseDomainEvent } from "../../common/events/base-domain-event";
|
|
2
|
+
export declare class ArticleUpdatedEvent extends BaseDomainEvent {
|
|
3
|
+
constructor(data: {
|
|
4
|
+
title: string;
|
|
5
|
+
url: string;
|
|
6
|
+
quote: string;
|
|
7
|
+
categoryName: string;
|
|
8
|
+
userId: string;
|
|
9
|
+
caller: string;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=article-updated-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-updated-event.d.ts","sourceRoot":"","sources":["../../../articles/events/article-updated-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,qBAAa,mBAAoB,SAAQ,eAAe;gBAC3C,IAAI,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf;CAeD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseDomainEvent } from "../../common/events/base-domain-event";
|
|
2
|
+
export class ArticleUpdatedEvent extends BaseDomainEvent {
|
|
3
|
+
constructor(data) {
|
|
4
|
+
super("article.updated", {
|
|
5
|
+
title: data.title,
|
|
6
|
+
url: data.url,
|
|
7
|
+
quote: data.quote,
|
|
8
|
+
categoryName: data.categoryName,
|
|
9
|
+
}, {
|
|
10
|
+
caller: data.caller,
|
|
11
|
+
userId: data.userId,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=article-updated-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-updated-event.js","sourceRoot":"","sources":["../../../articles/events/article-updated-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACvD,YAAY,IAOX;QACA,KAAK,CACJ,iBAAiB,EACjB;YACC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;SAC/B,EACD;YACC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CACD,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./entities/article-entity";
|
|
2
|
+
export * from "./events/article-created-event";
|
|
3
|
+
export * from "./events/article-deleted-event";
|
|
4
|
+
export * from "./events/article-updated-event";
|
|
5
|
+
export * from "./repositories/articles-command-repository.interface";
|
|
6
|
+
export * from "./repositories/articles-query-repository.interface";
|
|
7
|
+
export * from "./repositories/category-query-repository.interface";
|
|
8
|
+
export * from "./services/articles-domain-service";
|
|
9
|
+
export * from "./types/cache-strategy";
|
|
10
|
+
export * from "./types/query-params";
|
|
11
|
+
export * from "./types/sort-order";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../articles/index.ts"],"names":[],"mappings":"AACA,cAAc,2BAA2B,CAAC;AAG1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,sDAAsD,CAAC;AACrE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AAGnE,cAAc,oCAAoC,CAAC;AAGnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Entities
|
|
2
|
+
export * from "./entities/article-entity";
|
|
3
|
+
// Events
|
|
4
|
+
export * from "./events/article-created-event";
|
|
5
|
+
export * from "./events/article-deleted-event";
|
|
6
|
+
export * from "./events/article-updated-event";
|
|
7
|
+
// Repositories
|
|
8
|
+
export * from "./repositories/articles-command-repository.interface";
|
|
9
|
+
export * from "./repositories/articles-query-repository.interface";
|
|
10
|
+
export * from "./repositories/category-query-repository.interface";
|
|
11
|
+
// Services
|
|
12
|
+
export * from "./services/articles-domain-service";
|
|
13
|
+
// Types
|
|
14
|
+
export * from "./types/cache-strategy";
|
|
15
|
+
export * from "./types/query-params";
|
|
16
|
+
export * from "./types/sort-order";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../articles/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,2BAA2B,CAAC;AAE1C,SAAS;AACT,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAE/C,eAAe;AACf,cAAc,sDAAsD,CAAC;AACrE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AAEnE,WAAW;AACX,cAAc,oCAAoC,CAAC;AAEnD,QAAQ;AACR,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Id, Status, UserId } from "../../common/entities/common-entity";
|
|
2
|
+
import type { UnexportedArticle, Url } from "../entities/article-entity";
|
|
3
|
+
export type IArticlesCommandRepository = {
|
|
4
|
+
create(data: UnexportedArticle): Promise<void>;
|
|
5
|
+
update(url: Url, userId: UserId, data: UnexportedArticle): Promise<void>;
|
|
6
|
+
deleteById(id: Id, userId: UserId, status: Status): Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=articles-command-repository.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"articles-command-repository.interface.d.ts","sourceRoot":"","sources":["../../../articles/repositories/articles-command-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAEzE,MAAM,MAAM,0BAA0B,GAAG;IACxC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"articles-command-repository.interface.js","sourceRoot":"","sources":["../../../articles/repositories/articles-command-repository.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Status, UserId } from "../../common/entities/common-entity";
|
|
2
|
+
import type { Url } from "../entities/article-entity";
|
|
3
|
+
import type { ArticlesFindManyParams } from "../types/query-params";
|
|
4
|
+
export type IArticlesQueryRepository = {
|
|
5
|
+
findByUrl(url: Url, userId: UserId): Promise<{
|
|
6
|
+
title: string;
|
|
7
|
+
url: string;
|
|
8
|
+
quote: string | null;
|
|
9
|
+
ogTitle: string | null;
|
|
10
|
+
ogDescription: string | null;
|
|
11
|
+
ogImageUrl: string | null;
|
|
12
|
+
status: string;
|
|
13
|
+
Category: {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
} | null>;
|
|
18
|
+
findMany(userId: UserId, status: Status, params: ArticlesFindManyParams): Promise<{
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
url: string;
|
|
22
|
+
quote: string | null;
|
|
23
|
+
ogTitle: string | null;
|
|
24
|
+
ogDescription: string | null;
|
|
25
|
+
Category: {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
};
|
|
29
|
+
}[]>;
|
|
30
|
+
count(userId: UserId, status: Status): Promise<number>;
|
|
31
|
+
search(query: string, userId: UserId, limit?: number): Promise<{
|
|
32
|
+
id: string;
|
|
33
|
+
title: string;
|
|
34
|
+
url: string;
|
|
35
|
+
quote: string | null;
|
|
36
|
+
ogTitle: string | null;
|
|
37
|
+
ogDescription: string | null;
|
|
38
|
+
Category: {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
};
|
|
42
|
+
}[]>;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=articles-query-repository.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"articles-query-repository.interface.d.ts","sourceRoot":"","sources":["../../../articles/repositories/articles-query-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,MAAM,wBAAwB,GAAG;IACtC,SAAS,CACR,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE;YACT,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;SACb,CAAC;KACF,GAAG,IAAI,CAAC,CAAC;IACV,QAAQ,CACP,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,GAC5B,OAAO,CACT;QACC,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,EAAE;YACT,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;SACb,CAAC;KACF,EAAE,CACH,CAAC;IACF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,CACL,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CACT;QACC,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KACvC,EAAE,CACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"articles-query-repository.interface.js","sourceRoot":"","sources":["../../../articles/repositories/articles-query-repository.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { UserId } from "../../common/entities/common-entity";
|
|
2
|
+
import type { CategoryFindManyParams } from "../types/query-params";
|
|
3
|
+
export type ICategoryQueryRepository = {
|
|
4
|
+
findMany(userId: UserId, params?: CategoryFindManyParams): Promise<{
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
}[]>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=category-query-repository.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-query-repository.interface.d.ts","sourceRoot":"","sources":["../../../articles/repositories/category-query-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,CACP,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,sBAAsB,GAC7B,OAAO,CACT;QACC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACb,EAAE,CACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-query-repository.interface.js","sourceRoot":"","sources":["../../../articles/repositories/category-query-repository.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { UserId } from "../../common/entities/common-entity";
|
|
2
|
+
import { type ArticleTitle, type CategoryName, type OgDescription, type OgImageUrl, type OgTitle, type Quote, UnexportedArticle, type Url } from "../entities/article-entity";
|
|
3
|
+
import type { IArticlesQueryRepository } from "../repositories/articles-query-repository.interface";
|
|
4
|
+
type ArticleStatus = "NEED_CREATE" | "NEED_UPDATE";
|
|
5
|
+
type ReturnType = {
|
|
6
|
+
status: ArticleStatus;
|
|
7
|
+
data: UnexportedArticle;
|
|
8
|
+
} | {
|
|
9
|
+
status: "NO_UPDATE";
|
|
10
|
+
};
|
|
11
|
+
export declare class ArticlesDomainService {
|
|
12
|
+
private readonly articlesQueryRepository;
|
|
13
|
+
constructor(articlesQueryRepository: IArticlesQueryRepository);
|
|
14
|
+
ensureNoDuplicate(url: Url, userId: UserId): Promise<void>;
|
|
15
|
+
updateArticle(url: Url, categoryName: CategoryName, userId: UserId, title: ArticleTitle, quote: Quote, ogTitle: OgTitle, ogDescription: OgDescription, ogImageUrl: OgImageUrl): Promise<ReturnType>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=articles-domain-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"articles-domain-service.d.ts","sourceRoot":"","sources":["../../../articles/services/articles-domain-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EACN,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,iBAAiB,EACjB,KAAK,GAAG,EACR,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AAapG,KAAK,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;AACnD,KAAK,UAAU,GACZ;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAoD3B,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;gBAAvB,uBAAuB,EAAE,wBAAwB;IAGtD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;IAI1C,aAAa,CACzB,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU;CAcvB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { DuplicateError, UnexpectedError } from "../../errors/error-classes";
|
|
2
|
+
import { articleEntity, UnexportedArticle, } from "../entities/article-entity";
|
|
3
|
+
async function ensureNoDuplicateArticle(articlesQueryRepository, url, userId) {
|
|
4
|
+
const exists = await articlesQueryRepository.findByUrl(url, userId);
|
|
5
|
+
if (exists !== null) {
|
|
6
|
+
throw new DuplicateError();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
async function updateArticle(articlesQueryRepository, url, categoryName, userId, title, quote, ogTitle, ogDescription, ogImageUrl) {
|
|
10
|
+
const data = await articlesQueryRepository.findByUrl(url, userId);
|
|
11
|
+
if (data?.status !== "UNEXPORTED")
|
|
12
|
+
return { status: "NO_UPDATE" };
|
|
13
|
+
if (!data) {
|
|
14
|
+
return {
|
|
15
|
+
status: "NEED_CREATE",
|
|
16
|
+
data: articleEntity.create({
|
|
17
|
+
userId,
|
|
18
|
+
title,
|
|
19
|
+
quote,
|
|
20
|
+
url,
|
|
21
|
+
categoryName,
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const newData = UnexportedArticle.safeParse(data);
|
|
26
|
+
if (!newData.success)
|
|
27
|
+
throw new UnexpectedError();
|
|
28
|
+
if (data.title !== title ||
|
|
29
|
+
data.quote !== quote ||
|
|
30
|
+
data.ogTitle !== ogTitle ||
|
|
31
|
+
data.ogDescription !== ogDescription ||
|
|
32
|
+
data.ogImageUrl !== ogImageUrl) {
|
|
33
|
+
return {
|
|
34
|
+
status: "NEED_UPDATE",
|
|
35
|
+
data: articleEntity.update(newData.data, {
|
|
36
|
+
title,
|
|
37
|
+
quote,
|
|
38
|
+
ogTitle,
|
|
39
|
+
ogDescription,
|
|
40
|
+
ogImageUrl,
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return { status: "NO_UPDATE" };
|
|
45
|
+
}
|
|
46
|
+
export class ArticlesDomainService {
|
|
47
|
+
articlesQueryRepository;
|
|
48
|
+
constructor(articlesQueryRepository) {
|
|
49
|
+
this.articlesQueryRepository = articlesQueryRepository;
|
|
50
|
+
}
|
|
51
|
+
async ensureNoDuplicate(url, userId) {
|
|
52
|
+
return ensureNoDuplicateArticle(this.articlesQueryRepository, url, userId);
|
|
53
|
+
}
|
|
54
|
+
async updateArticle(url, categoryName, userId, title, quote, ogTitle, ogDescription, ogImageUrl) {
|
|
55
|
+
return updateArticle(this.articlesQueryRepository, url, categoryName, userId, title, quote, ogTitle, ogDescription, ogImageUrl);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=articles-domain-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"articles-domain-service.js","sourceRoot":"","sources":["../../../articles/services/articles-domain-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAEN,aAAa,EAMb,iBAAiB,GAEjB,MAAM,4BAA4B,CAAC;AAGpC,KAAK,UAAU,wBAAwB,CACtC,uBAAiD,EACjD,GAAQ,EACR,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,cAAc,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAOD,KAAK,UAAU,aAAa,CAC3B,uBAAiD,EACjD,GAAQ,EACR,YAA0B,EAC1B,MAAc,EACd,KAAmB,EACnB,KAAY,EACZ,OAAgB,EAChB,aAA4B,EAC5B,UAAsB;IAEtB,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClE,IAAI,IAAI,EAAE,MAAM,KAAK,YAAY;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAElE,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO;YACN,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC;gBAC1B,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,GAAG;gBACH,YAAY;aACZ,CAAC;SACF,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,MAAM,IAAI,eAAe,EAAE,CAAC;IAElD,IACC,IAAI,CAAC,KAAK,KAAK,KAAK;QACpB,IAAI,CAAC,KAAK,KAAK,KAAK;QACpB,IAAI,CAAC,OAAO,KAAK,OAAO;QACxB,IAAI,CAAC,aAAa,KAAK,aAAa;QACpC,IAAI,CAAC,UAAU,KAAK,UAAU,EAC7B,CAAC;QACF,OAAO;YACN,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACxC,KAAK;gBACL,KAAK;gBACL,OAAO;gBACP,aAAa;gBACb,UAAU;aACV,CAAC;SACF,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,OAAO,qBAAqB;IAEf;IADlB,YACkB,uBAAiD;QAAjD,4BAAuB,GAAvB,uBAAuB,CAA0B;IAChE,CAAC;IAEG,KAAK,CAAC,iBAAiB,CAAC,GAAQ,EAAE,MAAc;QACtD,OAAO,wBAAwB,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC;IAEM,KAAK,CAAC,aAAa,CACzB,GAAQ,EACR,YAA0B,EAC1B,MAAc,EACd,KAAmB,EACnB,KAAY,EACZ,OAAgB,EAChB,aAA4B,EAC5B,UAAsB;QAEtB,OAAO,aAAa,CACnB,IAAI,CAAC,uBAAuB,EAC5B,GAAG,EACH,YAAY,EACZ,MAAM,EACN,KAAK,EACL,KAAK,EACL,OAAO,EACP,aAAa,EACb,UAAU,CACV,CAAC;IACH,CAAC;CACD"}
|