From d5a4a36745d0f54a9b295d6d69d44cc23378f1bb Mon Sep 17 00:00:00 2001 From: Kristofer Date: Thu, 14 Dec 2023 13:52:48 +0100 Subject: [PATCH 1/6] Add setting to enable direct quant feature --- ...iscord_bot_direct_praise_quantification.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 packages/api/src/database/migrations/43_settings_add_discord_bot_direct_praise_quantification.ts diff --git a/packages/api/src/database/migrations/43_settings_add_discord_bot_direct_praise_quantification.ts b/packages/api/src/database/migrations/43_settings_add_discord_bot_direct_praise_quantification.ts new file mode 100644 index 000000000..1950a0cb7 --- /dev/null +++ b/packages/api/src/database/migrations/43_settings_add_discord_bot_direct_praise_quantification.ts @@ -0,0 +1,36 @@ +import { SettingGroup } from '../../settings/enums/setting-group.enum'; +import { SettingModel } from '../schemas/settings/23_settings.schema'; + +const settings = [ + { + key: 'DISCORD_BOT_DIRECT_PRAISE_QUANTIFICATION_ENABLED', + value: false, + defaultValue: false, + type: 'Boolean', + periodOverridable: false, + label: 'Direct praise quantification', + description: + 'Enabling this will allow the praise giver to quantify their praise directly at the time of praising. Enabling this will disable and bypass the regular praise quantification flow.', + group: SettingGroup.DISCORD, + subgroup: 1, + }, +]; + +const up = async (): Promise => { + const settingUpdates = settings.map((s) => ({ + updateOne: { + filter: { key: s.key }, + update: { $setOnInsert: { ...s } }, // Insert setting if not found, otherwise continue + upsert: true, + }, + })) as any; + + await SettingModel.bulkWrite(settingUpdates); +}; + +const down = async (): Promise => { + const allKeys = settings.map((s) => s.key); + await SettingModel.deleteMany({ key: { $in: allKeys } }); +}; + +export { up, down }; From 4d52f4077d998f4f6b74e7785309398e0993ec81 Mon Sep 17 00:00:00 2001 From: Kristofer Date: Thu, 14 Dec 2023 13:53:37 +0100 Subject: [PATCH 2/6] Show warning message in UI when setting is enabled --- packages/frontend/src/components/ui/Button.tsx | 4 ++-- .../components/PeriodDetailsHead.tsx | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/frontend/src/components/ui/Button.tsx b/packages/frontend/src/components/ui/Button.tsx index 958789382..fb0f02644 100644 --- a/packages/frontend/src/components/ui/Button.tsx +++ b/packages/frontend/src/components/ui/Button.tsx @@ -29,8 +29,8 @@ export const Button = ({ const disabledModifier = 'disabled:cursor-default disabled:bg-themecolor-3/50 disabled:text-white/50'; - const defaultClass = `px-4 py-2 font-bold text-white rounded-md bg-themecolor-3 hover:bg-themecolor-4 ${disabledModifier}`; - const outlineClass = `border-2 border-themecolor-3 px-4 py-2 font-bold text-white rounded-md bg-themecolor-3 hover:bg-themecolor-4 ${disabledModifier}`; + const defaultClass = `h-10 whitespace-nowrap px-4 py-2 font-bold text-white rounded-md bg-themecolor-3 hover:bg-themecolor-4 ${disabledModifier}`; + const outlineClass = `h-10 whitespace-nowrap border-2 border-themecolor-3 px-4 py-2 font-bold text-white rounded-md bg-themecolor-3 hover:bg-themecolor-4 ${disabledModifier}`; const roundClass = `flex items-center justify-center rounded-full hover:bg-warm-gray-300 w-7 h-7 dark:text-white dark:hover:bg-slate-800 ${disabledModifier}`; let variantClass = defaultClass; diff --git a/packages/frontend/src/pages/PeriodDetails/components/PeriodDetailsHead.tsx b/packages/frontend/src/pages/PeriodDetails/components/PeriodDetailsHead.tsx index e431d172c..3eeeca6ff 100644 --- a/packages/frontend/src/pages/PeriodDetails/components/PeriodDetailsHead.tsx +++ b/packages/frontend/src/pages/PeriodDetails/components/PeriodDetailsHead.tsx @@ -14,6 +14,7 @@ import { CloseButton } from './CloseButton'; import { PeriodDateForm } from './PeriodDateForm'; import { PeriodNameForm } from './PeriodNameForm'; import { AssignButton } from './AssignButton'; +import { SingleSetting } from '../../../model/settings/settings'; export const PeriodDetailsHead = (): JSX.Element | null => { const { periodId } = useParams(); @@ -22,6 +23,9 @@ export const PeriodDetailsHead = (): JSX.Element | null => { useLoadSinglePeriodDetails(periodId); // Fetch additional period details const period = useRecoilValue(SinglePeriod(periodId)); const isAdmin = useRecoilValue(HasRole(ROLE_ADMIN)); + const directQuantEnabled = useRecoilValue( + SingleSetting('DISCORD_BOT_DIRECT_PRAISE_QUANTIFICATION_ENABLED') + ); if (!period || !allPeriods) return null; @@ -63,13 +67,22 @@ export const PeriodDetailsHead = (): JSX.Element | null => {
Number of praise: {period.numberOfPraise}
{period.status === 'OPEN' || period.status === 'QUANTIFY' ? ( -
+
{period.status === 'OPEN' && period.receivers && period?.receivers.length > 0 && hasPeriodEnded(period) ? ( - + directQuantEnabled?.valueRealized ? ( +
+ Direct quantification is enabled for this community which + means each praise is quantified by the praise giver at + praise time. Regular quantifications are disabled. +
+ ) : ( + + ) ) : null} +
) : null} From 0aaad2ddd6be257bfb11e773de45427f6be3663d Mon Sep 17 00:00:00 2001 From: Kristofer Date: Thu, 14 Dec 2023 13:54:09 +0100 Subject: [PATCH 3/6] Update types --- packages/api-types/out/schema.ts | 734 ++++++++---------- packages/api/openapi.json | 2 +- .../src/praise/dto/praise-create-input.dto.ts | 6 +- .../praise/dto/praise-forward-input.dto.ts | 6 +- 4 files changed, 332 insertions(+), 416 deletions(-) diff --git a/packages/api-types/out/schema.ts b/packages/api-types/out/schema.ts index c09f0c973..61ba1d7cf 100644 --- a/packages/api-types/out/schema.ts +++ b/packages/api-types/out/schema.ts @@ -3,256 +3,257 @@ * Do not make direct changes to the file. */ + export interface paths { - '/api/activate': { + "/api/activate": { /** Activate a user account in order to be able to give praise and receive rewards. Activation a user account creates a new User object or adds user account to User if it already exists. */ - post: operations['ActivateController_activate']; + post: operations["ActivateController_activate"]; }; - '/api/users/export/json': { + "/api/users/export/json": { /** Export users document to json */ - get: operations['UsersController_exportJson']; + get: operations["UsersController_exportJson"]; }; - '/api/users/export/csv': { + "/api/users/export/csv": { /** Export users document to csv */ - get: operations['UsersController_exportCsv']; + get: operations["UsersController_exportCsv"]; }; - '/api/users/export/parquet': { + "/api/users/export/parquet": { /** Export users document to parquet */ - get: operations['UsersController_exportParquet']; + get: operations["UsersController_exportParquet"]; }; - '/api/users': { - get: operations['UsersController_findAll']; + "/api/users": { + get: operations["UsersController_findAll"]; }; - '/api/users/{id}': { - get: operations['UsersController_findOne']; + "/api/users/{id}": { + get: operations["UsersController_findOne"]; /** Updates a user */ - patch: operations['UsersController_update']; + patch: operations["UsersController_update"]; }; - '/api/users/{id}/addRole': { - patch: operations['UsersController_addRole']; + "/api/users/{id}/addRole": { + patch: operations["UsersController_addRole"]; }; - '/api/users/{id}/removeRole': { - patch: operations['UsersController_removeRole']; + "/api/users/{id}/removeRole": { + patch: operations["UsersController_removeRole"]; }; - '/api/periods/export/json': { + "/api/periods/export/json": { /** Export periods document to json */ - get: operations['PeriodsController_exportJson']; + get: operations["PeriodsController_exportJson"]; }; - '/api/periods/export/csv': { + "/api/periods/export/csv": { /** Export periods document to csv */ - get: operations['PeriodsController_exportCsv']; + get: operations["PeriodsController_exportCsv"]; }; - '/api/periods/export/parquet': { + "/api/periods/export/parquet": { /** Export periods document to parquet */ - get: operations['PeriodsController_exportParquet']; + get: operations["PeriodsController_exportParquet"]; }; - '/api/periods': { + "/api/periods": { /** List all periods */ - get: operations['PeriodsController_findAllPaginated']; + get: operations["PeriodsController_findAllPaginated"]; /** Create a new period */ - post: operations['PeriodsController_create']; + post: operations["PeriodsController_create"]; }; - '/api/periods/{id}': { + "/api/periods/{id}": { /** Find period by id */ - get: operations['PeriodsController_findOne']; + get: operations["PeriodsController_findOne"]; /** Update a period */ - patch: operations['PeriodsController_update']; + patch: operations["PeriodsController_update"]; }; - '/api/periods/{id}/close': { + "/api/periods/{id}/close": { /** Close a period */ - patch: operations['PeriodsController_close']; + patch: operations["PeriodsController_close"]; }; - '/api/periods/{id}/praise': { + "/api/periods/{id}/praise": { /** Fetch all Praise in a period */ - get: operations['PeriodsController_praise']; + get: operations["PeriodsController_praise"]; }; - '/api/periods/{periodId}/praise/receiver/{receiverId}': { + "/api/periods/{periodId}/praise/receiver/{receiverId}": { /** Fetch all Praise in a period for a given receiver */ - get: operations['PeriodsController_praiseByReceiver']; + get: operations["PeriodsController_praiseByReceiver"]; }; - '/api/periods/{periodId}/praise/giver/{giverId}': { + "/api/periods/{periodId}/praise/giver/{giverId}": { /** Fetch all Praise in a period for a given giver */ - get: operations['PeriodsController_praiseByGiver']; + get: operations["PeriodsController_praiseByGiver"]; }; - '/api/periods/{periodId}/praise/quantifier/{quantifierId}': { + "/api/periods/{periodId}/praise/quantifier/{quantifierId}": { /** Fetch all Praise in a period for a given quantifier */ - get: operations['PeriodsController_praiseByQuantifier']; + get: operations["PeriodsController_praiseByQuantifier"]; }; - '/api/periods/{id}/verifyQuantifierPoolSize': { + "/api/periods/{id}/verifyQuantifierPoolSize": { /** Verify quantifier pool size */ - get: operations['PeriodsController_verifyQuantifierPoolSize']; + get: operations["PeriodsController_verifyQuantifierPoolSize"]; }; - '/api/periods/{id}/assignQuantifiers': { + "/api/periods/{id}/assignQuantifiers": { /** Assign quantifiers to period */ - patch: operations['PeriodsController_assignQuantifiers']; + patch: operations["PeriodsController_assignQuantifiers"]; }; - '/api/periods/{id}/replaceQuantifier': { + "/api/periods/{id}/replaceQuantifier": { /** Replace quantifier in period */ - patch: operations['PeriodsController_replaceQuantifier']; + patch: operations["PeriodsController_replaceQuantifier"]; }; - '/api/event-log': { + "/api/event-log": { /** List event logs, paginated results */ - get: operations['EventLogController_findAllPaginated']; + get: operations["EventLogController_findAllPaginated"]; }; - '/api/event-log/types': { + "/api/event-log/types": { /** List event log types */ - get: operations['EventLogController_types']; + get: operations["EventLogController_types"]; }; - '/api/settings': { + "/api/settings": { /** List all settings. */ - get: operations['SettingsController_findAll']; + get: operations["SettingsController_findAll"]; }; - '/api/settings/{id}': { + "/api/settings/{id}": { /** Get a setting. */ - get: operations['SettingsController_findOne']; + get: operations["SettingsController_findOne"]; /** Set a value for a setting. */ - patch: operations['SettingsController_set']; + patch: operations["SettingsController_set"]; }; - '/api/settings/{id}/upload': { + "/api/settings/{id}/upload": { /** Upload a file for a setting */ - patch: operations['SettingsController_setWithUpload']; + patch: operations["SettingsController_setWithUpload"]; }; - '/api/settings/uploads/{file}': { + "/api/settings/uploads/{file}": { /** Serve an uploaded settings file. */ - get: operations['SettingsController_serveUpload']; + get: operations["SettingsController_serveUpload"]; }; - '/api/periods/{periodId}/settings': { + "/api/periods/{periodId}/settings": { /** List all period settings. */ - get: operations['PeriodSettingsController_findAll']; + get: operations["PeriodSettingsController_findAll"]; }; - '/api/periods/{periodId}/settings/{settingId}': { + "/api/periods/{periodId}/settings/{settingId}": { /** Get a period setting. */ - get: operations['PeriodSettingsController_findOne']; + get: operations["PeriodSettingsController_findOne"]; /** Set value for a period setting. */ - patch: operations['PeriodSettingsController_set']; + patch: operations["PeriodSettingsController_set"]; }; - '/api/praise': { + "/api/praise": { /** List praise items, paginated results */ - get: operations['PraiseController_findAllPaginated']; + get: operations["PraiseController_findAllPaginated"]; /** Create praise item */ - post: operations['PraiseController_praise']; + post: operations["PraiseController_praise"]; }; - '/api/praise/export/json': { + "/api/praise/export/json": { /** Export praise document to json */ - get: operations['PraiseController_exportJson']; + get: operations["PraiseController_exportJson"]; }; - '/api/praise/export/csv': { + "/api/praise/export/csv": { /** Export praise document to csv */ - get: operations['PraiseController_exportCsv']; + get: operations["PraiseController_exportCsv"]; }; - '/api/praise/export/parquet': { + "/api/praise/export/parquet": { /** Export praise document to parquet */ - get: operations['PraiseController_exportParquet']; + get: operations["PraiseController_exportParquet"]; }; - '/api/praise/{id}': { + "/api/praise/{id}": { /** Find praise item by id */ - get: operations['PraiseController_findOne']; + get: operations["PraiseController_findOne"]; }; - '/api/praise/forward': { + "/api/praise/forward": { /** Forward praise item */ - post: operations['PraiseController_forward']; + post: operations["PraiseController_forward"]; }; - '/api/useraccounts': { + "/api/useraccounts": { /** UserAccount list */ - get: operations['UserAccountsController_findAll']; + get: operations["UserAccountsController_findAll"]; /** Create a UserAccount */ - post: operations['UserAccountsController_create']; + post: operations["UserAccountsController_create"]; }; - '/api/useraccounts/export/json': { + "/api/useraccounts/export/json": { /** Export userAccounts document to json */ - get: operations['UserAccountsController_exportJson']; + get: operations["UserAccountsController_exportJson"]; }; - '/api/useraccounts/export/csv': { + "/api/useraccounts/export/csv": { /** Export userAccounts document to csv */ - get: operations['UserAccountsController_exportCsv']; + get: operations["UserAccountsController_exportCsv"]; }; - '/api/useraccounts/export/parquet': { + "/api/useraccounts/export/parquet": { /** Export userAccounts document to parquet */ - get: operations['UserAccountsController_exportParquet']; + get: operations["UserAccountsController_exportParquet"]; }; - '/api/useraccounts/{id}': { + "/api/useraccounts/{id}": { /** Get a UserAccount. */ - get: operations['UserAccountsController_findOne']; + get: operations["UserAccountsController_findOne"]; /** Update UserAccount */ - patch: operations['UserAccountsController_update']; + patch: operations["UserAccountsController_update"]; }; - '/api/api-key': { + "/api/api-key": { /** List all API keys */ - get: operations['ApiKeyController_findAll']; + get: operations["ApiKeyController_findAll"]; /** Create API key */ - post: operations['ApiKeyController_createApiKey']; + post: operations["ApiKeyController_createApiKey"]; }; - '/api/api-key/{id}': { + "/api/api-key/{id}": { /** Get API key by ID */ - get: operations['ApiKeyController_findOne']; + get: operations["ApiKeyController_findOne"]; /** Update API key description */ - put: operations['ApiKeyController_updateApiKeyDescription']; + put: operations["ApiKeyController_updateApiKeyDescription"]; /** Revoke API key */ - delete: operations['ApiKeyController_revokeApiKey']; + delete: operations["ApiKeyController_revokeApiKey"]; }; - '/api/auth/eth-signature/nonce': { + "/api/auth/eth-signature/nonce": { /** Generates a nonce for the user and returns it */ - post: operations['EthSignatureController_nonce']; + post: operations["EthSignatureController_nonce"]; }; - '/api/auth/eth-signature/login': { + "/api/auth/eth-signature/login": { /** Verifies a user's signature and returns a JWT token */ - post: operations['EthSignatureController_login']; + post: operations["EthSignatureController_login"]; }; - '/api/auth/eth-signature/refresh': { + "/api/auth/eth-signature/refresh": { /** Verifies a refreshToken and returns a JWT token */ - post: operations['EthSignatureController_token']; + post: operations["EthSignatureController_token"]; }; - '/api/communities': { - get: operations['CommunityController_findAll']; + "/api/communities": { + get: operations["CommunityController_findAll"]; /** Create a new community */ - post: operations['CommunityController_create']; + post: operations["CommunityController_create"]; }; - '/api/communities/{id}': { - get: operations['CommunityController_findOne']; + "/api/communities/{id}": { + get: operations["CommunityController_findOne"]; /** Update community */ - patch: operations['CommunityController_update']; + patch: operations["CommunityController_update"]; }; - '/api/communities/isNameAvailable': { - get: operations['CommunityController_isNameAvailable']; + "/api/communities/isNameAvailable": { + get: operations["CommunityController_isNameAvailable"]; }; - '/api/communities/current': { - get: operations['CommunityController_current']; + "/api/communities/current": { + get: operations["CommunityController_current"]; }; - '/api/communities/{id}/discord/link': { + "/api/communities/{id}/discord/link": { /** Link discord to community */ - patch: operations['CommunityController_linkDiscord']; + patch: operations["CommunityController_linkDiscord"]; }; - '/api/quantifications/export/json': { + "/api/quantifications/export/json": { /** Export quantifications document to json */ - get: operations['QuantificationsController_exportJson']; + get: operations["QuantificationsController_exportJson"]; }; - '/api/quantifications/export/csv': { + "/api/quantifications/export/csv": { /** Export quantifications document to csv */ - get: operations['QuantificationsController_exportCsv']; + get: operations["QuantificationsController_exportCsv"]; }; - '/api/quantifications/export/parquet': { + "/api/quantifications/export/parquet": { /** Export quantifications document to parquet */ - get: operations['QuantificationsController_exportParquet']; + get: operations["QuantificationsController_exportParquet"]; }; - '/api/quantifications/multiple': { + "/api/quantifications/multiple": { /** Quantify multiple praise items */ - patch: operations['QuantificationsController_quantifyMultiple']; + patch: operations["QuantificationsController_quantifyMultiple"]; }; - '/api/quantifications/{id}': { + "/api/quantifications/{id}": { /** Quantify praise item by id */ - patch: operations['QuantificationsController_quantify']; + patch: operations["QuantificationsController_quantify"]; }; - '/api/reports': { + "/api/reports": { /** List all report manifests */ - get: operations['ReportsController_listAllReports']; + get: operations["ReportsController_listAllReports"]; }; - '/api/reports/receiverBio/{userAccountId}': { + "/api/reports/receiverBio/{userAccountId}": { /** Get one AI generated receiver bio */ - get: operations['ReportsController_receiverBio']; + get: operations["ReportsController_receiverBio"]; }; - '/api/reports/receiverLabels/{userAccountId}': { + "/api/reports/receiverLabels/{userAccountId}": { /** AI generated labels describing a praise receiver. */ - get: operations['ReportsController_receiverLabels']; + get: operations["ReportsController_receiverLabels"]; }; } @@ -277,17 +278,7 @@ export interface components { rewardsEthAddress: string; /** @example darth */ username: string; - roles: readonly ( - | 'USER' - | 'QUANTIFIER' - | 'FORWARDER' - | 'ADMIN' - | 'ROOT' - | 'API_KEY_READWRITE' - | 'API_KEY_READ' - | 'API_KEY_DISCORD_BOT' - | 'API_KEY_SETUP_WEB' - )[]; + roles: readonly ("USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB")[]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -296,7 +287,7 @@ export interface components { UserAccount: { /** @example 63b428f7d9ca4f6ff5370d05 */ _id: string; - user?: components['schemas']['UserNoUserAccountsDto']; + user?: components["schemas"]["UserNoUserAccountsDto"]; /** @example 098098098098098 */ accountId: string; /** @example darth#6755 */ @@ -319,18 +310,8 @@ export interface components { rewardsEthAddress: string; /** @example darth */ username: string; - roles: readonly ( - | 'USER' - | 'QUANTIFIER' - | 'FORWARDER' - | 'ADMIN' - | 'ROOT' - | 'API_KEY_READWRITE' - | 'API_KEY_READ' - | 'API_KEY_DISCORD_BOT' - | 'API_KEY_SETUP_WEB' - )[]; - accounts: readonly components['schemas']['UserAccount'][]; + roles: readonly ("USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB")[]; + accounts: readonly (components["schemas"]["UserAccount"])[]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -345,18 +326,8 @@ export interface components { rewardsEthAddress: string; /** @example darth */ username: string; - roles: readonly ( - | 'USER' - | 'QUANTIFIER' - | 'FORWARDER' - | 'ADMIN' - | 'ROOT' - | 'API_KEY_READWRITE' - | 'API_KEY_READ' - | 'API_KEY_DISCORD_BOT' - | 'API_KEY_SETUP_WEB' - )[]; - accounts: readonly components['schemas']['UserAccount'][]; + roles: readonly ("USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB")[]; + accounts: readonly (components["schemas"]["UserAccount"])[]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -374,16 +345,7 @@ export interface components { }; UpdateUserRoleInputDto: { /** @enum {string} */ - role: - | 'USER' - | 'QUANTIFIER' - | 'FORWARDER' - | 'ADMIN' - | 'ROOT' - | 'API_KEY_READWRITE' - | 'API_KEY_READ' - | 'API_KEY_DISCORD_BOT' - | 'API_KEY_SETUP_WEB'; + role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; }; Period: { /** @example 621f802b813dbdba9eeaf7d7 */ @@ -391,7 +353,7 @@ export interface components { /** @example June 2021 */ name: string; /** @enum {string} */ - status: 'OPEN' | 'QUANTIFY' | 'CLOSED'; + status: "OPEN" | "QUANTIFY" | "CLOSED"; /** Format: date-time */ startDate: string; /** Format: date-time */ @@ -422,7 +384,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly components['schemas']['Period'][]; + docs: readonly (components["schemas"]["Period"])[]; meta?: Record; }; Quantification: { @@ -441,12 +403,12 @@ export interface components { /** @example 639b178f19296ee0f2d0585d */ praise: string; /** - * Format: date-time + * Format: date-time * @example 2021-06-01T00:00:00.000Z */ createdAt: string; /** - * Format: date-time + * Format: date-time * @example 2021-06-01T00:00:00.000Z */ updatedAt: string; @@ -466,7 +428,7 @@ export interface components { finishedCount: number; /** @example 1 */ praiseCount: number; - quantifications: components['schemas']['Quantification'][]; + quantifications: (components["schemas"]["Quantification"])[]; }; PeriodDetailsGiverReceiverDto: { /** @example 63b428f7d9ca4f6ff5370d05 */ @@ -496,7 +458,7 @@ export interface components { /** @example June 2021 */ name: string; /** @enum {string} */ - status: 'OPEN' | 'QUANTIFY' | 'CLOSED'; + status: "OPEN" | "QUANTIFY" | "CLOSED"; /** Format: date-time */ startDate: string; /** Format: date-time */ @@ -507,9 +469,9 @@ export interface components { createdAt: string; /** Format: date-time */ updatedAt: string; - quantifiers?: readonly components['schemas']['PeriodDetailsQuantifierDto'][]; - givers?: readonly components['schemas']['PeriodDetailsGiverReceiverDto'][]; - receivers?: readonly components['schemas']['PeriodDetailsGiverReceiverDto'][]; + quantifiers?: readonly (components["schemas"]["PeriodDetailsQuantifierDto"])[]; + givers?: readonly (components["schemas"]["PeriodDetailsGiverReceiverDto"])[]; + receivers?: readonly (components["schemas"]["PeriodDetailsGiverReceiverDto"])[]; /** @example 543 */ numberOfPraise: number; }; @@ -556,10 +518,10 @@ export interface components { sourceName: string; /** @example 144 */ score: number; - receiver: components['schemas']['UserAccountWithUserRefDto']; - giver: components['schemas']['UserAccountWithUserRefDto']; - forwarder?: components['schemas']['UserAccountWithUserRefDto']; - quantifications: readonly components['schemas']['Quantification'][]; + receiver: components["schemas"]["UserAccountWithUserRefDto"]; + giver: components["schemas"]["UserAccountWithUserRefDto"]; + forwarder?: components["schemas"]["UserAccountWithUserRefDto"]; + quantifications: readonly (components["schemas"]["Quantification"])[]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -567,12 +529,12 @@ export interface components { }; VerifyQuantifierPoolSizeDto: { /** - * @description The number of quantifiers in the pool + * @description The number of quantifiers in the pool * @example 10 */ quantifierPoolSize: number; /** - * @description The number of quantifiers needed in the pool + * @description The number of quantifiers needed in the pool * @example 10 */ quantifierPoolSizeNeeded: number; @@ -598,18 +560,18 @@ export interface components { sourceName: string; /** @example 144 */ score: number; - receiver: components['schemas']['UserAccount']; - giver: components['schemas']['UserAccount']; - forwarder?: components['schemas']['UserAccount']; - quantifications: readonly components['schemas']['Quantification'][]; + receiver: components["schemas"]["UserAccount"]; + giver: components["schemas"]["UserAccount"]; + forwarder?: components["schemas"]["UserAccount"]; + quantifications: readonly (components["schemas"]["Quantification"])[]; /** Format: date-time */ createdAt: string; /** Format: date-time */ updatedAt: string; }; ReplaceQuantifierResponseDto: { - praises: readonly components['schemas']['Praise'][]; - period: components['schemas']['PeriodDetailsDto']; + praises: readonly (components["schemas"]["Praise"])[]; + period: components["schemas"]["PeriodDetailsDto"]; }; UserAccountNoUserId: { /** @example 63b428f7d9ca4f6ff5370d05 */ @@ -629,15 +591,7 @@ export interface components { }; EventLogType: { /** @enum {string} */ - key: - | 'PERMISSION' - | 'AUTHENTICATION' - | 'PERIOD' - | 'PRAISE' - | 'QUANTIFICATION' - | 'SETTING' - | 'USER_ACCOUNT' - | 'COMMUNITY'; + key: "PERMISSION" | "AUTHENTICATION" | "PERIOD" | "PRAISE" | "QUANTIFICATION" | "SETTING" | "USER_ACCOUNT" | "COMMUNITY"; /** @example An action that changes user permissions */ label: string; /** @example A user's permissions were changed */ @@ -646,22 +600,22 @@ export interface components { EventLog: { /** @example 621f802b813dbdba9eeaf7d7 */ _id: string; - user?: components['schemas']['User']; - useraccount?: components['schemas']['UserAccountNoUserId']; + user?: components["schemas"]["User"]; + useraccount?: components["schemas"]["UserAccountNoUserId"]; /** @example 621f802b813dbdba9eeaf7d7 */ apiKey?: string; /** @example 621f802b813dbdba9eeaf7d7 */ period?: string; - type: components['schemas']['EventLogType']; + type: components["schemas"]["EventLogType"]; /** @example A description of the event */ description: string; /** - * Format: date-time + * Format: date-time * @example 2023-03-01T22:51:20.012Z */ createdAt: string; /** - * Format: date-time + * Format: date-time * @example 2023-03-01T22:51:20.012Z */ updatedAt: string; @@ -685,7 +639,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly components['schemas']['EventLog'][]; + docs: readonly (components["schemas"]["EventLog"])[]; meta?: Record; }; Setting: { @@ -696,21 +650,11 @@ export interface components { /** @example 666 */ value: string; /** @example 666 */ - valueRealized: string | string[] | boolean | number | number[]; + valueRealized: string | (string)[] | boolean | number | (number)[]; /** @example 555 */ defaultValue: string; /** @enum {string} */ - type: - | 'Integer' - | 'Float' - | 'String' - | 'Textarea' - | 'Boolean' - | 'IntegerList' - | 'StringList' - | 'Image' - | 'Radio' - | 'JSON'; + type: "Integer" | "Float" | "String" | "Textarea" | "Boolean" | "IntegerList" | "StringList" | "Image" | "Radio" | "JSON"; /** @example Quantifiers Per Praise */ label: string; /** @example How many redundant quantifications are assigned to each praise? */ @@ -730,12 +674,12 @@ export interface components { PeriodSetting: { /** @example 62291b7ea8b1619f78818524 */ _id: string; - period: components['schemas']['Period']; - setting: components['schemas']['Setting']; + period: components["schemas"]["Period"]; + setting: components["schemas"]["Setting"]; /** @example 666 */ value: string; /** @example 666 */ - valueRealized: string | string[] | boolean | number | number[]; + valueRealized: string | (string)[] | boolean | number | (number)[]; }; SetPeriodSettingDto: { /** @example 666 */ @@ -760,7 +704,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly components['schemas']['Praise'][]; + docs: readonly (components["schemas"]["Praise"])[]; meta?: Record; }; PraiseCreateInputDto: { @@ -772,8 +716,9 @@ export interface components { sourceId: string; /** @example DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise */ sourceName: string; - receiverIds: string[]; - giver: components['schemas']['UserAccount']; + receiverIds: (string)[]; + giver: components["schemas"]["UserAccount"]; + score?: number; }; PraiseForwardInputDto: { /** @example for making edits in the welcome text */ @@ -784,9 +729,10 @@ export interface components { sourceId: string; /** @example DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise */ sourceName: string; - receiverIds: string[]; - giver: components['schemas']['UserAccount']; - forwarder: components['schemas']['UserAccount']; + receiverIds: (string)[]; + giver: components["schemas"]["UserAccount"]; + forwarder: components["schemas"]["UserAccount"]; + score?: number; }; CreateUserAccountInputDto: { /** @example 098098098098098 */ @@ -805,7 +751,7 @@ export interface components { CreateUserAccountResponseDto: { /** @example 63b428f7d9ca4f6ff5370d05 */ _id: string; - user?: components['schemas']['UserNoUserAccountsDto']; + user?: components["schemas"]["UserNoUserAccountsDto"]; /** @example 098098098098098 */ accountId: string; /** @example darth#6755 */ @@ -838,7 +784,7 @@ export interface components { UpdateUserAccountResponseDto: { /** @example 63b428f7d9ca4f6ff5370d05 */ _id: string; - user?: components['schemas']['UserNoUserAccountsDto']; + user?: components["schemas"]["UserNoUserAccountsDto"]; /** @example 098098098098098 */ accountId: string; /** @example darth#6755 */ @@ -858,16 +804,7 @@ export interface components { /** @example My API Key */ description: string; /** @enum {string} */ - role: - | 'USER' - | 'QUANTIFIER' - | 'FORWARDER' - | 'ADMIN' - | 'ROOT' - | 'API_KEY_READWRITE' - | 'API_KEY_READ' - | 'API_KEY_DISCORD_BOT' - | 'API_KEY_SETUP_WEB'; + role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; }; CreateApiKeyResponseDto: { /** @example 639b178f19296ee0f2d0585d */ @@ -879,16 +816,7 @@ export interface components { /** @example $2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i */ hash: string; /** @enum {string} */ - role: - | 'USER' - | 'QUANTIFIER' - | 'FORWARDER' - | 'ADMIN' - | 'ROOT' - | 'API_KEY_READWRITE' - | 'API_KEY_READ' - | 'API_KEY_DISCORD_BOT' - | 'API_KEY_SETUP_WEB'; + role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -906,16 +834,7 @@ export interface components { /** @example $2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i */ hash: string; /** @enum {string} */ - role: - | 'USER' - | 'QUANTIFIER' - | 'FORWARDER' - | 'ADMIN' - | 'ROOT' - | 'API_KEY_READWRITE' - | 'API_KEY_READ' - | 'API_KEY_DISCORD_BOT' - | 'API_KEY_SETUP_WEB'; + role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -949,7 +868,7 @@ export interface components { identityEthAddress: string; /** @example bearer */ tokenType: string; - user: components['schemas']['User']; + user: components["schemas"]["User"]; }; GenerateTokenDto: { /** @example eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA */ @@ -970,7 +889,7 @@ export interface components { * "0x345.." * ] */ - owners: string[]; + owners: (string)[]; /** @example 0980987846534 */ discordGuildId?: string; }; @@ -991,7 +910,7 @@ export interface components { * "0x345.." * ] */ - owners: string[]; + owners: (string)[]; /** @example 0980987846534 */ discordGuildId?: string; /** @example oiujoiuoo8u */ @@ -999,7 +918,7 @@ export interface components { /** @example true */ isPublic: boolean; /** @enum {string} */ - discordLinkState: 'NOT_SET' | 'PENDING' | 'ACTIVE' | 'DEACTIVE'; + discordLinkState: "NOT_SET" | "PENDING" | "ACTIVE" | "DEACTIVE"; /** * @example { * "attestations": true @@ -1020,7 +939,7 @@ export interface components { * "0x345.." * ] */ - owners?: string[]; + owners?: (string)[]; }; CommunityFindAllResponseDto: { /** @example 1200 */ @@ -1041,7 +960,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly components['schemas']['Community'][]; + docs: readonly (components["schemas"]["Community"])[]; meta?: Record; }; IsNameAvailableResponseDto: { @@ -1059,7 +978,7 @@ export interface components { duplicatePraise?: string; }; QuantifyMultipleInputDto: { - params: components['schemas']['QuantifyInputDto']; + params: components["schemas"]["QuantifyInputDto"]; /** * @example [ * "639b178f19296ee0f2d0585d", @@ -1067,59 +986,59 @@ export interface components { * "639b178f19296ee0f2d0585f" * ] */ - praiseIds: string[]; + praiseIds: (string)[]; }; ConfigurationValueItemsDto: { /** - * @description Allowed array types - * @example string + * @description Allowed array types + * @example string * @enum {string} */ - type: 'string' | 'number'; + type: "string" | "number"; }; ConfigurationValueDto: { /** - * @description Type of the setting - * @example string + * @description Type of the setting + * @example string * @enum {string} */ - type: 'string' | 'number' | 'boolean' | 'array'; + type: "string" | "number" | "boolean" | "array"; /** - * @description Default value for the setting + * @description Default value for the setting * @example 666 */ - default: number | string | boolean | number[] | string[]; + default: number | string | boolean | (number)[] | (string)[]; /** - * @description Description of the setting + * @description Description of the setting * @example Description of the string setting */ description: string; /** - * @description Markdown description of the setting + * @description Markdown description of the setting * @example Description of the string setting */ markdownDescription?: string; /** - * @description Edit presentation style - * @example multiline + * @description Edit presentation style + * @example multiline * @enum {string} */ - editPresentation?: 'multiline'; + editPresentation?: "multiline"; /** - * @description Order of the setting + * @description Order of the setting * @example 1 */ order?: number; /** - * @description Enum values for string type settings + * @description Enum values for string type settings * @example [ * "left", * "right" * ] */ - enum?: string[]; + enum?: (string)[]; /** @description Defines the type of items for array settings */ - items?: components['schemas']['ConfigurationValueItemsDto']; + items?: components["schemas"]["ConfigurationValueItemsDto"]; }; ReportManifestDto: { /** @example https://raw.githubusercontent.com/givepraise/reports/main/reports/disperse-dist-straight-curve-with-ceiling/manifest.json */ @@ -1148,18 +1067,16 @@ export interface components { * "Praise receiver reports" * ] */ - categories: string[]; + categories: (string)[]; /** * @example [ * "toplist" * ] */ - keywords: string[]; + keywords: (string)[]; /** @description Configuration settings for the report */ configuration: { - [key: string]: - | components['schemas']['ConfigurationValueDto'] - | undefined; + [key: string]: components["schemas"]["ConfigurationValueDto"] | undefined; }; }; }; @@ -1173,23 +1090,24 @@ export interface components { export type external = Record; export interface operations { + /** Activate a user account in order to be able to give praise and receive rewards. Activation a user account creates a new User object or adds user account to User if it already exists. */ ActivateController_activate: { requestBody: { content: { - 'application/json': components['schemas']['ActivateInputDto']; + "application/json": components["schemas"]["ActivateInputDto"]; }; }; responses: { /** @description The created (or updated) user. */ 200: { content: { - 'application/json': components['schemas']['User']; + "application/json": components["schemas"]["User"]; }; }; 201: { content: { - 'application/json': components['schemas']['User']; + "application/json": components["schemas"]["User"]; }; }; }; @@ -1199,7 +1117,7 @@ export interface operations { responses: { 200: { content: { - 'application/json': string; + "application/json": string; }; }; }; @@ -1209,7 +1127,7 @@ export interface operations { responses: { 200: { content: { - 'text/csv': string; + "text/csv": string; }; }; }; @@ -1219,7 +1137,7 @@ export interface operations { responses: { 200: { content: { - 'application/octet-stream': string; + "application/octet-stream": string; }; }; }; @@ -1229,7 +1147,7 @@ export interface operations { /** @description All users */ 200: { content: { - 'application/json': components['schemas']['User'][]; + "application/json": (components["schemas"]["User"])[]; }; }; }; @@ -1244,7 +1162,7 @@ export interface operations { /** @description A single user */ 200: { content: { - 'application/json': components['schemas']['UserWithStatsDto']; + "application/json": components["schemas"]["UserWithStatsDto"]; }; }; }; @@ -1258,14 +1176,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['UpdateUserRequestDto']; + "application/json": components["schemas"]["UpdateUserRequestDto"]; }; }; responses: { /** @description Updated user */ 200: { content: { - 'application/json': components['schemas']['UserWithStatsDto']; + "application/json": components["schemas"]["UserWithStatsDto"]; }; }; }; @@ -1278,14 +1196,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['UpdateUserRoleInputDto']; + "application/json": components["schemas"]["UpdateUserRoleInputDto"]; }; }; responses: { /** @description The updated user */ 200: { content: { - 'application/json': components['schemas']['UserWithStatsDto']; + "application/json": components["schemas"]["UserWithStatsDto"]; }; }; }; @@ -1298,14 +1216,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['UpdateUserRoleInputDto']; + "application/json": components["schemas"]["UpdateUserRoleInputDto"]; }; }; responses: { /** @description The updated user */ 200: { content: { - 'application/json': components['schemas']['UserWithStatsDto']; + "application/json": components["schemas"]["UserWithStatsDto"]; }; }; }; @@ -1315,7 +1233,7 @@ export interface operations { responses: { 200: { content: { - 'application/json': string; + "application/json": string; }; }; }; @@ -1325,7 +1243,7 @@ export interface operations { responses: { 200: { content: { - 'text/csv': string; + "text/csv": string; }; }; }; @@ -1335,7 +1253,7 @@ export interface operations { responses: { 200: { content: { - 'application/octet-stream': string; + "application/octet-stream": string; }; }; }; @@ -1349,14 +1267,14 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: 'asc' | 'desc'; + sortType?: "asc" | "desc"; }; }; responses: { /** @description Periods */ 200: { content: { - 'application/json': components['schemas']['PeriodPaginatedResponseDto']; + "application/json": components["schemas"]["PeriodPaginatedResponseDto"]; }; }; }; @@ -1365,19 +1283,19 @@ export interface operations { PeriodsController_create: { requestBody: { content: { - 'application/json': components['schemas']['CreatePeriodInputDto']; + "application/json": components["schemas"]["CreatePeriodInputDto"]; }; }; responses: { /** @description Period */ 200: { content: { - 'application/json': components['schemas']['PeriodDetailsDto']; + "application/json": components["schemas"]["PeriodDetailsDto"]; }; }; 201: { content: { - 'application/json': components['schemas']['PeriodDetailsDto']; + "application/json": components["schemas"]["PeriodDetailsDto"]; }; }; }; @@ -1393,7 +1311,7 @@ export interface operations { /** @description Period */ 200: { content: { - 'application/json': components['schemas']['PeriodDetailsDto']; + "application/json": components["schemas"]["PeriodDetailsDto"]; }; }; }; @@ -1407,14 +1325,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['UpdatePeriodInputDto']; + "application/json": components["schemas"]["UpdatePeriodInputDto"]; }; }; responses: { /** @description Period */ 200: { content: { - 'application/json': components['schemas']['PeriodDetailsDto']; + "application/json": components["schemas"]["PeriodDetailsDto"]; }; }; }; @@ -1430,7 +1348,7 @@ export interface operations { /** @description Period */ 200: { content: { - 'application/json': components['schemas']['PeriodDetailsDto']; + "application/json": components["schemas"]["PeriodDetailsDto"]; }; }; }; @@ -1446,7 +1364,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; + "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; }; }; }; @@ -1463,7 +1381,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; + "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; }; }; }; @@ -1480,7 +1398,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; + "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; }; }; }; @@ -1497,7 +1415,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; + "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; }; }; }; @@ -1513,7 +1431,7 @@ export interface operations { /** @description Period */ 200: { content: { - 'application/json': components['schemas']['VerifyQuantifierPoolSizeDto']; + "application/json": components["schemas"]["VerifyQuantifierPoolSizeDto"]; }; }; }; @@ -1529,7 +1447,7 @@ export interface operations { /** @description Period */ 200: { content: { - 'application/json': components['schemas']['PeriodDetailsDto']; + "application/json": components["schemas"]["PeriodDetailsDto"]; }; }; }; @@ -1543,14 +1461,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['ReplaceQuantifierInputDto']; + "application/json": components["schemas"]["ReplaceQuantifierInputDto"]; }; }; responses: { /** @description Period */ 200: { content: { - 'application/json': components['schemas']['ReplaceQuantifierResponseDto']; + "application/json": components["schemas"]["ReplaceQuantifierResponseDto"]; }; }; }; @@ -1564,16 +1482,16 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: 'asc' | 'desc'; + sortType?: "asc" | "desc"; search?: string; - types?: string[]; + types?: (string)[]; }; }; responses: { /** @description Paginated event logs */ 200: { content: { - 'application/json': components['schemas']['EventLogPaginatedResponseDto']; + "application/json": components["schemas"]["EventLogPaginatedResponseDto"]; }; }; }; @@ -1584,7 +1502,7 @@ export interface operations { /** @description Event log types */ 200: { content: { - 'application/json': components['schemas']['EventLogType'][]; + "application/json": (components["schemas"]["EventLogType"])[]; }; }; }; @@ -1595,17 +1513,7 @@ export interface operations { query?: { /** @example SETTING_KEY */ key?: string; - type?: - | 'Integer' - | 'Float' - | 'String' - | 'Textarea' - | 'Boolean' - | 'IntegerList' - | 'StringList' - | 'Image' - | 'Radio' - | 'JSON'; + type?: "Integer" | "Float" | "String" | "Textarea" | "Boolean" | "IntegerList" | "StringList" | "Image" | "Radio" | "JSON"; /** @example 0 */ group?: number; /** @example 0 */ @@ -1616,7 +1524,7 @@ export interface operations { /** @description All settings. */ 200: { content: { - 'application/json': components['schemas']['Setting'][]; + "application/json": (components["schemas"]["Setting"])[]; }; }; }; @@ -1632,7 +1540,7 @@ export interface operations { /** @description Setting. */ 200: { content: { - 'application/json': components['schemas']['Setting']; + "application/json": components["schemas"]["Setting"]; }; }; }; @@ -1646,14 +1554,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['SetSettingDto']; + "application/json": components["schemas"]["SetSettingDto"]; }; }; responses: { /** @description Updated setting. */ 200: { content: { - 'application/json': components['schemas']['Setting']; + "application/json": components["schemas"]["Setting"]; }; }; }; @@ -1669,7 +1577,7 @@ export interface operations { /** @description Updated setting. */ 200: { content: { - 'application/json': components['schemas']['Setting']; + "application/json": components["schemas"]["Setting"]; }; }; }; @@ -1684,7 +1592,7 @@ export interface operations { responses: { 200: { content: { - 'application/json': Record; + "application/json": Record; }; }; }; @@ -1700,7 +1608,7 @@ export interface operations { /** @description All period settings */ 200: { content: { - 'application/json': components['schemas']['PeriodSetting'][]; + "application/json": (components["schemas"]["PeriodSetting"])[]; }; }; }; @@ -1717,7 +1625,7 @@ export interface operations { /** @description Period setting */ 200: { content: { - 'application/json': components['schemas']['PeriodSetting']; + "application/json": components["schemas"]["PeriodSetting"]; }; }; }; @@ -1732,14 +1640,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['SetPeriodSettingDto']; + "application/json": components["schemas"]["SetPeriodSettingDto"]; }; }; responses: { /** @description Updated period setting */ 200: { content: { - 'application/json': components['schemas']['PeriodSetting']; + "application/json": components["schemas"]["PeriodSetting"]; }; }; }; @@ -1753,7 +1661,7 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: 'asc' | 'desc'; + sortType?: "asc" | "desc"; giver?: string; receiver?: string; }; @@ -1762,7 +1670,7 @@ export interface operations { /** @description Paginated praise items */ 200: { content: { - 'application/json': components['schemas']['PraisePaginatedResponseDto']; + "application/json": components["schemas"]["PraisePaginatedResponseDto"]; }; }; }; @@ -1771,19 +1679,19 @@ export interface operations { PraiseController_praise: { requestBody: { content: { - 'application/json': components['schemas']['PraiseCreateInputDto']; + "application/json": components["schemas"]["PraiseCreateInputDto"]; }; }; responses: { /** @description Praise item */ 200: { content: { - 'application/json': components['schemas']['Praise']; + "application/json": components["schemas"]["Praise"]; }; }; 201: { content: { - 'application/json': components['schemas']['Praise'][]; + "application/json": (components["schemas"]["Praise"])[]; }; }; }; @@ -1799,7 +1707,7 @@ export interface operations { responses: { 200: { content: { - 'application/json': string; + "application/json": string; }; }; }; @@ -1815,7 +1723,7 @@ export interface operations { responses: { 200: { content: { - 'text/csv': string; + "text/csv": string; }; }; }; @@ -1831,7 +1739,7 @@ export interface operations { responses: { 200: { content: { - 'application/octet-stream': string; + "application/octet-stream": string; }; }; }; @@ -1847,7 +1755,7 @@ export interface operations { /** @description Praise item */ 200: { content: { - 'application/json': components['schemas']['Praise']; + "application/json": components["schemas"]["Praise"]; }; }; }; @@ -1856,19 +1764,19 @@ export interface operations { PraiseController_forward: { requestBody: { content: { - 'application/json': components['schemas']['PraiseForwardInputDto']; + "application/json": components["schemas"]["PraiseForwardInputDto"]; }; }; responses: { /** @description Praise item */ 200: { content: { - 'application/json': components['schemas']['Praise']; + "application/json": components["schemas"]["Praise"]; }; }; 201: { content: { - 'application/json': components['schemas']['Praise'][]; + "application/json": (components["schemas"]["Praise"])[]; }; }; }; @@ -1888,7 +1796,7 @@ export interface operations { responses: { 200: { content: { - 'application/json': components['schemas']['UserAccount']; + "application/json": components["schemas"]["UserAccount"]; }; }; }; @@ -1897,13 +1805,13 @@ export interface operations { UserAccountsController_create: { requestBody: { content: { - 'application/json': components['schemas']['CreateUserAccountInputDto']; + "application/json": components["schemas"]["CreateUserAccountInputDto"]; }; }; responses: { 201: { content: { - 'application/json': components['schemas']['CreateUserAccountResponseDto']; + "application/json": components["schemas"]["CreateUserAccountResponseDto"]; }; }; }; @@ -1913,7 +1821,7 @@ export interface operations { responses: { 200: { content: { - 'application/json': string; + "application/json": string; }; }; }; @@ -1923,7 +1831,7 @@ export interface operations { responses: { 200: { content: { - 'text/csv': string; + "text/csv": string; }; }; }; @@ -1933,7 +1841,7 @@ export interface operations { responses: { 200: { content: { - 'application/octet-stream': string; + "application/octet-stream": string; }; }; }; @@ -1949,7 +1857,7 @@ export interface operations { /** @description UserAccount */ 200: { content: { - 'application/json': components['schemas']['UserAccount']; + "application/json": components["schemas"]["UserAccount"]; }; }; }; @@ -1958,13 +1866,13 @@ export interface operations { UserAccountsController_update: { requestBody: { content: { - 'application/json': components['schemas']['UpdateUserAccountInputDto']; + "application/json": components["schemas"]["UpdateUserAccountInputDto"]; }; }; responses: { 200: { content: { - 'application/json': components['schemas']['UpdateUserAccountResponseDto']; + "application/json": components["schemas"]["UpdateUserAccountResponseDto"]; }; }; }; @@ -1975,7 +1883,7 @@ export interface operations { /** @description Array of API keys */ 200: { content: { - 'application/json': components['schemas']['ApiKey'][]; + "application/json": (components["schemas"]["ApiKey"])[]; }; }; }; @@ -1984,14 +1892,14 @@ export interface operations { ApiKeyController_createApiKey: { requestBody: { content: { - 'application/json': components['schemas']['CreateApiKeyInputDto']; + "application/json": components["schemas"]["CreateApiKeyInputDto"]; }; }; responses: { /** @description API key created */ 201: { content: { - 'application/json': components['schemas']['CreateApiKeyResponseDto']; + "application/json": components["schemas"]["CreateApiKeyResponseDto"]; }; }; }; @@ -2007,7 +1915,7 @@ export interface operations { /** @description An API key */ 200: { content: { - 'application/json': components['schemas']['ApiKey']; + "application/json": components["schemas"]["ApiKey"]; }; }; }; @@ -2021,19 +1929,19 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['UpdateDescriptionInputDto']; + "application/json": components["schemas"]["UpdateDescriptionInputDto"]; }; }; responses: { 200: { content: { - 'application/json': components['schemas']['ApiKey']; + "application/json": components["schemas"]["ApiKey"]; }; }; /** @description API key with updated description */ 201: { content: { - 'application/json': components['schemas']['ApiKey']; + "application/json": components["schemas"]["ApiKey"]; }; }; }; @@ -2048,13 +1956,13 @@ export interface operations { responses: { 200: { content: { - 'application/json': components['schemas']['ApiKey']; + "application/json": components["schemas"]["ApiKey"]; }; }; /** @description Revoked API key */ 201: { content: { - 'application/json': components['schemas']['ApiKey']; + "application/json": components["schemas"]["ApiKey"]; }; }; }; @@ -2064,14 +1972,14 @@ export interface operations { /** @description A request containing the user identityEthAddress */ requestBody: { content: { - 'application/json': components['schemas']['NonceInputDto']; + "application/json": components["schemas"]["NonceInputDto"]; }; }; responses: { /** @description Nonce generated successfully */ 201: { content: { - 'application/json': components['schemas']['NonceResponseDto']; + "application/json": components["schemas"]["NonceResponseDto"]; }; }; }; @@ -2084,20 +1992,20 @@ export interface operations { }; }; /** - * @description A request containing the user identityEthAddress and signedlogin message. The signed message should be structured as follows: - * + * @description A request containing the user identityEthAddress and signedlogin message. The signed message should be structured as follows: + * * ```SIGN THIS MESSAGE TO LOGIN TO PRAISE.\n\nADDRESS:\n[identityEthAddress]\n\nNONCE:\n[nonce]``` */ requestBody: { content: { - 'application/json': components['schemas']['LoginInputDto']; + "application/json": components["schemas"]["LoginInputDto"]; }; }; responses: { /** @description User authenticated successfully */ 201: { content: { - 'application/json': components['schemas']['LoginResponseDto']; + "application/json": components["schemas"]["LoginResponseDto"]; }; }; }; @@ -2111,14 +2019,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['GenerateTokenDto']; + "application/json": components["schemas"]["GenerateTokenDto"]; }; }; responses: { /** @description Tokens generated successfully */ 201: { content: { - 'application/json': components['schemas']['LoginResponseDto']; + "application/json": components["schemas"]["LoginResponseDto"]; }; }; }; @@ -2131,7 +2039,7 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: 'asc' | 'desc'; + sortType?: "asc" | "desc"; /** @example hostname.givepraise.xyz */ hostname?: string; }; @@ -2140,7 +2048,7 @@ export interface operations { /** @description All communities */ 200: { content: { - 'application/json': components['schemas']['CommunityFindAllResponseDto']; + "application/json": components["schemas"]["CommunityFindAllResponseDto"]; }; }; }; @@ -2149,19 +2057,19 @@ export interface operations { CommunityController_create: { requestBody: { content: { - 'application/json': components['schemas']['CreateCommunityInputDto']; + "application/json": components["schemas"]["CreateCommunityInputDto"]; }; }; responses: { /** @description Community */ 200: { content: { - 'application/json': components['schemas']['Community']; + "application/json": components["schemas"]["Community"]; }; }; 201: { content: { - 'application/json': components['schemas']['Community']; + "application/json": components["schemas"]["Community"]; }; }; }; @@ -2176,7 +2084,7 @@ export interface operations { /** @description A single Community */ 200: { content: { - 'application/json': components['schemas']['Community']; + "application/json": components["schemas"]["Community"]; }; }; }; @@ -2185,14 +2093,14 @@ export interface operations { CommunityController_update: { requestBody: { content: { - 'application/json': components['schemas']['UpdateCommunityInputDto']; + "application/json": components["schemas"]["UpdateCommunityInputDto"]; }; }; responses: { /** @description Community */ 200: { content: { - 'application/json': components['schemas']['Community']; + "application/json": components["schemas"]["Community"]; }; }; }; @@ -2208,7 +2116,7 @@ export interface operations { /** @description Checking whether the community name is available */ 200: { content: { - 'application/json': components['schemas']['IsNameAvailableResponseDto']; + "application/json": components["schemas"]["IsNameAvailableResponseDto"]; }; }; }; @@ -2218,7 +2126,7 @@ export interface operations { /** @description Returns the current community, based on hostname */ 200: { content: { - 'application/json': components['schemas']['Community']; + "application/json": components["schemas"]["Community"]; }; }; }; @@ -2227,14 +2135,14 @@ export interface operations { CommunityController_linkDiscord: { requestBody: { content: { - 'application/json': components['schemas']['LinkDiscordBotDto']; + "application/json": components["schemas"]["LinkDiscordBotDto"]; }; }; responses: { /** @description Community */ 200: { content: { - 'application/json': components['schemas']['Community']; + "application/json": components["schemas"]["Community"]; }; }; }; @@ -2250,7 +2158,7 @@ export interface operations { responses: { 200: { content: { - 'application/json': string; + "application/json": string; }; }; }; @@ -2266,7 +2174,7 @@ export interface operations { responses: { 200: { content: { - 'text/csv': string; + "text/csv": string; }; }; }; @@ -2282,7 +2190,7 @@ export interface operations { responses: { 200: { content: { - 'application/octet-stream': string; + "application/octet-stream": string; }; }; }; @@ -2291,14 +2199,14 @@ export interface operations { QuantificationsController_quantifyMultiple: { requestBody: { content: { - 'application/json': components['schemas']['QuantifyMultipleInputDto']; + "application/json": components["schemas"]["QuantifyMultipleInputDto"]; }; }; responses: { /** @description Praise items */ 200: { content: { - 'application/json': components['schemas']['Praise'][]; + "application/json": (components["schemas"]["Praise"])[]; }; }; }; @@ -2312,14 +2220,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': components['schemas']['QuantifyInputDto']; + "application/json": components["schemas"]["QuantifyInputDto"]; }; }; responses: { /** @description Praise items */ 200: { content: { - 'application/json': components['schemas']['Praise'][]; + "application/json": (components["schemas"]["Praise"])[]; }; }; }; @@ -2330,7 +2238,7 @@ export interface operations { /** @description A list of report manifests */ 200: { content: { - 'application/json': components['schemas']['ReportManifestDto'][]; + "application/json": (components["schemas"]["ReportManifestDto"])[]; }; }; /** @description An error occurred while fetching report manifests */ @@ -2348,7 +2256,7 @@ export interface operations { /** @description A receiver bio */ 200: { content: { - 'application/json': string; + "application/json": string; }; }; }; @@ -2364,7 +2272,7 @@ export interface operations { /** @description Comma separated list of labels, 7 max */ 200: { content: { - 'application/json': string; + "application/json": string; }; }; }; diff --git a/packages/api/openapi.json b/packages/api/openapi.json index 7b27e06c5..39949a3e0 100644 --- a/packages/api/openapi.json +++ b/packages/api/openapi.json @@ -1 +1 @@ -{"openapi":"3.0.0","paths":{"/api/activate":{"post":{"operationId":"ActivateController_activate","summary":"Activate a user account in order to be able to give praise and receive rewards. Activation a user account creates a new User object or adds user account to User if it already exists.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateInputDto"}}}},"responses":{"200":{"description":"The created (or updated) user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"tags":["Activate"]}},"/api/users/export/json":{"get":{"operationId":"UsersController_exportJson","summary":"Export users document to json","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Users"]}},"/api/users/export/csv":{"get":{"operationId":"UsersController_exportCsv","summary":"Export users document to csv","parameters":[],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Users"]}},"/api/users/export/parquet":{"get":{"operationId":"UsersController_exportParquet","summary":"Export users document to parquet","parameters":[],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Users"]}},"/api/users":{"get":{"operationId":"UsersController_findAll","parameters":[],"responses":{"200":{"description":"All users","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}}},"tags":["Users"]}},"/api/users/{id}":{"get":{"operationId":"UsersController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"A single user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]},"patch":{"operationId":"UsersController_update","summary":"Updates a user","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequestDto"}}}},"responses":{"200":{"description":"Updated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]}},"/api/users/{id}/addRole":{"patch":{"operationId":"UsersController_addRole","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRoleInputDto"}}}},"responses":{"200":{"description":"The updated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]}},"/api/users/{id}/removeRole":{"patch":{"operationId":"UsersController_removeRole","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRoleInputDto"}}}},"responses":{"200":{"description":"The updated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]}},"/api/periods/export/json":{"get":{"operationId":"PeriodsController_exportJson","summary":"Export periods document to json","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Periods"]}},"/api/periods/export/csv":{"get":{"operationId":"PeriodsController_exportCsv","summary":"Export periods document to csv","parameters":[],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Periods"]}},"/api/periods/export/parquet":{"get":{"operationId":"PeriodsController_exportParquet","summary":"Export periods document to parquet","parameters":[],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Periods"]}},"/api/periods":{"get":{"operationId":"PeriodsController_findAllPaginated","summary":"List all periods","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"Periods","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodPaginatedResponseDto"}}}}},"tags":["Periods"]},"post":{"operationId":"PeriodsController_create","summary":"Create a new period","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePeriodInputDto"}}}},"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}":{"get":{"operationId":"PeriodsController_findOne","summary":"Find period by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]},"patch":{"operationId":"PeriodsController_update","summary":"Update a period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePeriodInputDto"}}}},"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/close":{"patch":{"operationId":"PeriodsController_close","summary":"Close a period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/praise":{"get":{"operationId":"PeriodsController_praise","summary":"Fetch all Praise in a period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/praise/receiver/{receiverId}":{"get":{"operationId":"PeriodsController_praiseByReceiver","summary":"Fetch all Praise in a period for a given receiver","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"receiverId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/praise/giver/{giverId}":{"get":{"operationId":"PeriodsController_praiseByGiver","summary":"Fetch all Praise in a period for a given giver","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"giverId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/praise/quantifier/{quantifierId}":{"get":{"operationId":"PeriodsController_praiseByQuantifier","summary":"Fetch all Praise in a period for a given quantifier","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"quantifierId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{id}/verifyQuantifierPoolSize":{"get":{"operationId":"PeriodsController_verifyQuantifierPoolSize","summary":"Verify quantifier pool size","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyQuantifierPoolSizeDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/assignQuantifiers":{"patch":{"operationId":"PeriodsController_assignQuantifiers","summary":"Assign quantifiers to period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/replaceQuantifier":{"patch":{"operationId":"PeriodsController_replaceQuantifier","summary":"Replace quantifier in period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplaceQuantifierInputDto"}}}},"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplaceQuantifierResponseDto"}}}}},"tags":["Periods"]}},"/api/event-log":{"get":{"operationId":"EventLogController_findAllPaginated","summary":"List event logs, paginated results","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"types","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Paginated event logs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventLogPaginatedResponseDto"}}}}},"tags":["Event Log"]}},"/api/event-log/types":{"get":{"operationId":"EventLogController_types","summary":"List event log types","parameters":[],"responses":{"200":{"description":"Event log types","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventLogType"}}}}}},"tags":["Event Log"]}},"/api/settings":{"get":{"operationId":"SettingsController_findAll","summary":"List all settings.","parameters":[{"name":"key","required":false,"in":"query","readOnly":true,"example":"SETTING_KEY","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","readOnly":true,"schema":{"enum":["Integer","Float","String","Textarea","Boolean","IntegerList","StringList","Image","Radio","JSON"],"type":"string"}},{"name":"group","required":false,"in":"query","readOnly":true,"example":0,"schema":{"type":"number"}},{"name":"subgroup","required":false,"in":"query","readOnly":true,"example":0,"schema":{"type":"number"}}],"responses":{"200":{"description":"All settings.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Setting"}}}}}},"tags":["Settings"]}},"/api/settings/{id}":{"get":{"operationId":"SettingsController_findOne","summary":"Get a setting.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Setting.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}}},"tags":["Settings"]},"patch":{"operationId":"SettingsController_set","summary":"Set a value for a setting.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetSettingDto"}}}},"responses":{"200":{"description":"Updated setting.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}}},"tags":["Settings"]}},"/api/settings/{id}/upload":{"patch":{"operationId":"SettingsController_setWithUpload","summary":"Upload a file for a setting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Updated setting.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}}},"tags":["Settings"]}},"/api/settings/uploads/{file}":{"get":{"operationId":"SettingsController_serveUpload","summary":"Serve an uploaded settings file.","parameters":[{"name":"file","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Settings"]}},"/api/periods/{periodId}/settings":{"get":{"operationId":"PeriodSettingsController_findAll","summary":"List all period settings.","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"All period settings","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PeriodSetting"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/settings/{settingId}":{"get":{"operationId":"PeriodSettingsController_findOne","summary":"Get a period setting.","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"settingId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period setting","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodSetting"}}}}},"tags":["Periods"]},"patch":{"operationId":"PeriodSettingsController_set","summary":"Set value for a period setting.","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"settingId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPeriodSettingDto"}}}},"responses":{"200":{"description":"Updated period setting","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodSetting"}}}}},"tags":["Periods"]}},"/api/praise":{"get":{"operationId":"PraiseController_findAllPaginated","summary":"List praise items, paginated results","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"name":"giver","required":false,"in":"query","schema":{"type":"string"}},{"name":"receiver","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated praise items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PraisePaginatedResponseDto"}}}}},"tags":["Praise"]},"post":{"operationId":"PraiseController_praise","summary":"Create praise item","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PraiseCreateInputDto"}}}},"responses":{"200":{"description":"Praise item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Praise"}}}},"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Praise"]}},"/api/praise/export/json":{"get":{"operationId":"PraiseController_exportJson","summary":"Export praise document to json","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Praise"]}},"/api/praise/export/csv":{"get":{"operationId":"PraiseController_exportCsv","summary":"Export praise document to csv","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Praise"]}},"/api/praise/export/parquet":{"get":{"operationId":"PraiseController_exportParquet","summary":"Export praise document to parquet","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Praise"]}},"/api/praise/{id}":{"get":{"operationId":"PraiseController_findOne","summary":"Find praise item by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Praise item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Praise"}}}}},"tags":["Praise"]}},"/api/praise/forward":{"post":{"operationId":"PraiseController_forward","summary":"Forward praise item","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PraiseForwardInputDto"}}}},"responses":{"200":{"description":"Praise item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Praise"}}}},"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Praise"]}},"/api/useraccounts":{"post":{"operationId":"UserAccountsController_create","summary":"Create a UserAccount","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserAccountInputDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserAccountResponseDto"}}}}},"tags":["UserAccounts"]},"get":{"operationId":"UserAccountsController_findAll","summary":"UserAccount list","parameters":[{"name":"accountId","required":false,"in":"query","example":"098098098098098","schema":{"minLength":10,"maxLength":255,"type":"string"}},{"name":"name","required":false,"in":"query","example":"darth#6755","schema":{"minLength":2,"maxLength":32,"type":"string"}},{"name":"user","required":false,"in":"query","example":"63b428f7d9ca4f6ff5370d05","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAccount"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/export/json":{"get":{"operationId":"UserAccountsController_exportJson","summary":"Export userAccounts document to json","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/export/csv":{"get":{"operationId":"UserAccountsController_exportCsv","summary":"Export userAccounts document to csv","parameters":[],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/export/parquet":{"get":{"operationId":"UserAccountsController_exportParquet","summary":"Export userAccounts document to parquet","parameters":[],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/{id}":{"get":{"operationId":"UserAccountsController_findOne","summary":"Get a UserAccount.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"UserAccount","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAccount"}}}}},"tags":["UserAccounts"]},"patch":{"operationId":"UserAccountsController_update","summary":"Update UserAccount","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserAccountInputDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserAccountResponseDto"}}}}},"tags":["UserAccounts"]}},"/api/api-key":{"post":{"operationId":"ApiKeyController_createApiKey","summary":"Create API key","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyInputDto"}}}},"responses":{"201":{"description":"API key created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyResponseDto"}}}}},"tags":["API Key"]},"get":{"operationId":"ApiKeyController_findAll","summary":"List all API keys","parameters":[],"responses":{"200":{"description":"Array of API keys","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}}}}},"tags":["API Key"]}},"/api/api-key/{id}":{"get":{"operationId":"ApiKeyController_findOne","summary":"Get API key by ID","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"An API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}}},"tags":["API Key"]},"put":{"operationId":"ApiKeyController_updateApiKeyDescription","summary":"Update API key description","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDescriptionInputDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"201":{"description":"API key with updated description","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}}},"tags":["API Key"]},"delete":{"operationId":"ApiKeyController_revokeApiKey","summary":"Revoke API key","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"201":{"description":"Revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}}},"tags":["API Key"]}},"/api/auth/eth-signature/nonce":{"post":{"operationId":"EthSignatureController_nonce","summary":"Generates a nonce for the user and returns it","parameters":[],"requestBody":{"required":true,"description":"A request containing the user identityEthAddress","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NonceInputDto"}}}},"responses":{"201":{"description":"Nonce generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NonceResponseDto"}}}}},"tags":["Authentication"]}},"/api/auth/eth-signature/login":{"post":{"operationId":"EthSignatureController_login","summary":"Verifies a user's signature and returns a JWT token","parameters":[{"name":"host","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"A request containing the user identityEthAddress and signedlogin message. The signed message should be structured as follows: \n\n```SIGN THIS MESSAGE TO LOGIN TO PRAISE.\\n\\nADDRESS:\\n[identityEthAddress]\\n\\nNONCE:\\n[nonce]```","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginInputDto"}}}},"responses":{"201":{"description":"User authenticated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseDto"}}}}},"tags":["Authentication"]}},"/api/auth/eth-signature/refresh":{"post":{"operationId":"EthSignatureController_token","summary":"Verifies a refreshToken and returns a JWT token","parameters":[{"name":"host","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateTokenDto"}}}},"responses":{"201":{"description":"Tokens generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseDto"}}}}},"tags":["Authentication"]}},"/api/communities":{"post":{"operationId":"CommunityController_create","summary":"Create a new community","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommunityInputDto"}}}},"responses":{"200":{"description":"Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]},"get":{"operationId":"CommunityController_findAll","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"name":"hostname","required":false,"in":"query","example":"hostname.givepraise.xyz","schema":{"type":"string"}}],"responses":{"200":{"description":"All communities","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityFindAllResponseDto"}}}}},"tags":["Communities"]}},"/api/communities/{id}":{"patch":{"operationId":"CommunityController_update","summary":"Update community","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommunityInputDto"}}}},"responses":{"200":{"description":"Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]},"get":{"operationId":"CommunityController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"A single Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]}},"/api/communities/isNameAvailable":{"get":{"operationId":"CommunityController_isNameAvailable","parameters":[{"name":"name","required":true,"in":"query","example":"test_12345","schema":{"type":"string"}}],"responses":{"200":{"description":"Checking whether the community name is available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IsNameAvailableResponseDto"}}}}},"tags":["Communities"]}},"/api/communities/current":{"get":{"operationId":"CommunityController_current","parameters":[],"responses":{"200":{"description":"Returns the current community, based on hostname","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]}},"/api/communities/{id}/discord/link":{"patch":{"operationId":"CommunityController_linkDiscord","summary":"Link discord to community","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkDiscordBotDto"}}}},"responses":{"200":{"description":"Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]}},"/api/quantifications/export/json":{"get":{"operationId":"QuantificationsController_exportJson","summary":"Export quantifications document to json","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Quantifications"]}},"/api/quantifications/export/csv":{"get":{"operationId":"QuantificationsController_exportCsv","summary":"Export quantifications document to csv","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Quantifications"]}},"/api/quantifications/export/parquet":{"get":{"operationId":"QuantificationsController_exportParquet","summary":"Export quantifications document to parquet","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Quantifications"]}},"/api/quantifications/multiple":{"patch":{"operationId":"QuantificationsController_quantifyMultiple","summary":"Quantify multiple praise items","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantifyMultipleInputDto"}}}},"responses":{"200":{"description":"Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Quantifications"]}},"/api/quantifications/{id}":{"patch":{"operationId":"QuantificationsController_quantify","summary":"Quantify praise item by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantifyInputDto"}}}},"responses":{"200":{"description":"Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Quantifications"]}},"/api/reports":{"get":{"operationId":"ReportsController_listAllReports","summary":"List all report manifests","parameters":[],"responses":{"200":{"description":"A list of report manifests","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportManifestDto"}}}}},"500":{"description":"An error occurred while fetching report manifests"}},"tags":["Reports"]}},"/api/reports/receiverBio/{userAccountId}":{"get":{"operationId":"ReportsController_receiverBio","summary":"Get one AI generated receiver bio","parameters":[{"name":"userAccountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"A receiver bio","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["Reports"]}},"/api/reports/receiverLabels/{userAccountId}":{"get":{"operationId":"ReportsController_receiverLabels","summary":"AI generated labels describing a praise receiver.","parameters":[{"name":"userAccountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Comma separated list of labels, 7 max","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["Reports"]}}},"info":{"title":"Praise API","description":"","version":"1.0.0","contact":{}},"tags":[],"servers":[],"components":{"schemas":{"ActivateInputDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"accountId":{"type":"string","example":"darth#3455"},"signature":{"type":"string","example":"0xdb4bb91357b23083ec2a36dc1fe23e59b71434fc020542da7e983df206ed06611e275eb30e239508f9758c0608dca6cef5619c41b50a48f22bdb36a8dabc2d201c"}},"required":["identityEthAddress","accountId","signature"]},"UserNoUserAccountsDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20},"roles":{"type":"array","readOnly":true,"items":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","identityEthAddress","rewardsEthAddress","username","roles","createdAt","updatedAt"]},"UserAccount":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"$ref":"#/components/schemas/UserNoUserAccountsDto"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"User":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20},"roles":{"type":"array","readOnly":true,"items":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"accounts":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/UserAccount"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","identityEthAddress","rewardsEthAddress","username","roles","accounts","createdAt","updatedAt"]},"UserWithStatsDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20},"roles":{"type":"array","readOnly":true,"items":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"accounts":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/UserAccount"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"receivedTotalScore":{"type":"number","readOnly":true},"receivedTotalCount":{"type":"number","readOnly":true},"givenTotalScore":{"type":"number","readOnly":true},"givenTotalCount":{"type":"number","readOnly":true}},"required":["_id","identityEthAddress","rewardsEthAddress","username","roles","accounts","createdAt","updatedAt"]},"UpdateUserRequestDto":{"type":"object","properties":{"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20}},"required":["rewardsEthAddress","username"]},"UpdateUserRoleInputDto":{"type":"object","properties":{"role":{"enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"],"type":"string"}},"required":["role"]},"Period":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"name":{"type":"string","example":"June 2021"},"status":{"type":"string","readOnly":true,"enum":["OPEN","QUANTIFY","CLOSED"]},"startDate":{"format":"date-time","type":"string","readOnly":true},"endDate":{"format":"date-time","type":"string","readOnly":true},"attestationsTxHash":{"type":"string","example":"0x46164b8581258eec4b4f44d626925953d0d7581514d9fd1335e3bd660d48e07c"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","name","status","startDate","endDate","createdAt","updatedAt"]},"PeriodPaginatedResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Period"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"Quantification":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"score":{"type":"number","readOnly":true,"example":144},"scoreRealized":{"type":"number","readOnly":true,"example":144},"dismissed":{"type":"boolean","readOnly":true,"example":true},"duplicatePraise":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"quantifier":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"praise":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"createdAt":{"format":"date-time","type":"string","readOnly":true,"example":"2021-06-01T00:00:00.000Z"},"updatedAt":{"format":"date-time","type":"string","readOnly":true,"example":"2021-06-01T00:00:00.000Z"}},"required":["_id","score","scoreRealized","dismissed","duplicatePraise","quantifier","praise","createdAt","updatedAt"]},"PeriodDetailsQuantifierDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"username":{"type":"string","example":"darth","maxLength":20},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"finishedCount":{"type":"number","readOnly":true,"example":1},"praiseCount":{"type":"number","readOnly":true,"example":1},"quantifications":{"type":"array","items":{"$ref":"#/components/schemas/Quantification"}}},"required":["_id","identityEthAddress","username","createdAt","updatedAt","finishedCount","praiseCount","quantifications"]},"PeriodDetailsGiverReceiverDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"user":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"praiseCount":{"type":"number","readOnly":true,"example":"5"},"score":{"type":"number","readOnly":true,"example":144}},"required":["_id","accountId","name","platform","createdAt","updatedAt","user","praiseCount","score"]},"PeriodDetailsDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"name":{"type":"string","example":"June 2021"},"status":{"type":"string","readOnly":true,"enum":["OPEN","QUANTIFY","CLOSED"]},"startDate":{"format":"date-time","type":"string","readOnly":true},"endDate":{"format":"date-time","type":"string","readOnly":true},"attestationsTxHash":{"type":"string","example":"0x46164b8581258eec4b4f44d626925953d0d7581514d9fd1335e3bd660d48e07c"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"quantifiers":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/PeriodDetailsQuantifierDto"}},"givers":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/PeriodDetailsGiverReceiverDto"}},"receivers":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/PeriodDetailsGiverReceiverDto"}},"numberOfPraise":{"type":"number","readOnly":true,"example":543}},"required":["_id","name","status","startDate","endDate","createdAt","updatedAt","numberOfPraise"]},"CreatePeriodInputDto":{"type":"object","properties":{"name":{"type":"string","example":"June 2021"},"endDate":{"type":"string"}},"required":["name","endDate"]},"UpdatePeriodInputDto":{"type":"object","properties":{"name":{"type":"string","example":"June 2021"},"attestationsTxHash":{"type":"string","example":"0x46164b8581258eec4b4f44d626925953d0d7581514d9fd1335e3bd660d48e07c"},"endDate":{"type":"string"}}},"UserAccountWithUserRefDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"PraiseWithUserAccountsWithUserRefDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"score":{"type":"number","readOnly":true,"example":144},"receiver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccountWithUserRefDto"}]},"giver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccountWithUserRefDto"}]},"forwarder":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccountWithUserRefDto"}]},"quantifications":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Quantification"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","reasonRaw","reason","sourceId","sourceName","score","receiver","giver","quantifications","createdAt","updatedAt"]},"VerifyQuantifierPoolSizeDto":{"type":"object","properties":{"quantifierPoolSize":{"type":"number","description":"The number of quantifiers in the pool","example":10},"quantifierPoolSizeNeeded":{"type":"number","description":"The number of quantifiers needed in the pool","example":10},"quantifierPoolDeficitSize":{"type":"number","description":"","example":0}},"required":["quantifierPoolSize","quantifierPoolSizeNeeded","quantifierPoolDeficitSize"]},"ReplaceQuantifierInputDto":{"type":"object","properties":{"currentQuantifierId":{"type":"string","example":"639b178f19296ee0f2d0585d"},"newQuantifierId":{"type":"string","example":"639b178f19296ee0f2d05666"}},"required":["currentQuantifierId","newQuantifierId"]},"Praise":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"score":{"type":"number","readOnly":true,"example":144},"receiver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccount"}]},"giver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccount"}]},"forwarder":{"$ref":"#/components/schemas/UserAccount"},"quantifications":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Quantification"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","reasonRaw","reason","sourceId","sourceName","score","receiver","giver","quantifications","createdAt","updatedAt"]},"ReplaceQuantifierResponseDto":{"type":"object","properties":{"praises":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Praise"}},"period":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/PeriodDetailsDto"}]}},"required":["praises","period"]},"UserAccountNoUserId":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"EventLogType":{"type":"object","properties":{"key":{"type":"string","enum":["PERMISSION","AUTHENTICATION","PERIOD","PRAISE","QUANTIFICATION","SETTING","USER_ACCOUNT","COMMUNITY"]},"label":{"type":"string","example":"An action that changes user permissions","maxLength":255},"description":{"type":"string","example":"A user's permissions were changed","maxLength":255}},"required":["key","label","description"]},"EventLog":{"type":"object","properties":{"_id":{"type":"string","example":"621f802b813dbdba9eeaf7d7"},"user":{"$ref":"#/components/schemas/User"},"useraccount":{"$ref":"#/components/schemas/UserAccountNoUserId"},"apiKey":{"type":"string","example":"621f802b813dbdba9eeaf7d7"},"period":{"type":"string","example":"621f802b813dbdba9eeaf7d7"},"type":{"$ref":"#/components/schemas/EventLogType"},"description":{"type":"string","example":"A description of the event "},"createdAt":{"format":"date-time","type":"string","example":"2023-03-01T22:51:20.012Z"},"updatedAt":{"format":"date-time","type":"string","example":"2023-03-01T22:51:20.012Z"}},"required":["_id","type","description","createdAt","updatedAt"]},"EventLogPaginatedResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/EventLog"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"Setting":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"621f802b813dbdbaddeaf799"},"key":{"type":"string","readOnly":true,"example":"SETTING_KEY"},"value":{"type":"string","example":"666","maxLength":512},"valueRealized":{"example":666,"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"boolean"},{"type":"number"},{"type":"array","items":{"type":"number"}}]},"defaultValue":{"type":"string","readOnly":true,"example":"555"},"type":{"type":"string","readOnly":true,"enum":["Integer","Float","String","Textarea","Boolean","IntegerList","StringList","Image","Radio","JSON"]},"label":{"type":"string","readOnly":true,"example":"Quantifiers Per Praise"},"description":{"type":"string","readOnly":true,"example":"How many redundant quantifications are assigned to each praise?"},"group":{"type":"number","readOnly":true,"example":0},"options":{"type":"string","readOnly":true},"subgroup":{"type":"number","readOnly":true,"example":0},"periodOverridable":{"type":"boolean","readOnly":true,"example":true}},"required":["_id","key","value","valueRealized","defaultValue","type","label","description","group","options","subgroup","periodOverridable"]},"SetSettingDto":{"type":"object","properties":{"value":{"type":"string","example":"666","maxLength":512}},"required":["value"]},"PeriodSetting":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"62291b7ea8b1619f78818524"},"period":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/Period"}]},"setting":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/Setting"}]},"value":{"type":"string","example":"666","maxLength":512},"valueRealized":{"example":666,"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"boolean"},{"type":"number"},{"type":"array","items":{"type":"number"}}]}},"required":["_id","period","setting","value","valueRealized"]},"SetPeriodSettingDto":{"type":"object","properties":{"value":{"type":"string","example":"666","maxLength":512}},"required":["value"]},"PraisePaginatedResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Praise"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"PraiseCreateInputDto":{"type":"object","properties":{"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"receiverIds":{"type":"array","items":{"type":"string"}},"giver":{"$ref":"#/components/schemas/UserAccount"}},"required":["reasonRaw","reason","sourceId","sourceName","receiverIds","giver"]},"PraiseForwardInputDto":{"type":"object","properties":{"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"receiverIds":{"type":"array","items":{"type":"string"}},"giver":{"$ref":"#/components/schemas/UserAccount"},"forwarder":{"$ref":"#/components/schemas/UserAccount"}},"required":["reasonRaw","reason","sourceId","sourceName","receiverIds","giver","forwarder"]},"CreateUserAccountInputDto":{"type":"object","properties":{"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"activateToken":{"type":"string","example":"jkhvuygi643jh35g53"},"user":{"type":"string","example":"63b428f7d9ca4f6ff5370d05"}},"required":["accountId","name","platform"]},"CreateUserAccountResponseDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"$ref":"#/components/schemas/UserNoUserAccountsDto"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"activateToken":{"type":"string","readOnly":true,"example":"jkhvuygi643jh35g53"}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"UpdateUserAccountInputDto":{"type":"object","properties":{"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"activateToken":{"type":"string","example":"jkhvuygi643jh35g53"},"user":{"type":"string","example":"63b428f7d9ca4f6ff5370d05"}}},"UpdateUserAccountResponseDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"$ref":"#/components/schemas/UserNoUserAccountsDto"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"activateToken":{"type":"string","readOnly":true,"example":"jkhvuygi643jh35g53"}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"CreateApiKeyInputDto":{"type":"object","properties":{"description":{"type":"string","example":"My API Key"},"role":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"required":["description","role"]},"CreateApiKeyResponseDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"name":{"type":"string","readOnly":true,"example":"89f7edbd"},"description":{"type":"string","example":"My API Key"},"hash":{"type":"string","readOnly":true,"example":"$2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i"},"role":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"key":{"type":"string","readOnly":true,"example":"1834a97caed67b244dd11fa5ef53aa74f13781ad0aea8148b8607d861d9f7535"}},"required":["_id","name","description","hash","role","createdAt","updatedAt","key"]},"ApiKey":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"name":{"type":"string","readOnly":true,"example":"89f7edbd"},"description":{"type":"string","example":"My API Key"},"hash":{"type":"string","readOnly":true,"example":"$2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i"},"role":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","name","description","hash","role","createdAt","updatedAt"]},"UpdateDescriptionInputDto":{"type":"object","properties":{"description":{"type":"string","example":"My API Key"}},"required":["description"]},"NonceInputDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"}},"required":["identityEthAddress"]},"NonceResponseDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","readOnly":true,"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},"nonce":{"type":"string","readOnly":true,"example":"uh9h998u98uj09noj"}},"required":["identityEthAddress","nonce"]},"LoginInputDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"signature":{"type":"string"}},"required":["identityEthAddress","signature"]},"LoginResponseDto":{"type":"object","properties":{"accessToken":{"type":"string","readOnly":true,"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA"},"refreshToken":{"type":"string","readOnly":true,"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},"tokenType":{"type":"string","readOnly":true,"example":"bearer"},"user":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/User"}]}},"required":["accessToken","refreshToken","identityEthAddress","tokenType","user"]},"GenerateTokenDto":{"type":"object","properties":{"refreshToken":{"type":"string","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA"}},"required":["refreshToken"]},"CreateCommunityInputDto":{"type":"object","properties":{"hostname":{"type":"string","example":"banklessdao.givepraise.xyz","maxLength":255},"name":{"type":"string","example":"BanklessDAO","minLength":4,"maxLength":20},"email":{"type":"string","example":"john.smith@banklessDao.com","maxLength":255},"creator":{"type":"string","example":"0x123..","maxLength":42},"owners":{"example":["0x123..","0x345.."],"type":"array","items":{"type":"string"}},"discordGuildId":{"type":"string","example":"0980987846534","maxLength":32}},"required":["hostname","name","email","creator","owners"]},"Community":{"type":"object","properties":{"_id":{"type":"string","example":"621f802b813dbdba9eeaf7b4"},"hostname":{"type":"string","example":"banklessdao.givepraise.xyz","maxLength":255},"name":{"type":"string","example":"BanklessDAO","minLength":4,"maxLength":20},"email":{"type":"string","example":"john.smith@banklessDao.com","maxLength":255},"creator":{"type":"string","example":"0x123..","maxLength":42},"owners":{"example":["0x123..","0x345.."],"type":"array","items":{"type":"string"}},"discordGuildId":{"type":"string","example":"0980987846534","maxLength":32},"discordLinkNonce":{"type":"string","example":"oiujoiuoo8u","maxLength":255},"isPublic":{"type":"boolean","example":true},"discordLinkState":{"type":"string","enum":["NOT_SET","PENDING","ACTIVE","DEACTIVE"]},"features":{"type":"object","example":{"attestations":true}}},"required":["_id","hostname","name","email","creator","owners","discordLinkNonce","isPublic","discordLinkState","features"]},"UpdateCommunityInputDto":{"type":"object","properties":{"hostname":{"type":"string","example":"banklessdao.givepraise.xyz","maxLength":255},"name":{"type":"string","example":"BanklessDAO","minLength":4,"maxLength":20},"email":{"type":"string","example":"john.smith@banklessDao.com","maxLength":255},"owners":{"example":["0x123..","0x345.."],"type":"array","items":{"type":"string"}}}},"CommunityFindAllResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Community"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"IsNameAvailableResponseDto":{"type":"object","properties":{"available":{"type":"boolean","example":false}},"required":["available"]},"LinkDiscordBotDto":{"type":"object","properties":{"signedMessage":{"type":"string","example":"0xdb4bb91357b23083ec2a36dc1fe23e59b71434fc020542da7e983df206ed06611e275eb30e239508f9758c0608dca6cef5619c41b50a48f22bdb36a8dabc2d201c"}},"required":["signedMessage"]},"QuantifyInputDto":{"type":"object","properties":{"score":{"type":"number"},"dismissed":{"type":"boolean"},"duplicatePraise":{"type":"string","example":"639b178f19296ee0f2d0585d"}}},"QuantifyMultipleInputDto":{"type":"object","properties":{"params":{"$ref":"#/components/schemas/QuantifyInputDto"},"praiseIds":{"example":["639b178f19296ee0f2d0585d","639b178f19296ee0f2d0585e","639b178f19296ee0f2d0585f"],"type":"array","items":{"type":"string"}}},"required":["params","praiseIds"]},"ConfigurationValueItemsDto":{"type":"object","properties":{"type":{"type":"string","description":"Allowed array types","enum":["string","number"],"example":"string"}},"required":["type"]},"ConfigurationValueDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of the setting","enum":["string","number","boolean","array"],"example":"string"},"default":{"description":"Default value for the setting","example":666,"oneOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"string"}}]},"description":{"type":"string","description":"Description of the setting","example":"Description of the string setting"},"markdownDescription":{"type":"string","description":"Markdown description of the setting","example":"Description of the string setting"},"editPresentation":{"type":"string","description":"Edit presentation style","enum":["multiline"],"example":"multiline"},"order":{"type":"number","description":"Order of the setting","example":1},"enum":{"description":"Enum values for string type settings","example":["left","right"],"type":"array","items":{"type":"string"}},"items":{"description":"Defines the type of items for array settings","allOf":[{"$ref":"#/components/schemas/ConfigurationValueItemsDto"}]}},"required":["type","default","description"]},"ReportManifestDto":{"type":"object","properties":{"manifestUrl":{"type":"string","example":"https://raw.githubusercontent.com/givepraise/reports/main/reports/disperse-dist-straight-curve-with-ceiling/manifest.json"},"name":{"type":"string","example":"simple-report"},"displayName":{"type":"string","example":"Simple Report"},"description":{"type":"string","example":"A simple report."},"version":{"type":"string","example":"1.2.3"},"author":{"type":"string","example":"General Magic"},"publisher":{"type":"string","example":"general-magic"},"license":{"type":"string","example":"MIT"},"repository":{"type":"string","example":"https://github.com/givepraise/reports"},"bugs":{"type":"string","example":"https://github.com/givepraise/reports/issues"},"categories":{"example":["Basic reports","Praise receiver reports"],"type":"array","items":{"type":"string"}},"keywords":{"example":["toplist"],"type":"array","items":{"type":"string"}},"configuration":{"type":"object","description":"Configuration settings for the report","additionalProperties":{"oneOf":[{"$ref":"#/components/schemas/ConfigurationValueDto"}]}}},"required":["name","displayName","description","version","author","publisher","license","repository","bugs","categories","keywords","configuration"]}}}} \ No newline at end of file +{"openapi":"3.0.0","paths":{"/api/activate":{"post":{"operationId":"ActivateController_activate","summary":"Activate a user account in order to be able to give praise and receive rewards. Activation a user account creates a new User object or adds user account to User if it already exists.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateInputDto"}}}},"responses":{"200":{"description":"The created (or updated) user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"tags":["Activate"]}},"/api/users/export/json":{"get":{"operationId":"UsersController_exportJson","summary":"Export users document to json","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Users"]}},"/api/users/export/csv":{"get":{"operationId":"UsersController_exportCsv","summary":"Export users document to csv","parameters":[],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Users"]}},"/api/users/export/parquet":{"get":{"operationId":"UsersController_exportParquet","summary":"Export users document to parquet","parameters":[],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Users"]}},"/api/users":{"get":{"operationId":"UsersController_findAll","parameters":[],"responses":{"200":{"description":"All users","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}}},"tags":["Users"]}},"/api/users/{id}":{"get":{"operationId":"UsersController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"A single user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]},"patch":{"operationId":"UsersController_update","summary":"Updates a user","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequestDto"}}}},"responses":{"200":{"description":"Updated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]}},"/api/users/{id}/addRole":{"patch":{"operationId":"UsersController_addRole","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRoleInputDto"}}}},"responses":{"200":{"description":"The updated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]}},"/api/users/{id}/removeRole":{"patch":{"operationId":"UsersController_removeRole","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRoleInputDto"}}}},"responses":{"200":{"description":"The updated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithStatsDto"}}}}},"tags":["Users"]}},"/api/periods/export/json":{"get":{"operationId":"PeriodsController_exportJson","summary":"Export periods document to json","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Periods"]}},"/api/periods/export/csv":{"get":{"operationId":"PeriodsController_exportCsv","summary":"Export periods document to csv","parameters":[],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Periods"]}},"/api/periods/export/parquet":{"get":{"operationId":"PeriodsController_exportParquet","summary":"Export periods document to parquet","parameters":[],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Periods"]}},"/api/periods":{"get":{"operationId":"PeriodsController_findAllPaginated","summary":"List all periods","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}}],"responses":{"200":{"description":"Periods","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodPaginatedResponseDto"}}}}},"tags":["Periods"]},"post":{"operationId":"PeriodsController_create","summary":"Create a new period","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePeriodInputDto"}}}},"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}":{"get":{"operationId":"PeriodsController_findOne","summary":"Find period by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]},"patch":{"operationId":"PeriodsController_update","summary":"Update a period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePeriodInputDto"}}}},"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/close":{"patch":{"operationId":"PeriodsController_close","summary":"Close a period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/praise":{"get":{"operationId":"PeriodsController_praise","summary":"Fetch all Praise in a period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/praise/receiver/{receiverId}":{"get":{"operationId":"PeriodsController_praiseByReceiver","summary":"Fetch all Praise in a period for a given receiver","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"receiverId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/praise/giver/{giverId}":{"get":{"operationId":"PeriodsController_praiseByGiver","summary":"Fetch all Praise in a period for a given giver","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"giverId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/praise/quantifier/{quantifierId}":{"get":{"operationId":"PeriodsController_praiseByQuantifier","summary":"Fetch all Praise in a period for a given quantifier","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"quantifierId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PraiseWithUserAccountsWithUserRefDto"}}}}}},"tags":["Periods"]}},"/api/periods/{id}/verifyQuantifierPoolSize":{"get":{"operationId":"PeriodsController_verifyQuantifierPoolSize","summary":"Verify quantifier pool size","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyQuantifierPoolSizeDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/assignQuantifiers":{"patch":{"operationId":"PeriodsController_assignQuantifiers","summary":"Assign quantifiers to period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodDetailsDto"}}}}},"tags":["Periods"]}},"/api/periods/{id}/replaceQuantifier":{"patch":{"operationId":"PeriodsController_replaceQuantifier","summary":"Replace quantifier in period","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplaceQuantifierInputDto"}}}},"responses":{"200":{"description":"Period","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplaceQuantifierResponseDto"}}}}},"tags":["Periods"]}},"/api/event-log":{"get":{"operationId":"EventLogController_findAllPaginated","summary":"List event logs, paginated results","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"types","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Paginated event logs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventLogPaginatedResponseDto"}}}}},"tags":["Event Log"]}},"/api/event-log/types":{"get":{"operationId":"EventLogController_types","summary":"List event log types","parameters":[],"responses":{"200":{"description":"Event log types","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventLogType"}}}}}},"tags":["Event Log"]}},"/api/settings":{"get":{"operationId":"SettingsController_findAll","summary":"List all settings.","parameters":[{"name":"key","required":false,"in":"query","readOnly":true,"example":"SETTING_KEY","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","readOnly":true,"schema":{"enum":["Integer","Float","String","Textarea","Boolean","IntegerList","StringList","Image","Radio","JSON"],"type":"string"}},{"name":"group","required":false,"in":"query","readOnly":true,"example":0,"schema":{"type":"number"}},{"name":"subgroup","required":false,"in":"query","readOnly":true,"example":0,"schema":{"type":"number"}}],"responses":{"200":{"description":"All settings.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Setting"}}}}}},"tags":["Settings"]}},"/api/settings/{id}":{"get":{"operationId":"SettingsController_findOne","summary":"Get a setting.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Setting.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}}},"tags":["Settings"]},"patch":{"operationId":"SettingsController_set","summary":"Set a value for a setting.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetSettingDto"}}}},"responses":{"200":{"description":"Updated setting.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}}},"tags":["Settings"]}},"/api/settings/{id}/upload":{"patch":{"operationId":"SettingsController_setWithUpload","summary":"Upload a file for a setting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Updated setting.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}}},"tags":["Settings"]}},"/api/settings/uploads/{file}":{"get":{"operationId":"SettingsController_serveUpload","summary":"Serve an uploaded settings file.","parameters":[{"name":"file","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Settings"]}},"/api/periods/{periodId}/settings":{"get":{"operationId":"PeriodSettingsController_findAll","summary":"List all period settings.","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"All period settings","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PeriodSetting"}}}}}},"tags":["Periods"]}},"/api/periods/{periodId}/settings/{settingId}":{"get":{"operationId":"PeriodSettingsController_findOne","summary":"Get a period setting.","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"settingId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Period setting","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodSetting"}}}}},"tags":["Periods"]},"patch":{"operationId":"PeriodSettingsController_set","summary":"Set value for a period setting.","parameters":[{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}},{"name":"settingId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPeriodSettingDto"}}}},"responses":{"200":{"description":"Updated period setting","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeriodSetting"}}}}},"tags":["Periods"]}},"/api/praise":{"get":{"operationId":"PraiseController_findAllPaginated","summary":"List praise items, paginated results","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"name":"giver","required":false,"in":"query","schema":{"type":"string"}},{"name":"receiver","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated praise items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PraisePaginatedResponseDto"}}}}},"tags":["Praise"]},"post":{"operationId":"PraiseController_praise","summary":"Create praise item","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PraiseCreateInputDto"}}}},"responses":{"200":{"description":"Praise item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Praise"}}}},"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Praise"]}},"/api/praise/export/json":{"get":{"operationId":"PraiseController_exportJson","summary":"Export praise document to json","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Praise"]}},"/api/praise/export/csv":{"get":{"operationId":"PraiseController_exportCsv","summary":"Export praise document to csv","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Praise"]}},"/api/praise/export/parquet":{"get":{"operationId":"PraiseController_exportParquet","summary":"Export praise document to parquet","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Praise"]}},"/api/praise/{id}":{"get":{"operationId":"PraiseController_findOne","summary":"Find praise item by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Praise item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Praise"}}}}},"tags":["Praise"]}},"/api/praise/forward":{"post":{"operationId":"PraiseController_forward","summary":"Forward praise item","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PraiseForwardInputDto"}}}},"responses":{"200":{"description":"Praise item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Praise"}}}},"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Praise"]}},"/api/useraccounts":{"post":{"operationId":"UserAccountsController_create","summary":"Create a UserAccount","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserAccountInputDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserAccountResponseDto"}}}}},"tags":["UserAccounts"]},"get":{"operationId":"UserAccountsController_findAll","summary":"UserAccount list","parameters":[{"name":"accountId","required":false,"in":"query","example":"098098098098098","schema":{"minLength":10,"maxLength":255,"type":"string"}},{"name":"name","required":false,"in":"query","example":"darth#6755","schema":{"minLength":2,"maxLength":32,"type":"string"}},{"name":"user","required":false,"in":"query","example":"63b428f7d9ca4f6ff5370d05","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAccount"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/export/json":{"get":{"operationId":"UserAccountsController_exportJson","summary":"Export userAccounts document to json","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/export/csv":{"get":{"operationId":"UserAccountsController_exportCsv","summary":"Export userAccounts document to csv","parameters":[],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/export/parquet":{"get":{"operationId":"UserAccountsController_exportParquet","summary":"Export userAccounts document to parquet","parameters":[],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["UserAccounts"]}},"/api/useraccounts/{id}":{"get":{"operationId":"UserAccountsController_findOne","summary":"Get a UserAccount.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"UserAccount","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAccount"}}}}},"tags":["UserAccounts"]},"patch":{"operationId":"UserAccountsController_update","summary":"Update UserAccount","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserAccountInputDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserAccountResponseDto"}}}}},"tags":["UserAccounts"]}},"/api/api-key":{"post":{"operationId":"ApiKeyController_createApiKey","summary":"Create API key","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyInputDto"}}}},"responses":{"201":{"description":"API key created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyResponseDto"}}}}},"tags":["API Key"]},"get":{"operationId":"ApiKeyController_findAll","summary":"List all API keys","parameters":[],"responses":{"200":{"description":"Array of API keys","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}}}}},"tags":["API Key"]}},"/api/api-key/{id}":{"get":{"operationId":"ApiKeyController_findOne","summary":"Get API key by ID","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"An API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}}},"tags":["API Key"]},"put":{"operationId":"ApiKeyController_updateApiKeyDescription","summary":"Update API key description","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDescriptionInputDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"201":{"description":"API key with updated description","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}}},"tags":["API Key"]},"delete":{"operationId":"ApiKeyController_revokeApiKey","summary":"Revoke API key","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"201":{"description":"Revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}}},"tags":["API Key"]}},"/api/auth/eth-signature/nonce":{"post":{"operationId":"EthSignatureController_nonce","summary":"Generates a nonce for the user and returns it","parameters":[],"requestBody":{"required":true,"description":"A request containing the user identityEthAddress","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NonceInputDto"}}}},"responses":{"201":{"description":"Nonce generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NonceResponseDto"}}}}},"tags":["Authentication"]}},"/api/auth/eth-signature/login":{"post":{"operationId":"EthSignatureController_login","summary":"Verifies a user's signature and returns a JWT token","parameters":[{"name":"host","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"A request containing the user identityEthAddress and signedlogin message. The signed message should be structured as follows: \n\n```SIGN THIS MESSAGE TO LOGIN TO PRAISE.\\n\\nADDRESS:\\n[identityEthAddress]\\n\\nNONCE:\\n[nonce]```","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginInputDto"}}}},"responses":{"201":{"description":"User authenticated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseDto"}}}}},"tags":["Authentication"]}},"/api/auth/eth-signature/refresh":{"post":{"operationId":"EthSignatureController_token","summary":"Verifies a refreshToken and returns a JWT token","parameters":[{"name":"host","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateTokenDto"}}}},"responses":{"201":{"description":"Tokens generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponseDto"}}}}},"tags":["Authentication"]}},"/api/communities":{"post":{"operationId":"CommunityController_create","summary":"Create a new community","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommunityInputDto"}}}},"responses":{"200":{"description":"Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]},"get":{"operationId":"CommunityController_findAll","parameters":[{"name":"limit","required":true,"in":"query","example":10,"schema":{"type":"number"}},{"name":"page","required":true,"in":"query","example":1,"schema":{"type":"number"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortType","required":false,"in":"query","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"name":"hostname","required":false,"in":"query","example":"hostname.givepraise.xyz","schema":{"type":"string"}}],"responses":{"200":{"description":"All communities","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityFindAllResponseDto"}}}}},"tags":["Communities"]}},"/api/communities/{id}":{"patch":{"operationId":"CommunityController_update","summary":"Update community","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommunityInputDto"}}}},"responses":{"200":{"description":"Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]},"get":{"operationId":"CommunityController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"A single Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]}},"/api/communities/isNameAvailable":{"get":{"operationId":"CommunityController_isNameAvailable","parameters":[{"name":"name","required":true,"in":"query","example":"test_12345","schema":{"type":"string"}}],"responses":{"200":{"description":"Checking whether the community name is available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IsNameAvailableResponseDto"}}}}},"tags":["Communities"]}},"/api/communities/current":{"get":{"operationId":"CommunityController_current","parameters":[],"responses":{"200":{"description":"Returns the current community, based on hostname","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]}},"/api/communities/{id}/discord/link":{"patch":{"operationId":"CommunityController_linkDiscord","summary":"Link discord to community","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkDiscordBotDto"}}}},"responses":{"200":{"description":"Community","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Community"}}}}},"tags":["Communities"]}},"/api/quantifications/export/json":{"get":{"operationId":"QuantificationsController_exportJson","summary":"Export quantifications document to json","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Quantifications"]}},"/api/quantifications/export/csv":{"get":{"operationId":"QuantificationsController_exportCsv","summary":"Export quantifications document to csv","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Quantifications"]}},"/api/quantifications/export/parquet":{"get":{"operationId":"QuantificationsController_exportParquet","summary":"Export quantifications document to parquet","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}},"tags":["Quantifications"]}},"/api/quantifications/multiple":{"patch":{"operationId":"QuantificationsController_quantifyMultiple","summary":"Quantify multiple praise items","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantifyMultipleInputDto"}}}},"responses":{"200":{"description":"Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Quantifications"]}},"/api/quantifications/{id}":{"patch":{"operationId":"QuantificationsController_quantify","summary":"Quantify praise item by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantifyInputDto"}}}},"responses":{"200":{"description":"Praise items","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Praise"}}}}}},"tags":["Quantifications"]}},"/api/reports":{"get":{"operationId":"ReportsController_listAllReports","summary":"List all report manifests","parameters":[],"responses":{"200":{"description":"A list of report manifests","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportManifestDto"}}}}},"500":{"description":"An error occurred while fetching report manifests"}},"tags":["Reports"]}},"/api/reports/receiverBio/{userAccountId}":{"get":{"operationId":"ReportsController_receiverBio","summary":"Get one AI generated receiver bio","parameters":[{"name":"userAccountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"A receiver bio","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["Reports"]}},"/api/reports/receiverLabels/{userAccountId}":{"get":{"operationId":"ReportsController_receiverLabels","summary":"AI generated labels describing a praise receiver.","parameters":[{"name":"userAccountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Comma separated list of labels, 7 max","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["Reports"]}}},"info":{"title":"Praise API","description":"","version":"1.0.0","contact":{}},"tags":[],"servers":[],"components":{"schemas":{"ActivateInputDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"accountId":{"type":"string","example":"darth#3455"},"signature":{"type":"string","example":"0xdb4bb91357b23083ec2a36dc1fe23e59b71434fc020542da7e983df206ed06611e275eb30e239508f9758c0608dca6cef5619c41b50a48f22bdb36a8dabc2d201c"}},"required":["identityEthAddress","accountId","signature"]},"UserNoUserAccountsDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20},"roles":{"type":"array","readOnly":true,"items":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","identityEthAddress","rewardsEthAddress","username","roles","createdAt","updatedAt"]},"UserAccount":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"$ref":"#/components/schemas/UserNoUserAccountsDto"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"User":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20},"roles":{"type":"array","readOnly":true,"items":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"accounts":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/UserAccount"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","identityEthAddress","rewardsEthAddress","username","roles","accounts","createdAt","updatedAt"]},"UserWithStatsDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20},"roles":{"type":"array","readOnly":true,"items":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"accounts":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/UserAccount"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"receivedTotalScore":{"type":"number","readOnly":true},"receivedTotalCount":{"type":"number","readOnly":true},"givenTotalScore":{"type":"number","readOnly":true},"givenTotalCount":{"type":"number","readOnly":true}},"required":["_id","identityEthAddress","rewardsEthAddress","username","roles","accounts","createdAt","updatedAt"]},"UpdateUserRequestDto":{"type":"object","properties":{"rewardsEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1","maxLength":42},"username":{"type":"string","example":"darth","maxLength":20}},"required":["rewardsEthAddress","username"]},"UpdateUserRoleInputDto":{"type":"object","properties":{"role":{"enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"],"type":"string"}},"required":["role"]},"Period":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"name":{"type":"string","example":"June 2021"},"status":{"type":"string","readOnly":true,"enum":["OPEN","QUANTIFY","CLOSED"]},"startDate":{"format":"date-time","type":"string","readOnly":true},"endDate":{"format":"date-time","type":"string","readOnly":true},"attestationsTxHash":{"type":"string","example":"0x46164b8581258eec4b4f44d626925953d0d7581514d9fd1335e3bd660d48e07c"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","name","status","startDate","endDate","createdAt","updatedAt"]},"PeriodPaginatedResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Period"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"Quantification":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"score":{"type":"number","readOnly":true,"example":144},"scoreRealized":{"type":"number","readOnly":true,"example":144},"dismissed":{"type":"boolean","readOnly":true,"example":true},"duplicatePraise":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"quantifier":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"praise":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"createdAt":{"format":"date-time","type":"string","readOnly":true,"example":"2021-06-01T00:00:00.000Z"},"updatedAt":{"format":"date-time","type":"string","readOnly":true,"example":"2021-06-01T00:00:00.000Z"}},"required":["_id","score","scoreRealized","dismissed","duplicatePraise","quantifier","praise","createdAt","updatedAt"]},"PeriodDetailsQuantifierDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"5f9f1b9b9b9b9b9b9b9b9b9b"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"username":{"type":"string","example":"darth","maxLength":20},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"finishedCount":{"type":"number","readOnly":true,"example":1},"praiseCount":{"type":"number","readOnly":true,"example":1},"quantifications":{"type":"array","items":{"$ref":"#/components/schemas/Quantification"}}},"required":["_id","identityEthAddress","username","createdAt","updatedAt","finishedCount","praiseCount","quantifications"]},"PeriodDetailsGiverReceiverDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"user":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"praiseCount":{"type":"number","readOnly":true,"example":"5"},"score":{"type":"number","readOnly":true,"example":144}},"required":["_id","accountId","name","platform","createdAt","updatedAt","user","praiseCount","score"]},"PeriodDetailsDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"name":{"type":"string","example":"June 2021"},"status":{"type":"string","readOnly":true,"enum":["OPEN","QUANTIFY","CLOSED"]},"startDate":{"format":"date-time","type":"string","readOnly":true},"endDate":{"format":"date-time","type":"string","readOnly":true},"attestationsTxHash":{"type":"string","example":"0x46164b8581258eec4b4f44d626925953d0d7581514d9fd1335e3bd660d48e07c"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"quantifiers":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/PeriodDetailsQuantifierDto"}},"givers":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/PeriodDetailsGiverReceiverDto"}},"receivers":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/PeriodDetailsGiverReceiverDto"}},"numberOfPraise":{"type":"number","readOnly":true,"example":543}},"required":["_id","name","status","startDate","endDate","createdAt","updatedAt","numberOfPraise"]},"CreatePeriodInputDto":{"type":"object","properties":{"name":{"type":"string","example":"June 2021"},"endDate":{"type":"string"}},"required":["name","endDate"]},"UpdatePeriodInputDto":{"type":"object","properties":{"name":{"type":"string","example":"June 2021"},"attestationsTxHash":{"type":"string","example":"0x46164b8581258eec4b4f44d626925953d0d7581514d9fd1335e3bd660d48e07c"},"endDate":{"type":"string"}}},"UserAccountWithUserRefDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"type":"string","readOnly":true,"example":"621f802b813dbdba9eeaf7d7"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"PraiseWithUserAccountsWithUserRefDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"score":{"type":"number","readOnly":true,"example":144},"receiver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccountWithUserRefDto"}]},"giver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccountWithUserRefDto"}]},"forwarder":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccountWithUserRefDto"}]},"quantifications":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Quantification"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","reasonRaw","reason","sourceId","sourceName","score","receiver","giver","quantifications","createdAt","updatedAt"]},"VerifyQuantifierPoolSizeDto":{"type":"object","properties":{"quantifierPoolSize":{"type":"number","description":"The number of quantifiers in the pool","example":10},"quantifierPoolSizeNeeded":{"type":"number","description":"The number of quantifiers needed in the pool","example":10},"quantifierPoolDeficitSize":{"type":"number","description":"","example":0}},"required":["quantifierPoolSize","quantifierPoolSizeNeeded","quantifierPoolDeficitSize"]},"ReplaceQuantifierInputDto":{"type":"object","properties":{"currentQuantifierId":{"type":"string","example":"639b178f19296ee0f2d0585d"},"newQuantifierId":{"type":"string","example":"639b178f19296ee0f2d05666"}},"required":["currentQuantifierId","newQuantifierId"]},"Praise":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"score":{"type":"number","readOnly":true,"example":144},"receiver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccount"}]},"giver":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/UserAccount"}]},"forwarder":{"$ref":"#/components/schemas/UserAccount"},"quantifications":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Quantification"}},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","reasonRaw","reason","sourceId","sourceName","score","receiver","giver","quantifications","createdAt","updatedAt"]},"ReplaceQuantifierResponseDto":{"type":"object","properties":{"praises":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Praise"}},"period":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/PeriodDetailsDto"}]}},"required":["praises","period"]},"UserAccountNoUserId":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"EventLogType":{"type":"object","properties":{"key":{"type":"string","enum":["PERMISSION","AUTHENTICATION","PERIOD","PRAISE","QUANTIFICATION","SETTING","USER_ACCOUNT","COMMUNITY"]},"label":{"type":"string","example":"An action that changes user permissions","maxLength":255},"description":{"type":"string","example":"A user's permissions were changed","maxLength":255}},"required":["key","label","description"]},"EventLog":{"type":"object","properties":{"_id":{"type":"string","example":"621f802b813dbdba9eeaf7d7"},"user":{"$ref":"#/components/schemas/User"},"useraccount":{"$ref":"#/components/schemas/UserAccountNoUserId"},"apiKey":{"type":"string","example":"621f802b813dbdba9eeaf7d7"},"period":{"type":"string","example":"621f802b813dbdba9eeaf7d7"},"type":{"$ref":"#/components/schemas/EventLogType"},"description":{"type":"string","example":"A description of the event "},"createdAt":{"format":"date-time","type":"string","example":"2023-03-01T22:51:20.012Z"},"updatedAt":{"format":"date-time","type":"string","example":"2023-03-01T22:51:20.012Z"}},"required":["_id","type","description","createdAt","updatedAt"]},"EventLogPaginatedResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/EventLog"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"Setting":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"621f802b813dbdbaddeaf799"},"key":{"type":"string","readOnly":true,"example":"SETTING_KEY"},"value":{"type":"string","example":"666","maxLength":512},"valueRealized":{"example":666,"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"boolean"},{"type":"number"},{"type":"array","items":{"type":"number"}}]},"defaultValue":{"type":"string","readOnly":true,"example":"555"},"type":{"type":"string","readOnly":true,"enum":["Integer","Float","String","Textarea","Boolean","IntegerList","StringList","Image","Radio","JSON"]},"label":{"type":"string","readOnly":true,"example":"Quantifiers Per Praise"},"description":{"type":"string","readOnly":true,"example":"How many redundant quantifications are assigned to each praise?"},"group":{"type":"number","readOnly":true,"example":0},"options":{"type":"string","readOnly":true},"subgroup":{"type":"number","readOnly":true,"example":0},"periodOverridable":{"type":"boolean","readOnly":true,"example":true}},"required":["_id","key","value","valueRealized","defaultValue","type","label","description","group","options","subgroup","periodOverridable"]},"SetSettingDto":{"type":"object","properties":{"value":{"type":"string","example":"666","maxLength":512}},"required":["value"]},"PeriodSetting":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"62291b7ea8b1619f78818524"},"period":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/Period"}]},"setting":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/Setting"}]},"value":{"type":"string","example":"666","maxLength":512},"valueRealized":{"example":666,"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"boolean"},{"type":"number"},{"type":"array","items":{"type":"number"}}]}},"required":["_id","period","setting","value","valueRealized"]},"SetPeriodSettingDto":{"type":"object","properties":{"value":{"type":"string","example":"666","maxLength":512}},"required":["value"]},"PraisePaginatedResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Praise"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"PraiseCreateInputDto":{"type":"object","properties":{"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"receiverIds":{"type":"array","items":{"type":"string"}},"giver":{"$ref":"#/components/schemas/UserAccount"},"score":{"type":"number"}},"required":["reasonRaw","reason","sourceId","sourceName","receiverIds","giver"]},"PraiseForwardInputDto":{"type":"object","properties":{"reasonRaw":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"reason":{"type":"string","readOnly":true,"example":"for making edits in the welcome text"},"sourceId":{"type":"string","readOnly":true,"example":"DISCORD:810180621930070088:810180622336262195"},"sourceName":{"type":"string","readOnly":true,"example":"DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"},"receiverIds":{"type":"array","items":{"type":"string"}},"giver":{"$ref":"#/components/schemas/UserAccount"},"forwarder":{"$ref":"#/components/schemas/UserAccount"},"score":{"type":"number"}},"required":["reasonRaw","reason","sourceId","sourceName","receiverIds","giver","forwarder"]},"CreateUserAccountInputDto":{"type":"object","properties":{"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"activateToken":{"type":"string","example":"jkhvuygi643jh35g53"},"user":{"type":"string","example":"63b428f7d9ca4f6ff5370d05"}},"required":["accountId","name","platform"]},"CreateUserAccountResponseDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"$ref":"#/components/schemas/UserNoUserAccountsDto"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"activateToken":{"type":"string","readOnly":true,"example":"jkhvuygi643jh35g53"}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"UpdateUserAccountInputDto":{"type":"object","properties":{"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"activateToken":{"type":"string","example":"jkhvuygi643jh35g53"},"user":{"type":"string","example":"63b428f7d9ca4f6ff5370d05"}}},"UpdateUserAccountResponseDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"63b428f7d9ca4f6ff5370d05"},"user":{"$ref":"#/components/schemas/UserNoUserAccountsDto"},"accountId":{"type":"string","example":"098098098098098","minLength":10,"maxLength":255},"name":{"type":"string","example":"darth#6755","minLength":2,"maxLength":32},"avatarId":{"type":"string","example":"098098098087097","minLength":10,"maxLength":255},"platform":{"type":"string","example":"DISCORD","minLength":4,"maxLength":255},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"activateToken":{"type":"string","readOnly":true,"example":"jkhvuygi643jh35g53"}},"required":["_id","accountId","name","platform","createdAt","updatedAt"]},"CreateApiKeyInputDto":{"type":"object","properties":{"description":{"type":"string","example":"My API Key"},"role":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]}},"required":["description","role"]},"CreateApiKeyResponseDto":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"name":{"type":"string","readOnly":true,"example":"89f7edbd"},"description":{"type":"string","example":"My API Key"},"hash":{"type":"string","readOnly":true,"example":"$2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i"},"role":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"key":{"type":"string","readOnly":true,"example":"1834a97caed67b244dd11fa5ef53aa74f13781ad0aea8148b8607d861d9f7535"}},"required":["_id","name","description","hash","role","createdAt","updatedAt","key"]},"ApiKey":{"type":"object","properties":{"_id":{"type":"string","readOnly":true,"example":"639b178f19296ee0f2d0585d"},"name":{"type":"string","readOnly":true,"example":"89f7edbd"},"description":{"type":"string","example":"My API Key"},"hash":{"type":"string","readOnly":true,"example":"$2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i"},"role":{"type":"string","enum":["USER","QUANTIFIER","FORWARDER","ADMIN","ROOT","API_KEY_READWRITE","API_KEY_READ","API_KEY_DISCORD_BOT","API_KEY_SETUP_WEB"]},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["_id","name","description","hash","role","createdAt","updatedAt"]},"UpdateDescriptionInputDto":{"type":"object","properties":{"description":{"type":"string","example":"My API Key"}},"required":["description"]},"NonceInputDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"}},"required":["identityEthAddress"]},"NonceResponseDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","readOnly":true,"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},"nonce":{"type":"string","readOnly":true,"example":"uh9h998u98uj09noj"}},"required":["identityEthAddress","nonce"]},"LoginInputDto":{"type":"object","properties":{"identityEthAddress":{"type":"string","example":"0xAAB27b150451726EC7738aa1d0A94505c8729bd1"},"signature":{"type":"string"}},"required":["identityEthAddress","signature"]},"LoginResponseDto":{"type":"object","properties":{"accessToken":{"type":"string","readOnly":true,"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA"},"refreshToken":{"type":"string","readOnly":true,"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA"},"identityEthAddress":{"type":"string","readOnly":true,"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},"tokenType":{"type":"string","readOnly":true,"example":"bearer"},"user":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/User"}]}},"required":["accessToken","refreshToken","identityEthAddress","tokenType","user"]},"GenerateTokenDto":{"type":"object","properties":{"refreshToken":{"type":"string","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA"}},"required":["refreshToken"]},"CreateCommunityInputDto":{"type":"object","properties":{"hostname":{"type":"string","example":"banklessdao.givepraise.xyz","maxLength":255},"name":{"type":"string","example":"BanklessDAO","minLength":4,"maxLength":20},"email":{"type":"string","example":"john.smith@banklessDao.com","maxLength":255},"creator":{"type":"string","example":"0x123..","maxLength":42},"owners":{"example":["0x123..","0x345.."],"type":"array","items":{"type":"string"}},"discordGuildId":{"type":"string","example":"0980987846534","maxLength":32}},"required":["hostname","name","email","creator","owners"]},"Community":{"type":"object","properties":{"_id":{"type":"string","example":"621f802b813dbdba9eeaf7b4"},"hostname":{"type":"string","example":"banklessdao.givepraise.xyz","maxLength":255},"name":{"type":"string","example":"BanklessDAO","minLength":4,"maxLength":20},"email":{"type":"string","example":"john.smith@banklessDao.com","maxLength":255},"creator":{"type":"string","example":"0x123..","maxLength":42},"owners":{"example":["0x123..","0x345.."],"type":"array","items":{"type":"string"}},"discordGuildId":{"type":"string","example":"0980987846534","maxLength":32},"discordLinkNonce":{"type":"string","example":"oiujoiuoo8u","maxLength":255},"isPublic":{"type":"boolean","example":true},"discordLinkState":{"type":"string","enum":["NOT_SET","PENDING","ACTIVE","DEACTIVE"]},"features":{"type":"object","example":{"attestations":true}}},"required":["_id","hostname","name","email","creator","owners","discordLinkNonce","isPublic","discordLinkState","features"]},"UpdateCommunityInputDto":{"type":"object","properties":{"hostname":{"type":"string","example":"banklessdao.givepraise.xyz","maxLength":255},"name":{"type":"string","example":"BanklessDAO","minLength":4,"maxLength":20},"email":{"type":"string","example":"john.smith@banklessDao.com","maxLength":255},"owners":{"example":["0x123..","0x345.."],"type":"array","items":{"type":"string"}}}},"CommunityFindAllResponseDto":{"type":"object","properties":{"totalDocs":{"type":"number","readOnly":true,"example":1200},"limit":{"type":"number","readOnly":true,"example":10},"totalPages":{"type":"number","readOnly":true,"example":12},"page":{"type":"number","readOnly":true,"example":2},"pagingCounter":{"type":"number","readOnly":true,"example":1},"hasPrevPage":{"type":"object","readOnly":true,"example":false},"hasNextPage":{"type":"object","readOnly":true,"example":true},"prevPage":{"type":"object","readOnly":true,"example":1},"nextPage":{"type":"object","readOnly":true,"example":3},"docs":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/Community"}},"meta":{"type":"object"}},"required":["totalDocs","limit","totalPages","pagingCounter","hasPrevPage","hasNextPage","docs"]},"IsNameAvailableResponseDto":{"type":"object","properties":{"available":{"type":"boolean","example":false}},"required":["available"]},"LinkDiscordBotDto":{"type":"object","properties":{"signedMessage":{"type":"string","example":"0xdb4bb91357b23083ec2a36dc1fe23e59b71434fc020542da7e983df206ed06611e275eb30e239508f9758c0608dca6cef5619c41b50a48f22bdb36a8dabc2d201c"}},"required":["signedMessage"]},"QuantifyInputDto":{"type":"object","properties":{"score":{"type":"number"},"dismissed":{"type":"boolean"},"duplicatePraise":{"type":"string","example":"639b178f19296ee0f2d0585d"}}},"QuantifyMultipleInputDto":{"type":"object","properties":{"params":{"$ref":"#/components/schemas/QuantifyInputDto"},"praiseIds":{"example":["639b178f19296ee0f2d0585d","639b178f19296ee0f2d0585e","639b178f19296ee0f2d0585f"],"type":"array","items":{"type":"string"}}},"required":["params","praiseIds"]},"ConfigurationValueItemsDto":{"type":"object","properties":{"type":{"type":"string","description":"Allowed array types","enum":["string","number"],"example":"string"}},"required":["type"]},"ConfigurationValueDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of the setting","enum":["string","number","boolean","array"],"example":"string"},"default":{"description":"Default value for the setting","example":666,"oneOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"string"}}]},"description":{"type":"string","description":"Description of the setting","example":"Description of the string setting"},"markdownDescription":{"type":"string","description":"Markdown description of the setting","example":"Description of the string setting"},"editPresentation":{"type":"string","description":"Edit presentation style","enum":["multiline"],"example":"multiline"},"order":{"type":"number","description":"Order of the setting","example":1},"enum":{"description":"Enum values for string type settings","example":["left","right"],"type":"array","items":{"type":"string"}},"items":{"description":"Defines the type of items for array settings","allOf":[{"$ref":"#/components/schemas/ConfigurationValueItemsDto"}]}},"required":["type","default","description"]},"ReportManifestDto":{"type":"object","properties":{"manifestUrl":{"type":"string","example":"https://raw.githubusercontent.com/givepraise/reports/main/reports/disperse-dist-straight-curve-with-ceiling/manifest.json"},"name":{"type":"string","example":"simple-report"},"displayName":{"type":"string","example":"Simple Report"},"description":{"type":"string","example":"A simple report."},"version":{"type":"string","example":"1.2.3"},"author":{"type":"string","example":"General Magic"},"publisher":{"type":"string","example":"general-magic"},"license":{"type":"string","example":"MIT"},"repository":{"type":"string","example":"https://github.com/givepraise/reports"},"bugs":{"type":"string","example":"https://github.com/givepraise/reports/issues"},"categories":{"example":["Basic reports","Praise receiver reports"],"type":"array","items":{"type":"string"}},"keywords":{"example":["toplist"],"type":"array","items":{"type":"string"}},"configuration":{"type":"object","description":"Configuration settings for the report","additionalProperties":{"oneOf":[{"$ref":"#/components/schemas/ConfigurationValueDto"}]}}},"required":["name","displayName","description","version","author","publisher","license","repository","bugs","categories","keywords","configuration"]}}}} \ No newline at end of file diff --git a/packages/api/src/praise/dto/praise-create-input.dto.ts b/packages/api/src/praise/dto/praise-create-input.dto.ts index 091acb9c5..838983f34 100644 --- a/packages/api/src/praise/dto/praise-create-input.dto.ts +++ b/packages/api/src/praise/dto/praise-create-input.dto.ts @@ -1,7 +1,7 @@ import { UserAccount } from '../../useraccounts/schemas/useraccounts.schema'; import { ApiProperty, PickType } from '@nestjs/swagger'; import { Type } from 'class-transformer'; -import { IsNotEmpty, ValidateNested } from 'class-validator'; +import { IsNotEmpty, IsOptional, ValidateNested } from 'class-validator'; import { Praise } from '../schemas/praise.schema'; export class PraiseCreateInputDto extends PickType(Praise, [ @@ -21,4 +21,8 @@ export class PraiseCreateInputDto extends PickType(Praise, [ @Type(() => UserAccount) @IsNotEmpty() giver: UserAccount; + + @ApiProperty({ required: false }) + @IsOptional() + score: number; } diff --git a/packages/api/src/praise/dto/praise-forward-input.dto.ts b/packages/api/src/praise/dto/praise-forward-input.dto.ts index 9bfdbbb5d..7fa0c4403 100644 --- a/packages/api/src/praise/dto/praise-forward-input.dto.ts +++ b/packages/api/src/praise/dto/praise-forward-input.dto.ts @@ -1,7 +1,7 @@ import { UserAccount } from '../../useraccounts/schemas/useraccounts.schema'; import { ApiProperty, PickType } from '@nestjs/swagger'; import { Type } from 'class-transformer'; -import { IsNotEmpty, ValidateNested } from 'class-validator'; +import { IsNotEmpty, IsOptional, ValidateNested } from 'class-validator'; import { PraiseCreateInputDto } from './praise-create-input.dto'; export class PraiseForwardInputDto extends PickType(PraiseCreateInputDto, [ @@ -19,4 +19,8 @@ export class PraiseForwardInputDto extends PickType(PraiseCreateInputDto, [ @Type(() => UserAccount) @IsNotEmpty() forwarder: UserAccount; + + @ApiProperty({ required: false }) + @IsOptional() + score: number; } From 814650ec53ba67c82c8315ded11880da36813650 Mon Sep 17 00:00:00 2001 From: Kristofer Date: Thu, 14 Dec 2023 16:03:47 +0100 Subject: [PATCH 4/6] Add scoring support to api endpoint --- .../api/src/praise/services/praise.service.ts | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/api/src/praise/services/praise.service.ts b/packages/api/src/praise/services/praise.service.ts index cabb5d9b7..d6e1bc629 100644 --- a/packages/api/src/praise/services/praise.service.ts +++ b/packages/api/src/praise/services/praise.service.ts @@ -220,8 +220,15 @@ export class PraiseService { data: PraiseCreateInputDto | PraiseForwardInputDto, ): Promise => { let forwarder: UserAccount | undefined; - const { giver, receiverIds, reason, reasonRaw, sourceId, sourceName } = - data; + const { + giver, + receiverIds, + reason, + reasonRaw, + sourceId, + sourceName, + score, + } = data; if ('forwarder' in data) { const { forwarder: forwarderFromDto } = data as PraiseForwardInputDto; forwarder = forwarderFromDto; @@ -274,6 +281,16 @@ export class PraiseService { }) .lean(); + const directQuantificationEnanbledSetting = + (await this.settingsService.findOneByKey( + 'DISCORD_BOT_DIRECT_PRAISE_QUANTIFICATION_ENABLED', + )) as Setting; + + const directQuantificationEnabled = + directQuantificationEnanbledSetting?.value === 'true' && + score && + score > 0; + const newPraise = await this.praiseModel.insertMany( receivers.map((receiver) => ({ reason, @@ -283,6 +300,7 @@ export class PraiseService { sourceId, sourceName, receiver: receiver._id, + score: directQuantificationEnabled ? score : undefined, })), ); @@ -290,6 +308,19 @@ export class PraiseService { this.findOneById(praise._id), ); - return Promise.all(findPraisePromises); + const createdPraise = Promise.all(findPraisePromises); + + if (directQuantificationEnabled) { + await this.quantificationModel.insertMany( + newPraise.map((praise) => ({ + score: data.score, + scoreRealized: data.score, + praise: praise._id, + quantifier: giverAccount.user, + })), + ); + } + + return createdPraise; }; } From 6adb4ac708a22fe1e68222d0b6f30764e3d3f2ad Mon Sep 17 00:00:00 2001 From: Kristofer Date: Thu, 14 Dec 2023 16:04:12 +0100 Subject: [PATCH 5/6] Add direct praise quantification support to the Discord bot --- packages/discord-bot/src/handlers/praise.ts | 80 ++++++++++++++++--- .../discord-bot/src/utils/createPraise.ts | 5 +- packages/discord-bot/src/utils/givePraise.ts | 6 +- 3 files changed, 77 insertions(+), 14 deletions(-) diff --git a/packages/discord-bot/src/handlers/praise.ts b/packages/discord-bot/src/handlers/praise.ts index 11c99ca99..bc6e66529 100644 --- a/packages/discord-bot/src/handlers/praise.ts +++ b/packages/discord-bot/src/handlers/praise.ts @@ -3,6 +3,8 @@ import { GuildMember, ActionRowBuilder, ButtonBuilder, + StringSelectMenuBuilder, + StringSelectMenuOptionBuilder, } from 'discord.js'; import { parseReceivers } from '../utils/parseReceivers'; @@ -15,6 +17,7 @@ import { getUserAccount } from '../utils/getUserAccount'; import { logger } from '../utils/logger'; import { sendActivationMessage } from '../utils/sendActivationMessage'; import { givePraise } from '../utils/givePraise'; +import { getSetting } from '../utils/settingsUtil'; /** * Execute command /praise @@ -28,7 +31,7 @@ export const praiseHandler: CommandHandler = async ( host, responseUrl ) => { - if (!responseUrl) return; + if (!responseUrl || !interaction) return; const { guild, member } = interaction; @@ -160,17 +163,72 @@ export const praiseHandler: CommandHandler = async ( ); } } else { - await givePraise( - interaction, - guild, - member as GuildMember, - giverAccount, - parsedReceivers, - receiverOptions, - reason, - host, - responseUrl + const directQuantificationEnanbled = (await getSetting( + 'DISCORD_BOT_DIRECT_PRAISE_QUANTIFICATION_ENABLED' + )) as boolean; + + // If direct quantification is disabled, give praise directly + // This is the default behavior + if (!directQuantificationEnanbled) { + await givePraise( + interaction, + guild, + member as GuildMember, + giverAccount, + parsedReceivers, + receiverOptions, + reason, + host, + responseUrl + ); + return; + } + + // If direct quantification is enabled, allow user to select a score from a dropdown + const allowedScores = (await getSetting( + 'PRAISE_QUANTIFY_ALLOWED_VALUES' + )) as number[]; + + const select = new StringSelectMenuBuilder() + .setCustomId('score') + .setPlaceholder('Select an impact score!') + .addOptions( + allowedScores.map((score) => + new StringSelectMenuOptionBuilder() + .setLabel(score.toString()) + .setValue(score.toString()) + ) + ); + + const row = new ActionRowBuilder().addComponents( + select ); + + await interaction.followUp({ + content: 'Select an impact score!', + components: [row], + }); + + const collector = interaction.channel?.createMessageComponentCollector({ + componentType: ComponentType.StringSelect, + time: 15000, + }); + + collector?.on('collect', async (menuInteraction) => { + const score = Number(menuInteraction.values[0]); + await givePraise( + interaction, + guild, + member as GuildMember, + giverAccount, + parsedReceivers, + receiverOptions, + reason, + host, + responseUrl, + score + ); + }); } } catch (err) { // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/discord-bot/src/utils/createPraise.ts b/packages/discord-bot/src/utils/createPraise.ts index b5ff9985d..a7db83e17 100644 --- a/packages/discord-bot/src/utils/createPraise.ts +++ b/packages/discord-bot/src/utils/createPraise.ts @@ -18,6 +18,7 @@ interface PraiseCreateInputDto { receiverIds: string[]; sourceId: string; sourceName: string; + score?: number; } export const createPraise = async ( @@ -25,7 +26,8 @@ export const createPraise = async ( giverAccount: UserAccount, receiverAccounts: UserAccount[], reason: string, - host: string + host: string, + score?: number ): Promise => { const { channel, guild } = interaction; if (!channel || !guild || channel.type === ChannelType.DM) return []; @@ -52,6 +54,7 @@ export const createPraise = async ( sourceName: `DISCORD:${encodeURIComponent(guild.name)}:${encodeURIComponent( channelName )}`, + score: score, }; const response = await apiPost( diff --git a/packages/discord-bot/src/utils/givePraise.ts b/packages/discord-bot/src/utils/givePraise.ts index 7a9b913f2..98a951715 100644 --- a/packages/discord-bot/src/utils/givePraise.ts +++ b/packages/discord-bot/src/utils/givePraise.ts @@ -22,7 +22,8 @@ export const givePraise = async ( receiverOptions: string, reason: string, host: string, - responseUrl: string + responseUrl: string, + score?: number ): Promise => { if ( !parsedReceivers.validReceiverIds || @@ -88,7 +89,8 @@ export const givePraise = async ( giverAccount, receivers.map((receiver) => receiver.userAccount), reason, - host + host, + score ); } else if (warnSelfPraise) { await ephemeralWarning(interaction, 'SELF_PRAISE_WARNING', host); From d8ef1e0ed276cb31dc2c415c9fd24e92a942ecb3 Mon Sep 17 00:00:00 2001 From: kristoferlund Date: Thu, 14 Dec 2023 15:17:01 +0000 Subject: [PATCH 6/6] Build openapi schema --- packages/api-types/out/schema.ts | 732 +++++++++++++++++-------------- 1 file changed, 413 insertions(+), 319 deletions(-) diff --git a/packages/api-types/out/schema.ts b/packages/api-types/out/schema.ts index 61ba1d7cf..1eaa110e9 100644 --- a/packages/api-types/out/schema.ts +++ b/packages/api-types/out/schema.ts @@ -3,257 +3,256 @@ * Do not make direct changes to the file. */ - export interface paths { - "/api/activate": { + '/api/activate': { /** Activate a user account in order to be able to give praise and receive rewards. Activation a user account creates a new User object or adds user account to User if it already exists. */ - post: operations["ActivateController_activate"]; + post: operations['ActivateController_activate']; }; - "/api/users/export/json": { + '/api/users/export/json': { /** Export users document to json */ - get: operations["UsersController_exportJson"]; + get: operations['UsersController_exportJson']; }; - "/api/users/export/csv": { + '/api/users/export/csv': { /** Export users document to csv */ - get: operations["UsersController_exportCsv"]; + get: operations['UsersController_exportCsv']; }; - "/api/users/export/parquet": { + '/api/users/export/parquet': { /** Export users document to parquet */ - get: operations["UsersController_exportParquet"]; + get: operations['UsersController_exportParquet']; }; - "/api/users": { - get: operations["UsersController_findAll"]; + '/api/users': { + get: operations['UsersController_findAll']; }; - "/api/users/{id}": { - get: operations["UsersController_findOne"]; + '/api/users/{id}': { + get: operations['UsersController_findOne']; /** Updates a user */ - patch: operations["UsersController_update"]; + patch: operations['UsersController_update']; }; - "/api/users/{id}/addRole": { - patch: operations["UsersController_addRole"]; + '/api/users/{id}/addRole': { + patch: operations['UsersController_addRole']; }; - "/api/users/{id}/removeRole": { - patch: operations["UsersController_removeRole"]; + '/api/users/{id}/removeRole': { + patch: operations['UsersController_removeRole']; }; - "/api/periods/export/json": { + '/api/periods/export/json': { /** Export periods document to json */ - get: operations["PeriodsController_exportJson"]; + get: operations['PeriodsController_exportJson']; }; - "/api/periods/export/csv": { + '/api/periods/export/csv': { /** Export periods document to csv */ - get: operations["PeriodsController_exportCsv"]; + get: operations['PeriodsController_exportCsv']; }; - "/api/periods/export/parquet": { + '/api/periods/export/parquet': { /** Export periods document to parquet */ - get: operations["PeriodsController_exportParquet"]; + get: operations['PeriodsController_exportParquet']; }; - "/api/periods": { + '/api/periods': { /** List all periods */ - get: operations["PeriodsController_findAllPaginated"]; + get: operations['PeriodsController_findAllPaginated']; /** Create a new period */ - post: operations["PeriodsController_create"]; + post: operations['PeriodsController_create']; }; - "/api/periods/{id}": { + '/api/periods/{id}': { /** Find period by id */ - get: operations["PeriodsController_findOne"]; + get: operations['PeriodsController_findOne']; /** Update a period */ - patch: operations["PeriodsController_update"]; + patch: operations['PeriodsController_update']; }; - "/api/periods/{id}/close": { + '/api/periods/{id}/close': { /** Close a period */ - patch: operations["PeriodsController_close"]; + patch: operations['PeriodsController_close']; }; - "/api/periods/{id}/praise": { + '/api/periods/{id}/praise': { /** Fetch all Praise in a period */ - get: operations["PeriodsController_praise"]; + get: operations['PeriodsController_praise']; }; - "/api/periods/{periodId}/praise/receiver/{receiverId}": { + '/api/periods/{periodId}/praise/receiver/{receiverId}': { /** Fetch all Praise in a period for a given receiver */ - get: operations["PeriodsController_praiseByReceiver"]; + get: operations['PeriodsController_praiseByReceiver']; }; - "/api/periods/{periodId}/praise/giver/{giverId}": { + '/api/periods/{periodId}/praise/giver/{giverId}': { /** Fetch all Praise in a period for a given giver */ - get: operations["PeriodsController_praiseByGiver"]; + get: operations['PeriodsController_praiseByGiver']; }; - "/api/periods/{periodId}/praise/quantifier/{quantifierId}": { + '/api/periods/{periodId}/praise/quantifier/{quantifierId}': { /** Fetch all Praise in a period for a given quantifier */ - get: operations["PeriodsController_praiseByQuantifier"]; + get: operations['PeriodsController_praiseByQuantifier']; }; - "/api/periods/{id}/verifyQuantifierPoolSize": { + '/api/periods/{id}/verifyQuantifierPoolSize': { /** Verify quantifier pool size */ - get: operations["PeriodsController_verifyQuantifierPoolSize"]; + get: operations['PeriodsController_verifyQuantifierPoolSize']; }; - "/api/periods/{id}/assignQuantifiers": { + '/api/periods/{id}/assignQuantifiers': { /** Assign quantifiers to period */ - patch: operations["PeriodsController_assignQuantifiers"]; + patch: operations['PeriodsController_assignQuantifiers']; }; - "/api/periods/{id}/replaceQuantifier": { + '/api/periods/{id}/replaceQuantifier': { /** Replace quantifier in period */ - patch: operations["PeriodsController_replaceQuantifier"]; + patch: operations['PeriodsController_replaceQuantifier']; }; - "/api/event-log": { + '/api/event-log': { /** List event logs, paginated results */ - get: operations["EventLogController_findAllPaginated"]; + get: operations['EventLogController_findAllPaginated']; }; - "/api/event-log/types": { + '/api/event-log/types': { /** List event log types */ - get: operations["EventLogController_types"]; + get: operations['EventLogController_types']; }; - "/api/settings": { + '/api/settings': { /** List all settings. */ - get: operations["SettingsController_findAll"]; + get: operations['SettingsController_findAll']; }; - "/api/settings/{id}": { + '/api/settings/{id}': { /** Get a setting. */ - get: operations["SettingsController_findOne"]; + get: operations['SettingsController_findOne']; /** Set a value for a setting. */ - patch: operations["SettingsController_set"]; + patch: operations['SettingsController_set']; }; - "/api/settings/{id}/upload": { + '/api/settings/{id}/upload': { /** Upload a file for a setting */ - patch: operations["SettingsController_setWithUpload"]; + patch: operations['SettingsController_setWithUpload']; }; - "/api/settings/uploads/{file}": { + '/api/settings/uploads/{file}': { /** Serve an uploaded settings file. */ - get: operations["SettingsController_serveUpload"]; + get: operations['SettingsController_serveUpload']; }; - "/api/periods/{periodId}/settings": { + '/api/periods/{periodId}/settings': { /** List all period settings. */ - get: operations["PeriodSettingsController_findAll"]; + get: operations['PeriodSettingsController_findAll']; }; - "/api/periods/{periodId}/settings/{settingId}": { + '/api/periods/{periodId}/settings/{settingId}': { /** Get a period setting. */ - get: operations["PeriodSettingsController_findOne"]; + get: operations['PeriodSettingsController_findOne']; /** Set value for a period setting. */ - patch: operations["PeriodSettingsController_set"]; + patch: operations['PeriodSettingsController_set']; }; - "/api/praise": { + '/api/praise': { /** List praise items, paginated results */ - get: operations["PraiseController_findAllPaginated"]; + get: operations['PraiseController_findAllPaginated']; /** Create praise item */ - post: operations["PraiseController_praise"]; + post: operations['PraiseController_praise']; }; - "/api/praise/export/json": { + '/api/praise/export/json': { /** Export praise document to json */ - get: operations["PraiseController_exportJson"]; + get: operations['PraiseController_exportJson']; }; - "/api/praise/export/csv": { + '/api/praise/export/csv': { /** Export praise document to csv */ - get: operations["PraiseController_exportCsv"]; + get: operations['PraiseController_exportCsv']; }; - "/api/praise/export/parquet": { + '/api/praise/export/parquet': { /** Export praise document to parquet */ - get: operations["PraiseController_exportParquet"]; + get: operations['PraiseController_exportParquet']; }; - "/api/praise/{id}": { + '/api/praise/{id}': { /** Find praise item by id */ - get: operations["PraiseController_findOne"]; + get: operations['PraiseController_findOne']; }; - "/api/praise/forward": { + '/api/praise/forward': { /** Forward praise item */ - post: operations["PraiseController_forward"]; + post: operations['PraiseController_forward']; }; - "/api/useraccounts": { + '/api/useraccounts': { /** UserAccount list */ - get: operations["UserAccountsController_findAll"]; + get: operations['UserAccountsController_findAll']; /** Create a UserAccount */ - post: operations["UserAccountsController_create"]; + post: operations['UserAccountsController_create']; }; - "/api/useraccounts/export/json": { + '/api/useraccounts/export/json': { /** Export userAccounts document to json */ - get: operations["UserAccountsController_exportJson"]; + get: operations['UserAccountsController_exportJson']; }; - "/api/useraccounts/export/csv": { + '/api/useraccounts/export/csv': { /** Export userAccounts document to csv */ - get: operations["UserAccountsController_exportCsv"]; + get: operations['UserAccountsController_exportCsv']; }; - "/api/useraccounts/export/parquet": { + '/api/useraccounts/export/parquet': { /** Export userAccounts document to parquet */ - get: operations["UserAccountsController_exportParquet"]; + get: operations['UserAccountsController_exportParquet']; }; - "/api/useraccounts/{id}": { + '/api/useraccounts/{id}': { /** Get a UserAccount. */ - get: operations["UserAccountsController_findOne"]; + get: operations['UserAccountsController_findOne']; /** Update UserAccount */ - patch: operations["UserAccountsController_update"]; + patch: operations['UserAccountsController_update']; }; - "/api/api-key": { + '/api/api-key': { /** List all API keys */ - get: operations["ApiKeyController_findAll"]; + get: operations['ApiKeyController_findAll']; /** Create API key */ - post: operations["ApiKeyController_createApiKey"]; + post: operations['ApiKeyController_createApiKey']; }; - "/api/api-key/{id}": { + '/api/api-key/{id}': { /** Get API key by ID */ - get: operations["ApiKeyController_findOne"]; + get: operations['ApiKeyController_findOne']; /** Update API key description */ - put: operations["ApiKeyController_updateApiKeyDescription"]; + put: operations['ApiKeyController_updateApiKeyDescription']; /** Revoke API key */ - delete: operations["ApiKeyController_revokeApiKey"]; + delete: operations['ApiKeyController_revokeApiKey']; }; - "/api/auth/eth-signature/nonce": { + '/api/auth/eth-signature/nonce': { /** Generates a nonce for the user and returns it */ - post: operations["EthSignatureController_nonce"]; + post: operations['EthSignatureController_nonce']; }; - "/api/auth/eth-signature/login": { + '/api/auth/eth-signature/login': { /** Verifies a user's signature and returns a JWT token */ - post: operations["EthSignatureController_login"]; + post: operations['EthSignatureController_login']; }; - "/api/auth/eth-signature/refresh": { + '/api/auth/eth-signature/refresh': { /** Verifies a refreshToken and returns a JWT token */ - post: operations["EthSignatureController_token"]; + post: operations['EthSignatureController_token']; }; - "/api/communities": { - get: operations["CommunityController_findAll"]; + '/api/communities': { + get: operations['CommunityController_findAll']; /** Create a new community */ - post: operations["CommunityController_create"]; + post: operations['CommunityController_create']; }; - "/api/communities/{id}": { - get: operations["CommunityController_findOne"]; + '/api/communities/{id}': { + get: operations['CommunityController_findOne']; /** Update community */ - patch: operations["CommunityController_update"]; + patch: operations['CommunityController_update']; }; - "/api/communities/isNameAvailable": { - get: operations["CommunityController_isNameAvailable"]; + '/api/communities/isNameAvailable': { + get: operations['CommunityController_isNameAvailable']; }; - "/api/communities/current": { - get: operations["CommunityController_current"]; + '/api/communities/current': { + get: operations['CommunityController_current']; }; - "/api/communities/{id}/discord/link": { + '/api/communities/{id}/discord/link': { /** Link discord to community */ - patch: operations["CommunityController_linkDiscord"]; + patch: operations['CommunityController_linkDiscord']; }; - "/api/quantifications/export/json": { + '/api/quantifications/export/json': { /** Export quantifications document to json */ - get: operations["QuantificationsController_exportJson"]; + get: operations['QuantificationsController_exportJson']; }; - "/api/quantifications/export/csv": { + '/api/quantifications/export/csv': { /** Export quantifications document to csv */ - get: operations["QuantificationsController_exportCsv"]; + get: operations['QuantificationsController_exportCsv']; }; - "/api/quantifications/export/parquet": { + '/api/quantifications/export/parquet': { /** Export quantifications document to parquet */ - get: operations["QuantificationsController_exportParquet"]; + get: operations['QuantificationsController_exportParquet']; }; - "/api/quantifications/multiple": { + '/api/quantifications/multiple': { /** Quantify multiple praise items */ - patch: operations["QuantificationsController_quantifyMultiple"]; + patch: operations['QuantificationsController_quantifyMultiple']; }; - "/api/quantifications/{id}": { + '/api/quantifications/{id}': { /** Quantify praise item by id */ - patch: operations["QuantificationsController_quantify"]; + patch: operations['QuantificationsController_quantify']; }; - "/api/reports": { + '/api/reports': { /** List all report manifests */ - get: operations["ReportsController_listAllReports"]; + get: operations['ReportsController_listAllReports']; }; - "/api/reports/receiverBio/{userAccountId}": { + '/api/reports/receiverBio/{userAccountId}': { /** Get one AI generated receiver bio */ - get: operations["ReportsController_receiverBio"]; + get: operations['ReportsController_receiverBio']; }; - "/api/reports/receiverLabels/{userAccountId}": { + '/api/reports/receiverLabels/{userAccountId}': { /** AI generated labels describing a praise receiver. */ - get: operations["ReportsController_receiverLabels"]; + get: operations['ReportsController_receiverLabels']; }; } @@ -278,7 +277,17 @@ export interface components { rewardsEthAddress: string; /** @example darth */ username: string; - roles: readonly ("USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB")[]; + roles: readonly ( + | 'USER' + | 'QUANTIFIER' + | 'FORWARDER' + | 'ADMIN' + | 'ROOT' + | 'API_KEY_READWRITE' + | 'API_KEY_READ' + | 'API_KEY_DISCORD_BOT' + | 'API_KEY_SETUP_WEB' + )[]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -287,7 +296,7 @@ export interface components { UserAccount: { /** @example 63b428f7d9ca4f6ff5370d05 */ _id: string; - user?: components["schemas"]["UserNoUserAccountsDto"]; + user?: components['schemas']['UserNoUserAccountsDto']; /** @example 098098098098098 */ accountId: string; /** @example darth#6755 */ @@ -310,8 +319,18 @@ export interface components { rewardsEthAddress: string; /** @example darth */ username: string; - roles: readonly ("USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB")[]; - accounts: readonly (components["schemas"]["UserAccount"])[]; + roles: readonly ( + | 'USER' + | 'QUANTIFIER' + | 'FORWARDER' + | 'ADMIN' + | 'ROOT' + | 'API_KEY_READWRITE' + | 'API_KEY_READ' + | 'API_KEY_DISCORD_BOT' + | 'API_KEY_SETUP_WEB' + )[]; + accounts: readonly components['schemas']['UserAccount'][]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -326,8 +345,18 @@ export interface components { rewardsEthAddress: string; /** @example darth */ username: string; - roles: readonly ("USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB")[]; - accounts: readonly (components["schemas"]["UserAccount"])[]; + roles: readonly ( + | 'USER' + | 'QUANTIFIER' + | 'FORWARDER' + | 'ADMIN' + | 'ROOT' + | 'API_KEY_READWRITE' + | 'API_KEY_READ' + | 'API_KEY_DISCORD_BOT' + | 'API_KEY_SETUP_WEB' + )[]; + accounts: readonly components['schemas']['UserAccount'][]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -345,7 +374,16 @@ export interface components { }; UpdateUserRoleInputDto: { /** @enum {string} */ - role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; + role: + | 'USER' + | 'QUANTIFIER' + | 'FORWARDER' + | 'ADMIN' + | 'ROOT' + | 'API_KEY_READWRITE' + | 'API_KEY_READ' + | 'API_KEY_DISCORD_BOT' + | 'API_KEY_SETUP_WEB'; }; Period: { /** @example 621f802b813dbdba9eeaf7d7 */ @@ -353,7 +391,7 @@ export interface components { /** @example June 2021 */ name: string; /** @enum {string} */ - status: "OPEN" | "QUANTIFY" | "CLOSED"; + status: 'OPEN' | 'QUANTIFY' | 'CLOSED'; /** Format: date-time */ startDate: string; /** Format: date-time */ @@ -384,7 +422,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly (components["schemas"]["Period"])[]; + docs: readonly components['schemas']['Period'][]; meta?: Record; }; Quantification: { @@ -403,12 +441,12 @@ export interface components { /** @example 639b178f19296ee0f2d0585d */ praise: string; /** - * Format: date-time + * Format: date-time * @example 2021-06-01T00:00:00.000Z */ createdAt: string; /** - * Format: date-time + * Format: date-time * @example 2021-06-01T00:00:00.000Z */ updatedAt: string; @@ -428,7 +466,7 @@ export interface components { finishedCount: number; /** @example 1 */ praiseCount: number; - quantifications: (components["schemas"]["Quantification"])[]; + quantifications: components['schemas']['Quantification'][]; }; PeriodDetailsGiverReceiverDto: { /** @example 63b428f7d9ca4f6ff5370d05 */ @@ -458,7 +496,7 @@ export interface components { /** @example June 2021 */ name: string; /** @enum {string} */ - status: "OPEN" | "QUANTIFY" | "CLOSED"; + status: 'OPEN' | 'QUANTIFY' | 'CLOSED'; /** Format: date-time */ startDate: string; /** Format: date-time */ @@ -469,9 +507,9 @@ export interface components { createdAt: string; /** Format: date-time */ updatedAt: string; - quantifiers?: readonly (components["schemas"]["PeriodDetailsQuantifierDto"])[]; - givers?: readonly (components["schemas"]["PeriodDetailsGiverReceiverDto"])[]; - receivers?: readonly (components["schemas"]["PeriodDetailsGiverReceiverDto"])[]; + quantifiers?: readonly components['schemas']['PeriodDetailsQuantifierDto'][]; + givers?: readonly components['schemas']['PeriodDetailsGiverReceiverDto'][]; + receivers?: readonly components['schemas']['PeriodDetailsGiverReceiverDto'][]; /** @example 543 */ numberOfPraise: number; }; @@ -518,10 +556,10 @@ export interface components { sourceName: string; /** @example 144 */ score: number; - receiver: components["schemas"]["UserAccountWithUserRefDto"]; - giver: components["schemas"]["UserAccountWithUserRefDto"]; - forwarder?: components["schemas"]["UserAccountWithUserRefDto"]; - quantifications: readonly (components["schemas"]["Quantification"])[]; + receiver: components['schemas']['UserAccountWithUserRefDto']; + giver: components['schemas']['UserAccountWithUserRefDto']; + forwarder?: components['schemas']['UserAccountWithUserRefDto']; + quantifications: readonly components['schemas']['Quantification'][]; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -529,12 +567,12 @@ export interface components { }; VerifyQuantifierPoolSizeDto: { /** - * @description The number of quantifiers in the pool + * @description The number of quantifiers in the pool * @example 10 */ quantifierPoolSize: number; /** - * @description The number of quantifiers needed in the pool + * @description The number of quantifiers needed in the pool * @example 10 */ quantifierPoolSizeNeeded: number; @@ -560,18 +598,18 @@ export interface components { sourceName: string; /** @example 144 */ score: number; - receiver: components["schemas"]["UserAccount"]; - giver: components["schemas"]["UserAccount"]; - forwarder?: components["schemas"]["UserAccount"]; - quantifications: readonly (components["schemas"]["Quantification"])[]; + receiver: components['schemas']['UserAccount']; + giver: components['schemas']['UserAccount']; + forwarder?: components['schemas']['UserAccount']; + quantifications: readonly components['schemas']['Quantification'][]; /** Format: date-time */ createdAt: string; /** Format: date-time */ updatedAt: string; }; ReplaceQuantifierResponseDto: { - praises: readonly (components["schemas"]["Praise"])[]; - period: components["schemas"]["PeriodDetailsDto"]; + praises: readonly components['schemas']['Praise'][]; + period: components['schemas']['PeriodDetailsDto']; }; UserAccountNoUserId: { /** @example 63b428f7d9ca4f6ff5370d05 */ @@ -591,7 +629,15 @@ export interface components { }; EventLogType: { /** @enum {string} */ - key: "PERMISSION" | "AUTHENTICATION" | "PERIOD" | "PRAISE" | "QUANTIFICATION" | "SETTING" | "USER_ACCOUNT" | "COMMUNITY"; + key: + | 'PERMISSION' + | 'AUTHENTICATION' + | 'PERIOD' + | 'PRAISE' + | 'QUANTIFICATION' + | 'SETTING' + | 'USER_ACCOUNT' + | 'COMMUNITY'; /** @example An action that changes user permissions */ label: string; /** @example A user's permissions were changed */ @@ -600,22 +646,22 @@ export interface components { EventLog: { /** @example 621f802b813dbdba9eeaf7d7 */ _id: string; - user?: components["schemas"]["User"]; - useraccount?: components["schemas"]["UserAccountNoUserId"]; + user?: components['schemas']['User']; + useraccount?: components['schemas']['UserAccountNoUserId']; /** @example 621f802b813dbdba9eeaf7d7 */ apiKey?: string; /** @example 621f802b813dbdba9eeaf7d7 */ period?: string; - type: components["schemas"]["EventLogType"]; + type: components['schemas']['EventLogType']; /** @example A description of the event */ description: string; /** - * Format: date-time + * Format: date-time * @example 2023-03-01T22:51:20.012Z */ createdAt: string; /** - * Format: date-time + * Format: date-time * @example 2023-03-01T22:51:20.012Z */ updatedAt: string; @@ -639,7 +685,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly (components["schemas"]["EventLog"])[]; + docs: readonly components['schemas']['EventLog'][]; meta?: Record; }; Setting: { @@ -650,11 +696,21 @@ export interface components { /** @example 666 */ value: string; /** @example 666 */ - valueRealized: string | (string)[] | boolean | number | (number)[]; + valueRealized: string | string[] | boolean | number | number[]; /** @example 555 */ defaultValue: string; /** @enum {string} */ - type: "Integer" | "Float" | "String" | "Textarea" | "Boolean" | "IntegerList" | "StringList" | "Image" | "Radio" | "JSON"; + type: + | 'Integer' + | 'Float' + | 'String' + | 'Textarea' + | 'Boolean' + | 'IntegerList' + | 'StringList' + | 'Image' + | 'Radio' + | 'JSON'; /** @example Quantifiers Per Praise */ label: string; /** @example How many redundant quantifications are assigned to each praise? */ @@ -674,12 +730,12 @@ export interface components { PeriodSetting: { /** @example 62291b7ea8b1619f78818524 */ _id: string; - period: components["schemas"]["Period"]; - setting: components["schemas"]["Setting"]; + period: components['schemas']['Period']; + setting: components['schemas']['Setting']; /** @example 666 */ value: string; /** @example 666 */ - valueRealized: string | (string)[] | boolean | number | (number)[]; + valueRealized: string | string[] | boolean | number | number[]; }; SetPeriodSettingDto: { /** @example 666 */ @@ -704,7 +760,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly (components["schemas"]["Praise"])[]; + docs: readonly components['schemas']['Praise'][]; meta?: Record; }; PraiseCreateInputDto: { @@ -716,8 +772,8 @@ export interface components { sourceId: string; /** @example DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise */ sourceName: string; - receiverIds: (string)[]; - giver: components["schemas"]["UserAccount"]; + receiverIds: string[]; + giver: components['schemas']['UserAccount']; score?: number; }; PraiseForwardInputDto: { @@ -729,9 +785,9 @@ export interface components { sourceId: string; /** @example DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise */ sourceName: string; - receiverIds: (string)[]; - giver: components["schemas"]["UserAccount"]; - forwarder: components["schemas"]["UserAccount"]; + receiverIds: string[]; + giver: components['schemas']['UserAccount']; + forwarder: components['schemas']['UserAccount']; score?: number; }; CreateUserAccountInputDto: { @@ -751,7 +807,7 @@ export interface components { CreateUserAccountResponseDto: { /** @example 63b428f7d9ca4f6ff5370d05 */ _id: string; - user?: components["schemas"]["UserNoUserAccountsDto"]; + user?: components['schemas']['UserNoUserAccountsDto']; /** @example 098098098098098 */ accountId: string; /** @example darth#6755 */ @@ -784,7 +840,7 @@ export interface components { UpdateUserAccountResponseDto: { /** @example 63b428f7d9ca4f6ff5370d05 */ _id: string; - user?: components["schemas"]["UserNoUserAccountsDto"]; + user?: components['schemas']['UserNoUserAccountsDto']; /** @example 098098098098098 */ accountId: string; /** @example darth#6755 */ @@ -804,7 +860,16 @@ export interface components { /** @example My API Key */ description: string; /** @enum {string} */ - role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; + role: + | 'USER' + | 'QUANTIFIER' + | 'FORWARDER' + | 'ADMIN' + | 'ROOT' + | 'API_KEY_READWRITE' + | 'API_KEY_READ' + | 'API_KEY_DISCORD_BOT' + | 'API_KEY_SETUP_WEB'; }; CreateApiKeyResponseDto: { /** @example 639b178f19296ee0f2d0585d */ @@ -816,7 +881,16 @@ export interface components { /** @example $2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i */ hash: string; /** @enum {string} */ - role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; + role: + | 'USER' + | 'QUANTIFIER' + | 'FORWARDER' + | 'ADMIN' + | 'ROOT' + | 'API_KEY_READWRITE' + | 'API_KEY_READ' + | 'API_KEY_DISCORD_BOT' + | 'API_KEY_SETUP_WEB'; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -834,7 +908,16 @@ export interface components { /** @example $2b$10$hfRNI.V7ewuN/K.5eSt6oelaQ.FDj6irfUNR9wkKnL/qsNT23aE4i */ hash: string; /** @enum {string} */ - role: "USER" | "QUANTIFIER" | "FORWARDER" | "ADMIN" | "ROOT" | "API_KEY_READWRITE" | "API_KEY_READ" | "API_KEY_DISCORD_BOT" | "API_KEY_SETUP_WEB"; + role: + | 'USER' + | 'QUANTIFIER' + | 'FORWARDER' + | 'ADMIN' + | 'ROOT' + | 'API_KEY_READWRITE' + | 'API_KEY_READ' + | 'API_KEY_DISCORD_BOT' + | 'API_KEY_SETUP_WEB'; /** Format: date-time */ createdAt: string; /** Format: date-time */ @@ -868,7 +951,7 @@ export interface components { identityEthAddress: string; /** @example bearer */ tokenType: string; - user: components["schemas"]["User"]; + user: components['schemas']['User']; }; GenerateTokenDto: { /** @example eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MmIwNmY3NjU1ODA0YjE2MjllODQxNTkiLCJpZGVudGl0eUV0aEFkZHJlc3MiOiIweGEzMmFFQ2RhNzUyY0Y0RUY4OTk1NmU4M2Q2MEMwNDgzNWQ0RkE4NjciLCJyb2xlcyI6WyJVU0VSIiwiQURNSU4iXSwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjcwMzE1OTk4LCJleHAiOjE2NzAzMTk1OTh9.qKvucMZLVbz_1TnsxaSqYX1i5CSpver6fFJTf3pABVA */ @@ -889,7 +972,7 @@ export interface components { * "0x345.." * ] */ - owners: (string)[]; + owners: string[]; /** @example 0980987846534 */ discordGuildId?: string; }; @@ -910,7 +993,7 @@ export interface components { * "0x345.." * ] */ - owners: (string)[]; + owners: string[]; /** @example 0980987846534 */ discordGuildId?: string; /** @example oiujoiuoo8u */ @@ -918,7 +1001,7 @@ export interface components { /** @example true */ isPublic: boolean; /** @enum {string} */ - discordLinkState: "NOT_SET" | "PENDING" | "ACTIVE" | "DEACTIVE"; + discordLinkState: 'NOT_SET' | 'PENDING' | 'ACTIVE' | 'DEACTIVE'; /** * @example { * "attestations": true @@ -939,7 +1022,7 @@ export interface components { * "0x345.." * ] */ - owners?: (string)[]; + owners?: string[]; }; CommunityFindAllResponseDto: { /** @example 1200 */ @@ -960,7 +1043,7 @@ export interface components { prevPage?: Record; /** @example 3 */ nextPage?: Record; - docs: readonly (components["schemas"]["Community"])[]; + docs: readonly components['schemas']['Community'][]; meta?: Record; }; IsNameAvailableResponseDto: { @@ -978,7 +1061,7 @@ export interface components { duplicatePraise?: string; }; QuantifyMultipleInputDto: { - params: components["schemas"]["QuantifyInputDto"]; + params: components['schemas']['QuantifyInputDto']; /** * @example [ * "639b178f19296ee0f2d0585d", @@ -986,59 +1069,59 @@ export interface components { * "639b178f19296ee0f2d0585f" * ] */ - praiseIds: (string)[]; + praiseIds: string[]; }; ConfigurationValueItemsDto: { /** - * @description Allowed array types - * @example string + * @description Allowed array types + * @example string * @enum {string} */ - type: "string" | "number"; + type: 'string' | 'number'; }; ConfigurationValueDto: { /** - * @description Type of the setting - * @example string + * @description Type of the setting + * @example string * @enum {string} */ - type: "string" | "number" | "boolean" | "array"; + type: 'string' | 'number' | 'boolean' | 'array'; /** - * @description Default value for the setting + * @description Default value for the setting * @example 666 */ - default: number | string | boolean | (number)[] | (string)[]; + default: number | string | boolean | number[] | string[]; /** - * @description Description of the setting + * @description Description of the setting * @example Description of the string setting */ description: string; /** - * @description Markdown description of the setting + * @description Markdown description of the setting * @example Description of the string setting */ markdownDescription?: string; /** - * @description Edit presentation style - * @example multiline + * @description Edit presentation style + * @example multiline * @enum {string} */ - editPresentation?: "multiline"; + editPresentation?: 'multiline'; /** - * @description Order of the setting + * @description Order of the setting * @example 1 */ order?: number; /** - * @description Enum values for string type settings + * @description Enum values for string type settings * @example [ * "left", * "right" * ] */ - enum?: (string)[]; + enum?: string[]; /** @description Defines the type of items for array settings */ - items?: components["schemas"]["ConfigurationValueItemsDto"]; + items?: components['schemas']['ConfigurationValueItemsDto']; }; ReportManifestDto: { /** @example https://raw.githubusercontent.com/givepraise/reports/main/reports/disperse-dist-straight-curve-with-ceiling/manifest.json */ @@ -1067,16 +1150,18 @@ export interface components { * "Praise receiver reports" * ] */ - categories: (string)[]; + categories: string[]; /** * @example [ * "toplist" * ] */ - keywords: (string)[]; + keywords: string[]; /** @description Configuration settings for the report */ configuration: { - [key: string]: components["schemas"]["ConfigurationValueDto"] | undefined; + [key: string]: + | components['schemas']['ConfigurationValueDto'] + | undefined; }; }; }; @@ -1090,24 +1175,23 @@ export interface components { export type external = Record; export interface operations { - /** Activate a user account in order to be able to give praise and receive rewards. Activation a user account creates a new User object or adds user account to User if it already exists. */ ActivateController_activate: { requestBody: { content: { - "application/json": components["schemas"]["ActivateInputDto"]; + 'application/json': components['schemas']['ActivateInputDto']; }; }; responses: { /** @description The created (or updated) user. */ 200: { content: { - "application/json": components["schemas"]["User"]; + 'application/json': components['schemas']['User']; }; }; 201: { content: { - "application/json": components["schemas"]["User"]; + 'application/json': components['schemas']['User']; }; }; }; @@ -1117,7 +1201,7 @@ export interface operations { responses: { 200: { content: { - "application/json": string; + 'application/json': string; }; }; }; @@ -1127,7 +1211,7 @@ export interface operations { responses: { 200: { content: { - "text/csv": string; + 'text/csv': string; }; }; }; @@ -1137,7 +1221,7 @@ export interface operations { responses: { 200: { content: { - "application/octet-stream": string; + 'application/octet-stream': string; }; }; }; @@ -1147,7 +1231,7 @@ export interface operations { /** @description All users */ 200: { content: { - "application/json": (components["schemas"]["User"])[]; + 'application/json': components['schemas']['User'][]; }; }; }; @@ -1162,7 +1246,7 @@ export interface operations { /** @description A single user */ 200: { content: { - "application/json": components["schemas"]["UserWithStatsDto"]; + 'application/json': components['schemas']['UserWithStatsDto']; }; }; }; @@ -1176,14 +1260,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["UpdateUserRequestDto"]; + 'application/json': components['schemas']['UpdateUserRequestDto']; }; }; responses: { /** @description Updated user */ 200: { content: { - "application/json": components["schemas"]["UserWithStatsDto"]; + 'application/json': components['schemas']['UserWithStatsDto']; }; }; }; @@ -1196,14 +1280,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["UpdateUserRoleInputDto"]; + 'application/json': components['schemas']['UpdateUserRoleInputDto']; }; }; responses: { /** @description The updated user */ 200: { content: { - "application/json": components["schemas"]["UserWithStatsDto"]; + 'application/json': components['schemas']['UserWithStatsDto']; }; }; }; @@ -1216,14 +1300,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["UpdateUserRoleInputDto"]; + 'application/json': components['schemas']['UpdateUserRoleInputDto']; }; }; responses: { /** @description The updated user */ 200: { content: { - "application/json": components["schemas"]["UserWithStatsDto"]; + 'application/json': components['schemas']['UserWithStatsDto']; }; }; }; @@ -1233,7 +1317,7 @@ export interface operations { responses: { 200: { content: { - "application/json": string; + 'application/json': string; }; }; }; @@ -1243,7 +1327,7 @@ export interface operations { responses: { 200: { content: { - "text/csv": string; + 'text/csv': string; }; }; }; @@ -1253,7 +1337,7 @@ export interface operations { responses: { 200: { content: { - "application/octet-stream": string; + 'application/octet-stream': string; }; }; }; @@ -1267,14 +1351,14 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: "asc" | "desc"; + sortType?: 'asc' | 'desc'; }; }; responses: { /** @description Periods */ 200: { content: { - "application/json": components["schemas"]["PeriodPaginatedResponseDto"]; + 'application/json': components['schemas']['PeriodPaginatedResponseDto']; }; }; }; @@ -1283,19 +1367,19 @@ export interface operations { PeriodsController_create: { requestBody: { content: { - "application/json": components["schemas"]["CreatePeriodInputDto"]; + 'application/json': components['schemas']['CreatePeriodInputDto']; }; }; responses: { /** @description Period */ 200: { content: { - "application/json": components["schemas"]["PeriodDetailsDto"]; + 'application/json': components['schemas']['PeriodDetailsDto']; }; }; 201: { content: { - "application/json": components["schemas"]["PeriodDetailsDto"]; + 'application/json': components['schemas']['PeriodDetailsDto']; }; }; }; @@ -1311,7 +1395,7 @@ export interface operations { /** @description Period */ 200: { content: { - "application/json": components["schemas"]["PeriodDetailsDto"]; + 'application/json': components['schemas']['PeriodDetailsDto']; }; }; }; @@ -1325,14 +1409,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["UpdatePeriodInputDto"]; + 'application/json': components['schemas']['UpdatePeriodInputDto']; }; }; responses: { /** @description Period */ 200: { content: { - "application/json": components["schemas"]["PeriodDetailsDto"]; + 'application/json': components['schemas']['PeriodDetailsDto']; }; }; }; @@ -1348,7 +1432,7 @@ export interface operations { /** @description Period */ 200: { content: { - "application/json": components["schemas"]["PeriodDetailsDto"]; + 'application/json': components['schemas']['PeriodDetailsDto']; }; }; }; @@ -1364,7 +1448,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; + 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; }; }; }; @@ -1381,7 +1465,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; + 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; }; }; }; @@ -1398,7 +1482,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; + 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; }; }; }; @@ -1415,7 +1499,7 @@ export interface operations { /** @description Period Praise items */ 200: { content: { - "application/json": (components["schemas"]["PraiseWithUserAccountsWithUserRefDto"])[]; + 'application/json': components['schemas']['PraiseWithUserAccountsWithUserRefDto'][]; }; }; }; @@ -1431,7 +1515,7 @@ export interface operations { /** @description Period */ 200: { content: { - "application/json": components["schemas"]["VerifyQuantifierPoolSizeDto"]; + 'application/json': components['schemas']['VerifyQuantifierPoolSizeDto']; }; }; }; @@ -1447,7 +1531,7 @@ export interface operations { /** @description Period */ 200: { content: { - "application/json": components["schemas"]["PeriodDetailsDto"]; + 'application/json': components['schemas']['PeriodDetailsDto']; }; }; }; @@ -1461,14 +1545,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["ReplaceQuantifierInputDto"]; + 'application/json': components['schemas']['ReplaceQuantifierInputDto']; }; }; responses: { /** @description Period */ 200: { content: { - "application/json": components["schemas"]["ReplaceQuantifierResponseDto"]; + 'application/json': components['schemas']['ReplaceQuantifierResponseDto']; }; }; }; @@ -1482,16 +1566,16 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: "asc" | "desc"; + sortType?: 'asc' | 'desc'; search?: string; - types?: (string)[]; + types?: string[]; }; }; responses: { /** @description Paginated event logs */ 200: { content: { - "application/json": components["schemas"]["EventLogPaginatedResponseDto"]; + 'application/json': components['schemas']['EventLogPaginatedResponseDto']; }; }; }; @@ -1502,7 +1586,7 @@ export interface operations { /** @description Event log types */ 200: { content: { - "application/json": (components["schemas"]["EventLogType"])[]; + 'application/json': components['schemas']['EventLogType'][]; }; }; }; @@ -1513,7 +1597,17 @@ export interface operations { query?: { /** @example SETTING_KEY */ key?: string; - type?: "Integer" | "Float" | "String" | "Textarea" | "Boolean" | "IntegerList" | "StringList" | "Image" | "Radio" | "JSON"; + type?: + | 'Integer' + | 'Float' + | 'String' + | 'Textarea' + | 'Boolean' + | 'IntegerList' + | 'StringList' + | 'Image' + | 'Radio' + | 'JSON'; /** @example 0 */ group?: number; /** @example 0 */ @@ -1524,7 +1618,7 @@ export interface operations { /** @description All settings. */ 200: { content: { - "application/json": (components["schemas"]["Setting"])[]; + 'application/json': components['schemas']['Setting'][]; }; }; }; @@ -1540,7 +1634,7 @@ export interface operations { /** @description Setting. */ 200: { content: { - "application/json": components["schemas"]["Setting"]; + 'application/json': components['schemas']['Setting']; }; }; }; @@ -1554,14 +1648,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["SetSettingDto"]; + 'application/json': components['schemas']['SetSettingDto']; }; }; responses: { /** @description Updated setting. */ 200: { content: { - "application/json": components["schemas"]["Setting"]; + 'application/json': components['schemas']['Setting']; }; }; }; @@ -1577,7 +1671,7 @@ export interface operations { /** @description Updated setting. */ 200: { content: { - "application/json": components["schemas"]["Setting"]; + 'application/json': components['schemas']['Setting']; }; }; }; @@ -1592,7 +1686,7 @@ export interface operations { responses: { 200: { content: { - "application/json": Record; + 'application/json': Record; }; }; }; @@ -1608,7 +1702,7 @@ export interface operations { /** @description All period settings */ 200: { content: { - "application/json": (components["schemas"]["PeriodSetting"])[]; + 'application/json': components['schemas']['PeriodSetting'][]; }; }; }; @@ -1625,7 +1719,7 @@ export interface operations { /** @description Period setting */ 200: { content: { - "application/json": components["schemas"]["PeriodSetting"]; + 'application/json': components['schemas']['PeriodSetting']; }; }; }; @@ -1640,14 +1734,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["SetPeriodSettingDto"]; + 'application/json': components['schemas']['SetPeriodSettingDto']; }; }; responses: { /** @description Updated period setting */ 200: { content: { - "application/json": components["schemas"]["PeriodSetting"]; + 'application/json': components['schemas']['PeriodSetting']; }; }; }; @@ -1661,7 +1755,7 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: "asc" | "desc"; + sortType?: 'asc' | 'desc'; giver?: string; receiver?: string; }; @@ -1670,7 +1764,7 @@ export interface operations { /** @description Paginated praise items */ 200: { content: { - "application/json": components["schemas"]["PraisePaginatedResponseDto"]; + 'application/json': components['schemas']['PraisePaginatedResponseDto']; }; }; }; @@ -1679,19 +1773,19 @@ export interface operations { PraiseController_praise: { requestBody: { content: { - "application/json": components["schemas"]["PraiseCreateInputDto"]; + 'application/json': components['schemas']['PraiseCreateInputDto']; }; }; responses: { /** @description Praise item */ 200: { content: { - "application/json": components["schemas"]["Praise"]; + 'application/json': components['schemas']['Praise']; }; }; 201: { content: { - "application/json": (components["schemas"]["Praise"])[]; + 'application/json': components['schemas']['Praise'][]; }; }; }; @@ -1707,7 +1801,7 @@ export interface operations { responses: { 200: { content: { - "application/json": string; + 'application/json': string; }; }; }; @@ -1723,7 +1817,7 @@ export interface operations { responses: { 200: { content: { - "text/csv": string; + 'text/csv': string; }; }; }; @@ -1739,7 +1833,7 @@ export interface operations { responses: { 200: { content: { - "application/octet-stream": string; + 'application/octet-stream': string; }; }; }; @@ -1755,7 +1849,7 @@ export interface operations { /** @description Praise item */ 200: { content: { - "application/json": components["schemas"]["Praise"]; + 'application/json': components['schemas']['Praise']; }; }; }; @@ -1764,19 +1858,19 @@ export interface operations { PraiseController_forward: { requestBody: { content: { - "application/json": components["schemas"]["PraiseForwardInputDto"]; + 'application/json': components['schemas']['PraiseForwardInputDto']; }; }; responses: { /** @description Praise item */ 200: { content: { - "application/json": components["schemas"]["Praise"]; + 'application/json': components['schemas']['Praise']; }; }; 201: { content: { - "application/json": (components["schemas"]["Praise"])[]; + 'application/json': components['schemas']['Praise'][]; }; }; }; @@ -1796,7 +1890,7 @@ export interface operations { responses: { 200: { content: { - "application/json": components["schemas"]["UserAccount"]; + 'application/json': components['schemas']['UserAccount']; }; }; }; @@ -1805,13 +1899,13 @@ export interface operations { UserAccountsController_create: { requestBody: { content: { - "application/json": components["schemas"]["CreateUserAccountInputDto"]; + 'application/json': components['schemas']['CreateUserAccountInputDto']; }; }; responses: { 201: { content: { - "application/json": components["schemas"]["CreateUserAccountResponseDto"]; + 'application/json': components['schemas']['CreateUserAccountResponseDto']; }; }; }; @@ -1821,7 +1915,7 @@ export interface operations { responses: { 200: { content: { - "application/json": string; + 'application/json': string; }; }; }; @@ -1831,7 +1925,7 @@ export interface operations { responses: { 200: { content: { - "text/csv": string; + 'text/csv': string; }; }; }; @@ -1841,7 +1935,7 @@ export interface operations { responses: { 200: { content: { - "application/octet-stream": string; + 'application/octet-stream': string; }; }; }; @@ -1857,7 +1951,7 @@ export interface operations { /** @description UserAccount */ 200: { content: { - "application/json": components["schemas"]["UserAccount"]; + 'application/json': components['schemas']['UserAccount']; }; }; }; @@ -1866,13 +1960,13 @@ export interface operations { UserAccountsController_update: { requestBody: { content: { - "application/json": components["schemas"]["UpdateUserAccountInputDto"]; + 'application/json': components['schemas']['UpdateUserAccountInputDto']; }; }; responses: { 200: { content: { - "application/json": components["schemas"]["UpdateUserAccountResponseDto"]; + 'application/json': components['schemas']['UpdateUserAccountResponseDto']; }; }; }; @@ -1883,7 +1977,7 @@ export interface operations { /** @description Array of API keys */ 200: { content: { - "application/json": (components["schemas"]["ApiKey"])[]; + 'application/json': components['schemas']['ApiKey'][]; }; }; }; @@ -1892,14 +1986,14 @@ export interface operations { ApiKeyController_createApiKey: { requestBody: { content: { - "application/json": components["schemas"]["CreateApiKeyInputDto"]; + 'application/json': components['schemas']['CreateApiKeyInputDto']; }; }; responses: { /** @description API key created */ 201: { content: { - "application/json": components["schemas"]["CreateApiKeyResponseDto"]; + 'application/json': components['schemas']['CreateApiKeyResponseDto']; }; }; }; @@ -1915,7 +2009,7 @@ export interface operations { /** @description An API key */ 200: { content: { - "application/json": components["schemas"]["ApiKey"]; + 'application/json': components['schemas']['ApiKey']; }; }; }; @@ -1929,19 +2023,19 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["UpdateDescriptionInputDto"]; + 'application/json': components['schemas']['UpdateDescriptionInputDto']; }; }; responses: { 200: { content: { - "application/json": components["schemas"]["ApiKey"]; + 'application/json': components['schemas']['ApiKey']; }; }; /** @description API key with updated description */ 201: { content: { - "application/json": components["schemas"]["ApiKey"]; + 'application/json': components['schemas']['ApiKey']; }; }; }; @@ -1956,13 +2050,13 @@ export interface operations { responses: { 200: { content: { - "application/json": components["schemas"]["ApiKey"]; + 'application/json': components['schemas']['ApiKey']; }; }; /** @description Revoked API key */ 201: { content: { - "application/json": components["schemas"]["ApiKey"]; + 'application/json': components['schemas']['ApiKey']; }; }; }; @@ -1972,14 +2066,14 @@ export interface operations { /** @description A request containing the user identityEthAddress */ requestBody: { content: { - "application/json": components["schemas"]["NonceInputDto"]; + 'application/json': components['schemas']['NonceInputDto']; }; }; responses: { /** @description Nonce generated successfully */ 201: { content: { - "application/json": components["schemas"]["NonceResponseDto"]; + 'application/json': components['schemas']['NonceResponseDto']; }; }; }; @@ -1992,20 +2086,20 @@ export interface operations { }; }; /** - * @description A request containing the user identityEthAddress and signedlogin message. The signed message should be structured as follows: - * + * @description A request containing the user identityEthAddress and signedlogin message. The signed message should be structured as follows: + * * ```SIGN THIS MESSAGE TO LOGIN TO PRAISE.\n\nADDRESS:\n[identityEthAddress]\n\nNONCE:\n[nonce]``` */ requestBody: { content: { - "application/json": components["schemas"]["LoginInputDto"]; + 'application/json': components['schemas']['LoginInputDto']; }; }; responses: { /** @description User authenticated successfully */ 201: { content: { - "application/json": components["schemas"]["LoginResponseDto"]; + 'application/json': components['schemas']['LoginResponseDto']; }; }; }; @@ -2019,14 +2113,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["GenerateTokenDto"]; + 'application/json': components['schemas']['GenerateTokenDto']; }; }; responses: { /** @description Tokens generated successfully */ 201: { content: { - "application/json": components["schemas"]["LoginResponseDto"]; + 'application/json': components['schemas']['LoginResponseDto']; }; }; }; @@ -2039,7 +2133,7 @@ export interface operations { /** @example 1 */ page: number; sortColumn?: string; - sortType?: "asc" | "desc"; + sortType?: 'asc' | 'desc'; /** @example hostname.givepraise.xyz */ hostname?: string; }; @@ -2048,7 +2142,7 @@ export interface operations { /** @description All communities */ 200: { content: { - "application/json": components["schemas"]["CommunityFindAllResponseDto"]; + 'application/json': components['schemas']['CommunityFindAllResponseDto']; }; }; }; @@ -2057,19 +2151,19 @@ export interface operations { CommunityController_create: { requestBody: { content: { - "application/json": components["schemas"]["CreateCommunityInputDto"]; + 'application/json': components['schemas']['CreateCommunityInputDto']; }; }; responses: { /** @description Community */ 200: { content: { - "application/json": components["schemas"]["Community"]; + 'application/json': components['schemas']['Community']; }; }; 201: { content: { - "application/json": components["schemas"]["Community"]; + 'application/json': components['schemas']['Community']; }; }; }; @@ -2084,7 +2178,7 @@ export interface operations { /** @description A single Community */ 200: { content: { - "application/json": components["schemas"]["Community"]; + 'application/json': components['schemas']['Community']; }; }; }; @@ -2093,14 +2187,14 @@ export interface operations { CommunityController_update: { requestBody: { content: { - "application/json": components["schemas"]["UpdateCommunityInputDto"]; + 'application/json': components['schemas']['UpdateCommunityInputDto']; }; }; responses: { /** @description Community */ 200: { content: { - "application/json": components["schemas"]["Community"]; + 'application/json': components['schemas']['Community']; }; }; }; @@ -2116,7 +2210,7 @@ export interface operations { /** @description Checking whether the community name is available */ 200: { content: { - "application/json": components["schemas"]["IsNameAvailableResponseDto"]; + 'application/json': components['schemas']['IsNameAvailableResponseDto']; }; }; }; @@ -2126,7 +2220,7 @@ export interface operations { /** @description Returns the current community, based on hostname */ 200: { content: { - "application/json": components["schemas"]["Community"]; + 'application/json': components['schemas']['Community']; }; }; }; @@ -2135,14 +2229,14 @@ export interface operations { CommunityController_linkDiscord: { requestBody: { content: { - "application/json": components["schemas"]["LinkDiscordBotDto"]; + 'application/json': components['schemas']['LinkDiscordBotDto']; }; }; responses: { /** @description Community */ 200: { content: { - "application/json": components["schemas"]["Community"]; + 'application/json': components['schemas']['Community']; }; }; }; @@ -2158,7 +2252,7 @@ export interface operations { responses: { 200: { content: { - "application/json": string; + 'application/json': string; }; }; }; @@ -2174,7 +2268,7 @@ export interface operations { responses: { 200: { content: { - "text/csv": string; + 'text/csv': string; }; }; }; @@ -2190,7 +2284,7 @@ export interface operations { responses: { 200: { content: { - "application/octet-stream": string; + 'application/octet-stream': string; }; }; }; @@ -2199,14 +2293,14 @@ export interface operations { QuantificationsController_quantifyMultiple: { requestBody: { content: { - "application/json": components["schemas"]["QuantifyMultipleInputDto"]; + 'application/json': components['schemas']['QuantifyMultipleInputDto']; }; }; responses: { /** @description Praise items */ 200: { content: { - "application/json": (components["schemas"]["Praise"])[]; + 'application/json': components['schemas']['Praise'][]; }; }; }; @@ -2220,14 +2314,14 @@ export interface operations { }; requestBody: { content: { - "application/json": components["schemas"]["QuantifyInputDto"]; + 'application/json': components['schemas']['QuantifyInputDto']; }; }; responses: { /** @description Praise items */ 200: { content: { - "application/json": (components["schemas"]["Praise"])[]; + 'application/json': components['schemas']['Praise'][]; }; }; }; @@ -2238,7 +2332,7 @@ export interface operations { /** @description A list of report manifests */ 200: { content: { - "application/json": (components["schemas"]["ReportManifestDto"])[]; + 'application/json': components['schemas']['ReportManifestDto'][]; }; }; /** @description An error occurred while fetching report manifests */ @@ -2256,7 +2350,7 @@ export interface operations { /** @description A receiver bio */ 200: { content: { - "application/json": string; + 'application/json': string; }; }; }; @@ -2272,7 +2366,7 @@ export interface operations { /** @description Comma separated list of labels, 7 max */ 200: { content: { - "application/json": string; + 'application/json': string; }; }; };