@etohq/review 0.0.0-stage → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/Migration20261028141707.d.ts +5 -0
- package/dist/migrations/Migration20261028141707.d.ts.map +1 -0
- package/dist/migrations/Migration20261028141707.js +29 -0
- package/dist/migrations/Migration20261028141707.js.map +1 -0
- package/dist/models/index.d.ts +5 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +15 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/review-flag.d.ts +19 -0
- package/dist/models/review-flag.d.ts.map +1 -0
- package/dist/models/review-flag.js +31 -0
- package/dist/models/review-flag.js.map +1 -0
- package/dist/models/review-revision.d.ts +17 -0
- package/dist/models/review-revision.d.ts.map +1 -0
- package/dist/models/review-revision.js +28 -0
- package/dist/models/review-revision.js.map +1 -0
- package/dist/models/review-summary.d.ts +22 -0
- package/dist/models/review-summary.d.ts.map +1 -0
- package/dist/models/review-summary.js +34 -0
- package/dist/models/review-summary.js.map +1 -0
- package/dist/models/review.d.ts +53 -0
- package/dist/models/review.d.ts.map +1 -0
- package/dist/models/review.js +103 -0
- package/dist/models/review.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +4 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +9 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/review-module-service.d.ts +269 -0
- package/dist/services/review-module-service.d.ts.map +1 -0
- package/dist/services/review-module-service.js +784 -0
- package/dist/services/review-module-service.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/container.d.ts +9 -0
- package/dist/types/container.d.ts.map +1 -0
- package/dist/types/container.js +3 -0
- package/dist/types/container.js.map +1 -0
- package/package.json +64 -3
- package/README.md +0 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Etohq
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "./types/container";
|
|
2
|
+
import { ReviewModuleService } from "./services";
|
|
3
|
+
declare const _default: import("@etohq/types").ModuleExports<typeof ReviewModuleService> & {
|
|
4
|
+
linkable: Record<string, any>;
|
|
5
|
+
sqlObjects: {
|
|
6
|
+
functions: import("@etohq/types").DmlFunction[];
|
|
7
|
+
triggers: import("@etohq/types").DmlTrigger[];
|
|
8
|
+
views: import("@etohq/types").DmlView[];
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAI1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;;;;;;;;;AAE/C,wBAEE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("./types/container");
|
|
4
|
+
const utils_1 = require("@etohq/framework/utils");
|
|
5
|
+
const _services_1 = require("./services");
|
|
6
|
+
exports.default = (0, utils_1.Module)(utils_1.Modules.REVIEW, {
|
|
7
|
+
service: _services_1.ReviewModuleService,
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,6BAA0B;AAE1B,kDAAwD;AAExD,yCAA+C;AAE/C,kBAAe,IAAA,cAAM,EAAC,eAAO,CAAC,MAAM,EAAE;IACpC,OAAO,EAAE,+BAAmB;CAC7B,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Migration20261028141707.d.ts","sourceRoot":"","sources":["../../src/migrations/Migration20261028141707.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAElE,qBAAa,uBAAwB,SAAQ,SAAS;IAErC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;CAyBnC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261028141707 = void 0;
|
|
4
|
+
const migrations_1 = require("@etohq/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261028141707 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "review_revision" drop constraint if exists "review_revision_unique";`);
|
|
8
|
+
this.addSql(`create table if not exists "review" ("id" text not null, "space_id" text not null, "subject_type" text not null, "subject_id" text not null, "subject_owner_id" text null, "reviewer_type" text not null, "reviewer_id" text not null, "reviewer_display" text null, "anonymous" boolean not null default false, "context_type" text not null, "context_id" text not null, "scope" text null, "rating" integer not null, "dimensions" jsonb null, "tags" jsonb null, "title" text null, "body" text null, "media" jsonb null, "locale" text null, "verified" boolean not null default false, "status" text check ("status" in ('pending', 'published', 'hidden', 'withdrawn')) not null default 'published', "revealed_at" timestamptz null, "reveal_after" timestamptz null, "eligible_until" timestamptz null, "occurred_at" timestamptz not null, "edited_at" timestamptz null, "response_body" text null, "responder_id" text null, "responded_at" timestamptz null, "moderated_by" text null, "moderated_at" timestamptz null, "moderation_reason" text null, "open_flag_count" integer not null default 0, "idempotency_key" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "review_pkey" primary key ("id"));`);
|
|
9
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_deleted_at" ON "review" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
10
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_review_one_per_interaction" ON "review" ("space_id", "reviewer_type", "reviewer_id", "subject_type", "subject_id", "context_type", "context_id") WHERE deleted_at IS NULL AND status <> 'withdrawn';`);
|
|
11
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_review_idempotency" ON "review" ("space_id", "idempotency_key") WHERE deleted_at IS NULL AND idempotency_key IS NOT NULL;`);
|
|
12
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_subject_live" ON "review" ("space_id", "subject_type", "subject_id", "scope") WHERE deleted_at IS NULL AND status = 'published' AND revealed_at IS NOT NULL;`);
|
|
13
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_context" ON "review" ("space_id", "context_type", "context_id") WHERE deleted_at IS NULL;`);
|
|
14
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_reviewer" ON "review" ("reviewer_type", "reviewer_id") WHERE deleted_at IS NULL;`);
|
|
15
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_moderation_queue" ON "review" ("space_id", "status", "created_at") WHERE deleted_at IS NULL AND (status = 'pending' OR open_flag_count > 0);`);
|
|
16
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_sealed" ON "review" ("reveal_after") WHERE deleted_at IS NULL AND revealed_at IS NULL AND reveal_after IS NOT NULL;`);
|
|
17
|
+
this.addSql(`create table if not exists "review_flag" ("id" text not null, "review_id" text not null, "space_id" text not null, "reporter_type" text not null, "reporter_id" text not null, "reason" text not null, "note" text null, "status" text check ("status" in ('open', 'resolved')) not null default 'open', "resolved_by" text null, "resolved_at" timestamptz null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "review_flag_pkey" primary key ("id"));`);
|
|
18
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_flag_deleted_at" ON "review_flag" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
19
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_review_flag_one_per_reporter" ON "review_flag" ("review_id", "reporter_type", "reporter_id") WHERE deleted_at IS NULL;`);
|
|
20
|
+
this.addSql(`create table if not exists "review_revision" ("id" text not null, "review_id" text not null, "revision" integer not null, "rating" integer not null, "dimensions" jsonb null, "tags" jsonb null, "title" text null, "body" text null, "media" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "review_revision_pkey" primary key ("id"));`);
|
|
21
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_revision_deleted_at" ON "review_revision" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
22
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_review_revision_unique" ON "review_revision" ("review_id", "revision") WHERE deleted_at IS NULL;`);
|
|
23
|
+
this.addSql(`create table if not exists "review_summary" ("id" text not null, "space_id" text not null, "subject_type" text not null, "subject_id" text not null, "scope" text not null default '', "count" integer not null default 0, "verified_count" integer not null default 0, "rating_sum" integer not null default 0, "mean" real null, "distribution" jsonb not null, "dimensions" jsonb not null, "tags" jsonb not null, "last_reviewed_at" timestamptz null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "review_summary_pkey" primary key ("id"));`);
|
|
24
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_summary_deleted_at" ON "review_summary" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
25
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_review_summary_subject" ON "review_summary" ("space_id", "subject_type", "subject_id", "scope") WHERE deleted_at IS NULL;`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.Migration20261028141707 = Migration20261028141707;
|
|
29
|
+
//# sourceMappingURL=Migration20261028141707.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Migration20261028141707.js","sourceRoot":"","sources":["../../src/migrations/Migration20261028141707.ts"],"names":[],"mappings":";;;AAAA,sEAAkE;AAElE,MAAa,uBAAwB,SAAQ,sBAAS;IAE3C,KAAK,CAAC,EAAE;QACf,IAAI,CAAC,MAAM,CAAC,6FAA6F,CAAC,CAAC;QAC3G,IAAI,CAAC,MAAM,CAAC,qxCAAqxC,CAAC,CAAC;QACnyC,IAAI,CAAC,MAAM,CAAC,yGAAyG,CAAC,CAAC;QACvH,IAAI,CAAC,MAAM,CAAC,6OAA6O,CAAC,CAAC;QAC3P,IAAI,CAAC,MAAM,CAAC,kKAAkK,CAAC,CAAC;QAChL,IAAI,CAAC,MAAM,CAAC,qMAAqM,CAAC,CAAC;QACnN,IAAI,CAAC,MAAM,CAAC,kIAAkI,CAAC,CAAC;QAChJ,IAAI,CAAC,MAAM,CAAC,yHAAyH,CAAC,CAAC;QACvI,IAAI,CAAC,MAAM,CAAC,qLAAqL,CAAC,CAAC;QACnM,IAAI,CAAC,MAAM,CAAC,4JAA4J,CAAC,CAAC;QAE1K,IAAI,CAAC,MAAM,CAAC,uhBAAuhB,CAAC,CAAC;QACriB,IAAI,CAAC,MAAM,CAAC,mHAAmH,CAAC,CAAC;QACjI,IAAI,CAAC,MAAM,CAAC,+JAA+J,CAAC,CAAC;QAE7K,IAAI,CAAC,MAAM,CAAC,mbAAmb,CAAC,CAAC;QACjc,IAAI,CAAC,MAAM,CAAC,2HAA2H,CAAC,CAAC;QACzI,IAAI,CAAC,MAAM,CAAC,yIAAyI,CAAC,CAAC;QAEvJ,IAAI,CAAC,MAAM,CAAC,mnBAAmnB,CAAC,CAAC;QACjoB,IAAI,CAAC,MAAM,CAAC,yHAAyH,CAAC,CAAC;QACvI,IAAI,CAAC,MAAM,CAAC,kKAAkK,CAAC,CAAC;IAClL,CAAC;CAEF;AA3BD,0DA2BC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ReviewSummary = exports.ReviewFlag = exports.ReviewRevision = exports.Review = void 0;
|
|
7
|
+
var review_1 = require("./review");
|
|
8
|
+
Object.defineProperty(exports, "Review", { enumerable: true, get: function () { return __importDefault(review_1).default; } });
|
|
9
|
+
var review_revision_1 = require("./review-revision");
|
|
10
|
+
Object.defineProperty(exports, "ReviewRevision", { enumerable: true, get: function () { return __importDefault(review_revision_1).default; } });
|
|
11
|
+
var review_flag_1 = require("./review-flag");
|
|
12
|
+
Object.defineProperty(exports, "ReviewFlag", { enumerable: true, get: function () { return __importDefault(review_flag_1).default; } });
|
|
13
|
+
var review_summary_1 = require("./review-summary");
|
|
14
|
+
Object.defineProperty(exports, "ReviewSummary", { enumerable: true, get: function () { return __importDefault(review_summary_1).default; } });
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;AAAA,mCAA4C;AAAnC,iHAAA,OAAO,OAAU;AAC1B,qDAA6D;AAApD,kIAAA,OAAO,OAAkB;AAClC,6CAAqD;AAA5C,0HAAA,OAAO,OAAc;AAC9B,mDAA2D;AAAlD,gIAAA,OAAO,OAAiB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Someone reporting a review. Queues it for a moderator; never hides it on
|
|
3
|
+
* its own — a subject's friends flagging a fair bad review must not make it
|
|
4
|
+
* disappear.
|
|
5
|
+
*/
|
|
6
|
+
declare const ReviewFlag: import("@etohq/framework/utils").DmlEntity<import("@etohq/framework/utils").DMLEntitySchemaBuilder<{
|
|
7
|
+
id: import("@etohq/framework/utils").PrimaryKeyModifier<string, import("@etohq/framework/utils").IdProperty>;
|
|
8
|
+
review_id: import("@etohq/framework/utils").TextProperty;
|
|
9
|
+
space_id: import("@etohq/framework/utils").TextProperty;
|
|
10
|
+
reporter_type: import("@etohq/framework/utils").TextProperty;
|
|
11
|
+
reporter_id: import("@etohq/framework/utils").TextProperty;
|
|
12
|
+
reason: import("@etohq/framework/utils").TextProperty;
|
|
13
|
+
note: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
14
|
+
status: import("@etohq/framework/utils").EnumProperty<["open", "resolved"]>;
|
|
15
|
+
resolved_by: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
16
|
+
resolved_at: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
17
|
+
}>, "review_flag">;
|
|
18
|
+
export default ReviewFlag;
|
|
19
|
+
//# sourceMappingURL=review-flag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-flag.d.ts","sourceRoot":"","sources":["../../src/models/review-flag.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,QAAA,MAAM,UAAU;;;;;;;;;;;kBAoBZ,CAAA;AAEJ,eAAe,UAAU,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@etohq/framework/utils");
|
|
4
|
+
/**
|
|
5
|
+
* Someone reporting a review. Queues it for a moderator; never hides it on
|
|
6
|
+
* its own — a subject's friends flagging a fair bad review must not make it
|
|
7
|
+
* disappear.
|
|
8
|
+
*/
|
|
9
|
+
const ReviewFlag = utils_1.model
|
|
10
|
+
.define("review_flag", {
|
|
11
|
+
id: utils_1.model.id({ prefix: "rvwf" }).primaryKey(),
|
|
12
|
+
review_id: utils_1.model.text().searchable(),
|
|
13
|
+
space_id: utils_1.model.text(),
|
|
14
|
+
reporter_type: utils_1.model.text(),
|
|
15
|
+
reporter_id: utils_1.model.text(),
|
|
16
|
+
reason: utils_1.model.text(),
|
|
17
|
+
note: utils_1.model.text().nullable(),
|
|
18
|
+
status: utils_1.model.enum(["open", "resolved"]).default("open"),
|
|
19
|
+
resolved_by: utils_1.model.text().nullable(),
|
|
20
|
+
resolved_at: utils_1.model.dateTime().nullable(),
|
|
21
|
+
})
|
|
22
|
+
.indexes([
|
|
23
|
+
{
|
|
24
|
+
name: "IDX_review_flag_one_per_reporter",
|
|
25
|
+
on: ["review_id", "reporter_type", "reporter_id"],
|
|
26
|
+
unique: true,
|
|
27
|
+
where: "deleted_at IS NULL",
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
exports.default = ReviewFlag;
|
|
31
|
+
//# sourceMappingURL=review-flag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-flag.js","sourceRoot":"","sources":["../../src/models/review-flag.ts"],"names":[],"mappings":";;AAAA,kDAA8C;AAE9C;;;;GAIG;AACH,MAAM,UAAU,GAAG,aAAK;KACrB,MAAM,CAAC,aAAa,EAAE;IACrB,EAAE,EAAE,aAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE;IAC7C,SAAS,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE;IACpC,QAAQ,EAAE,aAAK,CAAC,IAAI,EAAE;IACtB,aAAa,EAAE,aAAK,CAAC,IAAI,EAAE;IAC3B,WAAW,EAAE,aAAK,CAAC,IAAI,EAAE;IACzB,MAAM,EAAE,aAAK,CAAC,IAAI,EAAE;IACpB,IAAI,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,aAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACxD,WAAW,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,aAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,OAAO,CAAC;IACP;QACE,IAAI,EAAE,kCAAkC;QACxC,EAAE,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC;QACjD,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,oBAAoB;KAC5B;CACF,CAAC,CAAA;AAEJ,kBAAe,UAAU,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a review said at each submission or edit. Append-only: a moderator
|
|
3
|
+
* judging an edited review sees what it replaced.
|
|
4
|
+
*/
|
|
5
|
+
declare const ReviewRevision: import("@etohq/framework/utils").DmlEntity<import("@etohq/framework/utils").DMLEntitySchemaBuilder<{
|
|
6
|
+
id: import("@etohq/framework/utils").PrimaryKeyModifier<string, import("@etohq/framework/utils").IdProperty>;
|
|
7
|
+
review_id: import("@etohq/framework/utils").TextProperty;
|
|
8
|
+
revision: import("@etohq/framework/utils").NumberProperty;
|
|
9
|
+
rating: import("@etohq/framework/utils").NumberProperty;
|
|
10
|
+
dimensions: import("@etohq/framework/utils").NullableModifier<Record<string, unknown>, import("@etohq/framework/utils").JSONProperty<Record<string, unknown>>>;
|
|
11
|
+
tags: import("@etohq/framework/utils").NullableModifier<Record<string, unknown>, import("@etohq/framework/utils").JSONProperty<Record<string, unknown>>>;
|
|
12
|
+
title: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
13
|
+
body: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
14
|
+
media: import("@etohq/framework/utils").NullableModifier<Record<string, unknown>, import("@etohq/framework/utils").JSONProperty<Record<string, unknown>>>;
|
|
15
|
+
}>, "review_revision">;
|
|
16
|
+
export default ReviewRevision;
|
|
17
|
+
//# sourceMappingURL=review-revision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-revision.d.ts","sourceRoot":"","sources":["../../src/models/review-revision.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,QAAA,MAAM,cAAc;;;;;;;;;;sBAkBhB,CAAA;AAEJ,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@etohq/framework/utils");
|
|
4
|
+
/**
|
|
5
|
+
* What a review said at each submission or edit. Append-only: a moderator
|
|
6
|
+
* judging an edited review sees what it replaced.
|
|
7
|
+
*/
|
|
8
|
+
const ReviewRevision = utils_1.model
|
|
9
|
+
.define("review_revision", {
|
|
10
|
+
id: utils_1.model.id({ prefix: "rvwr" }).primaryKey(),
|
|
11
|
+
review_id: utils_1.model.text().searchable(),
|
|
12
|
+
revision: utils_1.model.number(),
|
|
13
|
+
rating: utils_1.model.number(),
|
|
14
|
+
dimensions: utils_1.model.json().nullable(),
|
|
15
|
+
tags: utils_1.model.json().nullable(),
|
|
16
|
+
title: utils_1.model.text().nullable(),
|
|
17
|
+
body: utils_1.model.text().nullable(),
|
|
18
|
+
media: utils_1.model.json().nullable(),
|
|
19
|
+
})
|
|
20
|
+
.indexes([
|
|
21
|
+
{
|
|
22
|
+
name: "IDX_review_revision_unique",
|
|
23
|
+
on: ["review_id", "revision"],
|
|
24
|
+
unique: true,
|
|
25
|
+
},
|
|
26
|
+
]);
|
|
27
|
+
exports.default = ReviewRevision;
|
|
28
|
+
//# sourceMappingURL=review-revision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-revision.js","sourceRoot":"","sources":["../../src/models/review-revision.ts"],"names":[],"mappings":";;AAAA,kDAA8C;AAE9C;;;GAGG;AACH,MAAM,cAAc,GAAG,aAAK;KACzB,MAAM,CAAC,iBAAiB,EAAE;IACzB,EAAE,EAAE,aAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE;IAC7C,SAAS,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE;IACpC,QAAQ,EAAE,aAAK,CAAC,MAAM,EAAE;IACxB,MAAM,EAAE,aAAK,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,OAAO,CAAC;IACP;QACE,IAAI,EAAE,4BAA4B;QAClC,EAAE,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;QAC7B,MAAM,EAAE,IAAI;KACb;CACF,CAAC,CAAA;AAEJ,kBAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A subject's summary, overall (`scope = ''`) and per scope. DERIVED: it is
|
|
3
|
+
* recomputed from published, revealed reviews in the transaction that changed
|
|
4
|
+
* them, never incremented, so it cannot drift from the rows.
|
|
5
|
+
*/
|
|
6
|
+
declare const ReviewSummary: import("@etohq/framework/utils").DmlEntity<import("@etohq/framework/utils").DMLEntitySchemaBuilder<{
|
|
7
|
+
id: import("@etohq/framework/utils").PrimaryKeyModifier<string, import("@etohq/framework/utils").IdProperty>;
|
|
8
|
+
space_id: import("@etohq/framework/utils").TextProperty;
|
|
9
|
+
subject_type: import("@etohq/framework/utils").TextProperty;
|
|
10
|
+
subject_id: import("@etohq/framework/utils").TextProperty;
|
|
11
|
+
scope: import("@etohq/framework/utils").TextProperty;
|
|
12
|
+
count: import("@etohq/framework/utils").NumberProperty;
|
|
13
|
+
verified_count: import("@etohq/framework/utils").NumberProperty;
|
|
14
|
+
rating_sum: import("@etohq/framework/utils").NumberProperty;
|
|
15
|
+
mean: import("@etohq/framework/utils").NullableModifier<number, import("@etohq/framework/utils").FloatProperty>;
|
|
16
|
+
distribution: import("@etohq/framework/utils").JSONProperty<any>;
|
|
17
|
+
dimensions: import("@etohq/framework/utils").JSONProperty<any>;
|
|
18
|
+
tags: import("@etohq/framework/utils").JSONProperty<any>;
|
|
19
|
+
last_reviewed_at: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
20
|
+
}>, "review_summary">;
|
|
21
|
+
export default ReviewSummary;
|
|
22
|
+
//# sourceMappingURL=review-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-summary.d.ts","sourceRoot":"","sources":["../../src/models/review-summary.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,QAAA,MAAM,aAAa;;;;;;;;;;;;;;qBAuBf,CAAA;AAEJ,eAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@etohq/framework/utils");
|
|
4
|
+
/**
|
|
5
|
+
* A subject's summary, overall (`scope = ''`) and per scope. DERIVED: it is
|
|
6
|
+
* recomputed from published, revealed reviews in the transaction that changed
|
|
7
|
+
* them, never incremented, so it cannot drift from the rows.
|
|
8
|
+
*/
|
|
9
|
+
const ReviewSummary = utils_1.model
|
|
10
|
+
.define("review_summary", {
|
|
11
|
+
id: utils_1.model.id({ prefix: "rvws" }).primaryKey(),
|
|
12
|
+
space_id: utils_1.model.text(),
|
|
13
|
+
subject_type: utils_1.model.text(),
|
|
14
|
+
subject_id: utils_1.model.text(),
|
|
15
|
+
scope: utils_1.model.text().default(""),
|
|
16
|
+
count: utils_1.model.number().default(0),
|
|
17
|
+
verified_count: utils_1.model.number().default(0),
|
|
18
|
+
rating_sum: utils_1.model.number().default(0),
|
|
19
|
+
mean: utils_1.model.float().nullable(),
|
|
20
|
+
distribution: utils_1.model.json(),
|
|
21
|
+
dimensions: utils_1.model.json(),
|
|
22
|
+
tags: utils_1.model.json(),
|
|
23
|
+
last_reviewed_at: utils_1.model.dateTime().nullable(),
|
|
24
|
+
})
|
|
25
|
+
.indexes([
|
|
26
|
+
{
|
|
27
|
+
name: "IDX_review_summary_subject",
|
|
28
|
+
on: ["space_id", "subject_type", "subject_id", "scope"],
|
|
29
|
+
unique: true,
|
|
30
|
+
where: "deleted_at IS NULL",
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
exports.default = ReviewSummary;
|
|
34
|
+
//# sourceMappingURL=review-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-summary.js","sourceRoot":"","sources":["../../src/models/review-summary.ts"],"names":[],"mappings":";;AAAA,kDAA8C;AAE9C;;;;GAIG;AACH,MAAM,aAAa,GAAG,aAAK;KACxB,MAAM,CAAC,gBAAgB,EAAE;IACxB,EAAE,EAAE,aAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE;IAC7C,QAAQ,EAAE,aAAK,CAAC,IAAI,EAAE;IACtB,YAAY,EAAE,aAAK,CAAC,IAAI,EAAE;IAC1B,UAAU,EAAE,aAAK,CAAC,IAAI,EAAE;IACxB,KAAK,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/B,KAAK,EAAE,aAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,cAAc,EAAE,aAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,UAAU,EAAE,aAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,IAAI,EAAE,aAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IAC9B,YAAY,EAAE,aAAK,CAAC,IAAI,EAAE;IAC1B,UAAU,EAAE,aAAK,CAAC,IAAI,EAAE;IACxB,IAAI,EAAE,aAAK,CAAC,IAAI,EAAE;IAClB,gBAAgB,EAAE,aAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC;KACD,OAAO,CAAC;IACP;QACE,IAAI,EAAE,4BAA4B;QAClC,EAAE,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,CAAC;QACvD,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,oBAAoB;KAC5B;CACF,CAAC,CAAA;AAEJ,kBAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One reviewer's judgement of one subject, about one interaction.
|
|
3
|
+
*
|
|
4
|
+
* Subject, reviewer and context are references the owning modules resolve in
|
|
5
|
+
* their own databases (module isolation: no foreign keys across modules). The
|
|
6
|
+
* engine never interprets their types.
|
|
7
|
+
*/
|
|
8
|
+
declare const Review: import("@etohq/framework/utils").DmlEntity<import("@etohq/framework/utils").DMLEntitySchemaBuilder<{
|
|
9
|
+
id: import("@etohq/framework/utils").PrimaryKeyModifier<string, import("@etohq/framework/utils").IdProperty>;
|
|
10
|
+
/** Owning tenant. Required; every uniqueness scope is qualified by it. */
|
|
11
|
+
space_id: import("@etohq/framework/utils").TextProperty;
|
|
12
|
+
subject_type: import("@etohq/framework/utils").TextProperty;
|
|
13
|
+
subject_id: import("@etohq/framework/utils").TextProperty;
|
|
14
|
+
/** Who owns the subject. May respond; may never review it. */
|
|
15
|
+
subject_owner_id: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
16
|
+
reviewer_type: import("@etohq/framework/utils").TextProperty;
|
|
17
|
+
reviewer_id: import("@etohq/framework/utils").TextProperty;
|
|
18
|
+
reviewer_display: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
19
|
+
anonymous: import("@etohq/framework/utils").BooleanProperty;
|
|
20
|
+
/** The interaction judged — a trip, an order, a session. */
|
|
21
|
+
context_type: import("@etohq/framework/utils").TextProperty;
|
|
22
|
+
context_id: import("@etohq/framework/utils").TextProperty;
|
|
23
|
+
/** One optional narrower summary (Lane: the station it happened at). */
|
|
24
|
+
scope: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
25
|
+
rating: import("@etohq/framework/utils").NumberProperty;
|
|
26
|
+
dimensions: import("@etohq/framework/utils").NullableModifier<Record<string, unknown>, import("@etohq/framework/utils").JSONProperty<Record<string, unknown>>>;
|
|
27
|
+
tags: import("@etohq/framework/utils").NullableModifier<Record<string, unknown>, import("@etohq/framework/utils").JSONProperty<Record<string, unknown>>>;
|
|
28
|
+
title: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
29
|
+
body: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
30
|
+
media: import("@etohq/framework/utils").NullableModifier<Record<string, unknown>, import("@etohq/framework/utils").JSONProperty<Record<string, unknown>>>;
|
|
31
|
+
locale: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
32
|
+
/** The consumer's attestation that the reviewer took part. */
|
|
33
|
+
verified: import("@etohq/framework/utils").BooleanProperty;
|
|
34
|
+
status: import("@etohq/framework/utils").EnumProperty<["pending", "published", "hidden", "withdrawn"]>;
|
|
35
|
+
/** When it became visible. Null while sealed. Only revealed rows count. */
|
|
36
|
+
revealed_at: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
37
|
+
reveal_after: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
38
|
+
eligible_until: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
39
|
+
/** When the reviewer acted, which may precede a late offline sync. */
|
|
40
|
+
occurred_at: import("@etohq/framework/utils").DateTimeProperty;
|
|
41
|
+
edited_at: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
42
|
+
response_body: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
43
|
+
responder_id: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
44
|
+
responded_at: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
45
|
+
moderated_by: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
46
|
+
moderated_at: import("@etohq/framework/utils").NullableModifier<Date, import("@etohq/framework/utils").DateTimeProperty>;
|
|
47
|
+
moderation_reason: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
48
|
+
open_flag_count: import("@etohq/framework/utils").NumberProperty;
|
|
49
|
+
idempotency_key: import("@etohq/framework/utils").NullableModifier<string, import("@etohq/framework/utils").TextProperty>;
|
|
50
|
+
metadata: import("@etohq/framework/utils").NullableModifier<Record<string, unknown>, import("@etohq/framework/utils").JSONProperty<Record<string, unknown>>>;
|
|
51
|
+
}>, "review">;
|
|
52
|
+
export default Review;
|
|
53
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/models/review.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,QAAA,MAAM,MAAM;;IAIR,0EAA0E;;;;IAK1E,8DAA8D;;;;;;IAQ9D,4DAA4D;;;IAI5D,wEAAwE;;;;;;;;;IAWxE,8DAA8D;;;IAO9D,2EAA2E;;;;IAI3E,sEAAsE;;;;;;;;;;;;aA2DtE,CAAA;AAEJ,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@etohq/framework/utils");
|
|
4
|
+
/**
|
|
5
|
+
* One reviewer's judgement of one subject, about one interaction.
|
|
6
|
+
*
|
|
7
|
+
* Subject, reviewer and context are references the owning modules resolve in
|
|
8
|
+
* their own databases (module isolation: no foreign keys across modules). The
|
|
9
|
+
* engine never interprets their types.
|
|
10
|
+
*/
|
|
11
|
+
const Review = utils_1.model
|
|
12
|
+
.define("review", {
|
|
13
|
+
id: utils_1.model.id({ prefix: "rvw" }).primaryKey(),
|
|
14
|
+
/** Owning tenant. Required; every uniqueness scope is qualified by it. */
|
|
15
|
+
space_id: utils_1.model.text().searchable(),
|
|
16
|
+
subject_type: utils_1.model.text().searchable(),
|
|
17
|
+
subject_id: utils_1.model.text().searchable(),
|
|
18
|
+
/** Who owns the subject. May respond; may never review it. */
|
|
19
|
+
subject_owner_id: utils_1.model.text().nullable(),
|
|
20
|
+
reviewer_type: utils_1.model.text(),
|
|
21
|
+
reviewer_id: utils_1.model.text().searchable(),
|
|
22
|
+
reviewer_display: utils_1.model.text().nullable(),
|
|
23
|
+
anonymous: utils_1.model.boolean().default(false),
|
|
24
|
+
/** The interaction judged — a trip, an order, a session. */
|
|
25
|
+
context_type: utils_1.model.text(),
|
|
26
|
+
context_id: utils_1.model.text().searchable(),
|
|
27
|
+
/** One optional narrower summary (Lane: the station it happened at). */
|
|
28
|
+
scope: utils_1.model.text().nullable(),
|
|
29
|
+
rating: utils_1.model.number(),
|
|
30
|
+
dimensions: utils_1.model.json().nullable(),
|
|
31
|
+
tags: utils_1.model.json().nullable(),
|
|
32
|
+
title: utils_1.model.text().nullable(),
|
|
33
|
+
body: utils_1.model.text().nullable(),
|
|
34
|
+
media: utils_1.model.json().nullable(),
|
|
35
|
+
locale: utils_1.model.text().nullable(),
|
|
36
|
+
/** The consumer's attestation that the reviewer took part. */
|
|
37
|
+
verified: utils_1.model.boolean().default(false),
|
|
38
|
+
status: utils_1.model
|
|
39
|
+
.enum(["pending", "published", "hidden", "withdrawn"])
|
|
40
|
+
.default("published"),
|
|
41
|
+
/** When it became visible. Null while sealed. Only revealed rows count. */
|
|
42
|
+
revealed_at: utils_1.model.dateTime().nullable(),
|
|
43
|
+
reveal_after: utils_1.model.dateTime().nullable(),
|
|
44
|
+
eligible_until: utils_1.model.dateTime().nullable(),
|
|
45
|
+
/** When the reviewer acted, which may precede a late offline sync. */
|
|
46
|
+
occurred_at: utils_1.model.dateTime(),
|
|
47
|
+
edited_at: utils_1.model.dateTime().nullable(),
|
|
48
|
+
response_body: utils_1.model.text().nullable(),
|
|
49
|
+
responder_id: utils_1.model.text().nullable(),
|
|
50
|
+
responded_at: utils_1.model.dateTime().nullable(),
|
|
51
|
+
moderated_by: utils_1.model.text().nullable(),
|
|
52
|
+
moderated_at: utils_1.model.dateTime().nullable(),
|
|
53
|
+
moderation_reason: utils_1.model.text().nullable(),
|
|
54
|
+
open_flag_count: utils_1.model.number().default(0),
|
|
55
|
+
idempotency_key: utils_1.model.text().nullable(),
|
|
56
|
+
metadata: utils_1.model.json().nullable(),
|
|
57
|
+
})
|
|
58
|
+
.indexes([
|
|
59
|
+
// THE rule: one live review per reviewer, subject and interaction. A
|
|
60
|
+
// withdrawn review frees the slot, so the reviewer may judge again.
|
|
61
|
+
{
|
|
62
|
+
name: "IDX_review_one_per_interaction",
|
|
63
|
+
on: [
|
|
64
|
+
"space_id",
|
|
65
|
+
"reviewer_type",
|
|
66
|
+
"reviewer_id",
|
|
67
|
+
"subject_type",
|
|
68
|
+
"subject_id",
|
|
69
|
+
"context_type",
|
|
70
|
+
"context_id",
|
|
71
|
+
],
|
|
72
|
+
unique: true,
|
|
73
|
+
where: "deleted_at IS NULL AND status <> 'withdrawn'",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "IDX_review_idempotency",
|
|
77
|
+
on: ["space_id", "idempotency_key"],
|
|
78
|
+
unique: true,
|
|
79
|
+
where: "deleted_at IS NULL AND idempotency_key IS NOT NULL",
|
|
80
|
+
},
|
|
81
|
+
// What counts toward a subject's summary.
|
|
82
|
+
{
|
|
83
|
+
name: "IDX_review_subject_live",
|
|
84
|
+
on: ["space_id", "subject_type", "subject_id", "scope"],
|
|
85
|
+
where: "deleted_at IS NULL AND status = 'published' AND revealed_at IS NOT NULL",
|
|
86
|
+
},
|
|
87
|
+
{ name: "IDX_review_context", on: ["space_id", "context_type", "context_id"] },
|
|
88
|
+
{ name: "IDX_review_reviewer", on: ["reviewer_type", "reviewer_id"] },
|
|
89
|
+
// The moderator's queue.
|
|
90
|
+
{
|
|
91
|
+
name: "IDX_review_moderation_queue",
|
|
92
|
+
on: ["space_id", "status", "created_at"],
|
|
93
|
+
where: "deleted_at IS NULL AND (status = 'pending' OR open_flag_count > 0)",
|
|
94
|
+
},
|
|
95
|
+
// Drives the reveal sweep.
|
|
96
|
+
{
|
|
97
|
+
name: "IDX_review_sealed",
|
|
98
|
+
on: ["reveal_after"],
|
|
99
|
+
where: "deleted_at IS NULL AND revealed_at IS NULL AND reveal_after IS NOT NULL",
|
|
100
|
+
},
|
|
101
|
+
]);
|
|
102
|
+
exports.default = Review;
|
|
103
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/models/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":";AAAA,wBAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":";;AAAA,kBAAe,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ReviewModuleService = void 0;
|
|
7
|
+
var review_module_service_1 = require("./review-module-service");
|
|
8
|
+
Object.defineProperty(exports, "ReviewModuleService", { enumerable: true, get: function () { return __importDefault(review_module_service_1).default; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwE;AAA/D,6IAAA,OAAO,OAAuB"}
|