@cravery/firebase 0.0.16 → 0.0.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ingredient.d.ts","sourceRoot":"","sources":["../../src/converter/ingredient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAGvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,eAAe,CAAC;AASvB,eAAO,MAAM,uBAAuB,EAAE,sBAAsB,CAAC,oBAAoB,CA0B9E,CAAC;AAEJ,eAAO,MAAM,0BAA0B,EAAE,sBAAsB,CAAC,uBAAuB,CAiBpF,CAAC"}
1
+ {"version":3,"file":"ingredient.d.ts","sourceRoot":"","sources":["../../src/converter/ingredient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAGvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,eAAe,CAAC;AASvB,eAAO,MAAM,uBAAuB,EAAE,sBAAsB,CAAC,oBAAoB,CA2B9E,CAAC;AAEJ,eAAO,MAAM,0BAA0B,EAAE,sBAAsB,CAAC,uBAAuB,CAiBpF,CAAC"}
@@ -23,6 +23,7 @@ exports.ingredientMetaConverter = {
23
23
  return {
24
24
  id: snapshot.id,
25
25
  category: data.category,
26
+ group: data.group,
26
27
  slug: data.slug,
27
28
  status: data.status,
28
29
  createdAt: (0, utils_1.toTimestamp)(data.createdAt),
@@ -1 +1 @@
1
- {"version":3,"file":"ingredient.js","sourceRoot":"","sources":["../../src/converter/ingredient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AASA,oCAMkB;AAEL,QAAA,uBAAuB,GAClC;IACE,WAAW,CAAC,cAAoC;QAC9C,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,KAAc,cAAc,EAAvB,IAAI,UAAK,cAAc,EAAjE,6CAAgD,CAAiB,CAAC;QAExE,OAAO,IAAA,sBAAc,kCAChB,IAAI,KACP,SAAS,EAAE,IAAA,4BAAoB,EAAC,SAAS,CAAC,EAC1C,SAAS,EAAE,IAAA,4BAAoB,EAAC,SAAS,CAAC,EAC1C,SAAS,EAAE,IAAA,oCAA4B,EAAC,SAAS,CAAC,IAClD,CAAC;IACL,CAAC;IAED,aAAa,CAAC,QAA+B;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAA,2BAAmB,EAAC,IAAI,CAAC,SAAS,CAAC;SAC/C,CAAC;IACJ,CAAC;CACF,CAAC;AAES,QAAA,0BAA0B,GACrC;IACE,WAAW,CAAC,OAAgC;QAC1C,OAAO,IAAA,sBAAc,EAAC;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,QAA+B;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"ingredient.js","sourceRoot":"","sources":["../../src/converter/ingredient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AASA,oCAMkB;AAEL,QAAA,uBAAuB,GAClC;IACE,WAAW,CAAC,cAAoC;QAC9C,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,KAAc,cAAc,EAAvB,IAAI,UAAK,cAAc,EAAjE,6CAAgD,CAAiB,CAAC;QAExE,OAAO,IAAA,sBAAc,kCAChB,IAAI,KACP,SAAS,EAAE,IAAA,4BAAoB,EAAC,SAAS,CAAC,EAC1C,SAAS,EAAE,IAAA,4BAAoB,EAAC,SAAS,CAAC,EAC1C,SAAS,EAAE,IAAA,oCAA4B,EAAC,SAAS,CAAC,IAClD,CAAC;IACL,CAAC;IAED,aAAa,CAAC,QAA+B;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAA,2BAAmB,EAAC,IAAI,CAAC,SAAS,CAAC;SAC/C,CAAC;IACJ,CAAC;CACF,CAAC;AAES,QAAA,0BAA0B,GACrC;IACE,WAAW,CAAC,OAAgC;QAC1C,OAAO,IAAA,sBAAc,EAAC;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,QAA+B;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -3,5 +3,6 @@ export * from "./equipment";
3
3
  export * from "./ingredient";
4
4
  export * from "./recipe_stats";
5
5
  export * from "./recipe";
6
+ export * from "./report";
6
7
  export * from "./user_recipe";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
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,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
@@ -19,5 +19,6 @@ __exportStar(require("./equipment"), exports);
19
19
  __exportStar(require("./ingredient"), exports);
20
20
  __exportStar(require("./recipe_stats"), exports);
21
21
  __exportStar(require("./recipe"), exports);
22
+ __exportStar(require("./report"), exports);
22
23
  __exportStar(require("./user_recipe"), exports);
23
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,8CAA4B;AAC5B,+CAA6B;AAC7B,iDAA+B;AAC/B,2CAAyB;AACzB,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,8CAA4B;AAC5B,+CAA6B;AAC7B,iDAA+B;AAC/B,2CAAyB;AACzB,2CAAyB;AACzB,gDAA8B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ingredient.d.ts","sourceRoot":"","sources":["../../src/repository/ingredient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErD,qBAAa,oBAAqB,SAAQ,cAAc,CACtD,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,CACxB;IACC,SAAS,CAAC,QAAQ,CAAC,cAAc,SAA2B;IAC5D,SAAS,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC7C,SAAS,CAAC,QAAQ,CAAC,aAAa,iGAA2B;IAC3D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,oGAA8B;gBAErD,EAAE,EAAE,SAAS;IAIzB,SAAS,CAAC,KAAK,CACb,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB;IAInB,SAAS,CAAC,KAAK,CACb,UAAU,EAAE,gBAAgB,GAC3B,WAAW,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;IAiBvD,aAAa,CACjB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,SAAK,EACV,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,GAAE,mBAA+B,GACzC,OAAO,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;CAapD"}
1
+ {"version":3,"file":"ingredient.d.ts","sourceRoot":"","sources":["../../src/repository/ingredient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErD,qBAAa,oBAAqB,SAAQ,cAAc,CACtD,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,CACxB;IACC,SAAS,CAAC,QAAQ,CAAC,cAAc,SAA2B;IAC5D,SAAS,CAAC,QAAQ,CAAC,UAAU,gBAAgB;IAC7C,SAAS,CAAC,QAAQ,CAAC,aAAa,iGAA2B;IAC3D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,oGAA8B;gBAErD,EAAE,EAAE,SAAS;IAIzB,SAAS,CAAC,KAAK,CACb,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB;IAInB,SAAS,CAAC,KAAK,CACb,UAAU,EAAE,gBAAgB,GAC3B,WAAW,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;IAkBvD,aAAa,CACjB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,SAAK,EACV,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,GAAE,mBAA+B,GACzC,OAAO,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;CAapD"}
@@ -16,9 +16,9 @@ class IngredientRepository extends base_1.BaseRepository {
16
16
  return Object.assign(Object.assign({}, meta), content);
17
17
  }
18
18
  split(ingredient) {
19
- const { id: _id, createdAt, updatedAt, deletedAt, status, category, name, slug, } = ingredient;
19
+ const { id: _id, createdAt, updatedAt, deletedAt, status, category, group, name, slug, } = ingredient;
20
20
  return {
21
- meta: { category, slug, status, createdAt, updatedAt, deletedAt },
21
+ meta: { category, group, slug, status, createdAt, updatedAt, deletedAt },
22
22
  content: { name, slug },
23
23
  };
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ingredient.js","sourceRoot":"","sources":["../../src/repository/ingredient.ts"],"names":[],"mappings":";;;AACA,wCASuB;AACvB,4CAGsB;AACtB,iCAAqD;AAErD,MAAa,oBAAqB,SAAQ,qBAIzC;IAMC,YAAY,EAAa;QACvB,KAAK,CAAC,EAAE,CAAC,CAAC;QANO,mBAAc,GAAG,kBAAW,CAAC,WAAW,CAAC;QACzC,eAAU,GAAG,YAAY,CAAC;QAC1B,kBAAa,GAAG,mCAAuB,CAAC;QACxC,qBAAgB,GAAG,sCAA0B,CAAC;IAIjE,CAAC;IAES,KAAK,CACb,IAA0B,EAC1B,OAAgC;QAEhC,uCAAY,IAAI,GAAK,OAAO,EAAG;IACjC,CAAC;IAES,KAAK,CACb,UAA4B;QAE5B,MAAM,EACJ,EAAE,EAAE,GAAG,EACP,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,IAAI,GACL,GAAG,UAAU,CAAC;QACf,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,QAA4B,EAC5B,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,CAC/B,SAAS,EACT,MAAM,EACN,KAAK,EACL,MAAM,EACN,SAAS,CACV,CAAC;IACJ,CAAC;CACF;AA3DD,oDA2DC"}
1
+ {"version":3,"file":"ingredient.js","sourceRoot":"","sources":["../../src/repository/ingredient.ts"],"names":[],"mappings":";;;AACA,wCASuB;AACvB,4CAGsB;AACtB,iCAAqD;AAErD,MAAa,oBAAqB,SAAQ,qBAIzC;IAMC,YAAY,EAAa;QACvB,KAAK,CAAC,EAAE,CAAC,CAAC;QANO,mBAAc,GAAG,kBAAW,CAAC,WAAW,CAAC;QACzC,eAAU,GAAG,YAAY,CAAC;QAC1B,kBAAa,GAAG,mCAAuB,CAAC;QACxC,qBAAgB,GAAG,sCAA0B,CAAC;IAIjE,CAAC;IAES,KAAK,CACb,IAA0B,EAC1B,OAAgC;QAEhC,uCAAY,IAAI,GAAK,OAAO,EAAG;IACjC,CAAC;IAES,KAAK,CACb,UAA4B;QAE5B,MAAM,EACJ,EAAE,EAAE,GAAG,EACP,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,GACL,GAAG,UAAU,CAAC;QACf,OAAO;YACL,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;YACxE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,QAA4B,EAC5B,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,CAC/B,SAAS,EACT,MAAM,EACN,KAAK,EACL,MAAM,EACN,SAAS,CACV,CAAC;IACJ,CAAC;CACF;AA5DD,oDA4DC"}
@@ -0,0 +1,14 @@
1
+ import { Firestore } from "firebase-admin/firestore";
2
+ import { type Report, type ReportTargetType } from "@cravery/core";
3
+ export declare class ReportRepository {
4
+ private db;
5
+ constructor(db: Firestore);
6
+ private get collection();
7
+ create(report: Omit<Report, "id" | "createdAt" | "updatedAt" | "deletedAt" | "status">): Promise<Report>;
8
+ getById(id: string): Promise<Report | null>;
9
+ getByUserId(userId: string, limit?: number): Promise<Report[]>;
10
+ getByTargetType(targetType: ReportTargetType, limit?: number): Promise<Report[]>;
11
+ getByTargetId(targetId: string): Promise<Report[]>;
12
+ updateStatus(id: string, reportStatus: Report["reportStatus"], reviewedBy?: string, resolution?: string): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/repository/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAGvB,qBAAa,gBAAgB;IACf,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,SAAS;IAEjC,OAAO,KAAK,UAAU,GAErB;IAEK,MAAM,CACV,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC,GAC9E,OAAO,CAAC,MAAM,CAAC;IAcZ,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAS1D,eAAe,CACnB,UAAU,EAAE,gBAAgB,EAC5B,KAAK,SAAK,GACT,OAAO,CAAC,MAAM,EAAE,CAAC;IASd,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQlD,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC,EACpC,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;CAiBjB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportRepository = void 0;
4
+ const firestore_1 = require("firebase-admin/firestore");
5
+ const core_1 = require("@cravery/core");
6
+ const converter_1 = require("../converter");
7
+ class ReportRepository {
8
+ constructor(db) {
9
+ this.db = db;
10
+ }
11
+ get collection() {
12
+ return this.db.collection(core_1.COLLECTIONS.Reports).withConverter(converter_1.reportConverter);
13
+ }
14
+ async create(report) {
15
+ const docRef = this.db.collection(core_1.COLLECTIONS.Reports).doc();
16
+ const now = firestore_1.Timestamp.now();
17
+ const newReport = Object.assign(Object.assign({}, report), { id: docRef.id, status: "active", createdAt: { seconds: now.seconds, nanoseconds: now.nanoseconds }, updatedAt: { seconds: now.seconds, nanoseconds: now.nanoseconds } });
18
+ await docRef.withConverter(converter_1.reportConverter).set(newReport);
19
+ return newReport;
20
+ }
21
+ async getById(id) {
22
+ const doc = await this.collection.doc(id).get();
23
+ return doc.exists ? doc.data() : null;
24
+ }
25
+ async getByUserId(userId, limit = 50) {
26
+ const snapshot = await this.collection
27
+ .where("userId", "==", userId)
28
+ .orderBy("createdAt", "desc")
29
+ .limit(limit)
30
+ .get();
31
+ return snapshot.docs.map((doc) => doc.data());
32
+ }
33
+ async getByTargetType(targetType, limit = 50) {
34
+ const snapshot = await this.collection
35
+ .where("targetType", "==", targetType)
36
+ .orderBy("createdAt", "desc")
37
+ .limit(limit)
38
+ .get();
39
+ return snapshot.docs.map((doc) => doc.data());
40
+ }
41
+ async getByTargetId(targetId) {
42
+ const snapshot = await this.collection
43
+ .where("targetId", "==", targetId)
44
+ .orderBy("createdAt", "desc")
45
+ .get();
46
+ return snapshot.docs.map((doc) => doc.data());
47
+ }
48
+ async updateStatus(id, reportStatus, reviewedBy, resolution) {
49
+ const updates = {
50
+ reportStatus,
51
+ updatedAt: firestore_1.Timestamp.now(),
52
+ };
53
+ if (reviewedBy) {
54
+ updates.reviewedBy = reviewedBy;
55
+ updates.reviewedAt = firestore_1.Timestamp.now();
56
+ }
57
+ if (resolution) {
58
+ updates.resolution = resolution;
59
+ }
60
+ await this.db.collection(core_1.COLLECTIONS.Reports).doc(id).update(updates);
61
+ }
62
+ }
63
+ exports.ReportRepository = ReportRepository;
64
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/repository/report.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cravery/firebase",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "Shared Firebase Admin SDK utilities for Cravery",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -54,6 +54,6 @@
54
54
  "src/**/*"
55
55
  ],
56
56
  "dependencies": {
57
- "@cravery/core": "^0.0.52"
57
+ "@cravery/core": "^0.0.54"
58
58
  }
59
59
  }
@@ -34,6 +34,7 @@ export const ingredientMetaConverter: FirestoreDataConverter<IngredientEntityMet
34
34
  return {
35
35
  id: snapshot.id,
36
36
  category: data.category,
37
+ group: data.group,
37
38
  slug: data.slug,
38
39
  status: data.status,
39
40
  createdAt: toTimestamp(data.createdAt),
@@ -3,4 +3,5 @@ export * from "./equipment";
3
3
  export * from "./ingredient";
4
4
  export * from "./recipe_stats";
5
5
  export * from "./recipe";
6
+ export * from "./report";
6
7
  export * from "./user_recipe";
@@ -46,11 +46,12 @@ export class IngredientRepository extends BaseRepository<
46
46
  deletedAt,
47
47
  status,
48
48
  category,
49
+ group,
49
50
  name,
50
51
  slug,
51
52
  } = ingredient;
52
53
  return {
53
- meta: { category, slug, status, createdAt, updatedAt, deletedAt },
54
+ meta: { category, group, slug, status, createdAt, updatedAt, deletedAt },
54
55
  content: { name, slug },
55
56
  };
56
57
  }
@@ -0,0 +1,89 @@
1
+ import { Firestore, Timestamp } from "firebase-admin/firestore";
2
+ import {
3
+ COLLECTIONS,
4
+ type Report,
5
+ type ReportTargetType,
6
+ type EntityStatus,
7
+ } from "@cravery/core";
8
+ import { reportConverter } from "../converter";
9
+
10
+ export class ReportRepository {
11
+ constructor(private db: Firestore) {}
12
+
13
+ private get collection() {
14
+ return this.db.collection(COLLECTIONS.Reports).withConverter(reportConverter);
15
+ }
16
+
17
+ async create(
18
+ report: Omit<Report, "id" | "createdAt" | "updatedAt" | "deletedAt" | "status">,
19
+ ): Promise<Report> {
20
+ const docRef = this.db.collection(COLLECTIONS.Reports).doc();
21
+ const now = Timestamp.now();
22
+ const newReport: Report = {
23
+ ...report,
24
+ id: docRef.id,
25
+ status: "active" as EntityStatus,
26
+ createdAt: { seconds: now.seconds, nanoseconds: now.nanoseconds },
27
+ updatedAt: { seconds: now.seconds, nanoseconds: now.nanoseconds },
28
+ };
29
+ await docRef.withConverter(reportConverter).set(newReport);
30
+ return newReport;
31
+ }
32
+
33
+ async getById(id: string): Promise<Report | null> {
34
+ const doc = await this.collection.doc(id).get();
35
+ return doc.exists ? doc.data()! : null;
36
+ }
37
+
38
+ async getByUserId(userId: string, limit = 50): Promise<Report[]> {
39
+ const snapshot = await this.collection
40
+ .where("userId", "==", userId)
41
+ .orderBy("createdAt", "desc")
42
+ .limit(limit)
43
+ .get();
44
+ return snapshot.docs.map((doc) => doc.data());
45
+ }
46
+
47
+ async getByTargetType(
48
+ targetType: ReportTargetType,
49
+ limit = 50,
50
+ ): Promise<Report[]> {
51
+ const snapshot = await this.collection
52
+ .where("targetType", "==", targetType)
53
+ .orderBy("createdAt", "desc")
54
+ .limit(limit)
55
+ .get();
56
+ return snapshot.docs.map((doc) => doc.data());
57
+ }
58
+
59
+ async getByTargetId(targetId: string): Promise<Report[]> {
60
+ const snapshot = await this.collection
61
+ .where("targetId", "==", targetId)
62
+ .orderBy("createdAt", "desc")
63
+ .get();
64
+ return snapshot.docs.map((doc) => doc.data());
65
+ }
66
+
67
+ async updateStatus(
68
+ id: string,
69
+ reportStatus: Report["reportStatus"],
70
+ reviewedBy?: string,
71
+ resolution?: string,
72
+ ): Promise<void> {
73
+ const updates: Partial<Report> & { updatedAt: Timestamp; reviewedAt?: Timestamp } = {
74
+ reportStatus,
75
+ updatedAt: Timestamp.now(),
76
+ };
77
+
78
+ if (reviewedBy) {
79
+ updates.reviewedBy = reviewedBy;
80
+ updates.reviewedAt = Timestamp.now();
81
+ }
82
+
83
+ if (resolution) {
84
+ updates.resolution = resolution;
85
+ }
86
+
87
+ await this.db.collection(COLLECTIONS.Reports).doc(id).update(updates);
88
+ }
89
+ }