@cravery/firebase 0.0.8 → 0.0.9

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 (174) hide show
  1. package/dist/converter/comment.d.ts +4 -0
  2. package/dist/converter/comment.d.ts.map +1 -0
  3. package/dist/converter/comment.js +36 -0
  4. package/dist/converter/comment.js.map +1 -0
  5. package/dist/converter/equipment.d.ts +5 -0
  6. package/dist/converter/equipment.d.ts.map +1 -0
  7. package/dist/converter/equipment.js +49 -0
  8. package/dist/converter/equipment.js.map +1 -0
  9. package/dist/converter/index.d.ts +10 -0
  10. package/dist/converter/index.d.ts.map +1 -0
  11. package/dist/converter/index.js +26 -0
  12. package/dist/converter/index.js.map +1 -0
  13. package/dist/converter/ingredient.d.ts +5 -0
  14. package/dist/converter/ingredient.d.ts.map +1 -0
  15. package/dist/converter/ingredient.js +49 -0
  16. package/dist/converter/ingredient.js.map +1 -0
  17. package/dist/converter/profile.d.ts +4 -0
  18. package/dist/converter/profile.d.ts.map +1 -0
  19. package/dist/converter/profile.js +40 -0
  20. package/dist/converter/profile.js.map +1 -0
  21. package/dist/converter/recipe.d.ts +5 -0
  22. package/dist/converter/recipe.d.ts.map +1 -0
  23. package/dist/converter/recipe.js +75 -0
  24. package/dist/converter/recipe.js.map +1 -0
  25. package/dist/converter/report.d.ts +4 -0
  26. package/dist/converter/report.d.ts.map +1 -0
  27. package/dist/converter/report.js +46 -0
  28. package/dist/converter/report.js.map +1 -0
  29. package/dist/converter/settings.d.ts +4 -0
  30. package/dist/converter/settings.d.ts.map +1 -0
  31. package/dist/converter/settings.js +44 -0
  32. package/dist/converter/settings.js.map +1 -0
  33. package/dist/converter/submission.d.ts +4 -0
  34. package/dist/converter/submission.d.ts.map +1 -0
  35. package/dist/converter/submission.js +41 -0
  36. package/dist/converter/submission.js.map +1 -0
  37. package/dist/converter/user.d.ts +4 -0
  38. package/dist/converter/user.d.ts.map +1 -0
  39. package/dist/converter/user.js +39 -0
  40. package/dist/converter/user.js.map +1 -0
  41. package/dist/equipment/equipment.repository.d.ts +6 -0
  42. package/dist/equipment/equipment.repository.d.ts.map +1 -0
  43. package/dist/equipment/equipment.repository.js +11 -0
  44. package/dist/equipment/equipment.repository.js.map +1 -0
  45. package/dist/equipment/index.d.ts +2 -0
  46. package/dist/equipment/index.d.ts.map +1 -0
  47. package/dist/equipment/index.js +18 -0
  48. package/dist/equipment/index.js.map +1 -0
  49. package/dist/iam/index.d.ts +2 -1
  50. package/dist/iam/index.d.ts.map +1 -1
  51. package/dist/iam/index.js +2 -1
  52. package/dist/iam/index.js.map +1 -1
  53. package/dist/iam/profile.converter.d.ts +4 -0
  54. package/dist/iam/profile.converter.d.ts.map +1 -0
  55. package/dist/iam/profile.converter.js +40 -0
  56. package/dist/iam/profile.converter.js.map +1 -0
  57. package/dist/iam/user.converter.d.ts +4 -0
  58. package/dist/iam/user.converter.d.ts.map +1 -0
  59. package/dist/iam/user.converter.js +39 -0
  60. package/dist/iam/user.converter.js.map +1 -0
  61. package/dist/index.d.ts +3 -3
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +3 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/ingredient/index.d.ts +2 -0
  66. package/dist/ingredient/index.d.ts.map +1 -0
  67. package/dist/ingredient/index.js +18 -0
  68. package/dist/ingredient/index.js.map +1 -0
  69. package/dist/ingredient/ingredient.repository.d.ts +6 -0
  70. package/dist/ingredient/ingredient.repository.d.ts.map +1 -0
  71. package/dist/ingredient/ingredient.repository.js +11 -0
  72. package/dist/ingredient/ingredient.repository.js.map +1 -0
  73. package/dist/lib/asset.repository.d.ts +13 -0
  74. package/dist/lib/asset.repository.d.ts.map +1 -0
  75. package/dist/lib/asset.repository.js +65 -0
  76. package/dist/lib/asset.repository.js.map +1 -0
  77. package/dist/lib/index.d.ts +2 -0
  78. package/dist/lib/index.d.ts.map +1 -0
  79. package/dist/lib/index.js +18 -0
  80. package/dist/lib/index.js.map +1 -0
  81. package/dist/recipe/index.d.ts +2 -2
  82. package/dist/recipe/index.d.ts.map +1 -1
  83. package/dist/recipe/index.js +2 -2
  84. package/dist/recipe/index.js.map +1 -1
  85. package/dist/recipe/recipe.converter.d.ts +5 -0
  86. package/dist/recipe/recipe.converter.d.ts.map +1 -0
  87. package/dist/recipe/recipe.converter.js +86 -0
  88. package/dist/recipe/recipe.converter.js.map +1 -0
  89. package/dist/recipe/recipe.repository.d.ts +22 -0
  90. package/dist/recipe/recipe.repository.d.ts.map +1 -0
  91. package/dist/recipe/recipe.repository.js +210 -0
  92. package/dist/recipe/recipe.repository.js.map +1 -0
  93. package/dist/recipe/user_recipe_repository.d.ts +1 -1
  94. package/dist/recipe/user_recipe_repository.d.ts.map +1 -1
  95. package/dist/recipe/user_recipe_repository.js +7 -7
  96. package/dist/recipe/user_recipe_repository.js.map +1 -1
  97. package/dist/repository/base.d.ts +32 -0
  98. package/dist/repository/base.d.ts.map +1 -0
  99. package/dist/repository/base.js +167 -0
  100. package/dist/repository/base.js.map +1 -0
  101. package/dist/repository/equipment.d.ts +14 -0
  102. package/dist/repository/equipment.d.ts.map +1 -0
  103. package/dist/repository/equipment.js +33 -0
  104. package/dist/repository/equipment.js.map +1 -0
  105. package/dist/repository/index.d.ts +6 -0
  106. package/dist/repository/index.d.ts.map +1 -0
  107. package/dist/repository/index.js +22 -0
  108. package/dist/repository/index.js.map +1 -0
  109. package/dist/repository/ingredient.d.ts +14 -0
  110. package/dist/repository/ingredient.d.ts.map +1 -0
  111. package/dist/repository/ingredient.js +33 -0
  112. package/dist/repository/ingredient.js.map +1 -0
  113. package/dist/repository/recipe.d.ts +17 -0
  114. package/dist/repository/recipe.d.ts.map +1 -0
  115. package/dist/repository/recipe.js +92 -0
  116. package/dist/repository/recipe.js.map +1 -0
  117. package/dist/repository/recipe_stats.d.ts +19 -0
  118. package/dist/repository/recipe_stats.d.ts.map +1 -0
  119. package/dist/repository/recipe_stats.js +121 -0
  120. package/dist/repository/recipe_stats.js.map +1 -0
  121. package/dist/repository/user_recipe.d.ts +39 -0
  122. package/dist/repository/user_recipe.d.ts.map +1 -0
  123. package/dist/repository/user_recipe.js +160 -0
  124. package/dist/repository/user_recipe.js.map +1 -0
  125. package/dist/transform/index.d.ts +2 -0
  126. package/dist/transform/index.d.ts.map +1 -0
  127. package/dist/transform/index.js +18 -0
  128. package/dist/transform/index.js.map +1 -0
  129. package/dist/transform/recipe.d.ts +7 -0
  130. package/dist/transform/recipe.d.ts.map +1 -0
  131. package/dist/transform/recipe.js +118 -0
  132. package/dist/transform/recipe.js.map +1 -0
  133. package/dist/utils/cursor.d.ts +10 -0
  134. package/dist/utils/cursor.d.ts.map +1 -0
  135. package/dist/utils/cursor.js +31 -0
  136. package/dist/utils/cursor.js.map +1 -0
  137. package/dist/utils/index.d.ts +1 -0
  138. package/dist/utils/index.d.ts.map +1 -1
  139. package/dist/utils/index.js +1 -0
  140. package/dist/utils/index.js.map +1 -1
  141. package/dist/utils/timestamp.d.ts +2 -0
  142. package/dist/utils/timestamp.d.ts.map +1 -1
  143. package/dist/utils/timestamp.js +19 -0
  144. package/dist/utils/timestamp.js.map +1 -1
  145. package/package.json +2 -2
  146. package/src/converter/comment.ts +41 -0
  147. package/src/converter/equipment.ts +58 -0
  148. package/src/converter/index.ts +9 -0
  149. package/src/converter/ingredient.ts +58 -0
  150. package/src/converter/profile.ts +44 -0
  151. package/src/{recipe/converters.ts → converter/recipe.ts} +6 -20
  152. package/src/converter/report.ts +52 -0
  153. package/src/converter/settings.ts +49 -0
  154. package/src/converter/submission.ts +47 -0
  155. package/src/{iam/converters.ts → converter/user.ts} +10 -5
  156. package/src/index.ts +3 -3
  157. package/src/repository/base.ts +274 -0
  158. package/src/repository/equipment.ts +62 -0
  159. package/src/repository/index.ts +5 -0
  160. package/src/repository/ingredient.ts +62 -0
  161. package/src/repository/recipe.ts +147 -0
  162. package/src/{recipe/stats_repository.ts → repository/recipe_stats.ts} +22 -81
  163. package/src/repository/user_recipe.ts +225 -0
  164. package/src/transform/index.ts +1 -0
  165. package/src/utils/cursor.ts +34 -0
  166. package/src/utils/index.ts +1 -0
  167. package/src/utils/timestamp.ts +20 -0
  168. package/src/asset/index.ts +0 -1
  169. package/src/asset/repository.ts +0 -142
  170. package/src/iam/index.ts +0 -1
  171. package/src/recipe/index.ts +0 -5
  172. package/src/recipe/repository.ts +0 -284
  173. package/src/recipe/user_recipe_repository.ts +0 -240
  174. /package/src/{recipe/utils.ts → transform/recipe.ts} +0 -0
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecipeRepository = void 0;
4
+ const firestore_1 = require("firebase-admin/firestore");
5
+ const core_1 = require("@cravery/core");
6
+ const recipe_converter_1 = require("./recipe.converter");
7
+ const utils_1 = require("./utils");
8
+ const cursor_1 = require("../utils/cursor");
9
+ class RecipeRepository {
10
+ constructor(db) {
11
+ this.db = db;
12
+ }
13
+ get metaCollection() {
14
+ return this.db
15
+ .collection(core_1.COLLECTIONS.Recipes)
16
+ .withConverter(recipe_converter_1.recipeMetaConverter);
17
+ }
18
+ contentCollection(recipeId) {
19
+ return this.db
20
+ .collection(core_1.COLLECTIONS.Recipes)
21
+ .doc(recipeId)
22
+ .collection(core_1.COLLECTIONS.Content)
23
+ .withConverter(recipe_converter_1.recipeContentConverter);
24
+ }
25
+ async create(recipe) {
26
+ const { meta, content } = (0, utils_1.splitRecipe)(recipe);
27
+ const metaRef = await this.metaCollection.add(meta);
28
+ await this.contentCollection(metaRef.id).doc(content.locale).set(content);
29
+ return Object.assign({ id: metaRef.id }, recipe);
30
+ }
31
+ async getById(recipeId, locale) {
32
+ const [metaDoc, contentDoc] = await Promise.all([
33
+ this.metaCollection.doc(recipeId).get(),
34
+ this.contentCollection(recipeId).doc(locale).get(),
35
+ ]);
36
+ if (!metaDoc.exists) {
37
+ throw new Error(`Recipe ${recipeId} not found`);
38
+ }
39
+ const meta = metaDoc.data();
40
+ let content;
41
+ if (contentDoc.exists) {
42
+ content = contentDoc.data();
43
+ }
44
+ else {
45
+ const originalContentDoc = await this.contentCollection(recipeId)
46
+ .doc(meta.originalLocale)
47
+ .get();
48
+ if (!originalContentDoc.exists) {
49
+ throw new Error(`Recipe ${recipeId} has no content for locale ${locale} or ${meta.originalLocale}`);
50
+ }
51
+ content = originalContentDoc.data();
52
+ }
53
+ return (0, utils_1.mergeRecipe)(meta, content);
54
+ }
55
+ async updateMeta(recipeId, updates) {
56
+ await this.metaCollection.doc(recipeId).update(Object.assign(Object.assign({}, updates), { updatedAt: firestore_1.Timestamp.now() }));
57
+ }
58
+ async updateContent(recipeId, locale, content) {
59
+ await this.contentCollection(recipeId)
60
+ .doc(locale)
61
+ .set(Object.assign(Object.assign({}, content), { locale }), { merge: true });
62
+ }
63
+ async delete(recipeId) {
64
+ await this.metaCollection.doc(recipeId).update({
65
+ status: "deleted",
66
+ deletedAt: firestore_1.Timestamp.now(),
67
+ });
68
+ }
69
+ async getByStatus(status, locale, limit = 10) {
70
+ const metaSnapshot = await this.metaCollection
71
+ .where("status", "==", status)
72
+ .limit(limit)
73
+ .get();
74
+ const recipes = await Promise.all(metaSnapshot.docs.map(async (metaDoc) => {
75
+ const meta = metaDoc.data();
76
+ const contentDoc = await this.contentCollection(metaDoc.id)
77
+ .doc(locale)
78
+ .get();
79
+ let content;
80
+ if (contentDoc.exists) {
81
+ content = contentDoc.data();
82
+ }
83
+ else {
84
+ const originalContentDoc = await this.contentCollection(metaDoc.id)
85
+ .doc(meta.originalLocale)
86
+ .get();
87
+ content = originalContentDoc.data();
88
+ }
89
+ return (0, utils_1.mergeRecipe)(meta, content);
90
+ }));
91
+ return recipes;
92
+ }
93
+ async getByMultipleStatuses(statuses, locale, limit = 20, cursor, direction = "forward") {
94
+ const isForward = direction === "forward";
95
+ const sortDir = isForward ? "desc" : "asc";
96
+ let query = this.metaCollection
97
+ .where("status", "in", statuses)
98
+ .orderBy("createdAt", sortDir)
99
+ .orderBy(firestore_1.FieldPath.documentId(), sortDir);
100
+ if (cursor) {
101
+ const [timestamp, id] = (0, cursor_1.cursorToFirestoreValues)(cursor);
102
+ query = query.startAfter(timestamp, id);
103
+ }
104
+ const snapshot = await query.limit(limit + 1).get();
105
+ const hasMore = snapshot.docs.length > limit;
106
+ let docs = hasMore ? snapshot.docs.slice(0, -1) : snapshot.docs;
107
+ if (!isForward) {
108
+ docs = docs.reverse();
109
+ }
110
+ if (docs.length === 0) {
111
+ return {
112
+ data: [],
113
+ startCursor: null,
114
+ endCursor: null,
115
+ hasNextPage: false,
116
+ hasPreviousPage: false,
117
+ };
118
+ }
119
+ const recipes = await this.hydrateRecipes(docs, locale);
120
+ const firstDoc = docs[0];
121
+ const lastDoc = docs[docs.length - 1];
122
+ // Use .get() to access raw Firestore Timestamp (bypasses converter)
123
+ const firstCreatedAt = firstDoc.get("createdAt");
124
+ const lastCreatedAt = lastDoc.get("createdAt");
125
+ return {
126
+ data: recipes,
127
+ startCursor: (0, cursor_1.encodeCursor)(firstCreatedAt, firstDoc.id),
128
+ endCursor: (0, cursor_1.encodeCursor)(lastCreatedAt, lastDoc.id),
129
+ hasNextPage: isForward ? hasMore : !!cursor,
130
+ hasPreviousPage: isForward ? !!cursor : hasMore,
131
+ };
132
+ }
133
+ async hydrateRecipes(docs, locale) {
134
+ const contentDocs = await Promise.all(docs.map((metaDoc) => this.contentCollection(metaDoc.id).doc(locale).get()));
135
+ return Promise.all(docs.map(async (metaDoc, index) => {
136
+ const meta = metaDoc.data();
137
+ const contentDoc = contentDocs[index];
138
+ let content;
139
+ if (contentDoc.exists) {
140
+ content = contentDoc.data();
141
+ }
142
+ else {
143
+ const originalContentDoc = await this.contentCollection(metaDoc.id)
144
+ .doc(meta.originalLocale)
145
+ .get();
146
+ content = originalContentDoc.data();
147
+ }
148
+ return (0, utils_1.mergeRecipe)(meta, content);
149
+ }));
150
+ }
151
+ async findBySourceUrl(sourceUrl) {
152
+ const metaSnapshot = await this.metaCollection
153
+ .where("sourceUrl", "==", sourceUrl)
154
+ .limit(1)
155
+ .get();
156
+ if (metaSnapshot.empty) {
157
+ return null;
158
+ }
159
+ const metaDoc = metaSnapshot.docs[0];
160
+ const meta = metaDoc.data();
161
+ const contentDoc = await this.contentCollection(metaDoc.id)
162
+ .doc(meta.originalLocale)
163
+ .get();
164
+ if (!contentDoc.exists) {
165
+ throw new Error(`Recipe ${metaDoc.id} has no content`);
166
+ }
167
+ const content = contentDoc.data();
168
+ return (0, utils_1.mergeRecipe)(meta, content);
169
+ }
170
+ async getMeta(recipeId) {
171
+ const metaDoc = await this.metaCollection.doc(recipeId).get();
172
+ if (!metaDoc.exists) {
173
+ throw new Error(`Recipe ${recipeId} not found`);
174
+ }
175
+ return metaDoc.data();
176
+ }
177
+ async getContent(recipeId, locale) {
178
+ const contentDoc = await this.contentCollection(recipeId).doc(locale).get();
179
+ if (!contentDoc.exists) {
180
+ throw new Error(`Recipe ${recipeId} has no content for locale ${locale}`);
181
+ }
182
+ return contentDoc.data();
183
+ }
184
+ async createContent(recipeId, content) {
185
+ const metaDoc = await this.metaCollection.doc(recipeId).get();
186
+ if (!metaDoc.exists) {
187
+ throw new Error(`Recipe ${recipeId} not found`);
188
+ }
189
+ const existingContent = await this.contentCollection(recipeId)
190
+ .doc(content.locale)
191
+ .get();
192
+ if (existingContent.exists) {
193
+ throw new Error(`Content for recipe ${recipeId} in locale ${content.locale} already exists. Use updateContent() instead.`);
194
+ }
195
+ await this.contentCollection(recipeId).doc(content.locale).set(content);
196
+ }
197
+ async getAllContent(recipeId) {
198
+ const metaDoc = await this.metaCollection.doc(recipeId).get();
199
+ if (!metaDoc.exists) {
200
+ throw new Error(`Recipe ${recipeId} not found`);
201
+ }
202
+ const snapshot = await this.contentCollection(recipeId).get();
203
+ if (snapshot.empty) {
204
+ throw new Error(`Recipe ${recipeId} has no content`);
205
+ }
206
+ return snapshot.docs.map((doc) => doc.data());
207
+ }
208
+ }
209
+ exports.RecipeRepository = RecipeRepository;
210
+ //# sourceMappingURL=recipe.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe.repository.js","sourceRoot":"","sources":["../../src/recipe/recipe.repository.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Firestore } from "firebase-admin/firestore";
2
2
  import type { Recipe, RecipeMeta, RecipeContent, Locale } from "@cravery/core";
3
- import { RecipeRepository } from "./repository";
3
+ import { RecipeRepository } from "./recipe.repository";
4
4
  export declare class UserRecipeRepository {
5
5
  private db;
6
6
  constructor(db: Firestore);
@@ -1 +1 @@
1
- {"version":3,"file":"user_recipe_repository.d.ts","sourceRoot":"","sources":["../../src/recipe/user_recipe_repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,qBAAa,oBAAoB;IACnB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,SAAS;IAE3B,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAqBxB,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAqBxB,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAuBjC,WAAW,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,MAAM,CAAC;IAwCZ,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAmCZ,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KAClC,GACA,OAAO,CAAC,IAAI,CAAC;IA+BV,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3D,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAS1B"}
1
+ {"version":3,"file":"user_recipe_repository.d.ts","sourceRoot":"","sources":["../../src/recipe/user_recipe_repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAM/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,oBAAoB;IACnB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,SAAS;IAE3B,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAqBxB,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAqBxB,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAuBjC,WAAW,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,MAAM,CAAC;IAwCZ,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAmCZ,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KAClC,GACA,OAAO,CAAC,IAAI,CAAC;IA+BV,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3D,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAS1B"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UserRecipeRepository = void 0;
4
4
  const firestore_1 = require("firebase-admin/firestore");
5
- const converters_1 = require("./converters");
5
+ const recipe_converter_1 = require("./recipe.converter");
6
6
  const utils_1 = require("./utils");
7
7
  class UserRecipeRepository {
8
8
  constructor(db) {
@@ -85,7 +85,7 @@ class UserRecipeRepository {
85
85
  .doc(userId)
86
86
  .collection("recipes")
87
87
  .doc(recipeId)
88
- .withConverter(converters_1.recipeMetaConverter);
88
+ .withConverter(recipe_converter_1.recipeMetaConverter);
89
89
  await userMetaRef.set(meta);
90
90
  await this.db
91
91
  .collection("users")
@@ -94,7 +94,7 @@ class UserRecipeRepository {
94
94
  .doc(recipeId)
95
95
  .collection("content")
96
96
  .doc(locale)
97
- .withConverter(converters_1.recipeContentConverter)
97
+ .withConverter(recipe_converter_1.recipeContentConverter)
98
98
  .set(content);
99
99
  return sourceRecipe;
100
100
  }
@@ -104,7 +104,7 @@ class UserRecipeRepository {
104
104
  .doc(userId)
105
105
  .collection("recipes")
106
106
  .doc(recipeId)
107
- .withConverter(converters_1.recipeMetaConverter)
107
+ .withConverter(recipe_converter_1.recipeMetaConverter)
108
108
  .get();
109
109
  if (!metaDoc.exists) {
110
110
  throw new Error(`Recipe ${recipeId} not found in user ${userId}'s collection`);
@@ -116,7 +116,7 @@ class UserRecipeRepository {
116
116
  .doc(recipeId)
117
117
  .collection("content")
118
118
  .doc(locale)
119
- .withConverter(converters_1.recipeContentConverter)
119
+ .withConverter(recipe_converter_1.recipeContentConverter)
120
120
  .get();
121
121
  if (!contentDoc.exists) {
122
122
  throw new Error(`Recipe ${recipeId} has no content for locale ${locale}`);
@@ -137,13 +137,13 @@ class UserRecipeRepository {
137
137
  throw new Error(`Recipe ${recipeId} not found in user ${userId}'s collection`);
138
138
  }
139
139
  if (updates.meta) {
140
- await baseRef.withConverter(converters_1.recipeMetaConverter).update(Object.assign(Object.assign({}, updates.meta), { updatedAt: firestore_1.Timestamp.now() }));
140
+ await baseRef.withConverter(recipe_converter_1.recipeMetaConverter).update(Object.assign(Object.assign({}, updates.meta), { updatedAt: firestore_1.Timestamp.now() }));
141
141
  }
142
142
  if (updates.content) {
143
143
  await baseRef
144
144
  .collection("content")
145
145
  .doc(locale)
146
- .withConverter(converters_1.recipeContentConverter)
146
+ .withConverter(recipe_converter_1.recipeContentConverter)
147
147
  .set(Object.assign(Object.assign({}, updates.content), { locale }), { merge: true });
148
148
  }
149
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user_recipe_repository.js","sourceRoot":"","sources":["../../src/recipe/user_recipe_repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user_recipe_repository.js","sourceRoot":"","sources":["../../src/recipe/user_recipe_repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Firestore, FirestoreDataConverter, Query } from "firebase-admin/firestore";
2
+ import { type Entity, type Locale, type CursorPaginatedResult, type PaginationDirection } from "@cravery/core";
3
+ export interface SplitResult<TMeta, TContent> {
4
+ meta: Omit<TMeta, "id">;
5
+ content: TContent;
6
+ }
7
+ export declare abstract class BaseRepository<TEntity extends TMeta & TContent, TMeta extends Entity, TContent> {
8
+ protected db: Firestore;
9
+ protected abstract readonly collectionName: string;
10
+ protected abstract readonly entityName: string;
11
+ protected abstract readonly metaConverter: FirestoreDataConverter<TMeta>;
12
+ protected abstract readonly contentConverter: FirestoreDataConverter<TContent>;
13
+ constructor(db: Firestore);
14
+ protected abstract merge(meta: TMeta, content: TContent): TEntity;
15
+ protected abstract split(entity: TEntity): SplitResult<TMeta, TContent>;
16
+ protected get metaCollection(): FirebaseFirestore.CollectionReference<TMeta, FirebaseFirestore.DocumentData>;
17
+ protected contentCollection(entityId: string): FirebaseFirestore.CollectionReference<TContent, FirebaseFirestore.DocumentData>;
18
+ create(entity: Omit<TEntity, "id">, locale: Locale, id?: string): Promise<TEntity>;
19
+ getById(entityId: string, locale: Locale): Promise<TEntity>;
20
+ getMeta(entityId: string): Promise<TMeta>;
21
+ getContent(entityId: string, locale: Locale): Promise<TContent>;
22
+ updateMeta(entityId: string, updates: Partial<Omit<TMeta, "id" | "createdAt">>): Promise<void>;
23
+ updateContent(entityId: string, locale: Locale, content: Partial<TContent>): Promise<void>;
24
+ createContent(entityId: string, locale: Locale, content: TContent): Promise<void>;
25
+ getAllContent(entityId: string): Promise<TContent[]>;
26
+ delete(entityId: string): Promise<void>;
27
+ getPaginated(locale: Locale, limit?: number, cursor?: string, direction?: PaginationDirection): Promise<CursorPaginatedResult<TEntity>>;
28
+ exists(entityId: string): Promise<boolean>;
29
+ protected executePaginatedQuery(baseQuery: Query<TMeta>, locale: Locale, limit: number, cursor?: string, direction?: PaginationDirection): Promise<CursorPaginatedResult<TEntity>>;
30
+ protected hydrate(docs: FirebaseFirestore.QueryDocumentSnapshot<TMeta>[], locale: Locale): Promise<TEntity[]>;
31
+ }
32
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/repository/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepository = void 0;
4
+ const firestore_1 = require("firebase-admin/firestore");
5
+ const core_1 = require("@cravery/core");
6
+ const cursor_1 = require("../utils/cursor");
7
+ class BaseRepository {
8
+ constructor(db) {
9
+ this.db = db;
10
+ }
11
+ get metaCollection() {
12
+ return this.db
13
+ .collection(this.collectionName)
14
+ .withConverter(this.metaConverter);
15
+ }
16
+ contentCollection(entityId) {
17
+ return this.db
18
+ .collection(this.collectionName)
19
+ .doc(entityId)
20
+ .collection(core_1.COLLECTIONS.Content)
21
+ .withConverter(this.contentConverter);
22
+ }
23
+ async create(entity, locale, id) {
24
+ const { meta, content } = this.split(entity);
25
+ let entityId;
26
+ if (id) {
27
+ await this.metaCollection.doc(id).set(meta);
28
+ entityId = id;
29
+ }
30
+ else {
31
+ const metaRef = await this.metaCollection.add(meta);
32
+ entityId = metaRef.id;
33
+ }
34
+ await this.contentCollection(entityId).doc(locale).set(content);
35
+ return Object.assign({ id: entityId }, entity);
36
+ }
37
+ async getById(entityId, locale) {
38
+ const [metaDoc, contentDoc] = await Promise.all([
39
+ this.metaCollection.doc(entityId).get(),
40
+ this.contentCollection(entityId).doc(locale).get(),
41
+ ]);
42
+ if (!metaDoc.exists) {
43
+ throw new Error(`${this.entityName} ${entityId} not found`);
44
+ }
45
+ const meta = metaDoc.data();
46
+ if (!contentDoc.exists) {
47
+ throw new Error(`${this.entityName} ${entityId} has no content for locale ${locale}`);
48
+ }
49
+ const content = contentDoc.data();
50
+ return this.merge(meta, content);
51
+ }
52
+ async getMeta(entityId) {
53
+ const metaDoc = await this.metaCollection.doc(entityId).get();
54
+ if (!metaDoc.exists) {
55
+ throw new Error(`${this.entityName} ${entityId} not found`);
56
+ }
57
+ return metaDoc.data();
58
+ }
59
+ async getContent(entityId, locale) {
60
+ const contentDoc = await this.contentCollection(entityId).doc(locale).get();
61
+ if (!contentDoc.exists) {
62
+ throw new Error(`${this.entityName} ${entityId} has no content for locale ${locale}`);
63
+ }
64
+ return contentDoc.data();
65
+ }
66
+ async updateMeta(entityId, updates) {
67
+ await this.metaCollection.doc(entityId).update(Object.assign(Object.assign({}, updates), { updatedAt: firestore_1.Timestamp.now() }));
68
+ }
69
+ async updateContent(entityId, locale, content) {
70
+ await this.contentCollection(entityId)
71
+ .doc(locale)
72
+ .set(content, { merge: true });
73
+ }
74
+ async createContent(entityId, locale, content) {
75
+ const metaDoc = await this.metaCollection.doc(entityId).get();
76
+ if (!metaDoc.exists) {
77
+ throw new Error(`${this.entityName} ${entityId} not found`);
78
+ }
79
+ const existingContent = await this.contentCollection(entityId)
80
+ .doc(locale)
81
+ .get();
82
+ if (existingContent.exists) {
83
+ throw new Error(`Content for ${this.entityName.toLowerCase()} ${entityId} in locale ${locale} already exists. Use updateContent() instead.`);
84
+ }
85
+ await this.contentCollection(entityId).doc(locale).set(content);
86
+ }
87
+ async getAllContent(entityId) {
88
+ const metaDoc = await this.metaCollection.doc(entityId).get();
89
+ if (!metaDoc.exists) {
90
+ throw new Error(`${this.entityName} ${entityId} not found`);
91
+ }
92
+ const snapshot = await this.contentCollection(entityId).get();
93
+ if (snapshot.empty) {
94
+ throw new Error(`${this.entityName} ${entityId} has no content`);
95
+ }
96
+ return snapshot.docs.map((doc) => doc.data());
97
+ }
98
+ async delete(entityId) {
99
+ await this.metaCollection.doc(entityId).update({
100
+ status: "deleted",
101
+ deletedAt: firestore_1.Timestamp.now(),
102
+ updatedAt: firestore_1.Timestamp.now(),
103
+ });
104
+ }
105
+ async getPaginated(locale, limit = 20, cursor, direction = "forward") {
106
+ const baseQuery = this.metaCollection.where("status", "!=", "deleted");
107
+ return this.executePaginatedQuery(baseQuery, locale, limit, cursor, direction);
108
+ }
109
+ async exists(entityId) {
110
+ const doc = await this.metaCollection.doc(entityId).get();
111
+ return doc.exists;
112
+ }
113
+ async executePaginatedQuery(baseQuery, locale, limit, cursor, direction = "forward") {
114
+ const isForward = direction === "forward";
115
+ const sortDir = isForward ? "desc" : "asc";
116
+ let query = baseQuery
117
+ .orderBy("createdAt", sortDir)
118
+ .orderBy(firestore_1.FieldPath.documentId(), sortDir);
119
+ if (cursor) {
120
+ const [timestamp, id] = (0, cursor_1.cursorToFirestoreValues)(cursor);
121
+ query = query.startAfter(timestamp, id);
122
+ }
123
+ const snapshot = await query.limit(limit + 1).get();
124
+ const hasMore = snapshot.docs.length > limit;
125
+ let docs = hasMore ? snapshot.docs.slice(0, -1) : snapshot.docs;
126
+ if (!isForward) {
127
+ docs = docs.reverse();
128
+ }
129
+ if (docs.length === 0) {
130
+ return {
131
+ data: [],
132
+ startCursor: null,
133
+ endCursor: null,
134
+ hasNextPage: false,
135
+ hasPreviousPage: false,
136
+ };
137
+ }
138
+ const entities = await this.hydrate(docs, locale);
139
+ const firstDoc = docs[0];
140
+ const lastDoc = docs[docs.length - 1];
141
+ const firstCreatedAt = firstDoc.get("createdAt");
142
+ const lastCreatedAt = lastDoc.get("createdAt");
143
+ return {
144
+ data: entities,
145
+ startCursor: (0, cursor_1.encodeCursor)(firstCreatedAt, firstDoc.id),
146
+ endCursor: (0, cursor_1.encodeCursor)(lastCreatedAt, lastDoc.id),
147
+ hasNextPage: isForward ? hasMore : !!cursor,
148
+ hasPreviousPage: isForward ? !!cursor : hasMore,
149
+ };
150
+ }
151
+ async hydrate(docs, locale) {
152
+ const contentDocs = await Promise.all(docs.map((metaDoc) => this.contentCollection(metaDoc.id).doc(locale).get()));
153
+ return docs
154
+ .map((metaDoc, index) => {
155
+ const meta = metaDoc.data();
156
+ const contentDoc = contentDocs[index];
157
+ if (!contentDoc.exists) {
158
+ return null;
159
+ }
160
+ const content = contentDoc.data();
161
+ return this.merge(meta, content);
162
+ })
163
+ .filter((item) => item !== null);
164
+ }
165
+ }
166
+ exports.BaseRepository = BaseRepository;
167
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/repository/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Firestore } from "firebase-admin/firestore";
2
+ import { type EquipmentEntity, type EquipmentEntityMeta, type EquipmentEntityContent, type EquipmentCategory, type Locale, type CursorPaginatedResult, type PaginationDirection } from "@cravery/core";
3
+ import { BaseRepository, SplitResult } from "./base";
4
+ export declare class EquipmentRepository extends BaseRepository<EquipmentEntity, EquipmentEntityMeta, EquipmentEntityContent> {
5
+ protected readonly collectionName: string;
6
+ protected readonly entityName = "Equipment";
7
+ protected readonly metaConverter: FirebaseFirestore.FirestoreDataConverter<EquipmentEntityMeta, FirebaseFirestore.DocumentData>;
8
+ protected readonly contentConverter: FirebaseFirestore.FirestoreDataConverter<EquipmentEntityContent, FirebaseFirestore.DocumentData>;
9
+ constructor(db: Firestore);
10
+ protected merge(meta: EquipmentEntityMeta, content: EquipmentEntityContent): EquipmentEntity;
11
+ protected split(equipment: EquipmentEntity): SplitResult<EquipmentEntityMeta, EquipmentEntityContent>;
12
+ getByCategory(category: EquipmentCategory, locale: Locale, limit?: number, cursor?: string, direction?: PaginationDirection): Promise<CursorPaginatedResult<EquipmentEntity>>;
13
+ }
14
+ //# sourceMappingURL=equipment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equipment.d.ts","sourceRoot":"","sources":["../../src/repository/equipment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErD,qBAAa,mBAAoB,SAAQ,cAAc,CACrD,eAAe,EACf,mBAAmB,EACnB,sBAAsB,CACvB;IACC,SAAS,CAAC,QAAQ,CAAC,cAAc,SAAyB;IAC1D,SAAS,CAAC,QAAQ,CAAC,UAAU,eAAe;IAC5C,SAAS,CAAC,QAAQ,CAAC,aAAa,gGAA0B;IAC1D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,mGAA6B;gBAEpD,EAAE,EAAE,SAAS;IAIzB,SAAS,CAAC,KAAK,CACb,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,sBAAsB,GAC9B,eAAe;IAIlB,SAAS,CAAC,KAAK,CACb,SAAS,EAAE,eAAe,GACzB,WAAW,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;IAQrD,aAAa,CACjB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,KAAK,SAAK,EACV,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,GAAE,mBAA+B,GACzC,OAAO,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;CAOnD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EquipmentRepository = void 0;
4
+ const core_1 = require("@cravery/core");
5
+ const converter_1 = require("../converter");
6
+ const base_1 = require("./base");
7
+ class EquipmentRepository extends base_1.BaseRepository {
8
+ constructor(db) {
9
+ super(db);
10
+ this.collectionName = core_1.COLLECTIONS.Equipment;
11
+ this.entityName = "Equipment";
12
+ this.metaConverter = converter_1.equipmentMetaConverter;
13
+ this.contentConverter = converter_1.equipmentContentConverter;
14
+ }
15
+ merge(meta, content) {
16
+ return Object.assign(Object.assign({}, meta), content);
17
+ }
18
+ split(equipment) {
19
+ const { id: _id, createdAt, updatedAt, deletedAt, status, category, name, slug } = equipment;
20
+ return {
21
+ meta: { category, slug, status, createdAt, updatedAt, deletedAt },
22
+ content: { name, slug },
23
+ };
24
+ }
25
+ async getByCategory(category, locale, limit = 20, cursor, direction = "forward") {
26
+ const baseQuery = this.metaCollection
27
+ .where("category", "==", category)
28
+ .where("status", "!=", "deleted");
29
+ return this.executePaginatedQuery(baseQuery, locale, limit, cursor, direction);
30
+ }
31
+ }
32
+ exports.EquipmentRepository = EquipmentRepository;
33
+ //# sourceMappingURL=equipment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equipment.js","sourceRoot":"","sources":["../../src/repository/equipment.ts"],"names":[],"mappings":";;;AACA,wCASuB;AACvB,4CAGsB;AACtB,iCAAqD;AAErD,MAAa,mBAAoB,SAAQ,qBAIxC;IAMC,YAAY,EAAa;QACvB,KAAK,CAAC,EAAE,CAAC,CAAC;QANO,mBAAc,GAAG,kBAAW,CAAC,SAAS,CAAC;QACvC,eAAU,GAAG,WAAW,CAAC;QACzB,kBAAa,GAAG,kCAAsB,CAAC;QACvC,qBAAgB,GAAG,qCAAyB,CAAC;IAIhE,CAAC;IAES,KAAK,CACb,IAAyB,EACzB,OAA+B;QAE/B,uCAAY,IAAI,GAAK,OAAO,EAAG;IACjC,CAAC;IAES,KAAK,CACb,SAA0B;QAE1B,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;QAC7F,OAAO;YACL,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;YACjE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,QAA2B,EAC3B,MAAc,EACd,KAAK,GAAG,EAAE,EACV,MAAe,EACf,YAAiC,SAAS;QAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;aAClC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC;aACjC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC;CACF;AA5CD,kDA4CC"}
@@ -0,0 +1,6 @@
1
+ export * from "./base";
2
+ export * from "./equipment";
3
+ export * from "./ingredient";
4
+ export * from "./recipe";
5
+ export * from "./user_recipe";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}