@drodil/backstage-plugin-qeta-backend 3.50.0 → 3.51.1
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/configSchema.d.ts +11 -0
- package/dist/badges.cjs.js +2 -3
- package/dist/badges.cjs.js.map +1 -1
- package/dist/database/DatabaseQetaStore.cjs.js +6 -0
- package/dist/database/DatabaseQetaStore.cjs.js.map +1 -1
- package/dist/database/stores/PostsStore.cjs.js +106 -13
- package/dist/database/stores/PostsStore.cjs.js.map +1 -1
- package/dist/database/stores/StatsStore.cjs.js +4 -1
- package/dist/database/stores/StatsStore.cjs.js.map +1 -1
- package/dist/database/stores/UsersStore.cjs.js +27 -28
- package/dist/database/stores/UsersStore.cjs.js.map +1 -1
- package/dist/service/PermissionManager.cjs.js +3 -0
- package/dist/service/PermissionManager.cjs.js.map +1 -1
- package/dist/service/routes/answers.cjs.js +43 -0
- package/dist/service/routes/answers.cjs.js.map +1 -1
- package/dist/service/routes/posts.cjs.js +101 -14
- package/dist/service/routes/posts.cjs.js.map +1 -1
- package/dist/service/routes/statistics.cjs.js +4 -1
- package/dist/service/routes/statistics.cjs.js.map +1 -1
- package/dist/service/types.cjs.js +13 -0
- package/dist/service/types.cjs.js.map +1 -1
- package/migrations/20251222_x_reputation_addition.js +254 -0
- package/migrations/20251223_health_scores.js +28 -0
- package/package.json +6 -6
package/configSchema.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SchedulerServiceTaskScheduleDefinitionConfig } from '@backstage/backend-plugin-api';
|
|
2
|
+
import { HumanDuration } from '@backstage/types';
|
|
2
3
|
|
|
3
4
|
export interface Config {
|
|
4
5
|
qeta?: {
|
|
@@ -191,5 +192,15 @@ export interface Config {
|
|
|
191
192
|
*/
|
|
192
193
|
dayLimit?: number;
|
|
193
194
|
};
|
|
195
|
+
/**
|
|
196
|
+
* Content health configuration
|
|
197
|
+
*/
|
|
198
|
+
contentHealth?: {
|
|
199
|
+
/**
|
|
200
|
+
* Posts older than this will be considered for review.
|
|
201
|
+
* Default: 6 months
|
|
202
|
+
*/
|
|
203
|
+
postsOlderThan?: HumanDuration;
|
|
204
|
+
};
|
|
194
205
|
};
|
|
195
206
|
}
|
package/dist/badges.cjs.js
CHANGED
|
@@ -755,7 +755,7 @@ class PaparazziEvaluator {
|
|
|
755
755
|
icon = "camera_alt";
|
|
756
756
|
level = "silver";
|
|
757
757
|
type = "one-time";
|
|
758
|
-
reputation =
|
|
758
|
+
reputation = 15;
|
|
759
759
|
async evaluate(entity) {
|
|
760
760
|
if (!backstagePluginQetaCommon.isPost(entity)) {
|
|
761
761
|
return false;
|
|
@@ -770,7 +770,7 @@ class TagHoarderEvaluator {
|
|
|
770
770
|
icon = "label_important";
|
|
771
771
|
level = "bronze";
|
|
772
772
|
type = "repetitive";
|
|
773
|
-
reputation =
|
|
773
|
+
reputation = 5;
|
|
774
774
|
async evaluate(entity) {
|
|
775
775
|
if (!backstagePluginQetaCommon.isPost(entity)) {
|
|
776
776
|
return false;
|
|
@@ -836,7 +836,6 @@ const BADGE_EVALUATORS = [
|
|
|
836
836
|
new TasteMarkerEvaluator(),
|
|
837
837
|
new IconicCollectionEvaluator(),
|
|
838
838
|
new LegendEvaluator(),
|
|
839
|
-
// Fun badges
|
|
840
839
|
new PicassoEvaluator(),
|
|
841
840
|
new PaparazziEvaluator(),
|
|
842
841
|
new TagHoarderEvaluator()
|
package/dist/badges.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badges.cjs.js","sources":["../src/badges.ts"],"sourcesContent":["import {\n Badge,\n QetaIdEntity,\n UserResponse,\n isQuestion,\n isPost,\n isArticle,\n isLink,\n isAnswer,\n isCollection,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { BadgeEvaluator } from '@drodil/backstage-plugin-qeta-node';\n\nexport class GoodQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'good-question';\n public readonly name = 'Good Question';\n public readonly description = 'Received more than 10 votes on a question';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'great-question';\n public readonly name = 'Great Question';\n public readonly description = 'Received more than 100 votes on a question';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.score > 100;\n }\n}\n\nexport class FamousQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'famous-question';\n public readonly name = 'Famous Question';\n public readonly description = 'Question has somewhat more than 1000 views';\n public readonly icon = 'visibility';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 20;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.views > 1000;\n }\n}\n\nexport class GoodArticleEvaluator implements BadgeEvaluator {\n public readonly key = 'good-article';\n public readonly name = 'Good Article';\n public readonly description = 'Received more than 10 votes on an article';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isArticle(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatArticleEvaluator implements BadgeEvaluator {\n public readonly key = 'great-article';\n public readonly name = 'Great Article';\n public readonly description = 'Received more than 50 votes on an article';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isArticle(entity)) {\n return false;\n }\n\n return entity.score > 50;\n }\n}\n\nexport class GoodLinkEvaluator implements BadgeEvaluator {\n public readonly key = 'good-link';\n public readonly name = 'Good Link';\n public readonly description = 'Received more than 10 votes on a link';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isLink(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatLinkEvaluator implements BadgeEvaluator {\n public readonly key = 'great-link';\n public readonly name = 'Great Link';\n public readonly description = 'Received more than 50 votes on a link';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isLink(entity)) {\n return false;\n }\n\n return entity.score > 50;\n }\n}\n\nexport class GoodAnswerEvaluator implements BadgeEvaluator {\n public readonly key = 'good-answer';\n public readonly name = 'Good Answer';\n public readonly description = 'Received more than 10 votes on an answer';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isAnswer(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatAnswerEvaluator implements BadgeEvaluator {\n public readonly key = 'great-answer';\n public readonly name = 'Great Answer';\n public readonly description = 'Received more than 100 votes on an answer';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isAnswer(entity)) {\n return false;\n }\n\n const score = entity.score || 0;\n return score > 100;\n }\n}\n\nexport class ExpertEvaluator implements BadgeEvaluator {\n public readonly key = 'expert';\n public readonly name = 'Expert';\n public readonly description = 'Achieved a reputation score of 5000';\n public readonly icon = 'workspace_premium';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 5000;\n }\n}\n\nexport class InquisitiveEvaluator implements BadgeEvaluator {\n public readonly key = 'inquisitive';\n public readonly name = 'Inquisitive';\n public readonly description = 'Asked more than 5 questions';\n public readonly icon = 'help';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalQuestions >= 5;\n }\n}\n\nexport class CuriousMindEvaluator implements BadgeEvaluator {\n public readonly key = 'curious-mind';\n public readonly name = 'Curious Mind';\n public readonly description = 'Asked more than 20 questions';\n public readonly icon = 'psychology';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalQuestions >= 20;\n }\n}\n\nexport class HelperEvaluator implements BadgeEvaluator {\n public readonly key = 'helper';\n public readonly name = 'Helper';\n public readonly description = 'Answered more than 5 questions';\n public readonly icon = 'support';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalAnswers >= 5;\n }\n}\n\nexport class ProblemSolverEvaluator implements BadgeEvaluator {\n public readonly key = 'problem-solver';\n public readonly name = 'Problem Solver';\n public readonly description = 'Answered more than 20 questions';\n public readonly icon = 'build';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalAnswers >= 20;\n }\n}\n\nexport class GuruEvaluator implements BadgeEvaluator {\n public readonly key = 'guru';\n public readonly name = 'Guru';\n public readonly description = 'Answered more than 50 questions';\n public readonly icon = 'school';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalAnswers >= 50;\n }\n}\n\nexport class StudentEvaluator implements BadgeEvaluator {\n public readonly key = 'student';\n public readonly name = 'Student';\n public readonly description = 'Viewed more than 10 posts';\n public readonly icon = 'menu_book';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 5;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalViews >= 10;\n }\n}\n\nexport class TutorEvaluator implements BadgeEvaluator {\n public readonly key = 'tutor';\n public readonly name = 'Tutor';\n public readonly description = 'Viewed more than 50 posts';\n public readonly icon = 'cast_for_education';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 15;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalViews >= 50;\n }\n}\n\nexport class ProfessorEvaluator implements BadgeEvaluator {\n public readonly key = 'professor';\n public readonly name = 'Professor';\n public readonly description = 'Viewed more than 200 posts';\n public readonly icon = 'school';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 40;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalViews >= 200;\n }\n}\n\nexport class SupporterEvaluator implements BadgeEvaluator {\n public readonly key = 'supporter';\n public readonly name = 'Supporter';\n public readonly description = 'Voted more than 10 times';\n public readonly icon = 'thumb_up';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalVotes >= 10;\n }\n}\n\nexport class CriticEvaluator implements BadgeEvaluator {\n public readonly key = 'critic';\n public readonly name = 'Critic';\n public readonly description = 'Voted more than 50 times';\n public readonly icon = 'rate_review';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 30;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalVotes >= 50;\n }\n}\n\nexport class BloggerEvaluator implements BadgeEvaluator {\n public readonly key = 'blogger';\n public readonly name = 'Blogger';\n public readonly description = 'Wrote an article';\n public readonly icon = 'article';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 1;\n }\n}\n\nexport class JournalistEvaluator implements BadgeEvaluator {\n public readonly key = 'journalist';\n public readonly name = 'Journalist';\n public readonly description = 'Wrote more than 5 articles';\n public readonly icon = 'history_edu';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 5;\n }\n}\n\nexport class ColumnistEvaluator implements BadgeEvaluator {\n public readonly key = 'columnist';\n public readonly name = 'Columnist';\n public readonly description = 'Wrote more than 20 articles';\n public readonly icon = 'view_column';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 20;\n }\n}\n\nexport class ConnectorEvaluator implements BadgeEvaluator {\n public readonly key = 'connector';\n public readonly name = 'Connector';\n public readonly description = 'Posted more than 5 links';\n public readonly icon = 'link';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 5;\n }\n}\n\nexport class NetworkerEvaluator implements BadgeEvaluator {\n public readonly key = 'networker';\n public readonly name = 'Networker';\n public readonly description = 'Posted more than 20 links';\n public readonly icon = 'share';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 30;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 20;\n }\n}\n\nexport class AmbassadorEvaluator implements BadgeEvaluator {\n public readonly key = 'ambassador';\n public readonly name = 'Ambassador';\n public readonly description = 'Posted more than 50 links';\n public readonly icon = 'public';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 75;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 50;\n }\n}\n\nexport class DiscussorEvaluator implements BadgeEvaluator {\n public readonly key = 'discussor';\n public readonly name = 'Discussor';\n public readonly description = 'Posted more than 10 comments';\n public readonly icon = 'comment';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 10;\n }\n}\n\nexport class CommentatorEvaluator implements BadgeEvaluator {\n public readonly key = 'commentator';\n public readonly name = 'Commentator';\n public readonly description = 'Posted more than 50 comments';\n public readonly icon = 'record_voice_over';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 30;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 50;\n }\n}\n\nexport class PunditEvaluator implements BadgeEvaluator {\n public readonly key = 'pundit';\n public readonly name = 'Pundit';\n public readonly description = 'Posted more than 200 comments';\n public readonly icon = 'campaign';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 75;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 200;\n }\n}\n\nexport class EditorEvaluator implements BadgeEvaluator {\n public readonly key = 'editor';\n public readonly name = 'Editor';\n public readonly description = 'Wrote more than 100 articles';\n public readonly icon = 'gavel';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 200;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 100;\n }\n}\n\nexport class HubEvaluator implements BadgeEvaluator {\n public readonly key = 'hub';\n public readonly name = 'Hub';\n public readonly description = 'Posted more than 100 links';\n public readonly icon = 'device_hub';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly system = true;\n public readonly reputation = 150;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 100;\n }\n}\n\nexport class OratorEvaluator implements BadgeEvaluator {\n public readonly key = 'orator';\n public readonly name = 'Orator';\n public readonly description = 'Posted more than 500 comments';\n public readonly icon = 'hearing';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 150;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 500;\n }\n}\n\nexport class FavoriteQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-question';\n public readonly name = 'Favorite Question';\n public readonly description = 'Received more than 200 votes on a question';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class PopularQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'popular-question';\n public readonly name = 'Popular Question';\n public readonly description = 'Question has somewhat more than 500 views';\n public readonly icon = 'visibility';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.views > 500;\n }\n}\n\nexport class ViralQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'viral-question';\n public readonly name = 'Viral Question';\n public readonly description = 'Question has somewhat more than 5000 views';\n public readonly icon = 'visibility';\n public readonly level = 'diamond' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.views > 5000;\n }\n}\n\nexport class FavoriteArticleEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-article';\n public readonly name = 'Favorite Article';\n public readonly description = 'Received more than 200 votes on an article';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isArticle(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class FavoriteLinkEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-link';\n public readonly name = 'Favorite Link';\n public readonly description = 'Received more than 200 votes on a link';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isLink(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class FavoriteAnswerEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-answer';\n public readonly name = 'Favorite Answer';\n public readonly description = 'Received more than 200 votes on an answer';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isAnswer(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class EnthusiastEvaluator implements BadgeEvaluator {\n public readonly key = 'enthusiast';\n public readonly name = 'Enthusiast';\n public readonly description = 'Achieved a reputation score of 500';\n public readonly icon = 'verified';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 500;\n }\n}\n\nexport class SpecialistEvaluator implements BadgeEvaluator {\n public readonly key = 'specialist';\n public readonly name = 'Specialist';\n public readonly description = 'Achieved a reputation score of 2500';\n public readonly icon = 'verified';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 2500;\n }\n}\n\nexport class AuthorityEvaluator implements BadgeEvaluator {\n public readonly key = 'authority';\n public readonly name = 'Authority';\n public readonly description = 'Achieved a reputation score of 15000';\n public readonly icon = 'verified';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 15000;\n }\n}\n\nexport class SolverEvaluator implements BadgeEvaluator {\n public readonly key = 'solver';\n public readonly name = 'Solver';\n public readonly description = 'Marked as correct answer for 1 question';\n public readonly icon = 'check_circle';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 1;\n }\n}\n\nexport class FixerEvaluator implements BadgeEvaluator {\n public readonly key = 'fixer';\n public readonly name = 'Fixer';\n public readonly description = 'Marked as correct answer for 5 questions';\n public readonly icon = 'done_all';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 5;\n }\n}\n\nexport class ArchitectEvaluator implements BadgeEvaluator {\n public readonly key = 'architect';\n public readonly name = 'Architect';\n public readonly description = 'Marked as correct answer for 20 questions';\n public readonly icon = 'construction';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 20;\n }\n}\n\nexport class WizardEvaluator implements BadgeEvaluator {\n public readonly key = 'wizard';\n public readonly name = 'Wizard';\n public readonly description = 'Marked as correct answer for 50 questions';\n public readonly icon = 'auto_fix_high';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 50;\n }\n}\n\nexport class FriendlyEvaluator implements BadgeEvaluator {\n public readonly key = 'friendly';\n public readonly name = 'Friendly';\n public readonly description = 'Gained 5 followers';\n public readonly icon = 'person_add';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 15;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 5;\n }\n}\n\nexport class InfluencerEvaluator implements BadgeEvaluator {\n public readonly key = 'influencer';\n public readonly name = 'Influencer';\n public readonly description = 'Gained 25 followers';\n public readonly icon = 'trending_up';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 40;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 25;\n }\n}\n\nexport class CelebrityEvaluator implements BadgeEvaluator {\n public readonly key = 'celebrity';\n public readonly name = 'Celebrity';\n public readonly description = 'Gained 100 followers';\n public readonly icon = 'emoji_events';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 100;\n }\n}\n\nexport class CultLeaderEvaluator implements BadgeEvaluator {\n public readonly key = 'cult-leader';\n public readonly name = 'Cult Leader';\n public readonly description =\n 'Gained 500 followers - you have a loyal following!';\n public readonly icon = 'groups';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 250;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 500;\n }\n}\n\nexport class NightOwlEvaluator implements BadgeEvaluator {\n public readonly key = 'night-owl';\n public readonly name = 'Night Owl';\n public readonly description = 'Posted more than 100 questions and answers';\n public readonly icon = 'nights_stay';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 35;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalQuestions + user.totalAnswers >= 100;\n }\n}\n\nexport class EncyclopediaEvaluator implements BadgeEvaluator {\n public readonly key = 'encyclopedia';\n public readonly name = 'Encyclopedia';\n public readonly description =\n 'Created content across all types - question, article, and link';\n public readonly icon = 'auto_stories';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return (\n user.totalQuestions >= 1 &&\n user.totalArticles >= 1 &&\n user.totalLinks >= 1\n );\n }\n}\n\nexport class PolyglotEvaluator implements BadgeEvaluator {\n public readonly key = 'polyglot';\n public readonly name = 'Polyglot';\n public readonly description =\n 'Master of all trades - 10+ questions, answers, articles, and links';\n public readonly icon = 'translate';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 150;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return (\n user.totalQuestions >= 10 &&\n user.totalAnswers >= 10 &&\n user.totalArticles >= 10 &&\n user.totalLinks >= 10\n );\n }\n}\n\nexport class ChatterboxEvaluator implements BadgeEvaluator {\n public readonly key = 'chatterbox';\n public readonly name = 'Chatterbox';\n public readonly description =\n 'Posted more than 100 comments - you love to chat!';\n public readonly icon = 'chat_bubble';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 25;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 100;\n }\n}\n\nexport class CuratorEvaluator implements BadgeEvaluator {\n public readonly key = 'curator';\n public readonly name = 'Curator';\n public readonly description = 'Created a collection with more than 5 posts';\n public readonly icon = 'collections_bookmark';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 15;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.postsCount >= 5;\n }\n}\n\nexport class LibrarianEvaluator implements BadgeEvaluator {\n public readonly key = 'librarian';\n public readonly name = 'Librarian';\n public readonly description = 'Created a collection with more than 20 posts';\n public readonly icon = 'local_library';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 40;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.postsCount >= 20;\n }\n}\n\nexport class ArchivistEvaluator implements BadgeEvaluator {\n public readonly key = 'archivist';\n public readonly name = 'Archivist';\n public readonly description = 'Created a collection with more than 50 posts';\n public readonly icon = 'archive';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.postsCount >= 50;\n }\n}\n\nexport class CollectorEvaluator implements BadgeEvaluator {\n public readonly key = 'collector';\n public readonly name = 'Collector';\n public readonly description = 'Created your first collection';\n public readonly icon = 'playlist_add';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isCollection(e)).length >= 1;\n }\n}\n\nexport class OrganizerEvaluator implements BadgeEvaluator {\n public readonly key = 'organizer';\n public readonly name = 'Organizer';\n public readonly description = 'Created more than 5 collections';\n public readonly icon = 'folder_special';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 35;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isCollection(e)).length >= 5;\n }\n}\n\nexport class CatalogerEvaluator implements BadgeEvaluator {\n public readonly key = 'cataloger';\n public readonly name = 'Cataloger';\n public readonly description = 'Created more than 15 collections';\n public readonly icon = 'inventory';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 75;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isCollection(e)).length >= 15;\n }\n}\n\nexport class TrendsetterEvaluator implements BadgeEvaluator {\n public readonly key = 'trendsetter';\n public readonly name = 'Trendsetter';\n public readonly description = 'Collection has more than 10 followers';\n public readonly icon = 'trending_up';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 20;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.followers >= 10;\n }\n}\n\nexport class TasteMarkerEvaluator implements BadgeEvaluator {\n public readonly key = 'taste-maker';\n public readonly name = 'Taste Maker';\n public readonly description = 'Collection has more than 50 followers';\n public readonly icon = 'star_rate';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.followers >= 50;\n }\n}\n\nexport class IconicCollectionEvaluator implements BadgeEvaluator {\n public readonly key = 'iconic-collection';\n public readonly name = 'Iconic Collection';\n public readonly description = 'Collection has more than 200 followers';\n public readonly icon = 'diamond';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 150;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.followers >= 200;\n }\n}\n\nexport class LegendEvaluator implements BadgeEvaluator {\n public readonly key = 'legend';\n public readonly name = 'Legend';\n public readonly description =\n 'The ultimate achievement - You are basically running this company!';\n public readonly icon = 'whatshot';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 1000;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return (\n user.reputation >= 25000 &&\n user.totalQuestions >= 50 &&\n user.totalAnswers >= 100 &&\n user.totalArticles >= 25 &&\n user.totalLinks >= 50 &&\n user.totalFollowers >= 20\n );\n }\n}\n\n// Fun badges\nexport class PicassoEvaluator implements BadgeEvaluator {\n public readonly key = 'picasso';\n public readonly name = 'Picasso';\n public readonly description =\n 'Visual artist - Added a header image to your post';\n public readonly icon = 'palette';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isPost(entity)) {\n return false;\n }\n return !!entity.headerImage;\n }\n}\n\nexport class PaparazziEvaluator implements BadgeEvaluator {\n public readonly key = 'paparazzi';\n public readonly name = 'Paparazzi';\n public readonly description =\n 'A picture is worth a thousand words - Embedded 3+ images in a post';\n public readonly icon = 'camera_alt';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 25;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isPost(entity)) {\n return false;\n }\n return (entity.images?.length ?? 0) >= 3;\n }\n}\n\nexport class TagHoarderEvaluator implements BadgeEvaluator {\n public readonly key = 'tag-hoarder';\n public readonly name = 'Tag Hoarder';\n public readonly description =\n 'Categorization enthusiast - Used 5+ tags on a post';\n public readonly icon = 'label_important';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 15;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isPost(entity)) {\n return false;\n }\n return (entity.tags?.length ?? 0) >= 5;\n }\n}\n\nexport const BADGE_EVALUATORS: BadgeEvaluator[] = [\n new GoodQuestionEvaluator(),\n new GreatQuestionEvaluator(),\n new FamousQuestionEvaluator(),\n new GoodAnswerEvaluator(),\n new GreatAnswerEvaluator(),\n new GoodArticleEvaluator(),\n new GreatArticleEvaluator(),\n new GoodLinkEvaluator(),\n new GreatLinkEvaluator(),\n new InquisitiveEvaluator(),\n new CuriousMindEvaluator(),\n new HelperEvaluator(),\n new ProblemSolverEvaluator(),\n new GuruEvaluator(),\n new StudentEvaluator(),\n new TutorEvaluator(),\n new ProfessorEvaluator(),\n new SupporterEvaluator(),\n new CriticEvaluator(),\n new BloggerEvaluator(),\n new JournalistEvaluator(),\n new ColumnistEvaluator(),\n new EditorEvaluator(),\n new ConnectorEvaluator(),\n new NetworkerEvaluator(),\n new AmbassadorEvaluator(),\n new HubEvaluator(),\n new DiscussorEvaluator(),\n new CommentatorEvaluator(),\n new PunditEvaluator(),\n new OratorEvaluator(),\n new ExpertEvaluator(),\n new EnthusiastEvaluator(),\n new SpecialistEvaluator(),\n new AuthorityEvaluator(),\n new SolverEvaluator(),\n new FixerEvaluator(),\n new ArchitectEvaluator(),\n new WizardEvaluator(),\n new FriendlyEvaluator(),\n new InfluencerEvaluator(),\n new CelebrityEvaluator(),\n new CultLeaderEvaluator(),\n new NightOwlEvaluator(),\n new EncyclopediaEvaluator(),\n new PolyglotEvaluator(),\n new ChatterboxEvaluator(),\n new CuratorEvaluator(),\n new LibrarianEvaluator(),\n new ArchivistEvaluator(),\n new CollectorEvaluator(),\n new OrganizerEvaluator(),\n new CatalogerEvaluator(),\n new TrendsetterEvaluator(),\n new TasteMarkerEvaluator(),\n new IconicCollectionEvaluator(),\n new LegendEvaluator(),\n // Fun badges\n new PicassoEvaluator(),\n new PaparazziEvaluator(),\n new TagHoarderEvaluator(),\n];\n\nexport const SYSTEM_BADGES: Omit<Badge, 'id'>[] = BADGE_EVALUATORS;\n"],"names":["isQuestion","isArticle","isLink","isAnswer","isCollection","isPost"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"badges.cjs.js","sources":["../src/badges.ts"],"sourcesContent":["import {\n Badge,\n QetaIdEntity,\n UserResponse,\n isQuestion,\n isPost,\n isArticle,\n isLink,\n isAnswer,\n isCollection,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { BadgeEvaluator } from '@drodil/backstage-plugin-qeta-node';\n\nexport class GoodQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'good-question';\n public readonly name = 'Good Question';\n public readonly description = 'Received more than 10 votes on a question';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'great-question';\n public readonly name = 'Great Question';\n public readonly description = 'Received more than 100 votes on a question';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.score > 100;\n }\n}\n\nexport class FamousQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'famous-question';\n public readonly name = 'Famous Question';\n public readonly description = 'Question has somewhat more than 1000 views';\n public readonly icon = 'visibility';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 20;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.views > 1000;\n }\n}\n\nexport class GoodArticleEvaluator implements BadgeEvaluator {\n public readonly key = 'good-article';\n public readonly name = 'Good Article';\n public readonly description = 'Received more than 10 votes on an article';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isArticle(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatArticleEvaluator implements BadgeEvaluator {\n public readonly key = 'great-article';\n public readonly name = 'Great Article';\n public readonly description = 'Received more than 50 votes on an article';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isArticle(entity)) {\n return false;\n }\n\n return entity.score > 50;\n }\n}\n\nexport class GoodLinkEvaluator implements BadgeEvaluator {\n public readonly key = 'good-link';\n public readonly name = 'Good Link';\n public readonly description = 'Received more than 10 votes on a link';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isLink(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatLinkEvaluator implements BadgeEvaluator {\n public readonly key = 'great-link';\n public readonly name = 'Great Link';\n public readonly description = 'Received more than 50 votes on a link';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isLink(entity)) {\n return false;\n }\n\n return entity.score > 50;\n }\n}\n\nexport class GoodAnswerEvaluator implements BadgeEvaluator {\n public readonly key = 'good-answer';\n public readonly name = 'Good Answer';\n public readonly description = 'Received more than 10 votes on an answer';\n public readonly icon = 'star';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isAnswer(entity)) {\n return false;\n }\n\n return entity.score > 10;\n }\n}\n\nexport class GreatAnswerEvaluator implements BadgeEvaluator {\n public readonly key = 'great-answer';\n public readonly name = 'Great Answer';\n public readonly description = 'Received more than 100 votes on an answer';\n public readonly icon = 'local_police';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isAnswer(entity)) {\n return false;\n }\n\n const score = entity.score || 0;\n return score > 100;\n }\n}\n\nexport class ExpertEvaluator implements BadgeEvaluator {\n public readonly key = 'expert';\n public readonly name = 'Expert';\n public readonly description = 'Achieved a reputation score of 5000';\n public readonly icon = 'workspace_premium';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 5000;\n }\n}\n\nexport class InquisitiveEvaluator implements BadgeEvaluator {\n public readonly key = 'inquisitive';\n public readonly name = 'Inquisitive';\n public readonly description = 'Asked more than 5 questions';\n public readonly icon = 'help';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalQuestions >= 5;\n }\n}\n\nexport class CuriousMindEvaluator implements BadgeEvaluator {\n public readonly key = 'curious-mind';\n public readonly name = 'Curious Mind';\n public readonly description = 'Asked more than 20 questions';\n public readonly icon = 'psychology';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalQuestions >= 20;\n }\n}\n\nexport class HelperEvaluator implements BadgeEvaluator {\n public readonly key = 'helper';\n public readonly name = 'Helper';\n public readonly description = 'Answered more than 5 questions';\n public readonly icon = 'support';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalAnswers >= 5;\n }\n}\n\nexport class ProblemSolverEvaluator implements BadgeEvaluator {\n public readonly key = 'problem-solver';\n public readonly name = 'Problem Solver';\n public readonly description = 'Answered more than 20 questions';\n public readonly icon = 'build';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalAnswers >= 20;\n }\n}\n\nexport class GuruEvaluator implements BadgeEvaluator {\n public readonly key = 'guru';\n public readonly name = 'Guru';\n public readonly description = 'Answered more than 50 questions';\n public readonly icon = 'school';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalAnswers >= 50;\n }\n}\n\nexport class StudentEvaluator implements BadgeEvaluator {\n public readonly key = 'student';\n public readonly name = 'Student';\n public readonly description = 'Viewed more than 10 posts';\n public readonly icon = 'menu_book';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 5;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalViews >= 10;\n }\n}\n\nexport class TutorEvaluator implements BadgeEvaluator {\n public readonly key = 'tutor';\n public readonly name = 'Tutor';\n public readonly description = 'Viewed more than 50 posts';\n public readonly icon = 'cast_for_education';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 15;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalViews >= 50;\n }\n}\n\nexport class ProfessorEvaluator implements BadgeEvaluator {\n public readonly key = 'professor';\n public readonly name = 'Professor';\n public readonly description = 'Viewed more than 200 posts';\n public readonly icon = 'school';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 40;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalViews >= 200;\n }\n}\n\nexport class SupporterEvaluator implements BadgeEvaluator {\n public readonly key = 'supporter';\n public readonly name = 'Supporter';\n public readonly description = 'Voted more than 10 times';\n public readonly icon = 'thumb_up';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalVotes >= 10;\n }\n}\n\nexport class CriticEvaluator implements BadgeEvaluator {\n public readonly key = 'critic';\n public readonly name = 'Critic';\n public readonly description = 'Voted more than 50 times';\n public readonly icon = 'rate_review';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 30;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalVotes >= 50;\n }\n}\n\nexport class BloggerEvaluator implements BadgeEvaluator {\n public readonly key = 'blogger';\n public readonly name = 'Blogger';\n public readonly description = 'Wrote an article';\n public readonly icon = 'article';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 1;\n }\n}\n\nexport class JournalistEvaluator implements BadgeEvaluator {\n public readonly key = 'journalist';\n public readonly name = 'Journalist';\n public readonly description = 'Wrote more than 5 articles';\n public readonly icon = 'history_edu';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 5;\n }\n}\n\nexport class ColumnistEvaluator implements BadgeEvaluator {\n public readonly key = 'columnist';\n public readonly name = 'Columnist';\n public readonly description = 'Wrote more than 20 articles';\n public readonly icon = 'view_column';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 20;\n }\n}\n\nexport class ConnectorEvaluator implements BadgeEvaluator {\n public readonly key = 'connector';\n public readonly name = 'Connector';\n public readonly description = 'Posted more than 5 links';\n public readonly icon = 'link';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 5;\n }\n}\n\nexport class NetworkerEvaluator implements BadgeEvaluator {\n public readonly key = 'networker';\n public readonly name = 'Networker';\n public readonly description = 'Posted more than 20 links';\n public readonly icon = 'share';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 30;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 20;\n }\n}\n\nexport class AmbassadorEvaluator implements BadgeEvaluator {\n public readonly key = 'ambassador';\n public readonly name = 'Ambassador';\n public readonly description = 'Posted more than 50 links';\n public readonly icon = 'public';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 75;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 50;\n }\n}\n\nexport class DiscussorEvaluator implements BadgeEvaluator {\n public readonly key = 'discussor';\n public readonly name = 'Discussor';\n public readonly description = 'Posted more than 10 comments';\n public readonly icon = 'comment';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 10;\n }\n}\n\nexport class CommentatorEvaluator implements BadgeEvaluator {\n public readonly key = 'commentator';\n public readonly name = 'Commentator';\n public readonly description = 'Posted more than 50 comments';\n public readonly icon = 'record_voice_over';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 30;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 50;\n }\n}\n\nexport class PunditEvaluator implements BadgeEvaluator {\n public readonly key = 'pundit';\n public readonly name = 'Pundit';\n public readonly description = 'Posted more than 200 comments';\n public readonly icon = 'campaign';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 75;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 200;\n }\n}\n\nexport class EditorEvaluator implements BadgeEvaluator {\n public readonly key = 'editor';\n public readonly name = 'Editor';\n public readonly description = 'Wrote more than 100 articles';\n public readonly icon = 'gavel';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 200;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalArticles >= 100;\n }\n}\n\nexport class HubEvaluator implements BadgeEvaluator {\n public readonly key = 'hub';\n public readonly name = 'Hub';\n public readonly description = 'Posted more than 100 links';\n public readonly icon = 'device_hub';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly system = true;\n public readonly reputation = 150;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalLinks >= 100;\n }\n}\n\nexport class OratorEvaluator implements BadgeEvaluator {\n public readonly key = 'orator';\n public readonly name = 'Orator';\n public readonly description = 'Posted more than 500 comments';\n public readonly icon = 'hearing';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 150;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 500;\n }\n}\n\nexport class FavoriteQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-question';\n public readonly name = 'Favorite Question';\n public readonly description = 'Received more than 200 votes on a question';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class PopularQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'popular-question';\n public readonly name = 'Popular Question';\n public readonly description = 'Question has somewhat more than 500 views';\n public readonly icon = 'visibility';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.views > 500;\n }\n}\n\nexport class ViralQuestionEvaluator implements BadgeEvaluator {\n public readonly key = 'viral-question';\n public readonly name = 'Viral Question';\n public readonly description = 'Question has somewhat more than 5000 views';\n public readonly icon = 'visibility';\n public readonly level = 'diamond' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isQuestion(entity)) {\n return false;\n }\n\n return entity.views > 5000;\n }\n}\n\nexport class FavoriteArticleEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-article';\n public readonly name = 'Favorite Article';\n public readonly description = 'Received more than 200 votes on an article';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isArticle(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class FavoriteLinkEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-link';\n public readonly name = 'Favorite Link';\n public readonly description = 'Received more than 200 votes on a link';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isLink(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class FavoriteAnswerEvaluator implements BadgeEvaluator {\n public readonly key = 'favorite-answer';\n public readonly name = 'Favorite Answer';\n public readonly description = 'Received more than 200 votes on an answer';\n public readonly icon = 'military_tech';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isAnswer(entity)) {\n return false;\n }\n\n return entity.score > 200;\n }\n}\n\nexport class EnthusiastEvaluator implements BadgeEvaluator {\n public readonly key = 'enthusiast';\n public readonly name = 'Enthusiast';\n public readonly description = 'Achieved a reputation score of 500';\n public readonly icon = 'verified';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 20;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 500;\n }\n}\n\nexport class SpecialistEvaluator implements BadgeEvaluator {\n public readonly key = 'specialist';\n public readonly name = 'Specialist';\n public readonly description = 'Achieved a reputation score of 2500';\n public readonly icon = 'verified';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 2500;\n }\n}\n\nexport class AuthorityEvaluator implements BadgeEvaluator {\n public readonly key = 'authority';\n public readonly name = 'Authority';\n public readonly description = 'Achieved a reputation score of 15000';\n public readonly icon = 'verified';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.reputation >= 15000;\n }\n}\n\nexport class SolverEvaluator implements BadgeEvaluator {\n public readonly key = 'solver';\n public readonly name = 'Solver';\n public readonly description = 'Marked as correct answer for 1 question';\n public readonly icon = 'check_circle';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 1;\n }\n}\n\nexport class FixerEvaluator implements BadgeEvaluator {\n public readonly key = 'fixer';\n public readonly name = 'Fixer';\n public readonly description = 'Marked as correct answer for 5 questions';\n public readonly icon = 'done_all';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 5;\n }\n}\n\nexport class ArchitectEvaluator implements BadgeEvaluator {\n public readonly key = 'architect';\n public readonly name = 'Architect';\n public readonly description = 'Marked as correct answer for 20 questions';\n public readonly icon = 'construction';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 20;\n }\n}\n\nexport class WizardEvaluator implements BadgeEvaluator {\n public readonly key = 'wizard';\n public readonly name = 'Wizard';\n public readonly description = 'Marked as correct answer for 50 questions';\n public readonly icon = 'auto_fix_high';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 0;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isAnswer(e) && e.correct).length >= 50;\n }\n}\n\nexport class FriendlyEvaluator implements BadgeEvaluator {\n public readonly key = 'friendly';\n public readonly name = 'Friendly';\n public readonly description = 'Gained 5 followers';\n public readonly icon = 'person_add';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 15;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 5;\n }\n}\n\nexport class InfluencerEvaluator implements BadgeEvaluator {\n public readonly key = 'influencer';\n public readonly name = 'Influencer';\n public readonly description = 'Gained 25 followers';\n public readonly icon = 'trending_up';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 40;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 25;\n }\n}\n\nexport class CelebrityEvaluator implements BadgeEvaluator {\n public readonly key = 'celebrity';\n public readonly name = 'Celebrity';\n public readonly description = 'Gained 100 followers';\n public readonly icon = 'emoji_events';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 100;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 100;\n }\n}\n\nexport class CultLeaderEvaluator implements BadgeEvaluator {\n public readonly key = 'cult-leader';\n public readonly name = 'Cult Leader';\n public readonly description =\n 'Gained 500 followers - you have a loyal following!';\n public readonly icon = 'groups';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 250;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalFollowers >= 500;\n }\n}\n\nexport class NightOwlEvaluator implements BadgeEvaluator {\n public readonly key = 'night-owl';\n public readonly name = 'Night Owl';\n public readonly description = 'Posted more than 100 questions and answers';\n public readonly icon = 'nights_stay';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 35;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalQuestions + user.totalAnswers >= 100;\n }\n}\n\nexport class EncyclopediaEvaluator implements BadgeEvaluator {\n public readonly key = 'encyclopedia';\n public readonly name = 'Encyclopedia';\n public readonly description =\n 'Created content across all types - question, article, and link';\n public readonly icon = 'auto_stories';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 50;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return (\n user.totalQuestions >= 1 &&\n user.totalArticles >= 1 &&\n user.totalLinks >= 1\n );\n }\n}\n\nexport class PolyglotEvaluator implements BadgeEvaluator {\n public readonly key = 'polyglot';\n public readonly name = 'Polyglot';\n public readonly description =\n 'Master of all trades - 10+ questions, answers, articles, and links';\n public readonly icon = 'translate';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 150;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return (\n user.totalQuestions >= 10 &&\n user.totalAnswers >= 10 &&\n user.totalArticles >= 10 &&\n user.totalLinks >= 10\n );\n }\n}\n\nexport class ChatterboxEvaluator implements BadgeEvaluator {\n public readonly key = 'chatterbox';\n public readonly name = 'Chatterbox';\n public readonly description =\n 'Posted more than 100 comments - you love to chat!';\n public readonly icon = 'chat_bubble';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 25;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return user.totalComments >= 100;\n }\n}\n\nexport class CuratorEvaluator implements BadgeEvaluator {\n public readonly key = 'curator';\n public readonly name = 'Curator';\n public readonly description = 'Created a collection with more than 5 posts';\n public readonly icon = 'collections_bookmark';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 15;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.postsCount >= 5;\n }\n}\n\nexport class LibrarianEvaluator implements BadgeEvaluator {\n public readonly key = 'librarian';\n public readonly name = 'Librarian';\n public readonly description = 'Created a collection with more than 20 posts';\n public readonly icon = 'local_library';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 40;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.postsCount >= 20;\n }\n}\n\nexport class ArchivistEvaluator implements BadgeEvaluator {\n public readonly key = 'archivist';\n public readonly name = 'Archivist';\n public readonly description = 'Created a collection with more than 50 posts';\n public readonly icon = 'archive';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 100;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.postsCount >= 50;\n }\n}\n\nexport class CollectorEvaluator implements BadgeEvaluator {\n public readonly key = 'collector';\n public readonly name = 'Collector';\n public readonly description = 'Created your first collection';\n public readonly icon = 'playlist_add';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isCollection(e)).length >= 1;\n }\n}\n\nexport class OrganizerEvaluator implements BadgeEvaluator {\n public readonly key = 'organizer';\n public readonly name = 'Organizer';\n public readonly description = 'Created more than 5 collections';\n public readonly icon = 'folder_special';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 35;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isCollection(e)).length >= 5;\n }\n}\n\nexport class CatalogerEvaluator implements BadgeEvaluator {\n public readonly key = 'cataloger';\n public readonly name = 'Cataloger';\n public readonly description = 'Created more than 15 collections';\n public readonly icon = 'inventory';\n public readonly level = 'gold' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 75;\n\n async evaluateCollection(entities: QetaIdEntity[]): Promise<boolean> {\n return entities.filter(e => isCollection(e)).length >= 15;\n }\n}\n\nexport class TrendsetterEvaluator implements BadgeEvaluator {\n public readonly key = 'trendsetter';\n public readonly name = 'Trendsetter';\n public readonly description = 'Collection has more than 10 followers';\n public readonly icon = 'trending_up';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 20;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.followers >= 10;\n }\n}\n\nexport class TasteMarkerEvaluator implements BadgeEvaluator {\n public readonly key = 'taste-maker';\n public readonly name = 'Taste Maker';\n public readonly description = 'Collection has more than 50 followers';\n public readonly icon = 'star_rate';\n public readonly level = 'silver' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 50;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.followers >= 50;\n }\n}\n\nexport class IconicCollectionEvaluator implements BadgeEvaluator {\n public readonly key = 'iconic-collection';\n public readonly name = 'Iconic Collection';\n public readonly description = 'Collection has more than 200 followers';\n public readonly icon = 'diamond';\n public readonly level = 'gold' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 150;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isCollection(entity)) {\n return false;\n }\n return entity.followers >= 200;\n }\n}\n\nexport class LegendEvaluator implements BadgeEvaluator {\n public readonly key = 'legend';\n public readonly name = 'Legend';\n public readonly description =\n 'The ultimate achievement - You are basically running this company!';\n public readonly icon = 'whatshot';\n public readonly level = 'diamond' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 1000;\n\n async evaluateUser(user: UserResponse): Promise<boolean> {\n return (\n user.reputation >= 25000 &&\n user.totalQuestions >= 50 &&\n user.totalAnswers >= 100 &&\n user.totalArticles >= 25 &&\n user.totalLinks >= 50 &&\n user.totalFollowers >= 20\n );\n }\n}\n\nexport class PicassoEvaluator implements BadgeEvaluator {\n public readonly key = 'picasso';\n public readonly name = 'Picasso';\n public readonly description =\n 'Visual artist - Added a header image to your post';\n public readonly icon = 'palette';\n public readonly level = 'bronze' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 10;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isPost(entity)) {\n return false;\n }\n return !!entity.headerImage;\n }\n}\n\nexport class PaparazziEvaluator implements BadgeEvaluator {\n public readonly key = 'paparazzi';\n public readonly name = 'Paparazzi';\n public readonly description =\n 'A picture is worth a thousand words - Embedded 3+ images in a post';\n public readonly icon = 'camera_alt';\n public readonly level = 'silver' as const;\n public readonly type = 'one-time' as const;\n public readonly reputation = 15;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isPost(entity)) {\n return false;\n }\n return (entity.images?.length ?? 0) >= 3;\n }\n}\n\nexport class TagHoarderEvaluator implements BadgeEvaluator {\n public readonly key = 'tag-hoarder';\n public readonly name = 'Tag Hoarder';\n public readonly description =\n 'Categorization enthusiast - Used 5+ tags on a post';\n public readonly icon = 'label_important';\n public readonly level = 'bronze' as const;\n public readonly type = 'repetitive' as const;\n public readonly reputation = 5;\n\n async evaluate(entity: QetaIdEntity): Promise<boolean> {\n if (!isPost(entity)) {\n return false;\n }\n return (entity.tags?.length ?? 0) >= 5;\n }\n}\n\nexport const BADGE_EVALUATORS: BadgeEvaluator[] = [\n new GoodQuestionEvaluator(),\n new GreatQuestionEvaluator(),\n new FamousQuestionEvaluator(),\n new GoodAnswerEvaluator(),\n new GreatAnswerEvaluator(),\n new GoodArticleEvaluator(),\n new GreatArticleEvaluator(),\n new GoodLinkEvaluator(),\n new GreatLinkEvaluator(),\n new InquisitiveEvaluator(),\n new CuriousMindEvaluator(),\n new HelperEvaluator(),\n new ProblemSolverEvaluator(),\n new GuruEvaluator(),\n new StudentEvaluator(),\n new TutorEvaluator(),\n new ProfessorEvaluator(),\n new SupporterEvaluator(),\n new CriticEvaluator(),\n new BloggerEvaluator(),\n new JournalistEvaluator(),\n new ColumnistEvaluator(),\n new EditorEvaluator(),\n new ConnectorEvaluator(),\n new NetworkerEvaluator(),\n new AmbassadorEvaluator(),\n new HubEvaluator(),\n new DiscussorEvaluator(),\n new CommentatorEvaluator(),\n new PunditEvaluator(),\n new OratorEvaluator(),\n new ExpertEvaluator(),\n new EnthusiastEvaluator(),\n new SpecialistEvaluator(),\n new AuthorityEvaluator(),\n new SolverEvaluator(),\n new FixerEvaluator(),\n new ArchitectEvaluator(),\n new WizardEvaluator(),\n new FriendlyEvaluator(),\n new InfluencerEvaluator(),\n new CelebrityEvaluator(),\n new CultLeaderEvaluator(),\n new NightOwlEvaluator(),\n new EncyclopediaEvaluator(),\n new PolyglotEvaluator(),\n new ChatterboxEvaluator(),\n new CuratorEvaluator(),\n new LibrarianEvaluator(),\n new ArchivistEvaluator(),\n new CollectorEvaluator(),\n new OrganizerEvaluator(),\n new CatalogerEvaluator(),\n new TrendsetterEvaluator(),\n new TasteMarkerEvaluator(),\n new IconicCollectionEvaluator(),\n new LegendEvaluator(),\n new PicassoEvaluator(),\n new PaparazziEvaluator(),\n new TagHoarderEvaluator(),\n];\n\nexport const SYSTEM_BADGES: Omit<Badge, 'id'>[] = BADGE_EVALUATORS;\n"],"names":["isQuestion","isArticle","isLink","isAnswer","isCollection","isPost"],"mappings":"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"}
|
|
@@ -354,6 +354,12 @@ class DatabaseQetaStore {
|
|
|
354
354
|
async updateTemplate(options) {
|
|
355
355
|
return this.templatesStore.updateTemplate(options);
|
|
356
356
|
}
|
|
357
|
+
async reviewPost(user_ref, postId, status, comment) {
|
|
358
|
+
return this.postsStore.reviewPost(user_ref, postId, status, comment);
|
|
359
|
+
}
|
|
360
|
+
async getPostReviews(postId) {
|
|
361
|
+
return this.postsStore.getPostReviews(postId);
|
|
362
|
+
}
|
|
357
363
|
async getAIAnswer(postId) {
|
|
358
364
|
return this.postsStore.getAIAnswer(postId);
|
|
359
365
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseQetaStore.cjs.js","sources":["../../src/database/DatabaseQetaStore.ts"],"sourcesContent":["import {\n DatabaseService,\n resolvePackagePath,\n} from '@backstage/backend-plugin-api';\n\nimport {\n AnswerOptions,\n Answers,\n AttachmentParameters,\n AwardBadgeResult,\n CollectionOptions,\n CollectionPostRank,\n Collections,\n CommentOptions,\n EntitiesResponse,\n EntityResponse,\n MaybeAnswer,\n MaybeCollection,\n MaybePost,\n PostOptions,\n Posts,\n QetaStore,\n Templates,\n UserResponse,\n UsersResponse,\n} from './QetaStore';\nimport { Badge, UserBadge } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AIResponse,\n AnswersQuery,\n Attachment,\n Collection,\n Comment as QetaComment,\n EntitiesQuery,\n EntityLinks,\n GlobalStat,\n Post,\n PostStatus,\n PostType,\n PostsQuery,\n Statistic,\n StatisticsRequestParameters,\n TagResponse,\n TagsQuery,\n TagsResponse,\n Template,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersQuery,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { QetaFilters } from '../service/util';\nimport { PermissionCriteria } from '@backstage/plugin-permission-common';\nimport { TagDatabase } from '@drodil/backstage-plugin-qeta-node';\nimport { PostsStore } from './stores/PostsStore';\nimport { AnswersStore } from './stores/AnswersStore';\nimport { CommentsStore } from './stores/CommentsStore';\nimport { CollectionsStore } from './stores/CollectionsStore';\nimport { StatsStore } from './stores/StatsStore';\nimport { TagsStore } from './stores/TagsStore';\nimport { UsersStore } from './stores/UsersStore';\nimport { EntitiesStore } from './stores/EntitiesStore';\nimport { TemplatesStore } from './stores/TemplatesStore';\nimport { AttachmentsStore } from './stores/AttachmentsStore';\nimport { BadgesStore } from './stores/BadgesStore';\n\nconst migrationsDir = resolvePackagePath(\n '@drodil/backstage-plugin-qeta-backend',\n 'migrations',\n);\n\n// Local interfaces removed, imported from stores\n\nexport class DatabaseQetaStore implements QetaStore {\n private constructor(\n private readonly postsStore: PostsStore,\n private readonly answersStore: AnswersStore,\n private readonly commentsStore: CommentsStore,\n private readonly collectionsStore: CollectionsStore,\n private readonly statsStore: StatsStore,\n private readonly tagsStore: TagsStore,\n private readonly usersStore: UsersStore,\n private readonly entitiesStore: EntitiesStore,\n private readonly templatesStore: TemplatesStore,\n private readonly attachmentsStore: AttachmentsStore,\n private readonly badgesStore: BadgesStore,\n ) {}\n\n static async create({\n database,\n skipMigrations,\n tagDatabase,\n }: {\n database: DatabaseService;\n skipMigrations?: boolean;\n tagDatabase?: TagDatabase;\n }): Promise<DatabaseQetaStore> {\n const client = await database.getClient();\n\n if (!database.migrations?.skip && !skipMigrations) {\n await client.migrate.latest({\n directory: migrationsDir,\n });\n }\n\n const commentsStore = new CommentsStore(client);\n const tagsStore = new TagsStore(client, tagDatabase);\n const entitiesStore = new EntitiesStore(client);\n const usersStore = new UsersStore(client);\n const templatesStore = new TemplatesStore(client, tagsStore, entitiesStore);\n const attachmentsStore = new AttachmentsStore(client);\n const postsStore = new PostsStore(\n client,\n commentsStore,\n tagsStore,\n entitiesStore,\n attachmentsStore,\n tagDatabase,\n );\n const answersStore = new AnswersStore(\n client,\n commentsStore,\n postsStore,\n attachmentsStore,\n );\n const collectionsStore = new CollectionsStore(\n client,\n postsStore,\n attachmentsStore,\n );\n const statsStore = new StatsStore(client);\n const badgesStore = new BadgesStore(client);\n\n postsStore.setAnswersStore(answersStore);\n\n return new DatabaseQetaStore(\n postsStore,\n answersStore,\n commentsStore,\n collectionsStore,\n statsStore,\n tagsStore,\n usersStore,\n entitiesStore,\n templatesStore,\n attachmentsStore,\n badgesStore,\n );\n }\n\n async getPosts(\n user_ref: string,\n options: PostsQuery,\n filters?: PermissionCriteria<QetaFilters>,\n opts?: PostOptions,\n ): Promise<Posts> {\n return this.postsStore.getPosts(user_ref, options, filters, opts);\n }\n\n async getPost(\n user_ref: string,\n id: number,\n recordView?: boolean,\n options?: PostOptions,\n ): Promise<MaybePost> {\n return this.postsStore.getPost(user_ref, id, recordView, options);\n }\n\n async getPostByAnswerId(\n user_ref: string,\n answerId: number,\n recordView?: boolean,\n options?: PostOptions,\n ): Promise<MaybePost> {\n return this.postsStore.getPostByAnswerId(\n user_ref,\n answerId,\n recordView,\n options,\n );\n }\n\n async createPost(options: {\n user_ref: string;\n title: string;\n content: string;\n created: Date;\n author?: string;\n tags?: string[];\n entities?: string[];\n images?: number[];\n anonymous?: boolean;\n type?: PostType;\n headerImage?: string;\n url?: string;\n status?: PostStatus;\n opts?: PostOptions;\n }): Promise<Post> {\n return this.postsStore.createPost(options);\n }\n\n async updatePost(options: {\n user_ref: string;\n id: number;\n title?: string;\n content?: string;\n author?: string;\n tags?: string[];\n entities?: string[];\n images?: number[];\n headerImage?: string;\n url?: string;\n status?: PostStatus;\n opts?: PostOptions;\n }): Promise<MaybePost> {\n return this.postsStore.updatePost(options);\n }\n\n async deletePost(id: number, permanently?: boolean): Promise<boolean> {\n return this.postsStore.deletePost(id, permanently);\n }\n\n async votePost(\n user_ref: string,\n postId: number,\n score: number,\n ): Promise<boolean> {\n return this.postsStore.votePost(user_ref, postId, score);\n }\n\n async deletePostVote(user_ref: string, postId: number): Promise<boolean> {\n return this.postsStore.deletePostVote(user_ref, postId);\n }\n\n async favoritePost(user_ref: string, postId: number): Promise<boolean> {\n return this.postsStore.favoritePost(user_ref, postId);\n }\n\n async unfavoritePost(user_ref: string, postId: number): Promise<boolean> {\n return this.postsStore.unfavoritePost(user_ref, postId);\n }\n\n async getUsersWhoFavoritedPost(postId: number): Promise<string[]> {\n return this.postsStore.getUsersWhoFavoritedPost(postId);\n }\n\n async getAnswers(\n user_ref: string,\n options: AnswersQuery,\n filters?: PermissionCriteria<QetaFilters>,\n opts?: AnswerOptions,\n ): Promise<Answers> {\n return this.answersStore.getAnswers(user_ref, options, filters, opts);\n }\n\n async getAnswer(\n answerId: number,\n user_ref: string,\n options?: AnswerOptions,\n ): Promise<MaybeAnswer> {\n return this.answersStore.getAnswer(answerId, user_ref, options);\n }\n\n async answerPost(\n user_ref: string,\n questionId: number,\n answer: string,\n created: Date,\n images?: number[],\n anonymous?: boolean,\n options?: AnswerOptions,\n ): Promise<MaybeAnswer> {\n return this.answersStore.answerPost(\n user_ref,\n questionId,\n answer,\n created,\n images,\n anonymous,\n options,\n );\n }\n\n async updateAnswer(\n user_ref: string,\n questionId: number,\n answerId: number,\n answer: string,\n author?: string,\n images?: number[],\n options?: AnswerOptions,\n ): Promise<MaybeAnswer> {\n return this.answersStore.updateAnswer(\n user_ref,\n questionId,\n answerId,\n answer,\n author,\n images,\n options,\n );\n }\n\n async deleteAnswer(id: number): Promise<boolean> {\n return this.answersStore.deleteAnswer(id);\n }\n\n async voteAnswer(\n user_ref: string,\n answerId: number,\n score: number,\n ): Promise<boolean> {\n return this.answersStore.voteAnswer(user_ref, answerId, score);\n }\n\n async deleteAnswerVote(user_ref: string, answerId: number): Promise<boolean> {\n return this.answersStore.deleteAnswerVote(user_ref, answerId);\n }\n\n async markAnswerCorrect(postId: number, answerId: number): Promise<boolean> {\n return this.answersStore.markAnswerCorrect(postId, answerId);\n }\n\n async markAnswerIncorrect(\n postId: number,\n answerId: number,\n ): Promise<boolean> {\n return this.answersStore.markAnswerIncorrect(postId, answerId);\n }\n\n async clickPost(user_ref: string, postId: number): Promise<void> {\n const vote = await this.postsStore.getPostVote(user_ref, postId);\n const score = (vote?.score || 0) + 1;\n await this.postsStore.votePost(user_ref, postId, score);\n }\n\n async commentPost(\n post_id: number,\n user_ref: string,\n content: string,\n created: Date,\n ): Promise<MaybePost> {\n await this.commentsStore.commentPost(post_id, user_ref, content, created);\n return this.getPost(user_ref, post_id);\n }\n\n async commentAnswer(\n answer_id: number,\n user_ref: string,\n content: string,\n created: Date,\n ): Promise<MaybeAnswer> {\n await this.commentsStore.commentAnswer(\n answer_id,\n user_ref,\n content,\n created,\n );\n return this.getAnswer(answer_id, user_ref);\n }\n\n async updatePostComment(\n post_id: number,\n id: number,\n user_ref: string,\n content: string,\n ): Promise<MaybePost> {\n await this.commentsStore.updatePostComment(post_id, id, user_ref, content);\n return this.getPost(user_ref, post_id);\n }\n\n async updateAnswerComment(\n answer_id: number,\n id: number,\n user_ref: string,\n content: string,\n ): Promise<MaybeAnswer> {\n await this.commentsStore.updateAnswerComment(\n answer_id,\n id,\n user_ref,\n content,\n );\n return this.getAnswer(answer_id, user_ref);\n }\n\n async deletePostComment(\n post_id: number,\n id: number,\n user_ref: string,\n ): Promise<MaybePost> {\n await this.commentsStore.deletePostComment(post_id, id);\n return this.getPost(user_ref, post_id);\n }\n\n async deleteAnswerComment(\n answer_id: number,\n id: number,\n user_ref: string,\n ): Promise<MaybeAnswer> {\n await this.commentsStore.deleteAnswerComment(answer_id, id);\n return this.getAnswer(answer_id, user_ref);\n }\n\n async getCollections(\n user_ref: string,\n options: PostsQuery,\n opts?: CollectionOptions,\n ): Promise<Collections> {\n return this.collectionsStore.getCollections(user_ref, options, opts);\n }\n\n async getCollection(\n user_ref: string,\n id: number,\n options?: CollectionOptions,\n ): Promise<MaybeCollection> {\n return this.collectionsStore.getCollection(user_ref, id, options);\n }\n\n async createCollection(options: {\n user_ref: string;\n title: string;\n description?: string;\n created: Date;\n images?: number[];\n headerImage?: string;\n opts?: CollectionOptions;\n }): Promise<Collection> {\n return this.collectionsStore.createCollection(\n options,\n ) as Promise<Collection>;\n }\n\n async updateCollection(options: {\n id: number;\n user_ref: string;\n title: string;\n description?: string;\n images?: number[];\n headerImage?: string;\n opts?: CollectionOptions;\n }): Promise<MaybeCollection> {\n return this.collectionsStore.updateCollection(options);\n }\n\n async deleteCollection(id: number): Promise<boolean> {\n return this.collectionsStore.deleteCollection(id);\n }\n\n async addPostToCollection(\n user_ref: string,\n id: number,\n postId: number,\n options?: CollectionOptions,\n ): Promise<MaybeCollection> {\n return this.collectionsStore.addPostToCollection(\n user_ref,\n id,\n postId,\n options,\n );\n }\n\n async removePostFromCollection(\n user_ref: string,\n id: number,\n postId: number,\n options?: CollectionOptions,\n ): Promise<MaybeCollection> {\n return this.collectionsStore.removePostFromCollection(\n user_ref,\n id,\n postId,\n options,\n );\n }\n\n async getUsersForCollection(collectionId: number): Promise<string[]> {\n return this.collectionsStore.getUsersForCollection(collectionId);\n }\n\n async followCollection(\n user_ref: string,\n collectionId: number,\n ): Promise<boolean> {\n return this.collectionsStore.followCollection(user_ref, collectionId);\n }\n\n async unfollowCollection(\n user_ref: string,\n collectionId: number,\n ): Promise<boolean> {\n return this.collectionsStore.unfollowCollection(user_ref, collectionId);\n }\n\n async getUserCollections(\n user_ref: string,\n options?: CollectionOptions,\n ): Promise<UserCollectionsResponse> {\n return this.collectionsStore.getUserCollections(user_ref, options);\n }\n\n async getPostRank(\n collectionId: number,\n postId: number,\n ): Promise<number | null> {\n return this.collectionsStore.getPostRank(collectionId, postId);\n }\n\n async getTopRankedPostId(\n collectionId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getTopRankedPostId(collectionId);\n }\n\n async getBottomRankedPostId(\n collectionId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getBottomRankedPostId(collectionId);\n }\n\n async getNextRankedPostId(\n collectionId: number,\n postId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getNextRankedPostId(collectionId, postId);\n }\n\n async getPreviousRankedPostId(\n collectionId: number,\n postId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getPreviousRankedPostId(collectionId, postId);\n }\n\n async updatePostRank(\n collectionId: number,\n postId: number,\n rank: number,\n ): Promise<void> {\n return this.collectionsStore.updatePostRank(collectionId, postId, rank);\n }\n\n async getTags(\n options?: { noDescription?: boolean; ids?: number[] } & TagsQuery,\n filters?: PermissionCriteria<QetaFilters>,\n ): Promise<TagsResponse> {\n return this.tagsStore.getTags(options, filters);\n }\n\n async getTagExperts(tags: string[]): Promise<string[]> {\n return this.tagsStore.getTagExperts(tags);\n }\n\n async getTag(tag: string): Promise<TagResponse | null> {\n return this.tagsStore.getTag(tag);\n }\n\n async getTagById(id: number): Promise<TagResponse | null> {\n return this.tagsStore.getTagById(id);\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n ): Promise<TagResponse | null> {\n return this.tagsStore.createTag(tag, description, experts);\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n ): Promise<TagResponse | null> {\n return this.tagsStore.updateTag(id, description, experts);\n }\n\n async deleteTag(id: number): Promise<boolean> {\n return this.tagsStore.deleteTag(id);\n }\n\n async getEntities(\n options?: { entityRefs?: string[] } & EntitiesQuery,\n ): Promise<EntitiesResponse> {\n return this.entitiesStore.getEntities(options);\n }\n\n async getEntity(entity_ref: string): Promise<EntityResponse | null> {\n return this.entitiesStore.getEntity(entity_ref);\n }\n\n async getUsers(\n options?: { entityRefs?: string[] } & UsersQuery,\n ): Promise<UsersResponse> {\n return this.usersStore.getUsers(options);\n }\n\n async getUser(user_ref: string): Promise<UserResponse | null> {\n return this.usersStore.getUser(user_ref);\n }\n\n async getUserTags(\n user_ref: string,\n filters?: PermissionCriteria<QetaFilters>,\n ): Promise<UserTagsResponse> {\n return this.tagsStore.getUserTags(user_ref, filters);\n }\n\n async followTag(user_ref: string, tag: string): Promise<boolean> {\n return this.tagsStore.followTag(user_ref, tag);\n }\n\n async unfollowTag(user_ref: string, tag: string): Promise<boolean> {\n return this.tagsStore.unfollowTag(user_ref, tag);\n }\n\n async getUserEntities(user_ref: string): Promise<UserEntitiesResponse> {\n return this.entitiesStore.getUserEntities(user_ref);\n }\n\n async followEntity(user_ref: string, entityRef: string): Promise<boolean> {\n return this.entitiesStore.followEntity(user_ref, entityRef);\n }\n\n async unfollowEntity(user_ref: string, entityRef: string): Promise<boolean> {\n return this.entitiesStore.unfollowEntity(user_ref, entityRef);\n }\n\n async getUsersForTags(tags: string[]): Promise<string[]> {\n return this.tagsStore.getUsersForTags(tags);\n }\n\n async getUsersForEntities(entityRefs: string[]): Promise<string[]> {\n return this.entitiesStore.getUsersForEntities(entityRefs);\n }\n\n async getFollowedUsers(user_ref: string): Promise<UserUsersResponse> {\n return this.usersStore.getFollowedUsers(user_ref);\n }\n\n async followUser(\n user_ref: string,\n followedUserRef: string,\n ): Promise<boolean> {\n return this.usersStore.followUser(user_ref, followedUserRef);\n }\n\n async unfollowUser(\n user_ref: string,\n followedUserRef: string,\n ): Promise<boolean> {\n return this.usersStore.unfollowUser(user_ref, followedUserRef);\n }\n\n async getGlobalStats(): Promise<GlobalStat[]> {\n return this.statsStore.getGlobalStats();\n }\n\n async getUserStats(user_ref: string): Promise<UserStat[]> {\n return this.statsStore.getUserStats(user_ref);\n }\n\n async getTemplates(): Promise<Templates> {\n return this.templatesStore.getTemplates();\n }\n\n async getTemplate(id: number): Promise<Template | null> {\n return this.templatesStore.getTemplate(id);\n }\n\n async createTemplate(options: {\n title: string;\n description: string;\n questionTitle?: string;\n questionContent?: string;\n tags?: string[];\n entities?: string[];\n }): Promise<Template> {\n return this.templatesStore.createTemplate(options);\n }\n\n async deleteTemplate(id: number): Promise<boolean> {\n return this.templatesStore.deleteTemplate(id);\n }\n\n async updateTemplate(options: {\n id: number;\n title: string;\n description: string;\n questionTitle?: string;\n questionContent?: string;\n tags?: string[];\n entities?: string[];\n }): Promise<Template | null> {\n return this.templatesStore.updateTemplate(options);\n }\n\n async getAIAnswer(postId: number): Promise<AIResponse | null> {\n return this.postsStore.getAIAnswer(postId);\n }\n\n async saveAIAnswer(postId: number, response: AIResponse): Promise<void> {\n return this.postsStore.saveAIAnswer(postId, response);\n }\n\n async deleteAIAnswer(postId: number): Promise<boolean> {\n return this.postsStore.deleteAIAnswer(postId);\n }\n\n async postAttachment({\n uuid,\n locationType,\n locationUri,\n extension,\n mimeType,\n binaryImage,\n path,\n creator,\n }: AttachmentParameters): Promise<Attachment> {\n return this.attachmentsStore.postAttachment({\n uuid,\n locationType,\n locationUri,\n extension,\n mimeType,\n binaryImage,\n path,\n creator,\n });\n }\n\n async getAttachment(uuid: string): Promise<Attachment | undefined> {\n return this.attachmentsStore.getAttachment(uuid);\n }\n\n async deleteAttachment(uuid: string): Promise<boolean> {\n return this.attachmentsStore.deleteAttachment(uuid);\n }\n\n async getDeletableAttachments(dayLimit: number): Promise<Attachment[]> {\n return this.attachmentsStore.getDeletableAttachments(dayLimit);\n }\n\n // Stats\n\n async getMostUpvotedPosts({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getMostUpvotedPosts({ author, options });\n }\n\n async getTotalPosts({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getTotalPosts({ author, options });\n }\n\n async getMostUpvotedAnswers({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getMostUpvotedAnswers({ author, options });\n }\n\n async getMostUpvotedCorrectAnswers({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getMostUpvotedCorrectAnswers({ author, options });\n }\n\n async getTotalAnswers({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getTotalAnswers({ author, options });\n }\n\n async getCount(\n table: string,\n filters?: { author?: string; type?: PostType },\n ): Promise<number> {\n return this.statsStore.getCount(table, filters);\n }\n\n async saveGlobalStats(date: Date): Promise<void> {\n return this.statsStore.saveGlobalStats(date);\n }\n\n async saveUserStats(userRef: string, date: Date): Promise<void> {\n return this.statsStore.saveUserStats(userRef, date);\n }\n\n async getTotalViews(\n user_ref: string,\n lastDays?: number,\n excludeUser?: boolean,\n ): Promise<number> {\n return this.statsStore.getTotalViews(user_ref, lastDays, excludeUser);\n }\n\n async getBadges(): Promise<Badge[]> {\n return this.badgesStore.getBadges();\n }\n\n async getBadge(key: string): Promise<Badge | undefined> {\n return this.badgesStore.getBadge(key);\n }\n\n async getUserBadges(userRef: string): Promise<UserBadge[]> {\n return this.badgesStore.getUserBadges(userRef);\n }\n\n async awardBadge(\n userRef: string,\n badgeKey: string,\n uniqueKey?: string,\n ): Promise<AwardBadgeResult | null> {\n return this.badgesStore.awardBadge(userRef, badgeKey, uniqueKey);\n }\n\n async createBadge(badge: Omit<Badge, 'id'>): Promise<void> {\n return this.badgesStore.createBadge(badge);\n }\n\n async suggestPosts(\n user_ref: string,\n title: string,\n content: string,\n tags?: string[],\n entities?: string[],\n filters?: PermissionCriteria<QetaFilters>,\n opts?: PostOptions,\n ): Promise<Posts> {\n return this.postsStore.suggestPosts(\n user_ref,\n title,\n content,\n tags,\n entities,\n filters,\n opts,\n );\n }\n\n async cleanStats(days: number, date: Date): Promise<void> {\n return this.statsStore.cleanStats(days, date);\n }\n\n async getUsersCount(): Promise<number> {\n return this.usersStore.getUsersCount();\n }\n\n async getFollowingUsers(user_ref: string): Promise<string[]> {\n return this.usersStore.getFollowingUsers(user_ref);\n }\n\n async getEntityLinks(): Promise<EntityLinks[]> {\n return this.entitiesStore.getEntityLinks();\n }\n\n async getComments(\n options?: { ids?: number[] },\n opts?: CommentOptions,\n ): Promise<QetaComment[]> {\n return this.commentsStore.getComments(options, opts);\n }\n\n async getComment(\n commentId: number,\n opts?: CommentOptions & { postId?: number; answerId?: number },\n ): Promise<QetaComment | null> {\n return this.commentsStore.getComment(commentId, opts);\n }\n}\n"],"names":["resolvePackagePath","CommentsStore","TagsStore","EntitiesStore","UsersStore","TemplatesStore","AttachmentsStore","PostsStore","AnswersStore","CollectionsStore","StatsStore","BadgesStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatabaseQetaStore.cjs.js","sources":["../../src/database/DatabaseQetaStore.ts"],"sourcesContent":["import {\n DatabaseService,\n resolvePackagePath,\n} from '@backstage/backend-plugin-api';\n\nimport {\n AnswerOptions,\n Answers,\n AttachmentParameters,\n AwardBadgeResult,\n CollectionOptions,\n CollectionPostRank,\n Collections,\n CommentOptions,\n EntitiesResponse,\n EntityResponse,\n MaybeAnswer,\n MaybeCollection,\n MaybePost,\n PostOptions,\n PostReview,\n Posts,\n QetaStore,\n Templates,\n UserResponse,\n UsersResponse,\n} from './QetaStore';\nimport { Badge, UserBadge } from '@drodil/backstage-plugin-qeta-common';\nimport {\n AIResponse,\n AnswersQuery,\n Attachment,\n Collection,\n Comment as QetaComment,\n EntitiesQuery,\n EntityLinks,\n GlobalStat,\n Post,\n PostStatus,\n PostType,\n PostsQuery,\n Statistic,\n StatisticsRequestParameters,\n TagResponse,\n TagsQuery,\n TagsResponse,\n Template,\n UserCollectionsResponse,\n UserEntitiesResponse,\n UsersQuery,\n UserStat,\n UserTagsResponse,\n UserUsersResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { QetaFilters } from '../service/util';\nimport { PermissionCriteria } from '@backstage/plugin-permission-common';\nimport { TagDatabase } from '@drodil/backstage-plugin-qeta-node';\nimport { PostsStore } from './stores/PostsStore';\nimport { AnswersStore } from './stores/AnswersStore';\nimport { CommentsStore } from './stores/CommentsStore';\nimport { CollectionsStore } from './stores/CollectionsStore';\nimport { StatsStore } from './stores/StatsStore';\nimport { TagsStore } from './stores/TagsStore';\nimport { UsersStore } from './stores/UsersStore';\nimport { EntitiesStore } from './stores/EntitiesStore';\nimport { TemplatesStore } from './stores/TemplatesStore';\nimport { AttachmentsStore } from './stores/AttachmentsStore';\nimport { BadgesStore } from './stores/BadgesStore';\n\nconst migrationsDir = resolvePackagePath(\n '@drodil/backstage-plugin-qeta-backend',\n 'migrations',\n);\n\n// Local interfaces removed, imported from stores\n\nexport class DatabaseQetaStore implements QetaStore {\n private constructor(\n private readonly postsStore: PostsStore,\n private readonly answersStore: AnswersStore,\n private readonly commentsStore: CommentsStore,\n private readonly collectionsStore: CollectionsStore,\n private readonly statsStore: StatsStore,\n private readonly tagsStore: TagsStore,\n private readonly usersStore: UsersStore,\n private readonly entitiesStore: EntitiesStore,\n private readonly templatesStore: TemplatesStore,\n private readonly attachmentsStore: AttachmentsStore,\n private readonly badgesStore: BadgesStore,\n ) {}\n\n static async create({\n database,\n skipMigrations,\n tagDatabase,\n }: {\n database: DatabaseService;\n skipMigrations?: boolean;\n tagDatabase?: TagDatabase;\n }): Promise<DatabaseQetaStore> {\n const client = await database.getClient();\n\n if (!database.migrations?.skip && !skipMigrations) {\n await client.migrate.latest({\n directory: migrationsDir,\n });\n }\n\n const commentsStore = new CommentsStore(client);\n const tagsStore = new TagsStore(client, tagDatabase);\n const entitiesStore = new EntitiesStore(client);\n const usersStore = new UsersStore(client);\n const templatesStore = new TemplatesStore(client, tagsStore, entitiesStore);\n const attachmentsStore = new AttachmentsStore(client);\n const postsStore = new PostsStore(\n client,\n commentsStore,\n tagsStore,\n entitiesStore,\n attachmentsStore,\n tagDatabase,\n );\n const answersStore = new AnswersStore(\n client,\n commentsStore,\n postsStore,\n attachmentsStore,\n );\n const collectionsStore = new CollectionsStore(\n client,\n postsStore,\n attachmentsStore,\n );\n const statsStore = new StatsStore(client);\n const badgesStore = new BadgesStore(client);\n\n postsStore.setAnswersStore(answersStore);\n\n return new DatabaseQetaStore(\n postsStore,\n answersStore,\n commentsStore,\n collectionsStore,\n statsStore,\n tagsStore,\n usersStore,\n entitiesStore,\n templatesStore,\n attachmentsStore,\n badgesStore,\n );\n }\n\n async getPosts(\n user_ref: string,\n options: PostsQuery,\n filters?: PermissionCriteria<QetaFilters>,\n opts?: PostOptions,\n ): Promise<Posts> {\n return this.postsStore.getPosts(user_ref, options, filters, opts);\n }\n\n async getPost(\n user_ref: string,\n id: number,\n recordView?: boolean,\n options?: PostOptions,\n ): Promise<MaybePost> {\n return this.postsStore.getPost(user_ref, id, recordView, options);\n }\n\n async getPostByAnswerId(\n user_ref: string,\n answerId: number,\n recordView?: boolean,\n options?: PostOptions,\n ): Promise<MaybePost> {\n return this.postsStore.getPostByAnswerId(\n user_ref,\n answerId,\n recordView,\n options,\n );\n }\n\n async createPost(options: {\n user_ref: string;\n title: string;\n content: string;\n created: Date;\n author?: string;\n tags?: string[];\n entities?: string[];\n images?: number[];\n anonymous?: boolean;\n type?: PostType;\n headerImage?: string;\n url?: string;\n status?: PostStatus;\n opts?: PostOptions;\n }): Promise<Post> {\n return this.postsStore.createPost(options);\n }\n\n async updatePost(options: {\n user_ref: string;\n id: number;\n title?: string;\n content?: string;\n author?: string;\n tags?: string[];\n entities?: string[];\n images?: number[];\n headerImage?: string;\n url?: string;\n status?: PostStatus;\n opts?: PostOptions;\n }): Promise<MaybePost> {\n return this.postsStore.updatePost(options);\n }\n\n async deletePost(id: number, permanently?: boolean): Promise<boolean> {\n return this.postsStore.deletePost(id, permanently);\n }\n\n async votePost(\n user_ref: string,\n postId: number,\n score: number,\n ): Promise<boolean> {\n return this.postsStore.votePost(user_ref, postId, score);\n }\n\n async deletePostVote(user_ref: string, postId: number): Promise<boolean> {\n return this.postsStore.deletePostVote(user_ref, postId);\n }\n\n async favoritePost(user_ref: string, postId: number): Promise<boolean> {\n return this.postsStore.favoritePost(user_ref, postId);\n }\n\n async unfavoritePost(user_ref: string, postId: number): Promise<boolean> {\n return this.postsStore.unfavoritePost(user_ref, postId);\n }\n\n async getUsersWhoFavoritedPost(postId: number): Promise<string[]> {\n return this.postsStore.getUsersWhoFavoritedPost(postId);\n }\n\n async getAnswers(\n user_ref: string,\n options: AnswersQuery,\n filters?: PermissionCriteria<QetaFilters>,\n opts?: AnswerOptions,\n ): Promise<Answers> {\n return this.answersStore.getAnswers(user_ref, options, filters, opts);\n }\n\n async getAnswer(\n answerId: number,\n user_ref: string,\n options?: AnswerOptions,\n ): Promise<MaybeAnswer> {\n return this.answersStore.getAnswer(answerId, user_ref, options);\n }\n\n async answerPost(\n user_ref: string,\n questionId: number,\n answer: string,\n created: Date,\n images?: number[],\n anonymous?: boolean,\n options?: AnswerOptions,\n ): Promise<MaybeAnswer> {\n return this.answersStore.answerPost(\n user_ref,\n questionId,\n answer,\n created,\n images,\n anonymous,\n options,\n );\n }\n\n async updateAnswer(\n user_ref: string,\n questionId: number,\n answerId: number,\n answer: string,\n author?: string,\n images?: number[],\n options?: AnswerOptions,\n ): Promise<MaybeAnswer> {\n return this.answersStore.updateAnswer(\n user_ref,\n questionId,\n answerId,\n answer,\n author,\n images,\n options,\n );\n }\n\n async deleteAnswer(id: number): Promise<boolean> {\n return this.answersStore.deleteAnswer(id);\n }\n\n async voteAnswer(\n user_ref: string,\n answerId: number,\n score: number,\n ): Promise<boolean> {\n return this.answersStore.voteAnswer(user_ref, answerId, score);\n }\n\n async deleteAnswerVote(user_ref: string, answerId: number): Promise<boolean> {\n return this.answersStore.deleteAnswerVote(user_ref, answerId);\n }\n\n async markAnswerCorrect(postId: number, answerId: number): Promise<boolean> {\n return this.answersStore.markAnswerCorrect(postId, answerId);\n }\n\n async markAnswerIncorrect(\n postId: number,\n answerId: number,\n ): Promise<boolean> {\n return this.answersStore.markAnswerIncorrect(postId, answerId);\n }\n\n async clickPost(user_ref: string, postId: number): Promise<void> {\n const vote = await this.postsStore.getPostVote(user_ref, postId);\n const score = (vote?.score || 0) + 1;\n await this.postsStore.votePost(user_ref, postId, score);\n }\n\n async commentPost(\n post_id: number,\n user_ref: string,\n content: string,\n created: Date,\n ): Promise<MaybePost> {\n await this.commentsStore.commentPost(post_id, user_ref, content, created);\n return this.getPost(user_ref, post_id);\n }\n\n async commentAnswer(\n answer_id: number,\n user_ref: string,\n content: string,\n created: Date,\n ): Promise<MaybeAnswer> {\n await this.commentsStore.commentAnswer(\n answer_id,\n user_ref,\n content,\n created,\n );\n return this.getAnswer(answer_id, user_ref);\n }\n\n async updatePostComment(\n post_id: number,\n id: number,\n user_ref: string,\n content: string,\n ): Promise<MaybePost> {\n await this.commentsStore.updatePostComment(post_id, id, user_ref, content);\n return this.getPost(user_ref, post_id);\n }\n\n async updateAnswerComment(\n answer_id: number,\n id: number,\n user_ref: string,\n content: string,\n ): Promise<MaybeAnswer> {\n await this.commentsStore.updateAnswerComment(\n answer_id,\n id,\n user_ref,\n content,\n );\n return this.getAnswer(answer_id, user_ref);\n }\n\n async deletePostComment(\n post_id: number,\n id: number,\n user_ref: string,\n ): Promise<MaybePost> {\n await this.commentsStore.deletePostComment(post_id, id);\n return this.getPost(user_ref, post_id);\n }\n\n async deleteAnswerComment(\n answer_id: number,\n id: number,\n user_ref: string,\n ): Promise<MaybeAnswer> {\n await this.commentsStore.deleteAnswerComment(answer_id, id);\n return this.getAnswer(answer_id, user_ref);\n }\n\n async getCollections(\n user_ref: string,\n options: PostsQuery,\n opts?: CollectionOptions,\n ): Promise<Collections> {\n return this.collectionsStore.getCollections(user_ref, options, opts);\n }\n\n async getCollection(\n user_ref: string,\n id: number,\n options?: CollectionOptions,\n ): Promise<MaybeCollection> {\n return this.collectionsStore.getCollection(user_ref, id, options);\n }\n\n async createCollection(options: {\n user_ref: string;\n title: string;\n description?: string;\n created: Date;\n images?: number[];\n headerImage?: string;\n opts?: CollectionOptions;\n }): Promise<Collection> {\n return this.collectionsStore.createCollection(\n options,\n ) as Promise<Collection>;\n }\n\n async updateCollection(options: {\n id: number;\n user_ref: string;\n title: string;\n description?: string;\n images?: number[];\n headerImage?: string;\n opts?: CollectionOptions;\n }): Promise<MaybeCollection> {\n return this.collectionsStore.updateCollection(options);\n }\n\n async deleteCollection(id: number): Promise<boolean> {\n return this.collectionsStore.deleteCollection(id);\n }\n\n async addPostToCollection(\n user_ref: string,\n id: number,\n postId: number,\n options?: CollectionOptions,\n ): Promise<MaybeCollection> {\n return this.collectionsStore.addPostToCollection(\n user_ref,\n id,\n postId,\n options,\n );\n }\n\n async removePostFromCollection(\n user_ref: string,\n id: number,\n postId: number,\n options?: CollectionOptions,\n ): Promise<MaybeCollection> {\n return this.collectionsStore.removePostFromCollection(\n user_ref,\n id,\n postId,\n options,\n );\n }\n\n async getUsersForCollection(collectionId: number): Promise<string[]> {\n return this.collectionsStore.getUsersForCollection(collectionId);\n }\n\n async followCollection(\n user_ref: string,\n collectionId: number,\n ): Promise<boolean> {\n return this.collectionsStore.followCollection(user_ref, collectionId);\n }\n\n async unfollowCollection(\n user_ref: string,\n collectionId: number,\n ): Promise<boolean> {\n return this.collectionsStore.unfollowCollection(user_ref, collectionId);\n }\n\n async getUserCollections(\n user_ref: string,\n options?: CollectionOptions,\n ): Promise<UserCollectionsResponse> {\n return this.collectionsStore.getUserCollections(user_ref, options);\n }\n\n async getPostRank(\n collectionId: number,\n postId: number,\n ): Promise<number | null> {\n return this.collectionsStore.getPostRank(collectionId, postId);\n }\n\n async getTopRankedPostId(\n collectionId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getTopRankedPostId(collectionId);\n }\n\n async getBottomRankedPostId(\n collectionId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getBottomRankedPostId(collectionId);\n }\n\n async getNextRankedPostId(\n collectionId: number,\n postId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getNextRankedPostId(collectionId, postId);\n }\n\n async getPreviousRankedPostId(\n collectionId: number,\n postId: number,\n ): Promise<CollectionPostRank | null> {\n return this.collectionsStore.getPreviousRankedPostId(collectionId, postId);\n }\n\n async updatePostRank(\n collectionId: number,\n postId: number,\n rank: number,\n ): Promise<void> {\n return this.collectionsStore.updatePostRank(collectionId, postId, rank);\n }\n\n async getTags(\n options?: { noDescription?: boolean; ids?: number[] } & TagsQuery,\n filters?: PermissionCriteria<QetaFilters>,\n ): Promise<TagsResponse> {\n return this.tagsStore.getTags(options, filters);\n }\n\n async getTagExperts(tags: string[]): Promise<string[]> {\n return this.tagsStore.getTagExperts(tags);\n }\n\n async getTag(tag: string): Promise<TagResponse | null> {\n return this.tagsStore.getTag(tag);\n }\n\n async getTagById(id: number): Promise<TagResponse | null> {\n return this.tagsStore.getTagById(id);\n }\n\n async createTag(\n tag: string,\n description?: string,\n experts?: string[],\n ): Promise<TagResponse | null> {\n return this.tagsStore.createTag(tag, description, experts);\n }\n\n async updateTag(\n id: number,\n description?: string,\n experts?: string[],\n ): Promise<TagResponse | null> {\n return this.tagsStore.updateTag(id, description, experts);\n }\n\n async deleteTag(id: number): Promise<boolean> {\n return this.tagsStore.deleteTag(id);\n }\n\n async getEntities(\n options?: { entityRefs?: string[] } & EntitiesQuery,\n ): Promise<EntitiesResponse> {\n return this.entitiesStore.getEntities(options);\n }\n\n async getEntity(entity_ref: string): Promise<EntityResponse | null> {\n return this.entitiesStore.getEntity(entity_ref);\n }\n\n async getUsers(\n options?: { entityRefs?: string[] } & UsersQuery,\n ): Promise<UsersResponse> {\n return this.usersStore.getUsers(options);\n }\n\n async getUser(user_ref: string): Promise<UserResponse | null> {\n return this.usersStore.getUser(user_ref);\n }\n\n async getUserTags(\n user_ref: string,\n filters?: PermissionCriteria<QetaFilters>,\n ): Promise<UserTagsResponse> {\n return this.tagsStore.getUserTags(user_ref, filters);\n }\n\n async followTag(user_ref: string, tag: string): Promise<boolean> {\n return this.tagsStore.followTag(user_ref, tag);\n }\n\n async unfollowTag(user_ref: string, tag: string): Promise<boolean> {\n return this.tagsStore.unfollowTag(user_ref, tag);\n }\n\n async getUserEntities(user_ref: string): Promise<UserEntitiesResponse> {\n return this.entitiesStore.getUserEntities(user_ref);\n }\n\n async followEntity(user_ref: string, entityRef: string): Promise<boolean> {\n return this.entitiesStore.followEntity(user_ref, entityRef);\n }\n\n async unfollowEntity(user_ref: string, entityRef: string): Promise<boolean> {\n return this.entitiesStore.unfollowEntity(user_ref, entityRef);\n }\n\n async getUsersForTags(tags: string[]): Promise<string[]> {\n return this.tagsStore.getUsersForTags(tags);\n }\n\n async getUsersForEntities(entityRefs: string[]): Promise<string[]> {\n return this.entitiesStore.getUsersForEntities(entityRefs);\n }\n\n async getFollowedUsers(user_ref: string): Promise<UserUsersResponse> {\n return this.usersStore.getFollowedUsers(user_ref);\n }\n\n async followUser(\n user_ref: string,\n followedUserRef: string,\n ): Promise<boolean> {\n return this.usersStore.followUser(user_ref, followedUserRef);\n }\n\n async unfollowUser(\n user_ref: string,\n followedUserRef: string,\n ): Promise<boolean> {\n return this.usersStore.unfollowUser(user_ref, followedUserRef);\n }\n\n async getGlobalStats(): Promise<GlobalStat[]> {\n return this.statsStore.getGlobalStats();\n }\n\n async getUserStats(user_ref: string): Promise<UserStat[]> {\n return this.statsStore.getUserStats(user_ref);\n }\n\n async getTemplates(): Promise<Templates> {\n return this.templatesStore.getTemplates();\n }\n\n async getTemplate(id: number): Promise<Template | null> {\n return this.templatesStore.getTemplate(id);\n }\n\n async createTemplate(options: {\n title: string;\n description: string;\n questionTitle?: string;\n questionContent?: string;\n tags?: string[];\n entities?: string[];\n }): Promise<Template> {\n return this.templatesStore.createTemplate(options);\n }\n\n async deleteTemplate(id: number): Promise<boolean> {\n return this.templatesStore.deleteTemplate(id);\n }\n\n async updateTemplate(options: {\n id: number;\n title: string;\n description: string;\n questionTitle?: string;\n questionContent?: string;\n tags?: string[];\n entities?: string[];\n }): Promise<Template | null> {\n return this.templatesStore.updateTemplate(options);\n }\n\n async reviewPost(\n user_ref: string,\n postId: number,\n status: 'valid' | 'obsolete',\n comment?: string,\n ): Promise<MaybePost> {\n return this.postsStore.reviewPost(user_ref, postId, status, comment);\n }\n\n async getPostReviews(postId: number): Promise<PostReview[]> {\n return this.postsStore.getPostReviews(postId);\n }\n\n async getAIAnswer(postId: number): Promise<AIResponse | null> {\n return this.postsStore.getAIAnswer(postId);\n }\n\n async saveAIAnswer(postId: number, response: AIResponse): Promise<void> {\n return this.postsStore.saveAIAnswer(postId, response);\n }\n\n async deleteAIAnswer(postId: number): Promise<boolean> {\n return this.postsStore.deleteAIAnswer(postId);\n }\n\n async postAttachment({\n uuid,\n locationType,\n locationUri,\n extension,\n mimeType,\n binaryImage,\n path,\n creator,\n }: AttachmentParameters): Promise<Attachment> {\n return this.attachmentsStore.postAttachment({\n uuid,\n locationType,\n locationUri,\n extension,\n mimeType,\n binaryImage,\n path,\n creator,\n });\n }\n\n async getAttachment(uuid: string): Promise<Attachment | undefined> {\n return this.attachmentsStore.getAttachment(uuid);\n }\n\n async deleteAttachment(uuid: string): Promise<boolean> {\n return this.attachmentsStore.deleteAttachment(uuid);\n }\n\n async getDeletableAttachments(dayLimit: number): Promise<Attachment[]> {\n return this.attachmentsStore.getDeletableAttachments(dayLimit);\n }\n\n // Stats\n\n async getMostUpvotedPosts({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getMostUpvotedPosts({ author, options });\n }\n\n async getTotalPosts({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getTotalPosts({ author, options });\n }\n\n async getMostUpvotedAnswers({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getMostUpvotedAnswers({ author, options });\n }\n\n async getMostUpvotedCorrectAnswers({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getMostUpvotedCorrectAnswers({ author, options });\n }\n\n async getTotalAnswers({\n author,\n options,\n }: StatisticsRequestParameters): Promise<Statistic[]> {\n return this.statsStore.getTotalAnswers({ author, options });\n }\n\n async getCount(\n table: string,\n filters?: { author?: string; type?: PostType },\n ): Promise<number> {\n return this.statsStore.getCount(table, filters);\n }\n\n async saveGlobalStats(date: Date): Promise<void> {\n return this.statsStore.saveGlobalStats(date);\n }\n\n async saveUserStats(userRef: string, date: Date): Promise<void> {\n return this.statsStore.saveUserStats(userRef, date);\n }\n\n async getTotalViews(\n user_ref: string,\n lastDays?: number,\n excludeUser?: boolean,\n ): Promise<number> {\n return this.statsStore.getTotalViews(user_ref, lastDays, excludeUser);\n }\n\n async getBadges(): Promise<Badge[]> {\n return this.badgesStore.getBadges();\n }\n\n async getBadge(key: string): Promise<Badge | undefined> {\n return this.badgesStore.getBadge(key);\n }\n\n async getUserBadges(userRef: string): Promise<UserBadge[]> {\n return this.badgesStore.getUserBadges(userRef);\n }\n\n async awardBadge(\n userRef: string,\n badgeKey: string,\n uniqueKey?: string,\n ): Promise<AwardBadgeResult | null> {\n return this.badgesStore.awardBadge(userRef, badgeKey, uniqueKey);\n }\n\n async createBadge(badge: Omit<Badge, 'id'>): Promise<void> {\n return this.badgesStore.createBadge(badge);\n }\n\n async suggestPosts(\n user_ref: string,\n title: string,\n content: string,\n tags?: string[],\n entities?: string[],\n filters?: PermissionCriteria<QetaFilters>,\n opts?: PostOptions,\n ): Promise<Posts> {\n return this.postsStore.suggestPosts(\n user_ref,\n title,\n content,\n tags,\n entities,\n filters,\n opts,\n );\n }\n\n async cleanStats(days: number, date: Date): Promise<void> {\n return this.statsStore.cleanStats(days, date);\n }\n\n async getUsersCount(): Promise<number> {\n return this.usersStore.getUsersCount();\n }\n\n async getFollowingUsers(user_ref: string): Promise<string[]> {\n return this.usersStore.getFollowingUsers(user_ref);\n }\n\n async getEntityLinks(): Promise<EntityLinks[]> {\n return this.entitiesStore.getEntityLinks();\n }\n\n async getComments(\n options?: { ids?: number[] },\n opts?: CommentOptions,\n ): Promise<QetaComment[]> {\n return this.commentsStore.getComments(options, opts);\n }\n\n async getComment(\n commentId: number,\n opts?: CommentOptions & { postId?: number; answerId?: number },\n ): Promise<QetaComment | null> {\n return this.commentsStore.getComment(commentId, opts);\n }\n}\n"],"names":["resolvePackagePath","CommentsStore","TagsStore","EntitiesStore","UsersStore","TemplatesStore","AttachmentsStore","PostsStore","AnswersStore","CollectionsStore","StatsStore","BadgesStore"],"mappings":"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"}
|