@s-hirano-ist/s-scripts 1.6.0 → 1.7.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.
Files changed (35) hide show
  1. package/dist/find-duplicate-json-articles.js +0 -20
  2. package/dist/find-duplicate-json-articles.js.map +1 -1
  3. package/dist/infrastructures/articles-command-repository.d.ts +40 -0
  4. package/dist/infrastructures/articles-command-repository.d.ts.map +1 -0
  5. package/dist/infrastructures/articles-command-repository.js +40 -0
  6. package/dist/infrastructures/articles-command-repository.js.map +1 -0
  7. package/dist/infrastructures/books-command-repository.d.ts +17 -0
  8. package/dist/infrastructures/books-command-repository.d.ts.map +1 -0
  9. package/dist/infrastructures/books-command-repository.js +25 -0
  10. package/dist/infrastructures/books-command-repository.js.map +1 -0
  11. package/dist/infrastructures/images-command-repository.d.ts +17 -0
  12. package/dist/infrastructures/images-command-repository.d.ts.map +1 -0
  13. package/dist/infrastructures/images-command-repository.js +25 -0
  14. package/dist/infrastructures/images-command-repository.js.map +1 -0
  15. package/dist/infrastructures/notes-command-repository.d.ts +17 -0
  16. package/dist/infrastructures/notes-command-repository.d.ts.map +1 -0
  17. package/dist/infrastructures/notes-command-repository.js +25 -0
  18. package/dist/infrastructures/notes-command-repository.js.map +1 -0
  19. package/dist/reset-articles.js +10 -16
  20. package/dist/reset-articles.js.map +1 -1
  21. package/dist/reset-books.js +8 -17
  22. package/dist/reset-books.js.map +1 -1
  23. package/dist/reset-images.js +8 -17
  24. package/dist/reset-images.js.map +1 -1
  25. package/dist/reset-notes.js +8 -17
  26. package/dist/reset-notes.js.map +1 -1
  27. package/dist/revert-articles.js +9 -8
  28. package/dist/revert-articles.js.map +1 -1
  29. package/dist/revert-books.js +7 -9
  30. package/dist/revert-books.js.map +1 -1
  31. package/dist/revert-images.js +7 -9
  32. package/dist/revert-images.js.map +1 -1
  33. package/dist/revert-notes.js +7 -9
  34. package/dist/revert-notes.js.map +1 -1
  35. package/package.json +5 -5
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from "node:fs";
3
3
  import { join } from "node:path";
4
- import { createPushoverService } from "@s-hirano-ist/s-notification";
5
4
  function getAllJsonFiles(directory) {
6
5
  return fs
7
6
  .readdirSync(directory)
@@ -100,33 +99,14 @@ function displayResults(duplicates) {
100
99
  });
101
100
  }
102
101
  async function main() {
103
- const env = {
104
- PUSHOVER_URL: process.env.PUSHOVER_URL,
105
- PUSHOVER_USER_KEY: process.env.PUSHOVER_USER_KEY,
106
- PUSHOVER_APP_TOKEN: process.env.PUSHOVER_APP_TOKEN,
107
- };
108
- if (Object.values(env).some((v) => !v)) {
109
- throw new Error("Required environment variables are not set.");
110
- }
111
- const notificationService = createPushoverService({
112
- url: env.PUSHOVER_URL ?? "",
113
- userKey: env.PUSHOVER_USER_KEY ?? "",
114
- appToken: env.PUSHOVER_APP_TOKEN ?? "",
115
- });
116
102
  try {
117
103
  console.log("json/articleディレクトリ内のURL重複を検索中...\n");
118
104
  const duplicates = findDuplicateUrls();
119
105
  displayResults(duplicates);
120
106
  console.log("\n検索完了");
121
- await notificationService.notifyInfo("find-duplicate-json-articles completed", {
122
- caller: "find-duplicate-json-articles",
123
- });
124
107
  }
125
108
  catch (error) {
126
109
  console.error("❌ エラーが発生しました:", error);
127
- await notificationService.notifyError(`find-duplicate-json-articles failed: ${error}`, {
128
- caller: "find-duplicate-json-articles",
129
- });
130
110
  process.exit(1);
131
111
  }
132
112
  }
@@ -1 +1 @@
1
- {"version":3,"file":"find-duplicate-json-articles.js","sourceRoot":"","sources":["../src/find-duplicate-json-articles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-duplicate-json-articles.js","sourceRoot":"","sources":["../src/find-duplicate-json-articles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { IBatchCommandRepository } from "@s-hirano-ist/s-core/common";
2
+ /**
3
+ * Prisma client type for transaction support.
4
+ *
5
+ * @remarks
6
+ * This is a minimal type that supports both regular PrismaClient
7
+ * and transaction clients (from $transaction).
8
+ * Uses a generic approach to accept Prisma's strict typing.
9
+ */
10
+ type PrismaClientLike = {
11
+ article: {
12
+ updateMany: (args: any) => Promise<{
13
+ count: number;
14
+ }>;
15
+ };
16
+ };
17
+ /**
18
+ * Creates an Articles batch command repository for bulk operations.
19
+ *
20
+ * @param prisma - The Prisma client or transaction client
21
+ * @returns An IBatchCommandRepository implementation for articles
22
+ *
23
+ * @remarks
24
+ * This is a specialized implementation for batch scripts.
25
+ * It only implements bulkUpdateStatus for performance.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const prisma = new PrismaClient({ accelerateUrl: env.DATABASE_URL });
30
+ *
31
+ * await prisma.$transaction(async (tx) => {
32
+ * const repo = createArticlesCommandRepository(tx);
33
+ * const batchService = new ArticlesBatchDomainService(repo);
34
+ * await batchService.resetArticles(userId);
35
+ * });
36
+ * ```
37
+ */
38
+ export declare function createArticlesCommandRepository(prisma: PrismaClientLike): IBatchCommandRepository;
39
+ export {};
40
+ //# sourceMappingURL=articles-command-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"articles-command-repository.d.ts","sourceRoot":"","sources":["../../src/infrastructures/articles-command-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,uBAAuB,EAEvB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;GAOG;AACH,KAAK,gBAAgB,GAAG;IACvB,OAAO,EAAE;QACR,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,+BAA+B,CAC9C,MAAM,EAAE,gBAAgB,GACtB,uBAAuB,CAqBzB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Creates an Articles batch command repository for bulk operations.
3
+ *
4
+ * @param prisma - The Prisma client or transaction client
5
+ * @returns An IBatchCommandRepository implementation for articles
6
+ *
7
+ * @remarks
8
+ * This is a specialized implementation for batch scripts.
9
+ * It only implements bulkUpdateStatus for performance.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const prisma = new PrismaClient({ accelerateUrl: env.DATABASE_URL });
14
+ *
15
+ * await prisma.$transaction(async (tx) => {
16
+ * const repo = createArticlesCommandRepository(tx);
17
+ * const batchService = new ArticlesBatchDomainService(repo);
18
+ * await batchService.resetArticles(userId);
19
+ * });
20
+ * ```
21
+ */
22
+ export function createArticlesCommandRepository(prisma) {
23
+ return {
24
+ async bulkUpdateStatus(params) {
25
+ const { userId, fromStatus, toStatus, exportedAt } = params;
26
+ const result = await prisma.article.updateMany({
27
+ where: {
28
+ userId: userId,
29
+ status: fromStatus,
30
+ },
31
+ data: {
32
+ status: toStatus,
33
+ ...(exportedAt && { exportedAt: exportedAt }),
34
+ },
35
+ });
36
+ return { count: result.count };
37
+ },
38
+ };
39
+ }
40
+ //# sourceMappingURL=articles-command-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"articles-command-repository.js","sourceRoot":"","sources":["../../src/infrastructures/articles-command-repository.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,+BAA+B,CAC9C,MAAwB;IAExB,OAAO;QACN,KAAK,CAAC,gBAAgB,CACrB,MAA8B;YAE9B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAE5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC9C,KAAK,EAAE;oBACN,MAAM,EAAE,MAAgB;oBACxB,MAAM,EAAE,UAAoB;iBAC5B;gBACD,IAAI,EAAE;oBACL,MAAM,EAAE,QAAkB;oBAC1B,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,UAAkB,EAAE,CAAC;iBACrD;aACD,CAAC,CAAC;YAEH,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IBatchCommandRepository } from "@s-hirano-ist/s-core/common";
2
+ type PrismaClientLike = {
3
+ book: {
4
+ updateMany: (args: any) => Promise<{
5
+ count: number;
6
+ }>;
7
+ };
8
+ };
9
+ /**
10
+ * Creates a Books batch command repository for bulk operations.
11
+ *
12
+ * @param prisma - The Prisma client or transaction client
13
+ * @returns An IBatchCommandRepository implementation for books
14
+ */
15
+ export declare function createBooksCommandRepository(prisma: PrismaClientLike): IBatchCommandRepository;
16
+ export {};
17
+ //# sourceMappingURL=books-command-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"books-command-repository.d.ts","sourceRoot":"","sources":["../../src/infrastructures/books-command-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,uBAAuB,EAEvB,MAAM,6BAA6B,CAAC;AAErC,KAAK,gBAAgB,GAAG;IACvB,IAAI,EAAE;QAEL,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,gBAAgB,GACtB,uBAAuB,CAqBzB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Creates a Books batch command repository for bulk operations.
3
+ *
4
+ * @param prisma - The Prisma client or transaction client
5
+ * @returns An IBatchCommandRepository implementation for books
6
+ */
7
+ export function createBooksCommandRepository(prisma) {
8
+ return {
9
+ async bulkUpdateStatus(params) {
10
+ const { userId, fromStatus, toStatus, exportedAt } = params;
11
+ const result = await prisma.book.updateMany({
12
+ where: {
13
+ userId: userId,
14
+ status: fromStatus,
15
+ },
16
+ data: {
17
+ status: toStatus,
18
+ ...(exportedAt && { exportedAt: exportedAt }),
19
+ },
20
+ });
21
+ return { count: result.count };
22
+ },
23
+ };
24
+ }
25
+ //# sourceMappingURL=books-command-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"books-command-repository.js","sourceRoot":"","sources":["../../src/infrastructures/books-command-repository.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC3C,MAAwB;IAExB,OAAO;QACN,KAAK,CAAC,gBAAgB,CACrB,MAA8B;YAE9B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAE5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC3C,KAAK,EAAE;oBACN,MAAM,EAAE,MAAgB;oBACxB,MAAM,EAAE,UAAoB;iBAC5B;gBACD,IAAI,EAAE;oBACL,MAAM,EAAE,QAAkB;oBAC1B,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,UAAkB,EAAE,CAAC;iBACrD;aACD,CAAC,CAAC;YAEH,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IBatchCommandRepository } from "@s-hirano-ist/s-core/common";
2
+ type PrismaClientLike = {
3
+ image: {
4
+ updateMany: (args: any) => Promise<{
5
+ count: number;
6
+ }>;
7
+ };
8
+ };
9
+ /**
10
+ * Creates an Images batch command repository for bulk operations.
11
+ *
12
+ * @param prisma - The Prisma client or transaction client
13
+ * @returns An IBatchCommandRepository implementation for images
14
+ */
15
+ export declare function createImagesCommandRepository(prisma: PrismaClientLike): IBatchCommandRepository;
16
+ export {};
17
+ //# sourceMappingURL=images-command-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images-command-repository.d.ts","sourceRoot":"","sources":["../../src/infrastructures/images-command-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,uBAAuB,EAEvB,MAAM,6BAA6B,CAAC;AAErC,KAAK,gBAAgB,GAAG;IACvB,KAAK,EAAE;QAEN,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC5C,MAAM,EAAE,gBAAgB,GACtB,uBAAuB,CAqBzB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Creates an Images batch command repository for bulk operations.
3
+ *
4
+ * @param prisma - The Prisma client or transaction client
5
+ * @returns An IBatchCommandRepository implementation for images
6
+ */
7
+ export function createImagesCommandRepository(prisma) {
8
+ return {
9
+ async bulkUpdateStatus(params) {
10
+ const { userId, fromStatus, toStatus, exportedAt } = params;
11
+ const result = await prisma.image.updateMany({
12
+ where: {
13
+ userId: userId,
14
+ status: fromStatus,
15
+ },
16
+ data: {
17
+ status: toStatus,
18
+ ...(exportedAt && { exportedAt: exportedAt }),
19
+ },
20
+ });
21
+ return { count: result.count };
22
+ },
23
+ };
24
+ }
25
+ //# sourceMappingURL=images-command-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images-command-repository.js","sourceRoot":"","sources":["../../src/infrastructures/images-command-repository.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAC5C,MAAwB;IAExB,OAAO;QACN,KAAK,CAAC,gBAAgB,CACrB,MAA8B;YAE9B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAE5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5C,KAAK,EAAE;oBACN,MAAM,EAAE,MAAgB;oBACxB,MAAM,EAAE,UAAoB;iBAC5B;gBACD,IAAI,EAAE;oBACL,MAAM,EAAE,QAAkB;oBAC1B,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,UAAkB,EAAE,CAAC;iBACrD;aACD,CAAC,CAAC;YAEH,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IBatchCommandRepository } from "@s-hirano-ist/s-core/common";
2
+ type PrismaClientLike = {
3
+ note: {
4
+ updateMany: (args: any) => Promise<{
5
+ count: number;
6
+ }>;
7
+ };
8
+ };
9
+ /**
10
+ * Creates a Notes batch command repository for bulk operations.
11
+ *
12
+ * @param prisma - The Prisma client or transaction client
13
+ * @returns An IBatchCommandRepository implementation for notes
14
+ */
15
+ export declare function createNotesCommandRepository(prisma: PrismaClientLike): IBatchCommandRepository;
16
+ export {};
17
+ //# sourceMappingURL=notes-command-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes-command-repository.d.ts","sourceRoot":"","sources":["../../src/infrastructures/notes-command-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,uBAAuB,EAEvB,MAAM,6BAA6B,CAAC;AAErC,KAAK,gBAAgB,GAAG;IACvB,IAAI,EAAE;QAEL,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,gBAAgB,GACtB,uBAAuB,CAqBzB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Creates a Notes batch command repository for bulk operations.
3
+ *
4
+ * @param prisma - The Prisma client or transaction client
5
+ * @returns An IBatchCommandRepository implementation for notes
6
+ */
7
+ export function createNotesCommandRepository(prisma) {
8
+ return {
9
+ async bulkUpdateStatus(params) {
10
+ const { userId, fromStatus, toStatus, exportedAt } = params;
11
+ const result = await prisma.note.updateMany({
12
+ where: {
13
+ userId: userId,
14
+ status: fromStatus,
15
+ },
16
+ data: {
17
+ status: toStatus,
18
+ ...(exportedAt && { exportedAt: exportedAt }),
19
+ },
20
+ });
21
+ return { count: result.count };
22
+ },
23
+ };
24
+ }
25
+ //# sourceMappingURL=notes-command-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes-command-repository.js","sourceRoot":"","sources":["../../src/infrastructures/notes-command-repository.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC3C,MAAwB;IAExB,OAAO;QACN,KAAK,CAAC,gBAAgB,CACrB,MAA8B;YAE9B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAE5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC3C,KAAK,EAAE;oBACN,MAAM,EAAE,MAAgB;oBACxB,MAAM,EAAE,UAAoB;iBAC5B;gBACD,IAAI,EAAE;oBACL,MAAM,EAAE,QAAkB;oBAC1B,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,UAAkB,EAAE,CAAC;iBACrD;aACD,CAAC,CAAC;YAEH,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeExportedAt, makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { ArticlesBatchDomainService } from "@s-hirano-ist/s-core/articles";
3
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createArticlesCommandRepository } from "./infrastructures/articles-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -23,23 +25,15 @@ async function main() {
23
25
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
26
  });
25
27
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
- const EXPORTED = "EXPORTED";
29
28
  async function resetArticles() {
30
29
  await prisma.$transaction(async (tx) => {
31
- // LAST_UPDATED EXPORTED (前回バッチを確定)
32
- await tx.article.updateMany({
33
- where: { userId, status: LAST_UPDATED },
34
- data: { status: EXPORTED, exportedAt: makeExportedAt() },
35
- });
36
- console.log("💾 LAST_UPDATEDの記事をEXPORTEDに変更しました");
37
- // UNEXPORTED → LAST_UPDATED (今回バッチをマーク)
38
- const result = await tx.article.updateMany({
39
- where: { userId, status: UNEXPORTED },
40
- data: { status: LAST_UPDATED },
41
- });
42
- console.log(`💾 ${result.count}件の記事をリセットしました`);
30
+ // DDD: Create repository and domain service with transaction client
31
+ const commandRepository = createArticlesCommandRepository(tx);
32
+ const batchService = new ArticlesBatchDomainService(commandRepository);
33
+ // Execute batch reset through domain service
34
+ const result = await batchService.resetArticles(userId);
35
+ console.log(`💾 LAST_UPDATEDの記事をEXPORTEDに変更しました(${result.finalized.count}件)`);
36
+ console.log(`💾 ${result.marked.count}件の記事をリセットしました`);
43
37
  });
44
38
  }
45
39
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"reset-articles.js","sourceRoot":"","sources":["../src/reset-articles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reset-articles.js","sourceRoot":"","sources":["../src/reset-articles.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AAEnG,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,KAAK,UAAU,aAAa;QAC3B,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAW,EAAE,EAAE;YAC/C,oEAAoE;YACpE,MAAM,iBAAiB,GAAG,+BAA+B,CACxD,EAA2D,CAC3D,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;YAEvE,6CAA6C;YAC7C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAExD,OAAO,CAAC,GAAG,CACV,sCAAsC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAChE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,mBAAmB,CAAC,UAAU,CAAC,0BAA0B,EAAE;YAChE,MAAM,EAAE,gBAAgB;SACxB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,0BAA0B,KAAK,EAAE,EAAE;YACxE,MAAM,EAAE,gBAAgB;SACxB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeExportedAt, makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { BooksBatchDomainService } from "@s-hirano-ist/s-core/books";
3
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createBooksCommandRepository } from "./infrastructures/books-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -12,7 +14,6 @@ async function main() {
12
14
  if (Object.values(env).some((v) => !v)) {
13
15
  throw new Error("Required environment variables are not set.");
14
16
  }
15
- // Dynamic import for Prisma ESM compatibility
16
17
  const { PrismaClient } = await import("@s-hirano-ist/s-database/generated");
17
18
  const prisma = new PrismaClient({
18
19
  accelerateUrl: env.DATABASE_URL ?? "",
@@ -23,23 +24,13 @@ async function main() {
23
24
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
25
  });
25
26
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
- const EXPORTED = "EXPORTED";
29
27
  async function resetBooks() {
30
28
  await prisma.$transaction(async (tx) => {
31
- // LAST_UPDATED EXPORTED (前回バッチを確定)
32
- await tx.book.updateMany({
33
- where: { userId, status: LAST_UPDATED },
34
- data: { status: EXPORTED, exportedAt: makeExportedAt() },
35
- });
36
- console.log("💾 LAST_UPDATEDの本をEXPORTEDに変更しました");
37
- // UNEXPORTED → LAST_UPDATED (今回バッチをマーク)
38
- const result = await tx.book.updateMany({
39
- where: { userId, status: UNEXPORTED },
40
- data: { status: LAST_UPDATED },
41
- });
42
- console.log(`💾 ${result.count}件の本をリセットしました`);
29
+ const commandRepository = createBooksCommandRepository(tx);
30
+ const batchService = new BooksBatchDomainService(commandRepository);
31
+ const result = await batchService.resetBooks(userId);
32
+ console.log(`💾 LAST_UPDATEDの本をEXPORTEDに変更しました(${result.finalized.count}件)`);
33
+ console.log(`💾 ${result.marked.count}件の本をリセットしました`);
43
34
  });
44
35
  }
45
36
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"reset-books.js","sourceRoot":"","sources":["../src/reset-books.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reset-books.js","sourceRoot":"","sources":["../src/reset-books.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,KAAK,UAAU,UAAU;QACxB,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAW,EAAE,EAAE;YAC/C,MAAM,iBAAiB,GAAG,4BAA4B,CACrD,EAAwD,CACxD,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAErD,OAAO,CAAC,GAAG,CACV,qCAAqC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAC/D,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,mBAAmB,CAAC,UAAU,CAAC,uBAAuB,EAAE;YAC7D,MAAM,EAAE,aAAa;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,uBAAuB,KAAK,EAAE,EAAE;YACrE,MAAM,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeExportedAt, makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
+ import { ImagesBatchDomainService } from "@s-hirano-ist/s-core/images";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createImagesCommandRepository } from "./infrastructures/images-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -12,7 +14,6 @@ async function main() {
12
14
  if (Object.values(env).some((v) => !v)) {
13
15
  throw new Error("Required environment variables are not set.");
14
16
  }
15
- // Dynamic import for Prisma ESM compatibility
16
17
  const { PrismaClient } = await import("@s-hirano-ist/s-database/generated");
17
18
  const prisma = new PrismaClient({
18
19
  accelerateUrl: env.DATABASE_URL ?? "",
@@ -23,23 +24,13 @@ async function main() {
23
24
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
25
  });
25
26
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
- const EXPORTED = "EXPORTED";
29
27
  async function resetImages() {
30
28
  await prisma.$transaction(async (tx) => {
31
- // LAST_UPDATED EXPORTED (前回バッチを確定)
32
- await tx.image.updateMany({
33
- where: { userId, status: LAST_UPDATED },
34
- data: { status: EXPORTED, exportedAt: makeExportedAt() },
35
- });
36
- console.log("💾 LAST_UPDATEDの画像をEXPORTEDに変更しました");
37
- // UNEXPORTED → LAST_UPDATED (今回バッチをマーク)
38
- const result = await tx.image.updateMany({
39
- where: { userId, status: UNEXPORTED },
40
- data: { status: LAST_UPDATED },
41
- });
42
- console.log(`💾 ${result.count}件の画像をリセットしました`);
29
+ const commandRepository = createImagesCommandRepository(tx);
30
+ const batchService = new ImagesBatchDomainService(commandRepository);
31
+ const result = await batchService.resetImages(userId);
32
+ console.log(`💾 LAST_UPDATEDの画像をEXPORTEDに変更しました(${result.finalized.count}件)`);
33
+ console.log(`💾 ${result.marked.count}件の画像をリセットしました`);
43
34
  });
44
35
  }
45
36
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"reset-images.js","sourceRoot":"","sources":["../src/reset-images.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reset-images.js","sourceRoot":"","sources":["../src/reset-images.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAE/F,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,KAAK,UAAU,WAAW;QACzB,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAW,EAAE,EAAE;YAC/C,MAAM,iBAAiB,GAAG,6BAA6B,CACtD,EAAyD,CACzD,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;YAErE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CACV,sCAAsC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAChE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,mBAAmB,CAAC,UAAU,CAAC,wBAAwB,EAAE;YAC9D,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,wBAAwB,KAAK,EAAE,EAAE;YACtE,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeExportedAt, makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
+ import { NotesBatchDomainService } from "@s-hirano-ist/s-core/notes";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createNotesCommandRepository } from "./infrastructures/notes-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -12,7 +14,6 @@ async function main() {
12
14
  if (Object.values(env).some((v) => !v)) {
13
15
  throw new Error("Required environment variables are not set.");
14
16
  }
15
- // Dynamic import for Prisma ESM compatibility
16
17
  const { PrismaClient } = await import("@s-hirano-ist/s-database/generated");
17
18
  const prisma = new PrismaClient({
18
19
  accelerateUrl: env.DATABASE_URL ?? "",
@@ -23,23 +24,13 @@ async function main() {
23
24
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
25
  });
25
26
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
- const EXPORTED = "EXPORTED";
29
27
  async function resetNotes() {
30
28
  await prisma.$transaction(async (tx) => {
31
- // LAST_UPDATED EXPORTED (前回バッチを確定)
32
- await tx.note.updateMany({
33
- where: { userId, status: LAST_UPDATED },
34
- data: { status: EXPORTED, exportedAt: makeExportedAt() },
35
- });
36
- console.log("💾 LAST_UPDATEDのノートをEXPORTEDに変更しました");
37
- // UNEXPORTED → LAST_UPDATED (今回バッチをマーク)
38
- const result = await tx.note.updateMany({
39
- where: { userId, status: UNEXPORTED },
40
- data: { status: LAST_UPDATED },
41
- });
42
- console.log(`💾 ${result.count}件のノートをリセットしました`);
29
+ const commandRepository = createNotesCommandRepository(tx);
30
+ const batchService = new NotesBatchDomainService(commandRepository);
31
+ const result = await batchService.resetNotes(userId);
32
+ console.log(`💾 LAST_UPDATEDのノートをEXPORTEDに変更しました(${result.finalized.count}件)`);
33
+ console.log(`💾 ${result.marked.count}件のノートをリセットしました`);
43
34
  });
44
35
  }
45
36
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"reset-notes.js","sourceRoot":"","sources":["../src/reset-notes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reset-notes.js","sourceRoot":"","sources":["../src/reset-notes.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,KAAK,UAAU,UAAU;QACxB,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAW,EAAE,EAAE;YAC/C,MAAM,iBAAiB,GAAG,4BAA4B,CACrD,EAAwD,CACxD,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAErD,OAAO,CAAC,GAAG,CACV,uCAAuC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CACjE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,gBAAgB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,mBAAmB,CAAC,UAAU,CAAC,uBAAuB,EAAE;YAC7D,MAAM,EAAE,aAAa;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,uBAAuB,KAAK,EAAE,EAAE;YACrE,MAAM,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { ArticlesBatchDomainService } from "@s-hirano-ist/s-core/articles";
3
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createArticlesCommandRepository } from "./infrastructures/articles-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -23,14 +25,13 @@ async function main() {
23
25
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
26
  });
25
27
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
28
  try {
29
- await prisma.article.updateMany({
30
- where: { userId, status: LAST_UPDATED },
31
- data: { status: UNEXPORTED },
32
- });
33
- console.log("💾 LAST_UPDATEDの記事をUNEXPORTEDに変更しました");
29
+ // DDD: Create repository and domain service
30
+ const commandRepository = createArticlesCommandRepository(prisma);
31
+ const batchService = new ArticlesBatchDomainService(commandRepository);
32
+ // Execute batch revert through domain service
33
+ const result = await batchService.revertArticles(userId);
34
+ console.log(`💾 LAST_UPDATEDの記事をUNEXPORTEDに変更しました(${result.count}件)`);
34
35
  await notificationService.notifyInfo("revert-articles completed", {
35
36
  caller: "revert-articles",
36
37
  });
@@ -1 +1 @@
1
- {"version":3,"file":"revert-articles.js","sourceRoot":"","sources":["../src/revert-articles.ts"],"names":[],"mappings":";AACA,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,GAGV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAW,oBAAoB,EAAE,CAAC;IAClD,MAAM,YAAY,GAAW,qBAAqB,EAAE,CAAC;IAErD,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;YAC/B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;YACvC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,mBAAmB,CAAC,UAAU,CAAC,2BAA2B,EAAE;YACjE,MAAM,EAAE,iBAAiB;SACzB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,2BAA2B,KAAK,EAAE,EAAE;YACzE,MAAM,EAAE,iBAAiB;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"revert-articles.js","sourceRoot":"","sources":["../src/revert-articles.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AAEnG,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,CAAC;QACJ,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,IAAI,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;QAEvE,8CAA8C;QAC9C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEzD,OAAO,CAAC,GAAG,CACV,wCAAwC,MAAM,CAAC,KAAK,IAAI,CACxD,CAAC;QACF,MAAM,mBAAmB,CAAC,UAAU,CAAC,2BAA2B,EAAE;YACjE,MAAM,EAAE,iBAAiB;SACzB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,2BAA2B,KAAK,EAAE,EAAE;YACzE,MAAM,EAAE,iBAAiB;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { BooksBatchDomainService } from "@s-hirano-ist/s-core/books";
3
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createBooksCommandRepository } from "./infrastructures/books-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -12,7 +14,6 @@ async function main() {
12
14
  if (Object.values(env).some((v) => !v)) {
13
15
  throw new Error("Required environment variables are not set.");
14
16
  }
15
- // Dynamic import for Prisma ESM compatibility
16
17
  const { PrismaClient } = await import("@s-hirano-ist/s-database/generated");
17
18
  const prisma = new PrismaClient({
18
19
  accelerateUrl: env.DATABASE_URL ?? "",
@@ -23,14 +24,11 @@ async function main() {
23
24
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
25
  });
25
26
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
27
  try {
29
- await prisma.book.updateMany({
30
- where: { userId, status: LAST_UPDATED },
31
- data: { status: UNEXPORTED },
32
- });
33
- console.log("💾 LAST_UPDATEDの本をUNEXPORTEDに変更しました");
28
+ const commandRepository = createBooksCommandRepository(prisma);
29
+ const batchService = new BooksBatchDomainService(commandRepository);
30
+ const result = await batchService.revertBooks(userId);
31
+ console.log(`💾 LAST_UPDATEDの本をUNEXPORTEDに変更しました(${result.count}件)`);
34
32
  await notificationService.notifyInfo("revert-books completed", {
35
33
  caller: "revert-books",
36
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"revert-books.js","sourceRoot":"","sources":["../src/revert-books.ts"],"names":[],"mappings":";AACA,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,GAGV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAW,oBAAoB,EAAE,CAAC;IAClD,MAAM,YAAY,GAAW,qBAAqB,EAAE,CAAC;IAErD,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;YACvC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,mBAAmB,CAAC,UAAU,CAAC,wBAAwB,EAAE;YAC9D,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,wBAAwB,KAAK,EAAE,EAAE;YACtE,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"revert-books.js","sourceRoot":"","sources":["../src/revert-books.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,CAAC;QACJ,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,CACV,uCAAuC,MAAM,CAAC,KAAK,IAAI,CACvD,CAAC;QACF,MAAM,mBAAmB,CAAC,UAAU,CAAC,wBAAwB,EAAE;YAC9D,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,wBAAwB,KAAK,EAAE,EAAE;YACtE,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
+ import { ImagesBatchDomainService } from "@s-hirano-ist/s-core/images";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createImagesCommandRepository } from "./infrastructures/images-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -12,7 +14,6 @@ async function main() {
12
14
  if (Object.values(env).some((v) => !v)) {
13
15
  throw new Error("Required environment variables are not set.");
14
16
  }
15
- // Dynamic import for Prisma ESM compatibility
16
17
  const { PrismaClient } = await import("@s-hirano-ist/s-database/generated");
17
18
  const prisma = new PrismaClient({
18
19
  accelerateUrl: env.DATABASE_URL ?? "",
@@ -23,14 +24,11 @@ async function main() {
23
24
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
25
  });
25
26
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
27
  try {
29
- await prisma.image.updateMany({
30
- where: { userId, status: LAST_UPDATED },
31
- data: { status: UNEXPORTED },
32
- });
33
- console.log("💾 LAST_UPDATEDの画像をUNEXPORTEDに変更しました");
28
+ const commandRepository = createImagesCommandRepository(prisma);
29
+ const batchService = new ImagesBatchDomainService(commandRepository);
30
+ const result = await batchService.revertImages(userId);
31
+ console.log(`💾 LAST_UPDATEDの画像をUNEXPORTEDに変更しました(${result.count}件)`);
34
32
  await notificationService.notifyInfo("revert-images completed", {
35
33
  caller: "revert-images",
36
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"revert-images.js","sourceRoot":"","sources":["../src/revert-images.ts"],"names":[],"mappings":";AACA,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,GAGV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAW,oBAAoB,EAAE,CAAC;IAClD,MAAM,YAAY,GAAW,qBAAqB,EAAE,CAAC;IAErD,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;YAC7B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;YACvC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,mBAAmB,CAAC,UAAU,CAAC,yBAAyB,EAAE;YAC/D,MAAM,EAAE,eAAe;SACvB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,yBAAyB,KAAK,EAAE,EAAE;YACvE,MAAM,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"revert-images.js","sourceRoot":"","sources":["../src/revert-images.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAE/F,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,CAAC;QACJ,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CACV,wCAAwC,MAAM,CAAC,KAAK,IAAI,CACxD,CAAC;QACF,MAAM,mBAAmB,CAAC,UAAU,CAAC,yBAAyB,EAAE;YAC/D,MAAM,EAAE,eAAe;SACvB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,yBAAyB,KAAK,EAAE,EAAE;YACvE,MAAM,EAAE,eAAe;SACvB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { makeLastUpdatedStatus, makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/common";
2
+ import { makeUserId } from "@s-hirano-ist/s-core/common";
3
+ import { NotesBatchDomainService } from "@s-hirano-ist/s-core/notes";
3
4
  import { createPushoverService } from "@s-hirano-ist/s-notification";
5
+ import { createNotesCommandRepository } from "./infrastructures/notes-command-repository.js";
4
6
  async function main() {
5
7
  const env = {
6
8
  DATABASE_URL: process.env.DATABASE_URL,
@@ -12,7 +14,6 @@ async function main() {
12
14
  if (Object.values(env).some((v) => !v)) {
13
15
  throw new Error("Required environment variables are not set.");
14
16
  }
15
- // Dynamic import for Prisma ESM compatibility
16
17
  const { PrismaClient } = await import("@s-hirano-ist/s-database/generated");
17
18
  const prisma = new PrismaClient({
18
19
  accelerateUrl: env.DATABASE_URL ?? "",
@@ -23,14 +24,11 @@ async function main() {
23
24
  appToken: env.PUSHOVER_APP_TOKEN ?? "",
24
25
  });
25
26
  const userId = makeUserId(env.USERNAME_TO_EXPORT ?? "");
26
- const UNEXPORTED = makeUnexportedStatus();
27
- const LAST_UPDATED = makeLastUpdatedStatus();
28
27
  try {
29
- await prisma.note.updateMany({
30
- where: { userId, status: LAST_UPDATED },
31
- data: { status: UNEXPORTED },
32
- });
33
- console.log("💾 LAST_UPDATEDのノートをUNEXPORTEDに変更しました");
28
+ const commandRepository = createNotesCommandRepository(prisma);
29
+ const batchService = new NotesBatchDomainService(commandRepository);
30
+ const result = await batchService.revertNotes(userId);
31
+ console.log(`💾 LAST_UPDATEDのノートをUNEXPORTEDに変更しました(${result.count}件)`);
34
32
  await notificationService.notifyInfo("revert-notes completed", {
35
33
  caller: "revert-notes",
36
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"revert-notes.js","sourceRoot":"","sources":["../src/revert-notes.ts"],"names":[],"mappings":";AACA,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,GAGV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAW,oBAAoB,EAAE,CAAC;IAClD,MAAM,YAAY,GAAW,qBAAqB,EAAE,CAAC;IAErD,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;YACvC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,MAAM,mBAAmB,CAAC,UAAU,CAAC,wBAAwB,EAAE;YAC9D,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,wBAAwB,KAAK,EAAE,EAAE;YACtE,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"revert-notes.js","sourceRoot":"","sources":["../src/revert-notes.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACzC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,CAAC;QACJ,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,CACV,yCAAyC,MAAM,CAAC,KAAK,IAAI,CACzD,CAAC;QACF,MAAM,mBAAmB,CAAC,UAAU,CAAC,wBAAwB,EAAE;YAC9D,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,wBAAwB,KAAK,EAAE,EAAE;YACtE,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@s-hirano-ist/s-scripts",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "CLI scripts for s-private data operations",
5
5
  "type": "module",
6
6
  "bin": {
@@ -39,13 +39,13 @@
39
39
  "dependencies": {
40
40
  "@huggingface/transformers": "3.5.1",
41
41
  "@qdrant/js-client-rest": "1.13.0",
42
- "glob": "11.0.2",
42
+ "glob": "11.1.0",
43
43
  "jsdom": "26.0.0",
44
44
  "minio": "8.0.5",
45
45
  "turndown": "7.2.0",
46
- "@s-hirano-ist/s-core": "1.6.0",
47
- "@s-hirano-ist/s-database": "1.6.0",
48
- "@s-hirano-ist/s-notification": "1.6.0"
46
+ "@s-hirano-ist/s-core": "1.7.0",
47
+ "@s-hirano-ist/s-database": "1.7.0",
48
+ "@s-hirano-ist/s-notification": "1.7.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/jsdom": "21.1.7",