@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.
- package/dist/converter/comment.d.ts +4 -0
- package/dist/converter/comment.d.ts.map +1 -0
- package/dist/converter/comment.js +36 -0
- package/dist/converter/comment.js.map +1 -0
- package/dist/converter/equipment.d.ts +5 -0
- package/dist/converter/equipment.d.ts.map +1 -0
- package/dist/converter/equipment.js +49 -0
- package/dist/converter/equipment.js.map +1 -0
- package/dist/converter/index.d.ts +10 -0
- package/dist/converter/index.d.ts.map +1 -0
- package/dist/converter/index.js +26 -0
- package/dist/converter/index.js.map +1 -0
- package/dist/converter/ingredient.d.ts +5 -0
- package/dist/converter/ingredient.d.ts.map +1 -0
- package/dist/converter/ingredient.js +49 -0
- package/dist/converter/ingredient.js.map +1 -0
- package/dist/converter/profile.d.ts +4 -0
- package/dist/converter/profile.d.ts.map +1 -0
- package/dist/converter/profile.js +40 -0
- package/dist/converter/profile.js.map +1 -0
- package/dist/converter/recipe.d.ts +5 -0
- package/dist/converter/recipe.d.ts.map +1 -0
- package/dist/converter/recipe.js +75 -0
- package/dist/converter/recipe.js.map +1 -0
- package/dist/converter/report.d.ts +4 -0
- package/dist/converter/report.d.ts.map +1 -0
- package/dist/converter/report.js +46 -0
- package/dist/converter/report.js.map +1 -0
- package/dist/converter/settings.d.ts +4 -0
- package/dist/converter/settings.d.ts.map +1 -0
- package/dist/converter/settings.js +44 -0
- package/dist/converter/settings.js.map +1 -0
- package/dist/converter/submission.d.ts +4 -0
- package/dist/converter/submission.d.ts.map +1 -0
- package/dist/converter/submission.js +41 -0
- package/dist/converter/submission.js.map +1 -0
- package/dist/converter/user.d.ts +4 -0
- package/dist/converter/user.d.ts.map +1 -0
- package/dist/converter/user.js +39 -0
- package/dist/converter/user.js.map +1 -0
- package/dist/equipment/equipment.repository.d.ts +6 -0
- package/dist/equipment/equipment.repository.d.ts.map +1 -0
- package/dist/equipment/equipment.repository.js +11 -0
- package/dist/equipment/equipment.repository.js.map +1 -0
- package/dist/equipment/index.d.ts +2 -0
- package/dist/equipment/index.d.ts.map +1 -0
- package/dist/equipment/index.js +18 -0
- package/dist/equipment/index.js.map +1 -0
- package/dist/iam/index.d.ts +2 -1
- package/dist/iam/index.d.ts.map +1 -1
- package/dist/iam/index.js +2 -1
- package/dist/iam/index.js.map +1 -1
- package/dist/iam/profile.converter.d.ts +4 -0
- package/dist/iam/profile.converter.d.ts.map +1 -0
- package/dist/iam/profile.converter.js +40 -0
- package/dist/iam/profile.converter.js.map +1 -0
- package/dist/iam/user.converter.d.ts +4 -0
- package/dist/iam/user.converter.d.ts.map +1 -0
- package/dist/iam/user.converter.js +39 -0
- package/dist/iam/user.converter.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/ingredient/index.d.ts +2 -0
- package/dist/ingredient/index.d.ts.map +1 -0
- package/dist/ingredient/index.js +18 -0
- package/dist/ingredient/index.js.map +1 -0
- package/dist/ingredient/ingredient.repository.d.ts +6 -0
- package/dist/ingredient/ingredient.repository.d.ts.map +1 -0
- package/dist/ingredient/ingredient.repository.js +11 -0
- package/dist/ingredient/ingredient.repository.js.map +1 -0
- package/dist/lib/asset.repository.d.ts +13 -0
- package/dist/lib/asset.repository.d.ts.map +1 -0
- package/dist/lib/asset.repository.js +65 -0
- package/dist/lib/asset.repository.js.map +1 -0
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +18 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/recipe/index.d.ts +2 -2
- package/dist/recipe/index.d.ts.map +1 -1
- package/dist/recipe/index.js +2 -2
- package/dist/recipe/index.js.map +1 -1
- package/dist/recipe/recipe.converter.d.ts +5 -0
- package/dist/recipe/recipe.converter.d.ts.map +1 -0
- package/dist/recipe/recipe.converter.js +86 -0
- package/dist/recipe/recipe.converter.js.map +1 -0
- package/dist/recipe/recipe.repository.d.ts +22 -0
- package/dist/recipe/recipe.repository.d.ts.map +1 -0
- package/dist/recipe/recipe.repository.js +210 -0
- package/dist/recipe/recipe.repository.js.map +1 -0
- package/dist/recipe/user_recipe_repository.d.ts +1 -1
- package/dist/recipe/user_recipe_repository.d.ts.map +1 -1
- package/dist/recipe/user_recipe_repository.js +7 -7
- package/dist/recipe/user_recipe_repository.js.map +1 -1
- package/dist/repository/base.d.ts +32 -0
- package/dist/repository/base.d.ts.map +1 -0
- package/dist/repository/base.js +167 -0
- package/dist/repository/base.js.map +1 -0
- package/dist/repository/equipment.d.ts +14 -0
- package/dist/repository/equipment.d.ts.map +1 -0
- package/dist/repository/equipment.js +33 -0
- package/dist/repository/equipment.js.map +1 -0
- package/dist/repository/index.d.ts +6 -0
- package/dist/repository/index.d.ts.map +1 -0
- package/dist/repository/index.js +22 -0
- package/dist/repository/index.js.map +1 -0
- package/dist/repository/ingredient.d.ts +14 -0
- package/dist/repository/ingredient.d.ts.map +1 -0
- package/dist/repository/ingredient.js +33 -0
- package/dist/repository/ingredient.js.map +1 -0
- package/dist/repository/recipe.d.ts +17 -0
- package/dist/repository/recipe.d.ts.map +1 -0
- package/dist/repository/recipe.js +92 -0
- package/dist/repository/recipe.js.map +1 -0
- package/dist/repository/recipe_stats.d.ts +19 -0
- package/dist/repository/recipe_stats.d.ts.map +1 -0
- package/dist/repository/recipe_stats.js +121 -0
- package/dist/repository/recipe_stats.js.map +1 -0
- package/dist/repository/user_recipe.d.ts +39 -0
- package/dist/repository/user_recipe.d.ts.map +1 -0
- package/dist/repository/user_recipe.js +160 -0
- package/dist/repository/user_recipe.js.map +1 -0
- package/dist/transform/index.d.ts +2 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +18 -0
- package/dist/transform/index.js.map +1 -0
- package/dist/transform/recipe.d.ts +7 -0
- package/dist/transform/recipe.d.ts.map +1 -0
- package/dist/transform/recipe.js +118 -0
- package/dist/transform/recipe.js.map +1 -0
- package/dist/utils/cursor.d.ts +10 -0
- package/dist/utils/cursor.d.ts.map +1 -0
- package/dist/utils/cursor.js +31 -0
- package/dist/utils/cursor.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/timestamp.d.ts +2 -0
- package/dist/utils/timestamp.d.ts.map +1 -1
- package/dist/utils/timestamp.js +19 -0
- package/dist/utils/timestamp.js.map +1 -1
- package/package.json +2 -2
- package/src/converter/comment.ts +41 -0
- package/src/converter/equipment.ts +58 -0
- package/src/converter/index.ts +9 -0
- package/src/converter/ingredient.ts +58 -0
- package/src/converter/profile.ts +44 -0
- package/src/{recipe/converters.ts → converter/recipe.ts} +6 -20
- package/src/converter/report.ts +52 -0
- package/src/converter/settings.ts +49 -0
- package/src/converter/submission.ts +47 -0
- package/src/{iam/converters.ts → converter/user.ts} +10 -5
- package/src/index.ts +3 -3
- package/src/repository/base.ts +274 -0
- package/src/repository/equipment.ts +62 -0
- package/src/repository/index.ts +5 -0
- package/src/repository/ingredient.ts +62 -0
- package/src/repository/recipe.ts +147 -0
- package/src/{recipe/stats_repository.ts → repository/recipe_stats.ts} +22 -81
- package/src/repository/user_recipe.ts +225 -0
- package/src/transform/index.ts +1 -0
- package/src/utils/cursor.ts +34 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/timestamp.ts +20 -0
- package/src/asset/index.ts +0 -1
- package/src/asset/repository.ts +0 -142
- package/src/iam/index.ts +0 -1
- package/src/recipe/index.ts +0 -5
- package/src/recipe/repository.ts +0 -284
- package/src/recipe/user_recipe_repository.ts +0 -240
- /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;
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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":";;;AAAA,wDAAgE;AAEhE,
|
|
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 @@
|
|
|
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"}
|