diff --git a/BackendAcademy/.env.example b/BackendAcademy/.env.example index e96a0d1a0..4f5ae4bc2 100644 --- a/BackendAcademy/.env.example +++ b/BackendAcademy/.env.example @@ -26,3 +26,9 @@ OPENAI_API_KEY= # Your OpenAI API key AI_MODEL= # Model override (optional) AI_MAX_TOKENS=4096 AI_TEMPERATURE=0.7 + +# Static & uploaded assets +ASSETS_UPLOAD_DIR=./data/uploads # Where uploaded assets are persisted on disk +ASSETS_MAX_SIZE_MB=10 # Max upload size in megabytes +ASSETS_BASE_URL=/api/v1/assets # Base URL advertised inside asset metadata +ASSETS_STATIC_DIR=./public # Read-only static asset directory served at /static diff --git a/BackendAcademy/dist/src/ai/ai.controller.d.ts b/BackendAcademy/dist/src/ai/ai.controller.d.ts deleted file mode 100644 index 5ec5ae0cb..000000000 --- a/BackendAcademy/dist/src/ai/ai.controller.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AiService } from './ai.service'; -import { CreateChatRequestDto } from './dto/create-chat-request.dto'; -import { GetHintDto } from './dto/get-hint.dto'; -import { ChatMessage } from './interfaces/ai.interface'; -export declare class AiController { - private readonly aiService; - constructor(aiService: AiService); - sendChatMessage(createChatRequestDto: CreateChatRequestDto): Promise; - getHint(getHintDto: GetHintDto): Promise; - getChatHistory(userId: string): Promise; -} diff --git a/BackendAcademy/dist/src/ai/ai.controller.js b/BackendAcademy/dist/src/ai/ai.controller.js deleted file mode 100644 index 02b93b2a8..000000000 --- a/BackendAcademy/dist/src/ai/ai.controller.js +++ /dev/null @@ -1,60 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AiController = void 0; -const common_1 = require("@nestjs/common"); -const ai_service_1 = require("./ai.service"); -const create_chat_request_dto_1 = require("./dto/create-chat-request.dto"); -const get_hint_dto_1 = require("./dto/get-hint.dto"); -let AiController = class AiController { - constructor(aiService) { - this.aiService = aiService; - } - async sendChatMessage(createChatRequestDto) { - return this.aiService.processChatRequest(createChatRequestDto); - } - async getHint(getHintDto) { - return this.aiService.getHint(getHintDto); - } - async getChatHistory(userId) { - return this.aiService.getChatHistory(userId); - } -}; -exports.AiController = AiController; -__decorate([ - (0, common_1.Post)('chat'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [create_chat_request_dto_1.CreateChatRequestDto]), - __metadata("design:returntype", Promise) -], AiController.prototype, "sendChatMessage", null); -__decorate([ - (0, common_1.Post)('hint'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [get_hint_dto_1.GetHintDto]), - __metadata("design:returntype", Promise) -], AiController.prototype, "getHint", null); -__decorate([ - (0, common_1.Get)('history/:userId'), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], AiController.prototype, "getChatHistory", null); -exports.AiController = AiController = __decorate([ - (0, common_1.Controller)('ai'), - __metadata("design:paramtypes", [ai_service_1.AiService]) -], AiController); -//# sourceMappingURL=ai.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/ai.controller.js.map b/BackendAcademy/dist/src/ai/ai.controller.js.map deleted file mode 100644 index 53f0a5f91..000000000 --- a/BackendAcademy/dist/src/ai/ai.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ai.controller.js","sourceRoot":"","sources":["../../../src/ai/ai.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoE;AACpE,6CAAyC;AACzC,2EAAqE;AACrE,qDAAgD;AAIzC,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAG/C,AAAN,KAAK,CAAC,eAAe,CAAS,oBAA0C;QACtE,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IACjE,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,UAAsB;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAGK,AAAN,KAAK,CAAC,cAAc,CAAkB,MAAc;QAClD,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;CACF,CAAA;AAjBY,oCAAY;AAIjB;IADL,IAAA,aAAI,EAAC,MAAM,CAAC;IACU,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAuB,8CAAoB;;mDAEvE;AAGK;IADL,IAAA,aAAI,EAAC,MAAM,CAAC;IACE,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAa,yBAAU;;2CAE3C;AAGK;IADL,IAAA,YAAG,EAAC,iBAAiB,CAAC;IACD,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;kDAEpC;uBAhBU,YAAY;IADxB,IAAA,mBAAU,EAAC,IAAI,CAAC;qCAEyB,sBAAS;GADtC,YAAY,CAiBxB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/ai.module.d.ts b/BackendAcademy/dist/src/ai/ai.module.d.ts deleted file mode 100644 index cd4963dbb..000000000 --- a/BackendAcademy/dist/src/ai/ai.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class AiModule { -} diff --git a/BackendAcademy/dist/src/ai/ai.module.js b/BackendAcademy/dist/src/ai/ai.module.js deleted file mode 100644 index ae8607c91..000000000 --- a/BackendAcademy/dist/src/ai/ai.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AiModule = void 0; -const common_1 = require("@nestjs/common"); -const ai_controller_1 = require("./ai.controller"); -const ai_service_1 = require("./ai.service"); -let AiModule = class AiModule { -}; -exports.AiModule = AiModule; -exports.AiModule = AiModule = __decorate([ - (0, common_1.Module)({ - controllers: [ai_controller_1.AiController], - providers: [ai_service_1.AiService], - exports: [ai_service_1.AiService], - }) -], AiModule); -//# sourceMappingURL=ai.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/ai.module.js.map b/BackendAcademy/dist/src/ai/ai.module.js.map deleted file mode 100644 index 8bb94b1c5..000000000 --- a/BackendAcademy/dist/src/ai/ai.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ai.module.js","sourceRoot":"","sources":["../../../src/ai/ai.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAC/C,6CAAyC;AAOlC,IAAM,QAAQ,GAAd,MAAM,QAAQ;CAAG,CAAA;AAAX,4BAAQ;mBAAR,QAAQ;IALpB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,4BAAY,CAAC;QAC3B,SAAS,EAAE,CAAC,sBAAS,CAAC;QACtB,OAAO,EAAE,CAAC,sBAAS,CAAC;KACrB,CAAC;GACW,QAAQ,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/ai.service.d.ts b/BackendAcademy/dist/src/ai/ai.service.d.ts deleted file mode 100644 index 338bdfd25..000000000 --- a/BackendAcademy/dist/src/ai/ai.service.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CreateChatRequestDto } from './dto/create-chat-request.dto'; -import { GetHintDto } from './dto/get-hint.dto'; -import { AiChatResponse, AiHintResponse, ChatMessage } from './interfaces/ai.interface'; -export declare class AiService { - private chatHistory; - private hints; - constructor(); - processChatRequest(createChatRequestDto: CreateChatRequestDto): Promise; - getHint(getHintDto: GetHintDto): Promise; - getChatHistory(userId: string): Promise; - private generateAiResponse; - private initializeSampleHints; -} diff --git a/BackendAcademy/dist/src/ai/ai.service.js b/BackendAcademy/dist/src/ai/ai.service.js deleted file mode 100644 index a5d0b6f27..000000000 --- a/BackendAcademy/dist/src/ai/ai.service.js +++ /dev/null @@ -1,104 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AiService = void 0; -const common_1 = require("@nestjs/common"); -const uuid_1 = require("uuid"); -let AiService = class AiService { - constructor() { - this.chatHistory = new Map(); - this.hints = new Map(); - this.initializeSampleHints(); - } - async processChatRequest(createChatRequestDto) { - const { message, userId, context } = createChatRequestDto; - const response = this.generateAiResponse(message, context); - const chatMessage = { - id: (0, uuid_1.v4)(), - userId, - message, - response, - timestamp: new Date(), - context, - }; - if (!this.chatHistory.has(userId)) { - this.chatHistory.set(userId, []); - } - this.chatHistory.get(userId).push(chatMessage); - return { - response: chatMessage.response, - timestamp: chatMessage.timestamp, - messageId: chatMessage.id, - }; - } - async getHint(getHintDto) { - const { challengeId, difficulty = 1 } = getHintDto; - const challengeHints = this.hints.get(challengeId) || []; - const hint = challengeHints.find(h => h.difficulty === difficulty) || challengeHints[0]; - if (!hint) { - return { - hint: "No hints available for this challenge yet. Keep trying!", - hintId: (0, uuid_1.v4)(), - difficulty: 1, - }; - } - hint.usedCount++; - return { - hint: hint.hint, - hintId: hint.id, - difficulty: hint.difficulty, - }; - } - async getChatHistory(userId) { - return this.chatHistory.get(userId) || []; - } - generateAiResponse(userMessage, context) { - const responses = [ - "That's a great question! Let me help you work through that. Based on what you've shared, I think the first thing you should understand is the core concept behind the problem.", - "I see what you're working on. Let's break this down step by step. What part of the problem are you finding most challenging right now?", - "Good thinking! You're on the right track. To move forward, I'd recommend reviewing the documentation on this topic and trying to implement a small piece first.", - "That's a common challenge many developers face. Let's think about this differently - what if we approach it from another angle?", - ]; - return responses[Math.floor(Math.random() * responses.length)]; - } - initializeSampleHints() { - const sampleHints = [ - { - id: (0, uuid_1.v4)(), - challengeId: "sample-challenge-001", - hint: "Start by understanding the problem requirements thoroughly. List out all the inputs and expected outputs.", - difficulty: 1, - usedCount: 0, - }, - { - id: (0, uuid_1.v4)(), - challengeId: "sample-challenge-001", - hint: "Consider edge cases - what happens if the input is empty, null, or outside the expected range?", - difficulty: 2, - usedCount: 0, - }, - { - id: (0, uuid_1.v4)(), - challengeId: "sample-challenge-001", - hint: "Try to implement a brute-force solution first, then optimize it. This helps you understand the problem better.", - difficulty: 3, - usedCount: 0, - }, - ]; - this.hints.set("sample-challenge-001", sampleHints); - } -}; -exports.AiService = AiService; -exports.AiService = AiService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", []) -], AiService); -//# sourceMappingURL=ai.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/ai.service.js.map b/BackendAcademy/dist/src/ai/ai.service.js.map deleted file mode 100644 index 8bba7a862..000000000 --- a/BackendAcademy/dist/src/ai/ai.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ai.service.js","sourceRoot":"","sources":["../../../src/ai/ai.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.d.ts b/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.d.ts deleted file mode 100644 index 3a8951034..000000000 --- a/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare class CreateChatRequestDto { - message: string; - context?: Record; - userId: string; -} diff --git a/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.js b/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.js deleted file mode 100644 index 6b9e0cc62..000000000 --- a/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateChatRequestDto = void 0; -class CreateChatRequestDto { -} -exports.CreateChatRequestDto = CreateChatRequestDto; -//# sourceMappingURL=create-chat-request.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.js.map b/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.js.map deleted file mode 100644 index 3780762f2..000000000 --- a/BackendAcademy/dist/src/ai/dto/create-chat-request.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"create-chat-request.dto.js","sourceRoot":"","sources":["../../../../src/ai/dto/create-chat-request.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAoB;CAIhC;AAJD,oDAIC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/dto/get-hint.dto.d.ts b/BackendAcademy/dist/src/ai/dto/get-hint.dto.d.ts deleted file mode 100644 index 729476f61..000000000 --- a/BackendAcademy/dist/src/ai/dto/get-hint.dto.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare class GetHintDto { - challengeId: string; - userId: string; - difficulty?: number; -} diff --git a/BackendAcademy/dist/src/ai/dto/get-hint.dto.js b/BackendAcademy/dist/src/ai/dto/get-hint.dto.js deleted file mode 100644 index 53a3657f2..000000000 --- a/BackendAcademy/dist/src/ai/dto/get-hint.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetHintDto = void 0; -class GetHintDto { -} -exports.GetHintDto = GetHintDto; -//# sourceMappingURL=get-hint.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/dto/get-hint.dto.js.map b/BackendAcademy/dist/src/ai/dto/get-hint.dto.js.map deleted file mode 100644 index 276c14f3f..000000000 --- a/BackendAcademy/dist/src/ai/dto/get-hint.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"get-hint.dto.js","sourceRoot":"","sources":["../../../../src/ai/dto/get-hint.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;CAItB;AAJD,gCAIC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/interfaces/ai.interface.d.ts b/BackendAcademy/dist/src/ai/interfaces/ai.interface.d.ts deleted file mode 100644 index 51443c03e..000000000 --- a/BackendAcademy/dist/src/ai/interfaces/ai.interface.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -export interface ChatMessage { - id: string; - userId: string; - message: string; - response: string; - timestamp: Date; - context?: Record; -} -export interface Hint { - id: string; - challengeId: string; - hint: string; - difficulty: number; - usedCount: number; -} -export interface AiChatResponse { - response: string; - timestamp: Date; - messageId: string; -} -export interface AiHintResponse { - hint: string; - hintId: string; - difficulty: number; -} diff --git a/BackendAcademy/dist/src/ai/interfaces/ai.interface.js b/BackendAcademy/dist/src/ai/interfaces/ai.interface.js deleted file mode 100644 index 5405bab8b..000000000 --- a/BackendAcademy/dist/src/ai/interfaces/ai.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=ai.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/ai/interfaces/ai.interface.js.map b/BackendAcademy/dist/src/ai/interfaces/ai.interface.js.map deleted file mode 100644 index 9afe8a53c..000000000 --- a/BackendAcademy/dist/src/ai/interfaces/ai.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ai.interface.js","sourceRoot":"","sources":["../../../../src/ai/interfaces/ai.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/api-info.controller.d.ts b/BackendAcademy/dist/src/api-info.controller.d.ts deleted file mode 100644 index ad778d598..000000000 --- a/BackendAcademy/dist/src/api-info.controller.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare class ApiInfoController { - getApiInfo(): { - name: string; - version: string; - status: string; - docs: string; - }; -} diff --git a/BackendAcademy/dist/src/api-info.controller.js b/BackendAcademy/dist/src/api-info.controller.js deleted file mode 100644 index 6ab8536d2..000000000 --- a/BackendAcademy/dist/src/api-info.controller.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiInfoController = void 0; -const common_1 = require("@nestjs/common"); -let ApiInfoController = class ApiInfoController { - getApiInfo() { - return { - name: 'RustAcademy API', - version: process.env.npm_package_version || '1.0.0', - status: 'ok', - docs: '/api/docs', - }; - } -}; -exports.ApiInfoController = ApiInfoController; -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], ApiInfoController.prototype, "getApiInfo", null); -exports.ApiInfoController = ApiInfoController = __decorate([ - (0, common_1.Controller)('api') -], ApiInfoController); -//# sourceMappingURL=api-info.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/api-info.controller.js.map b/BackendAcademy/dist/src/api-info.controller.js.map deleted file mode 100644 index 3e2e2bcf9..000000000 --- a/BackendAcademy/dist/src/api-info.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"api-info.controller.js","sourceRoot":"","sources":["../../src/api-info.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AAG1C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAE5B,UAAU;QACR,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO;YACnD,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW;SAClB,CAAC;IACJ,CAAC;CACF,CAAA;AAVY,8CAAiB;AAE5B;IADC,IAAA,YAAG,GAAE;;;;mDAQL;4BATU,iBAAiB;IAD7B,IAAA,mBAAU,EAAC,KAAK,CAAC;GACL,iBAAiB,CAU7B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/app.controller.d.ts b/BackendAcademy/dist/src/app.controller.d.ts deleted file mode 100644 index 3859d69c3..000000000 --- a/BackendAcademy/dist/src/app.controller.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { AppService } from './app.service'; -export declare class AppController { - private readonly appService; - constructor(appService: AppService); - getHello(): string; -} diff --git a/BackendAcademy/dist/src/app.controller.js b/BackendAcademy/dist/src/app.controller.js deleted file mode 100644 index 8ed6dc0cd..000000000 --- a/BackendAcademy/dist/src/app.controller.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppController = void 0; -const common_1 = require("@nestjs/common"); -const app_service_1 = require("./app.service"); -let AppController = class AppController { - constructor(appService) { - this.appService = appService; - } - getHello() { - return this.appService.getHello(); - } -}; -exports.AppController = AppController; -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", String) -], AppController.prototype, "getHello", null); -exports.AppController = AppController = __decorate([ - (0, common_1.Controller)(), - __metadata("design:paramtypes", [app_service_1.AppService]) -], AppController); -//# sourceMappingURL=app.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/app.controller.js.map b/BackendAcademy/dist/src/app.controller.js.map deleted file mode 100644 index a133fc55e..000000000 --- a/BackendAcademy/dist/src/app.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"app.controller.js","sourceRoot":"","sources":["../../src/app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,+CAA2C;AAGpC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAGvD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;CACF,CAAA;AAPY,sCAAa;AAIxB;IADC,IAAA,YAAG,GAAE;;;;6CAGL;wBANU,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE8B,wBAAU;GADxC,aAAa,CAOzB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/app.module.d.ts b/BackendAcademy/dist/src/app.module.d.ts deleted file mode 100644 index 09cdb35c8..000000000 --- a/BackendAcademy/dist/src/app.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class AppModule { -} diff --git a/BackendAcademy/dist/src/app.module.js b/BackendAcademy/dist/src/app.module.js deleted file mode 100644 index 9f742b1bb..000000000 --- a/BackendAcademy/dist/src/app.module.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppModule = void 0; -const common_1 = require("@nestjs/common"); -const core_1 = require("@nestjs/core"); -const throttler_1 = require("@nestjs/throttler"); -const app_controller_1 = require("./app.controller"); -const app_service_1 = require("./app.service"); -const challenges_module_1 = require("./challenges/challenges.module"); -const rewards_module_1 = require("./rewards/rewards.module"); -const security_module_1 = require("./security/security.module"); -const submission_module_1 = require("./submissions/submission.module"); -const tutor_profile_module_1 = require("./users/tutor-profile.module"); -const user_profile_module_1 = require("./users/user-profile.module"); -const ai_module_1 = require("./ai/ai.module"); -const leaderboard_module_1 = require("./leaderboard/leaderboard.module"); -let AppModule = class AppModule { -}; -exports.AppModule = AppModule; -exports.AppModule = AppModule = __decorate([ - (0, common_1.Module)({ - imports: [ - throttler_1.ThrottlerModule.forRoot([ - { - limit: 10, - ttl: 60_000, - }, - ]), - user_profile_module_1.UserProfileModule, - tutor_profile_module_1.TutorProfileModule, - submission_module_1.SubmissionModule, - rewards_module_1.RewardsModule, - security_module_1.SecurityModule, - challenges_module_1.ChallengesModule, - ai_module_1.AiModule, - leaderboard_module_1.LeaderboardModule, - ], - controllers: [app_controller_1.AppController], - providers: [ - app_service_1.AppService, - { - provide: core_1.APP_GUARD, - useClass: throttler_1.ThrottlerGuard, - }, - ], - }) -], AppModule); -//# sourceMappingURL=app.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/app.module.js.map b/BackendAcademy/dist/src/app.module.js.map deleted file mode 100644 index 39b5d70eb..000000000 --- a/BackendAcademy/dist/src/app.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uCAAyC;AACzC,iDAAoE;AACpE,qDAAiD;AACjD,+CAA2C;AAC3C,sEAAkE;AAClE,6DAAyD;AACzD,gEAA4D;AAC5D,uEAAmE;AACnE,uEAAkE;AAClE,qEAAgE;AAChE,8CAA0C;AAC1C,yEAAqE;AA4B9D,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IA1BrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,2BAAe,CAAC,OAAO,CAAC;gBACtB;oBACE,KAAK,EAAE,EAAE;oBACT,GAAG,EAAE,MAAM;iBACZ;aACF,CAAC;YACF,uCAAiB;YACjB,yCAAkB;YAClB,oCAAgB;YAChB,8BAAa;YACb,gCAAc;YACd,oCAAgB;YAChB,oBAAQ;YACR,sCAAiB;SAClB;QACD,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE;YACT,wBAAU;YACV;gBACE,OAAO,EAAE,gBAAS;gBAClB,QAAQ,EAAE,0BAAc;aACzB;SACF;KACF,CAAC;GACW,SAAS,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/app.service.d.ts b/BackendAcademy/dist/src/app.service.d.ts deleted file mode 100644 index 0496e7902..000000000 --- a/BackendAcademy/dist/src/app.service.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare class AppService { - getHello(): string; -} diff --git a/BackendAcademy/dist/src/app.service.js b/BackendAcademy/dist/src/app.service.js deleted file mode 100644 index a0ec8be34..000000000 --- a/BackendAcademy/dist/src/app.service.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppService = void 0; -const common_1 = require("@nestjs/common"); -let AppService = class AppService { - getHello() { - return 'Hello from RustAcademy Backend!'; - } -}; -exports.AppService = AppService; -exports.AppService = AppService = __decorate([ - (0, common_1.Injectable)() -], AppService); -//# sourceMappingURL=app.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/app.service.js.map b/BackendAcademy/dist/src/app.service.js.map deleted file mode 100644 index e8e5f2a45..000000000 --- a/BackendAcademy/dist/src/app.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"app.service.js","sourceRoot":"","sources":["../../src/app.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAGrC,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,QAAQ;QACN,OAAO,iCAAiC,CAAC;IAC3C,CAAC;CACF,CAAA;AAJY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;GACA,UAAU,CAItB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/auth/auth.module.d.ts b/BackendAcademy/dist/src/auth/auth.module.d.ts deleted file mode 100644 index 3f7dba9ec..000000000 --- a/BackendAcademy/dist/src/auth/auth.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class AuthModule { -} diff --git a/BackendAcademy/dist/src/auth/auth.module.js b/BackendAcademy/dist/src/auth/auth.module.js deleted file mode 100644 index 45264b7e1..000000000 --- a/BackendAcademy/dist/src/auth/auth.module.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthModule = void 0; -const common_1 = require("@nestjs/common"); -const jwt_1 = require("@nestjs/jwt"); -const config_1 = require("@nestjs/config"); -let AuthModule = class AuthModule { -}; -exports.AuthModule = AuthModule; -exports.AuthModule = AuthModule = __decorate([ - (0, common_1.Module)({ - imports: [ - config_1.ConfigModule, - jwt_1.JwtModule.registerAsync({ - imports: [config_1.ConfigModule], - useFactory: (config) => ({ - secret: config.get('JWT_SECRET', 'changeme'), - signOptions: { expiresIn: '7d' }, - }), - inject: [config_1.ConfigService], - }), - ], - providers: [], - exports: [jwt_1.JwtModule], - }) -], AuthModule); -//# sourceMappingURL=auth.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/auth/auth.module.js.map b/BackendAcademy/dist/src/auth/auth.module.js.map deleted file mode 100644 index 538757342..000000000 --- a/BackendAcademy/dist/src/auth/auth.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../../src/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qCAAwC;AACxC,2CAA6D;AAiBtD,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IAftB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY;YACZ,eAAS,CAAC,aAAa,CAAC;gBACtB,OAAO,EAAE,CAAC,qBAAY,CAAC;gBACvB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,CAAC;oBACtC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAS,YAAY,EAAE,UAAU,CAAC;oBACpD,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;iBACjC,CAAC;gBACF,MAAM,EAAE,CAAC,sBAAa,CAAC;aACxB,CAAC;SACH;QACD,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,CAAC,eAAS,CAAC;KACrB,CAAC;GACW,UAAU,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.d.ts b/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.d.ts deleted file mode 100644 index 324c5fd6c..000000000 --- a/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CanActivate, ExecutionContext } from '@nestjs/common'; -import { JwtService } from '@nestjs/jwt'; -export interface TutorJwtPayload { - sub: string; - role: string; - iat?: number; - exp?: number; -} -export declare class JwtTutorGuard implements CanActivate { - private readonly jwtService; - constructor(jwtService: JwtService); - canActivate(context: ExecutionContext): Promise; - private extractBearerToken; -} diff --git a/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.js b/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.js deleted file mode 100644 index f85f7303c..000000000 --- a/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JwtTutorGuard = void 0; -const common_1 = require("@nestjs/common"); -const jwt_1 = require("@nestjs/jwt"); -let JwtTutorGuard = class JwtTutorGuard { - constructor(jwtService) { - this.jwtService = jwtService; - } - async canActivate(context) { - const request = context.switchToHttp().getRequest(); - const token = this.extractBearerToken(request); - if (!token) { - throw new common_1.UnauthorizedException({ - error: 'MISSING_TOKEN', - message: 'Authorization header with Bearer token is required', - }); - } - let payload; - try { - payload = await this.jwtService.verifyAsync(token); - } - catch { - throw new common_1.UnauthorizedException({ - error: 'INVALID_TOKEN', - message: 'Token is invalid or has expired', - }); - } - if (payload.role !== 'tutor') { - throw new common_1.ForbiddenException({ - error: 'TUTOR_ROLE_REQUIRED', - message: 'Only tutors are allowed to access this resource', - }); - } - request.tutor = payload; - return true; - } - extractBearerToken(request) { - const [type, token] = request.headers.authorization?.split(' ') ?? []; - return type === 'Bearer' ? token : undefined; - } -}; -exports.JwtTutorGuard = JwtTutorGuard; -exports.JwtTutorGuard = JwtTutorGuard = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [jwt_1.JwtService]) -], JwtTutorGuard); -//# sourceMappingURL=jwt-tutor.guard.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.js.map b/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.js.map deleted file mode 100644 index 29f4ca331..000000000 --- a/BackendAcademy/dist/src/auth/guards/jwt-tutor.guard.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"jwt-tutor.guard.js","sourceRoot":"","sources":["../../../../src/auth/guards/jwt-tutor.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAMwB;AACxB,qCAAyC;AAmBlC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAEvD,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,8BAAqB,CAAC;gBAC9B,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,oDAAoD;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAkB,KAAK,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,8BAAqB,CAAC;gBAC9B,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,iCAAiC;aAC3C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,2BAAkB,CAAC;gBAC3B,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,iDAAiD;aAC3D,CAAC,CAAC;QACL,CAAC;QAGA,OAAgD,CAAC,KAAK,GAAG,OAAO,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,kBAAkB,CAAC,OAAgB;QACzC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACtE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;CACF,CAAA;AAxCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE8B,gBAAU;GADxC,aAAa,CAwCzB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.controller.d.ts b/BackendAcademy/dist/src/badges/badges.controller.d.ts deleted file mode 100644 index fa301e079..000000000 --- a/BackendAcademy/dist/src/badges/badges.controller.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BadgesService } from './badges.service'; -import type { BadgeListResponse, UserBadgesResponse } from './interfaces/badges.interfaces'; -export declare class BadgesController { - private readonly badgesService; - constructor(badgesService: BadgesService); - getAllBadges(): BadgeListResponse; - getUserBadges(userId: string): UserBadgesResponse; - awardBadge(awardPayload: { - userId: string; - badgeId: string; - nftTokenId: string; - }): UserBadgesResponse; -} diff --git a/BackendAcademy/dist/src/badges/badges.controller.js b/BackendAcademy/dist/src/badges/badges.controller.js deleted file mode 100644 index 08b4aac76..000000000 --- a/BackendAcademy/dist/src/badges/badges.controller.js +++ /dev/null @@ -1,60 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BadgesController = void 0; -const common_1 = require("@nestjs/common"); -const badges_service_1 = require("./badges.service"); -let BadgesController = class BadgesController { - constructor(badgesService) { - this.badgesService = badgesService; - } - getAllBadges() { - return this.badgesService.getAllBadges(); - } - getUserBadges(userId) { - return this.badgesService.getUserBadges(userId); - } - awardBadge(awardPayload) { - return this.badgesService.awardBadge(awardPayload.userId, awardPayload.badgeId, awardPayload.nftTokenId); - } -}; -exports.BadgesController = BadgesController; -__decorate([ - (0, common_1.Get)(), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Object) -], BadgesController.prototype, "getAllBadges", null); -__decorate([ - (0, common_1.Get)('user/:userId'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Object) -], BadgesController.prototype, "getUserBadges", null); -__decorate([ - (0, common_1.Post)('award'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Object) -], BadgesController.prototype, "awardBadge", null); -exports.BadgesController = BadgesController = __decorate([ - (0, common_1.Controller)('badges'), - __metadata("design:paramtypes", [badges_service_1.BadgesService]) -], BadgesController); -//# sourceMappingURL=badges.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.controller.js.map b/BackendAcademy/dist/src/badges/badges.controller.js.map deleted file mode 100644 index 9e4c425be..000000000 --- a/BackendAcademy/dist/src/badges/badges.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"badges.controller.js","sourceRoot":"","sources":["../../../src/badges/badges.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA0F;AAC1F,qDAAiD;AAI1C,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAW7D,YAAY;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAC3C,CAAC;IAaD,aAAa,CAAkB,MAAc;QAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAcD,UAAU,CAER,YAAqE;QAErE,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAClC,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,UAAU,CACxB,CAAC;IACJ,CAAC;CACF,CAAA;AArDY,4CAAgB;AAY3B;IAFC,IAAA,YAAG,GAAE;IACL,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;;;;oDAGvB;AAaD;IAFC,IAAA,YAAG,EAAC,cAAc,CAAC;IACnB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACT,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;qDAE7B;AAcD;IAFC,IAAA,aAAI,EAAC,OAAO,CAAC;IACb,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IAErB,WAAA,IAAA,aAAI,GAAE,CAAA;;;;kDAQR;2BApDU,gBAAgB;IAD5B,IAAA,mBAAU,EAAC,QAAQ,CAAC;qCAEyB,8BAAa;GAD9C,gBAAgB,CAqD5B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.module.d.ts b/BackendAcademy/dist/src/badges/badges.module.d.ts deleted file mode 100644 index 5fec03f59..000000000 --- a/BackendAcademy/dist/src/badges/badges.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class BadgesModule { -} diff --git a/BackendAcademy/dist/src/badges/badges.module.js b/BackendAcademy/dist/src/badges/badges.module.js deleted file mode 100644 index 6dbcf44c0..000000000 --- a/BackendAcademy/dist/src/badges/badges.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BadgesModule = void 0; -const common_1 = require("@nestjs/common"); -const badges_controller_1 = require("./badges.controller"); -const badges_service_1 = require("./badges.service"); -let BadgesModule = class BadgesModule { -}; -exports.BadgesModule = BadgesModule; -exports.BadgesModule = BadgesModule = __decorate([ - (0, common_1.Module)({ - controllers: [badges_controller_1.BadgesController], - providers: [badges_service_1.BadgesService], - exports: [badges_service_1.BadgesService], - }) -], BadgesModule); -//# sourceMappingURL=badges.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.module.js.map b/BackendAcademy/dist/src/badges/badges.module.js.map deleted file mode 100644 index b66f6b2ba..000000000 --- a/BackendAcademy/dist/src/badges/badges.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"badges.module.js","sourceRoot":"","sources":["../../../src/badges/badges.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2DAAuD;AACvD,qDAAiD;AAO1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,oCAAgB,CAAC;QAC/B,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.service.d.ts b/BackendAcademy/dist/src/badges/badges.service.d.ts deleted file mode 100644 index 6ffaa8591..000000000 --- a/BackendAcademy/dist/src/badges/badges.service.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { BadgeListResponse, UserBadgesResponse } from './interfaces/badges.interfaces'; -export declare class BadgesService { - getAllBadges(): BadgeListResponse; - getUserBadges(userId: string): UserBadgesResponse; - awardBadge(userId: string, badgeId: string, nftTokenId: string): UserBadgesResponse; - resetUserBadges(userId: string): void; -} diff --git a/BackendAcademy/dist/src/badges/badges.service.js b/BackendAcademy/dist/src/badges/badges.service.js deleted file mode 100644 index 99cb56b35..000000000 --- a/BackendAcademy/dist/src/badges/badges.service.js +++ /dev/null @@ -1,70 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BadgesService = void 0; -const common_1 = require("@nestjs/common"); -const badgeDefinitions = { - 'first-login': { - id: 'first-login', - name: 'First Steps', - description: 'Log in for the first time.', - iconUrl: 'https://api.dicebear.com/7.x/identicon/svg?seed=first-login', - }, - 'ten-submissions': { - id: 'ten-submissions', - name: 'Dedicated Learner', - description: 'Complete 10 course submissions.', - iconUrl: 'https://api.dicebear.com/7.x/identicon/svg?seed=ten-submissions', - }, - 'streak-seven': { - id: 'streak-seven', - name: 'Week Warrior', - description: 'Maintain a 7-day activity streak.', - iconUrl: 'https://api.dicebear.com/7.x/identicon/svg?seed=streak-seven', - }, -}; -const userBadgesStore = new Map(); -let BadgesService = class BadgesService { - getAllBadges() { - return { - badges: Object.values(badgeDefinitions), - }; - } - getUserBadges(userId) { - const badges = userBadgesStore.get(userId) ?? []; - return { - userId, - badges, - }; - } - awardBadge(userId, badgeId, nftTokenId) { - const badge = badgeDefinitions[badgeId]; - if (!badge) { - throw new common_1.NotFoundException(`Badge '${badgeId}' not found.`); - } - const currentBadges = userBadgesStore.get(userId) ?? []; - if (currentBadges.some((ub) => ub.badge.id === badgeId)) { - return this.getUserBadges(userId); - } - const newUserBadge = { - badge, - awardedAt: new Date().toISOString(), - nftTokenId, - }; - userBadgesStore.set(userId, [...currentBadges, newUserBadge]); - return this.getUserBadges(userId); - } - resetUserBadges(userId) { - userBadgesStore.delete(userId); - } -}; -exports.BadgesService = BadgesService; -exports.BadgesService = BadgesService = __decorate([ - (0, common_1.Injectable)() -], BadgesService); -//# sourceMappingURL=badges.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.service.js.map b/BackendAcademy/dist/src/badges/badges.service.js.map deleted file mode 100644 index a49719114..000000000 --- a/BackendAcademy/dist/src/badges/badges.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"badges.service.js","sourceRoot":"","sources":["../../../src/badges/badges.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA+D;AAW/D,MAAM,gBAAgB,GAA0B;IAC9C,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,4BAA4B;QACzC,OAAO,EAAE,6DAA6D;KACvE;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,iEAAiE;KAC3E;IACD,cAAc,EAAE;QACd,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,8DAA8D;KACxE;CACF,CAAC;AAMF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;AAGhD,IAAM,aAAa,GAAnB,MAAM,aAAa;IAIxB,YAAY;QACV,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;SACxC,CAAC;IACJ,CAAC;IAOD,aAAa,CAAC,MAAc;QAI1B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjD,OAAO;YACL,MAAM;YACN,MAAM;SACP,CAAC;IACJ,CAAC;IAYD,UAAU,CACR,MAAc,EACd,OAAe,EACf,UAAkB;QAElB,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,0BAAiB,CAAC,UAAU,OAAO,cAAc,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAGxD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,YAAY,GAAc;YAC9B,KAAK;YACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU;SACX,CAAC;QAEF,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;QAE9D,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAKD,eAAe,CAAC,MAAc;QAC5B,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;CACF,CAAA;AAtEY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAsEzB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.service.spec.d.ts b/BackendAcademy/dist/src/badges/badges.service.spec.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/BackendAcademy/dist/src/badges/badges.service.spec.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/BackendAcademy/dist/src/badges/badges.service.spec.js b/BackendAcademy/dist/src/badges/badges.service.spec.js deleted file mode 100644 index fce7ad58f..000000000 --- a/BackendAcademy/dist/src/badges/badges.service.spec.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const testing_1 = require("@nestjs/testing"); -const badges_service_1 = require("./badges.service"); -const common_1 = require("@nestjs/common"); -describe('BadgesService', () => { - let service; - const USER_ID = 'test-user-123'; - const BADGE_ID = 'first-login'; - const NFT_TOKEN_ID = '0xabc123'; - beforeEach(async () => { - const module = await testing_1.Test.createTestingModule({ - providers: [badges_service_1.BadgesService], - }).compile(); - service = module.get(badges_service_1.BadgesService); - }); - describe('getAllBadges', () => { - it('should return all defined badges', () => { - const { badges } = service.getAllBadges(); - expect(badges.length).toBeGreaterThan(0); - expect(badges[0]).toHaveProperty('id'); - expect(badges[0]).toHaveProperty('name'); - }); - }); - describe('getUserBadges', () => { - it('should return an empty list for a user with no badges', () => { - const { badges } = service.getUserBadges(USER_ID); - expect(badges).toEqual([]); - }); - it('should return the correct user id', () => { - const { userId } = service.getUserBadges(USER_ID); - expect(userId).toBe(USER_ID); - }); - }); - describe('awardBadge', () => { - it('should award a badge to a user', () => { - const response = service.awardBadge(USER_ID, BADGE_ID, NFT_TOKEN_ID); - expect(response.userId).toBe(USER_ID); - expect(response.badges.length).toBe(1); - expect(response.badges[0].badge.id).toBe(BADGE_ID); - expect(response.badges[0].nftTokenId).toBe(NFT_TOKEN_ID); - }); - it('should not award the same badge twice to the same user', () => { - service.awardBadge(USER_ID, BADGE_ID, NFT_TOKEN_ID); - const response = service.awardBadge(USER_ID, BADGE_ID, 'different-token'); - expect(response.badges.length).toBe(1); - }); - it('should throw NotFoundException for non-existent badge', () => { - expect(() => service.awardBadge(USER_ID, 'non-existent', NFT_TOKEN_ID)).toThrow(common_1.NotFoundException); - }); - }); - describe('resetUserBadges', () => { - it('should clear all badges for a user', () => { - service.awardBadge(USER_ID, BADGE_ID, NFT_TOKEN_ID); - service.resetUserBadges(USER_ID); - const { badges } = service.getUserBadges(USER_ID); - expect(badges.length).toBe(0); - }); - }); -}); -//# sourceMappingURL=badges.service.spec.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/badges.service.spec.js.map b/BackendAcademy/dist/src/badges/badges.service.spec.js.map deleted file mode 100644 index 85b28b7e7..000000000 --- a/BackendAcademy/dist/src/badges/badges.service.spec.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"badges.service.spec.js","sourceRoot":"","sources":["../../../src/badges/badges.service.spec.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.d.ts b/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.d.ts deleted file mode 100644 index 2ee743842..000000000 --- a/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -export interface Badge { - id: string; - name: string; - description: string; - iconUrl: string; -} -export interface UserBadge { - badge: Badge; - awardedAt: string; - nftTokenId: string; -} -export interface UserBadgesResponse { - userId: string; - badges: UserBadge[]; -} -export interface BadgeListResponse { - badges: Badge[]; -} diff --git a/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.js b/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.js deleted file mode 100644 index fd55dc4c4..000000000 --- a/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=badges.interfaces.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.js.map b/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.js.map deleted file mode 100644 index 11e472c05..000000000 --- a/BackendAcademy/dist/src/badges/interfaces/badges.interfaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"badges.interfaces.js","sourceRoot":"","sources":["../../../../src/badges/interfaces/badges.interfaces.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.controller.d.ts b/BackendAcademy/dist/src/challenges/challenges.controller.d.ts deleted file mode 100644 index afa4b84f9..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.controller.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ChallengesService } from './challenges.service'; -import { CastChallengeVoteDto } from './dto/cast-challenge-vote.dto'; -import { ChallengeVoteResponse, ChallengeVoteTally } from './interfaces/challenge-vote.interface'; -export declare class ChallengesController { - private readonly challengesService; - constructor(challengesService: ChallengesService); - castVote(challengeId: string, dto: CastChallengeVoteDto): ChallengeVoteResponse; - getTally(challengeId: string): ChallengeVoteTally; -} diff --git a/BackendAcademy/dist/src/challenges/challenges.controller.js b/BackendAcademy/dist/src/challenges/challenges.controller.js deleted file mode 100644 index c6c766c02..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.controller.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChallengesController = void 0; -const common_1 = require("@nestjs/common"); -const challenges_service_1 = require("./challenges.service"); -const cast_challenge_vote_dto_1 = require("./dto/cast-challenge-vote.dto"); -let ChallengesController = class ChallengesController { - constructor(challengesService) { - this.challengesService = challengesService; - } - castVote(challengeId, dto) { - return this.challengesService.castVote(challengeId, dto); - } - getTally(challengeId) { - return this.challengesService.getTally(challengeId); - } -}; -exports.ChallengesController = ChallengesController; -__decorate([ - (0, common_1.Post)(':challengeId/votes'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('challengeId')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, cast_challenge_vote_dto_1.CastChallengeVoteDto]), - __metadata("design:returntype", Object) -], ChallengesController.prototype, "castVote", null); -__decorate([ - (0, common_1.Get)(':challengeId/votes'), - __param(0, (0, common_1.Param)('challengeId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Object) -], ChallengesController.prototype, "getTally", null); -exports.ChallengesController = ChallengesController = __decorate([ - (0, common_1.Controller)('challenges'), - __metadata("design:paramtypes", [challenges_service_1.ChallengesService]) -], ChallengesController); -//# sourceMappingURL=challenges.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.controller.js.map b/BackendAcademy/dist/src/challenges/challenges.controller.js.map deleted file mode 100644 index 625ff4137..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"challenges.controller.js","sourceRoot":"","sources":["../../../src/challenges/challenges.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA0F;AAC1F,6DAAyD;AACzD,2EAAqE;AAO9D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA6B,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAAG,CAAC;IAIrE,QAAQ,CACgB,WAAmB,EACjC,GAAyB;QAEjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAGD,QAAQ,CAAuB,WAAmB;QAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;CACF,CAAA;AAhBY,oDAAoB;AAK/B;IAFC,IAAA,aAAI,EAAC,oBAAoB,CAAC;IAC1B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IAErB,WAAA,IAAA,cAAK,EAAC,aAAa,CAAC,CAAA;IACpB,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,8CAAoB;;oDAGlC;AAGD;IADC,IAAA,YAAG,EAAC,oBAAoB,CAAC;IAChB,WAAA,IAAA,cAAK,EAAC,aAAa,CAAC,CAAA;;;;oDAE7B;+BAfU,oBAAoB;IADhC,IAAA,mBAAU,EAAC,YAAY,CAAC;qCAEyB,sCAAiB;GADtD,oBAAoB,CAgBhC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.module.d.ts b/BackendAcademy/dist/src/challenges/challenges.module.d.ts deleted file mode 100644 index ecaa62f34..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class ChallengesModule { -} diff --git a/BackendAcademy/dist/src/challenges/challenges.module.js b/BackendAcademy/dist/src/challenges/challenges.module.js deleted file mode 100644 index ceedd89ad..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChallengesModule = void 0; -const common_1 = require("@nestjs/common"); -const challenges_controller_1 = require("./challenges.controller"); -const challenges_service_1 = require("./challenges.service"); -let ChallengesModule = class ChallengesModule { -}; -exports.ChallengesModule = ChallengesModule; -exports.ChallengesModule = ChallengesModule = __decorate([ - (0, common_1.Module)({ - controllers: [challenges_controller_1.ChallengesController], - providers: [challenges_service_1.ChallengesService], - exports: [challenges_service_1.ChallengesService], - }) -], ChallengesModule); -//# sourceMappingURL=challenges.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.module.js.map b/BackendAcademy/dist/src/challenges/challenges.module.js.map deleted file mode 100644 index 7874bf756..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"challenges.module.js","sourceRoot":"","sources":["../../../src/challenges/challenges.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mEAA+D;AAC/D,6DAAyD;AAOlD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAL5B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,4CAAoB,CAAC;QACnC,SAAS,EAAE,CAAC,sCAAiB,CAAC;QAC9B,OAAO,EAAE,CAAC,sCAAiB,CAAC;KAC7B,CAAC;GACW,gBAAgB,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.module.spec.d.ts b/BackendAcademy/dist/src/challenges/challenges.module.spec.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.module.spec.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/BackendAcademy/dist/src/challenges/challenges.module.spec.js b/BackendAcademy/dist/src/challenges/challenges.module.spec.js deleted file mode 100644 index b4d173aa6..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.module.spec.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const testing_1 = require("@nestjs/testing"); -const challenges_controller_1 = require("./challenges.controller"); -const challenges_module_1 = require("./challenges.module"); -const challenges_service_1 = require("./challenges.service"); -describe('ChallengesModule', () => { - it('registers challenge voting controller and service', async () => { - const moduleRef = await testing_1.Test.createTestingModule({ - imports: [challenges_module_1.ChallengesModule], - }).compile(); - expect(moduleRef.get(challenges_controller_1.ChallengesController)).toBeInstanceOf(challenges_controller_1.ChallengesController); - expect(moduleRef.get(challenges_service_1.ChallengesService)).toBeInstanceOf(challenges_service_1.ChallengesService); - }); -}); -//# sourceMappingURL=challenges.module.spec.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.module.spec.js.map b/BackendAcademy/dist/src/challenges/challenges.module.spec.js.map deleted file mode 100644 index 10c1de801..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.module.spec.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"challenges.module.spec.js","sourceRoot":"","sources":["../../../src/challenges/challenges.module.spec.ts"],"names":[],"mappings":";;AAAA,6CAAuC;AACvC,mEAA+D;AAC/D,2DAAuD;AACvD,6DAAyD;AAEzD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,SAAS,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC/C,OAAO,EAAE,CAAC,oCAAgB,CAAC;SAC5B,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,4CAAoB,CAAC,CAAC,CAAC,cAAc,CAAC,4CAAoB,CAAC,CAAC;QACjF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,sCAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,sCAAiB,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.service.d.ts b/BackendAcademy/dist/src/challenges/challenges.service.d.ts deleted file mode 100644 index 6be3e2279..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.service.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { CastChallengeVoteDto } from './dto/cast-challenge-vote.dto'; -import { ChallengeVoteResponse, ChallengeVoteTally } from './interfaces/challenge-vote.interface'; -export declare class ChallengesService { - private readonly votesByChallenge; - castVote(challengeId: string, dto: CastChallengeVoteDto): ChallengeVoteResponse; - getTally(challengeId: string): ChallengeVoteTally; - resetVotes(): void; - private normalizeId; - private normalizeVote; -} diff --git a/BackendAcademy/dist/src/challenges/challenges.service.js b/BackendAcademy/dist/src/challenges/challenges.service.js deleted file mode 100644 index 5700e0a69..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.service.js +++ /dev/null @@ -1,79 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChallengesService = void 0; -const common_1 = require("@nestjs/common"); -let ChallengesService = class ChallengesService { - constructor() { - this.votesByChallenge = new Map(); - } - castVote(challengeId, dto) { - const normalizedChallengeId = this.normalizeId(challengeId, 'challengeId'); - const userId = this.normalizeId(dto.userId, 'userId'); - const value = this.normalizeVote(dto.value); - let votes = this.votesByChallenge.get(normalizedChallengeId); - if (!votes) { - votes = new Map(); - this.votesByChallenge.set(normalizedChallengeId, votes); - } - votes.set(userId, value); - return { - ...this.getTally(normalizedChallengeId), - userId, - userVote: value, - }; - } - getTally(challengeId) { - const normalizedChallengeId = this.normalizeId(challengeId, 'challengeId'); - const votes = this.votesByChallenge.get(normalizedChallengeId); - let upvotes = 0; - let downvotes = 0; - for (const value of votes?.values() ?? []) { - if (value === 'up') { - upvotes += 1; - } - else { - downvotes += 1; - } - } - return { - challengeId: normalizedChallengeId, - downvotes, - score: upvotes - downvotes, - totalVotes: upvotes + downvotes, - upvotes, - }; - } - resetVotes() { - this.votesByChallenge.clear(); - } - normalizeId(value, field) { - const normalized = value?.trim(); - if (!normalized) { - throw new common_1.BadRequestException({ - error: 'INVALID_CHALLENGE_VOTE', - message: `${field} is required`, - }); - } - return normalized; - } - normalizeVote(value) { - if (value !== 'up' && value !== 'down') { - throw new common_1.BadRequestException({ - error: 'INVALID_CHALLENGE_VOTE', - message: 'value must be either "up" or "down"', - }); - } - return value; - } -}; -exports.ChallengesService = ChallengesService; -exports.ChallengesService = ChallengesService = __decorate([ - (0, common_1.Injectable)() -], ChallengesService); -//# sourceMappingURL=challenges.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.service.js.map b/BackendAcademy/dist/src/challenges/challenges.service.js.map deleted file mode 100644 index 481fc60fa..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"challenges.service.js","sourceRoot":"","sources":["../../../src/challenges/challenges.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAiE;AAS1D,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAAvB;QACY,qBAAgB,GAAG,IAAI,GAAG,EAA2C,CAAC;IAoEzF,CAAC;IAlEC,QAAQ,CAAC,WAAmB,EAAE,GAAyB;QACrD,MAAM,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO;YACL,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACvC,MAAM;YACN,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,WAAmB;QAC1B,MAAM,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC/D,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,SAAS,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO;YACL,WAAW,EAAE,qBAAqB;YAClC,SAAS;YACT,KAAK,EAAE,OAAO,GAAG,SAAS;YAC1B,UAAU,EAAE,OAAO,GAAG,SAAS;YAC/B,OAAO;SACR,CAAC;IACJ,CAAC;IAED,UAAU;QACR,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAEO,WAAW,CAAC,KAAyB,EAAE,KAAa;QAC1D,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,4BAAmB,CAAC;gBAC5B,KAAK,EAAE,wBAAwB;gBAC/B,OAAO,EAAE,GAAG,KAAK,cAAc;aAChC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,aAAa,CAAC,KAAyB;QAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,4BAAmB,CAAC;gBAC5B,KAAK,EAAE,wBAAwB;gBAC/B,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AArEY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAqE7B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.service.spec.d.ts b/BackendAcademy/dist/src/challenges/challenges.service.spec.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.service.spec.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/BackendAcademy/dist/src/challenges/challenges.service.spec.js b/BackendAcademy/dist/src/challenges/challenges.service.spec.js deleted file mode 100644 index f15b53d44..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.service.spec.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const common_1 = require("@nestjs/common"); -const challenges_service_1 = require("./challenges.service"); -describe('ChallengesService', () => { - let service; - beforeEach(() => { - service = new challenges_service_1.ChallengesService(); - }); - it('records an upvote and returns the tally', () => { - const result = service.castVote('weekly-rust-1', { - userId: 'learner-1', - value: 'up', - }); - expect(result).toEqual({ - challengeId: 'weekly-rust-1', - downvotes: 0, - score: 1, - totalVotes: 1, - upvotes: 1, - userId: 'learner-1', - userVote: 'up', - }); - }); - it('updates a repeated user vote instead of double counting', () => { - service.castVote('weekly-rust-1', { userId: 'learner-1', value: 'up' }); - service.castVote('weekly-rust-1', { userId: 'learner-1', value: 'down' }); - service.castVote('weekly-rust-1', { userId: 'learner-2', value: 'up' }); - expect(service.getTally('weekly-rust-1')).toEqual({ - challengeId: 'weekly-rust-1', - downvotes: 1, - score: 0, - totalVotes: 2, - upvotes: 1, - }); - }); - it('keeps challenge tallies isolated', () => { - service.castVote('challenge-a', { userId: 'learner-1', value: 'up' }); - service.castVote('challenge-b', { userId: 'learner-1', value: 'down' }); - expect(service.getTally('challenge-a').score).toBe(1); - expect(service.getTally('challenge-b').score).toBe(-1); - }); - it('rejects invalid vote values', () => { - expect(() => service.castVote('challenge-a', { - userId: 'learner-1', - value: 'maybe', - })).toThrow(common_1.BadRequestException); - }); -}); -//# sourceMappingURL=challenges.service.spec.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/challenges.service.spec.js.map b/BackendAcademy/dist/src/challenges/challenges.service.spec.js.map deleted file mode 100644 index 3761c85e7..000000000 --- a/BackendAcademy/dist/src/challenges/challenges.service.spec.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"challenges.service.spec.js","sourceRoot":"","sources":["../../../src/challenges/challenges.service.spec.ts"],"names":[],"mappings":";;AAAA,2CAAqD;AACrD,6DAAyD;AAEzD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,OAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,sCAAiB,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC/C,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,eAAe;YAC5B,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,WAAW,EAAE,eAAe;YAC5B,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAExE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,EAAE,CACV,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;YAC9B,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,OAAe;SACvB,CAAC,CACH,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.d.ts b/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.d.ts deleted file mode 100644 index ba245c3fa..000000000 --- a/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ChallengeVoteValue } from '../interfaces/challenge-vote.interface'; -export declare class CastChallengeVoteDto { - userId: string; - value: ChallengeVoteValue; -} diff --git a/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.js b/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.js deleted file mode 100644 index 6acfad412..000000000 --- a/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CastChallengeVoteDto = void 0; -class CastChallengeVoteDto { -} -exports.CastChallengeVoteDto = CastChallengeVoteDto; -//# sourceMappingURL=cast-challenge-vote.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.js.map b/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.js.map deleted file mode 100644 index 19cbc37fe..000000000 --- a/BackendAcademy/dist/src/challenges/dto/cast-challenge-vote.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cast-challenge-vote.dto.js","sourceRoot":"","sources":["../../../../src/challenges/dto/cast-challenge-vote.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,oBAAoB;CAGhC;AAHD,oDAGC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/index.d.ts b/BackendAcademy/dist/src/challenges/index.d.ts deleted file mode 100644 index a57a654a7..000000000 --- a/BackendAcademy/dist/src/challenges/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { ChallengesController } from './challenges.controller'; -export { ChallengesModule } from './challenges.module'; -export { ChallengesService } from './challenges.service'; -export { CastChallengeVoteDto } from './dto/cast-challenge-vote.dto'; -export type { ChallengeVoteResponse, ChallengeVoteTally, ChallengeVoteValue, } from './interfaces/challenge-vote.interface'; diff --git a/BackendAcademy/dist/src/challenges/index.js b/BackendAcademy/dist/src/challenges/index.js deleted file mode 100644 index 1508fae93..000000000 --- a/BackendAcademy/dist/src/challenges/index.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CastChallengeVoteDto = exports.ChallengesService = exports.ChallengesModule = exports.ChallengesController = void 0; -var challenges_controller_1 = require("./challenges.controller"); -Object.defineProperty(exports, "ChallengesController", { enumerable: true, get: function () { return challenges_controller_1.ChallengesController; } }); -var challenges_module_1 = require("./challenges.module"); -Object.defineProperty(exports, "ChallengesModule", { enumerable: true, get: function () { return challenges_module_1.ChallengesModule; } }); -var challenges_service_1 = require("./challenges.service"); -Object.defineProperty(exports, "ChallengesService", { enumerable: true, get: function () { return challenges_service_1.ChallengesService; } }); -var cast_challenge_vote_dto_1 = require("./dto/cast-challenge-vote.dto"); -Object.defineProperty(exports, "CastChallengeVoteDto", { enumerable: true, get: function () { return cast_challenge_vote_dto_1.CastChallengeVoteDto; } }); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/index.js.map b/BackendAcademy/dist/src/challenges/index.js.map deleted file mode 100644 index 952990160..000000000 --- a/BackendAcademy/dist/src/challenges/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/challenges/index.ts"],"names":[],"mappings":";;;AAAA,iEAA+D;AAAtD,6HAAA,oBAAoB,OAAA;AAC7B,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,yEAAqE;AAA5D,+HAAA,oBAAoB,OAAA"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.d.ts b/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.d.ts deleted file mode 100644 index 19cd69bb2..000000000 --- a/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type ChallengeVoteValue = 'up' | 'down'; -export interface ChallengeVoteTally { - challengeId: string; - downvotes: number; - score: number; - totalVotes: number; - upvotes: number; -} -export interface ChallengeVoteResponse extends ChallengeVoteTally { - userId: string; - userVote: ChallengeVoteValue; -} diff --git a/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.js b/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.js deleted file mode 100644 index fa79785c6..000000000 --- a/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=challenge-vote.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.js.map b/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.js.map deleted file mode 100644 index 5330d22bb..000000000 --- a/BackendAcademy/dist/src/challenges/interfaces/challenge-vote.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"challenge-vote.interface.js","sourceRoot":"","sources":["../../../../src/challenges/interfaces/challenge-vote.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/chat.controller.d.ts b/BackendAcademy/dist/src/chat/chat.controller.d.ts deleted file mode 100644 index 12f03169c..000000000 --- a/BackendAcademy/dist/src/chat/chat.controller.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ChatService } from './chat.service'; -import { CreateMessageDto } from './dto/create-message.dto'; -import { CreateRoomDto } from './dto/create-room.dto'; -export declare class ChatController { - private readonly chatService; - constructor(chatService: ChatService); - createRoom(createRoomDto: CreateRoomDto): import("./interfaces/chat.interface").ChatRoom; - findAllRooms(): import("./interfaces/chat.interface").ChatRoom[]; - findRoom(roomId: string): import("./interfaces/chat.interface").ChatRoom; - createMessage(createMessageDto: CreateMessageDto): import("./interfaces/chat.interface").Message; - findMessagesByRoom(roomId: string): import("./interfaces/chat.interface").Message[]; -} diff --git a/BackendAcademy/dist/src/chat/chat.controller.js b/BackendAcademy/dist/src/chat/chat.controller.js deleted file mode 100644 index a4fbe1701..000000000 --- a/BackendAcademy/dist/src/chat/chat.controller.js +++ /dev/null @@ -1,79 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatController = void 0; -const common_1 = require("@nestjs/common"); -const chat_service_1 = require("./chat.service"); -const create_message_dto_1 = require("./dto/create-message.dto"); -const create_room_dto_1 = require("./dto/create-room.dto"); -let ChatController = class ChatController { - constructor(chatService) { - this.chatService = chatService; - } - createRoom(createRoomDto) { - return this.chatService.createRoom(createRoomDto); - } - findAllRooms() { - return this.chatService.findAllRooms(); - } - findRoom(roomId) { - return this.chatService.findRoomById(roomId); - } - createMessage(createMessageDto) { - return this.chatService.createMessage(createMessageDto); - } - findMessagesByRoom(roomId) { - return this.chatService.findMessagesByRoom(roomId); - } -}; -exports.ChatController = ChatController; -__decorate([ - (0, common_1.Post)('rooms'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [create_room_dto_1.CreateRoomDto]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "createRoom", null); -__decorate([ - (0, common_1.Get)('rooms'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], ChatController.prototype, "findAllRooms", null); -__decorate([ - (0, common_1.Get)('rooms/:roomId'), - __param(0, (0, common_1.Param)('roomId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "findRoom", null); -__decorate([ - (0, common_1.Post)('messages'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [create_message_dto_1.CreateMessageDto]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "createMessage", null); -__decorate([ - (0, common_1.Get)('rooms/:roomId/messages'), - __param(0, (0, common_1.Param)('roomId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "findMessagesByRoom", null); -exports.ChatController = ChatController = __decorate([ - (0, common_1.Controller)('chat'), - __metadata("design:paramtypes", [chat_service_1.ChatService]) -], ChatController); -//# sourceMappingURL=chat.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/chat.controller.js.map b/BackendAcademy/dist/src/chat/chat.controller.js.map deleted file mode 100644 index b66208af0..000000000 --- a/BackendAcademy/dist/src/chat/chat.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"chat.controller.js","sourceRoot":"","sources":["../../../src/chat/chat.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoE;AACpE,iDAA6C;AAC7C,iEAA4D;AAC5D,2DAAsD;AAG/C,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAA6B,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAGzD,UAAU,CAAS,aAA4B;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;IAGD,YAAY;QACV,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IACzC,CAAC;IAGD,QAAQ,CAAkB,MAAc;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAGD,aAAa,CAAS,gBAAkC;QACtD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC1D,CAAC;IAGD,kBAAkB,CAAkB,MAAc;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AA3BY,wCAAc;AAIzB;IADC,IAAA,aAAI,EAAC,OAAO,CAAC;IACF,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAgB,+BAAa;;gDAE9C;AAGD;IADC,IAAA,YAAG,EAAC,OAAO,CAAC;;;;kDAGZ;AAGD;IADC,IAAA,YAAG,EAAC,eAAe,CAAC;IACX,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;8CAExB;AAGD;IADC,IAAA,aAAI,EAAC,UAAU,CAAC;IACF,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAmB,qCAAgB;;mDAEvD;AAGD;IADC,IAAA,YAAG,EAAC,wBAAwB,CAAC;IACV,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;wDAElC;yBA1BU,cAAc;IAD1B,IAAA,mBAAU,EAAC,MAAM,CAAC;qCAEyB,0BAAW;GAD1C,cAAc,CA2B1B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/chat.module.d.ts b/BackendAcademy/dist/src/chat/chat.module.d.ts deleted file mode 100644 index 24a4b7f7b..000000000 --- a/BackendAcademy/dist/src/chat/chat.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class ChatModule { -} diff --git a/BackendAcademy/dist/src/chat/chat.module.js b/BackendAcademy/dist/src/chat/chat.module.js deleted file mode 100644 index fcfb47da9..000000000 --- a/BackendAcademy/dist/src/chat/chat.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatModule = void 0; -const common_1 = require("@nestjs/common"); -const chat_controller_1 = require("./chat.controller"); -const chat_service_1 = require("./chat.service"); -let ChatModule = class ChatModule { -}; -exports.ChatModule = ChatModule; -exports.ChatModule = ChatModule = __decorate([ - (0, common_1.Module)({ - controllers: [chat_controller_1.ChatController], - providers: [chat_service_1.ChatService], - exports: [chat_service_1.ChatService], - }) -], ChatModule); -//# sourceMappingURL=chat.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/chat.module.js.map b/BackendAcademy/dist/src/chat/chat.module.js.map deleted file mode 100644 index 7b49e741e..000000000 --- a/BackendAcademy/dist/src/chat/chat.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"chat.module.js","sourceRoot":"","sources":["../../../src/chat/chat.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AACnD,iDAA6C;AAOtC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IALtB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,gCAAc,CAAC;QAC7B,SAAS,EAAE,CAAC,0BAAW,CAAC;QACxB,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,UAAU,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/chat.service.d.ts b/BackendAcademy/dist/src/chat/chat.service.d.ts deleted file mode 100644 index ee502ed26..000000000 --- a/BackendAcademy/dist/src/chat/chat.service.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ChatRoom, Message } from './interfaces/chat.interface'; -import { CreateMessageDto } from './dto/create-message.dto'; -import { CreateRoomDto } from './dto/create-room.dto'; -export declare class ChatService { - private rooms; - private messages; - createRoom(createRoomDto: CreateRoomDto): ChatRoom; - findAllRooms(): ChatRoom[]; - findRoomById(roomId: string): ChatRoom | undefined; - createMessage(createMessageDto: CreateMessageDto): Message; - findMessagesByRoom(roomId: string): Message[]; -} diff --git a/BackendAcademy/dist/src/chat/chat.service.js b/BackendAcademy/dist/src/chat/chat.service.js deleted file mode 100644 index 28a144ec0..000000000 --- a/BackendAcademy/dist/src/chat/chat.service.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatService = void 0; -const common_1 = require("@nestjs/common"); -let ChatService = class ChatService { - constructor() { - this.rooms = []; - this.messages = []; - } - createRoom(createRoomDto) { - const newRoom = { - id: Math.random().toString(36).substring(2, 9), - ...createRoomDto, - createdAt: new Date(), - }; - this.rooms.push(newRoom); - return newRoom; - } - findAllRooms() { - return this.rooms; - } - findRoomById(roomId) { - return this.rooms.find(r => r.id === roomId); - } - createMessage(createMessageDto) { - const newMessage = { - id: Math.random().toString(36).substring(2, 9), - ...createMessageDto, - createdAt: new Date(), - }; - this.messages.push(newMessage); - return newMessage; - } - findMessagesByRoom(roomId) { - return this.messages.filter(m => m.roomId === roomId); - } -}; -exports.ChatService = ChatService; -exports.ChatService = ChatService = __decorate([ - (0, common_1.Injectable)() -], ChatService); -//# sourceMappingURL=chat.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/chat.service.js.map b/BackendAcademy/dist/src/chat/chat.service.js.map deleted file mode 100644 index 48f64375e..000000000 --- a/BackendAcademy/dist/src/chat/chat.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../../src/chat/chat.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAMrC,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QACG,UAAK,GAAe,EAAE,CAAC;QACvB,aAAQ,GAAc,EAAE,CAAC;IAiCnC,CAAC;IA/BC,UAAU,CAAC,aAA4B;QACrC,MAAM,OAAO,GAAa;YACxB,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9C,GAAG,aAAa;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,gBAAkC;QAC9C,MAAM,UAAU,GAAY;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9C,GAAG,gBAAgB;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,kBAAkB,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AAnCY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;GACA,WAAW,CAmCvB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/dto/create-message.dto.d.ts b/BackendAcademy/dist/src/chat/dto/create-message.dto.d.ts deleted file mode 100644 index 164b527f9..000000000 --- a/BackendAcademy/dist/src/chat/dto/create-message.dto.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare class CreateMessageDto { - roomId: string; - senderId: string; - content: string; -} diff --git a/BackendAcademy/dist/src/chat/dto/create-message.dto.js b/BackendAcademy/dist/src/chat/dto/create-message.dto.js deleted file mode 100644 index d94aa0274..000000000 --- a/BackendAcademy/dist/src/chat/dto/create-message.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateMessageDto = void 0; -class CreateMessageDto { -} -exports.CreateMessageDto = CreateMessageDto; -//# sourceMappingURL=create-message.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/dto/create-message.dto.js.map b/BackendAcademy/dist/src/chat/dto/create-message.dto.js.map deleted file mode 100644 index 18ca1f911..000000000 --- a/BackendAcademy/dist/src/chat/dto/create-message.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"create-message.dto.js","sourceRoot":"","sources":["../../../../src/chat/dto/create-message.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAgB;CAI5B;AAJD,4CAIC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/dto/create-room.dto.d.ts b/BackendAcademy/dist/src/chat/dto/create-room.dto.d.ts deleted file mode 100644 index 9cf11da11..000000000 --- a/BackendAcademy/dist/src/chat/dto/create-room.dto.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare class CreateRoomDto { - name?: string; - type: 'direct' | 'room'; - participants: string[]; -} diff --git a/BackendAcademy/dist/src/chat/dto/create-room.dto.js b/BackendAcademy/dist/src/chat/dto/create-room.dto.js deleted file mode 100644 index 53b4fb729..000000000 --- a/BackendAcademy/dist/src/chat/dto/create-room.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateRoomDto = void 0; -class CreateRoomDto { -} -exports.CreateRoomDto = CreateRoomDto; -//# sourceMappingURL=create-room.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/dto/create-room.dto.js.map b/BackendAcademy/dist/src/chat/dto/create-room.dto.js.map deleted file mode 100644 index 8c95fb03d..000000000 --- a/BackendAcademy/dist/src/chat/dto/create-room.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"create-room.dto.js","sourceRoot":"","sources":["../../../../src/chat/dto/create-room.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;CAIzB;AAJD,sCAIC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/interfaces/chat.interface.d.ts b/BackendAcademy/dist/src/chat/interfaces/chat.interface.d.ts deleted file mode 100644 index cefca0de4..000000000 --- a/BackendAcademy/dist/src/chat/interfaces/chat.interface.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export type ChatType = 'direct' | 'room'; -export interface ChatRoom { - id: string; - name?: string; - type: ChatType; - participants: string[]; - createdAt: Date; -} -export interface Message { - id: string; - roomId: string; - senderId: string; - content: string; - createdAt: Date; -} diff --git a/BackendAcademy/dist/src/chat/interfaces/chat.interface.js b/BackendAcademy/dist/src/chat/interfaces/chat.interface.js deleted file mode 100644 index adeb13128..000000000 --- a/BackendAcademy/dist/src/chat/interfaces/chat.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=chat.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/chat/interfaces/chat.interface.js.map b/BackendAcademy/dist/src/chat/interfaces/chat.interface.js.map deleted file mode 100644 index bb94f3240..000000000 --- a/BackendAcademy/dist/src/chat/interfaces/chat.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"chat.interface.js","sourceRoot":"","sources":["../../../../src/chat/interfaces/chat.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/config/config.module.d.ts b/BackendAcademy/dist/src/config/config.module.d.ts deleted file mode 100644 index 3e2413603..000000000 --- a/BackendAcademy/dist/src/config/config.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class AppConfigModule { -} diff --git a/BackendAcademy/dist/src/config/config.module.js b/BackendAcademy/dist/src/config/config.module.js deleted file mode 100644 index 14895c789..000000000 --- a/BackendAcademy/dist/src/config/config.module.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppConfigModule = void 0; -const common_1 = require("@nestjs/common"); -const config_1 = require("@nestjs/config"); -const Joi = __importStar(require("joi")); -let AppConfigModule = class AppConfigModule { -}; -exports.AppConfigModule = AppConfigModule; -exports.AppConfigModule = AppConfigModule = __decorate([ - (0, common_1.Module)({ - imports: [ - config_1.ConfigModule.forRoot({ - isGlobal: true, - validationSchema: Joi.object({ - NODE_ENV: Joi.string().valid('development', 'production', 'test').default('development'), - PORT: Joi.number().default(3000), - DATABASE_URL: Joi.string().optional(), - REDIS_HOST: Joi.string().default('localhost'), - REDIS_PORT: Joi.number().default(6379), - JWT_SECRET: Joi.string().optional(), - }), - }), - ], - exports: [config_1.ConfigModule], - }) -], AppConfigModule); -//# sourceMappingURL=config.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/config/config.module.js.map b/BackendAcademy/dist/src/config/config.module.js.map deleted file mode 100644 index e7c4be4bf..000000000 --- a/BackendAcademy/dist/src/config/config.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.module.js","sourceRoot":"","sources":["../../../src/config/config.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAwC;AACxC,2CAAkE;AAClE,yCAA2B;AAkBpB,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAhB3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAgB,CAAC,OAAO,CAAC;gBACvB,QAAQ,EAAE,IAAI;gBACd,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC;oBAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;oBACxF,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBACrC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;oBAC7C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;oBACtC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBACpC,CAAC;aACH,CAAC;SACH;QACD,OAAO,EAAE,CAAC,qBAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.controller.d.ts b/BackendAcademy/dist/src/courses/course.controller.d.ts deleted file mode 100644 index b0c54796d..000000000 --- a/BackendAcademy/dist/src/courses/course.controller.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CourseService } from './course.service'; -import { CreateCourseDto } from './dto/create-course.dto'; -import { UpdateCourseDto } from './dto/update-course.dto'; -export declare class CourseController { - private readonly courseService; - constructor(courseService: CourseService); - create(dto: CreateCourseDto): Promise; - findAll(): Promise; - findByLevel(level: string): Promise; - findById(id: string): Promise; - update(id: string, dto: UpdateCourseDto): Promise; - remove(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/courses/course.controller.js b/BackendAcademy/dist/src/courses/course.controller.js deleted file mode 100644 index 820356be2..000000000 --- a/BackendAcademy/dist/src/courses/course.controller.js +++ /dev/null @@ -1,90 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CourseController = void 0; -const common_1 = require("@nestjs/common"); -const course_service_1 = require("./course.service"); -const create_course_dto_1 = require("./dto/create-course.dto"); -const update_course_dto_1 = require("./dto/update-course.dto"); -let CourseController = class CourseController { - constructor(courseService) { - this.courseService = courseService; - } - async create(dto) { - return this.courseService.create(dto); - } - async findAll() { - return this.courseService.findAll(); - } - async findByLevel(level) { - return this.courseService.findByLevel(level); - } - async findById(id) { - return this.courseService.findById(id); - } - async update(id, dto) { - return this.courseService.update(id, dto); - } - async remove(id) { - return this.courseService.remove(id); - } -}; -exports.CourseController = CourseController; -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [create_course_dto_1.CreateCourseDto]), - __metadata("design:returntype", Promise) -], CourseController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], CourseController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)('level/:level'), - __param(0, (0, common_1.Param)('level')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], CourseController.prototype, "findByLevel", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], CourseController.prototype, "findById", null); -__decorate([ - (0, common_1.Put)(':id'), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, update_course_dto_1.UpdateCourseDto]), - __metadata("design:returntype", Promise) -], CourseController.prototype, "update", null); -__decorate([ - (0, common_1.Delete)(':id'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], CourseController.prototype, "remove", null); -exports.CourseController = CourseController = __decorate([ - (0, common_1.Controller)('courses'), - __metadata("design:paramtypes", [course_service_1.CourseService]) -], CourseController); -//# sourceMappingURL=course.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.controller.js.map b/BackendAcademy/dist/src/courses/course.controller.js.map deleted file mode 100644 index e9d60cd07..000000000 --- a/BackendAcademy/dist/src/courses/course.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"course.controller.js","sourceRoot":"","sources":["../../../src/courses/course.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAiF;AACjF,qDAAiD;AACjD,+DAA0D;AAC1D,+DAA0D;AAGnD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAGvD,AAAN,KAAK,CAAC,MAAM,CAAS,GAAoB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAiB,KAAa;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAAc,EAAU;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU,EAAU,GAAoB;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;CACF,CAAA;AAhCY,4CAAgB;AAIrB;IADL,IAAA,aAAI,GAAE;IACO,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,mCAAe;;8CAExC;AAGK;IADL,IAAA,YAAG,GAAE;;;;+CAGL;AAGK;IADL,IAAA,YAAG,EAAC,cAAc,CAAC;IACD,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;;;mDAEhC;AAGK;IADL,IAAA,YAAG,EAAC,KAAK,CAAC;IACK,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;gDAE1B;AAGK;IADL,IAAA,YAAG,EAAC,KAAK,CAAC;IACG,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,mCAAe;;8CAEjE;AAGK;IADL,IAAA,eAAM,EAAC,KAAK,CAAC;IACA,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;8CAExB;2BA/BU,gBAAgB;IAD5B,IAAA,mBAAU,EAAC,SAAS,CAAC;qCAEwB,8BAAa;GAD9C,gBAAgB,CAgC5B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.entity.d.ts b/BackendAcademy/dist/src/courses/course.entity.d.ts deleted file mode 100644 index 49df0c573..000000000 --- a/BackendAcademy/dist/src/courses/course.entity.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { CourseLevel } from './interfaces/course-level.enum'; -export declare class CourseEntity { - id: string; - title: string; - description: string; - level: CourseLevel; - order: number; - learningPathId: string; - duration: number; - prerequisites: string[]; - skills: string[]; - xpReward: number; - isActive: boolean; - createdAt: Date; - updatedAt: Date; - constructor(partial: Partial); -} diff --git a/BackendAcademy/dist/src/courses/course.entity.js b/BackendAcademy/dist/src/courses/course.entity.js deleted file mode 100644 index f9dd80622..000000000 --- a/BackendAcademy/dist/src/courses/course.entity.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CourseEntity = void 0; -class CourseEntity { - constructor(partial) { - Object.assign(this, partial); - this.createdAt = this.createdAt || new Date(); - this.updatedAt = this.updatedAt || new Date(); - this.isActive = this.isActive ?? true; - this.prerequisites = this.prerequisites || []; - this.skills = this.skills || []; - } -} -exports.CourseEntity = CourseEntity; -//# sourceMappingURL=course.entity.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.entity.js.map b/BackendAcademy/dist/src/courses/course.entity.js.map deleted file mode 100644 index a30c2f601..000000000 --- a/BackendAcademy/dist/src/courses/course.entity.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"course.entity.js","sourceRoot":"","sources":["../../../src/courses/course.entity.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IAevB,YAAY,OAA8B;QACxC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,CAAC;CACF;AAvBD,oCAuBC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.module.d.ts b/BackendAcademy/dist/src/courses/course.module.d.ts deleted file mode 100644 index 30ef43d71..000000000 --- a/BackendAcademy/dist/src/courses/course.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class CourseModule { -} diff --git a/BackendAcademy/dist/src/courses/course.module.js b/BackendAcademy/dist/src/courses/course.module.js deleted file mode 100644 index 62e4479be..000000000 --- a/BackendAcademy/dist/src/courses/course.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CourseModule = void 0; -const common_1 = require("@nestjs/common"); -const course_controller_1 = require("./course.controller"); -const course_service_1 = require("./course.service"); -let CourseModule = class CourseModule { -}; -exports.CourseModule = CourseModule; -exports.CourseModule = CourseModule = __decorate([ - (0, common_1.Module)({ - controllers: [course_controller_1.CourseController], - providers: [course_service_1.CourseService], - exports: [course_service_1.CourseService], - }) -], CourseModule); -//# sourceMappingURL=course.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.module.js.map b/BackendAcademy/dist/src/courses/course.module.js.map deleted file mode 100644 index e9ea32e47..000000000 --- a/BackendAcademy/dist/src/courses/course.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"course.module.js","sourceRoot":"","sources":["../../../src/courses/course.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2DAAuD;AACvD,qDAAiD;AAO1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,oCAAgB,CAAC;QAC/B,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.service.d.ts b/BackendAcademy/dist/src/courses/course.service.d.ts deleted file mode 100644 index 7aeb3fefc..000000000 --- a/BackendAcademy/dist/src/courses/course.service.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { CourseEntity } from './course.entity'; -import { CreateCourseDto } from './dto/create-course.dto'; -import { UpdateCourseDto } from './dto/update-course.dto'; -export declare class CourseService { - private readonly courses; - create(dto: CreateCourseDto): Promise; - findAll(): Promise; - findByLevel(level: string): Promise; - findById(id: string): Promise; - update(id: string, dto: UpdateCourseDto): Promise; - remove(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/courses/course.service.js b/BackendAcademy/dist/src/courses/course.service.js deleted file mode 100644 index aa033acf7..000000000 --- a/BackendAcademy/dist/src/courses/course.service.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CourseService = void 0; -const common_1 = require("@nestjs/common"); -const course_entity_1 = require("./course.entity"); -let CourseService = class CourseService { - constructor() { - this.courses = new Map(); - } - async create(dto) { - const course = new course_entity_1.CourseEntity({ - id: crypto.randomUUID(), - ...dto, - }); - this.courses.set(course.id, course); - return course; - } - async findAll() { - return Array.from(this.courses.values()).filter(c => c.isActive); - } - async findByLevel(level) { - return Array.from(this.courses.values()).filter(c => c.isActive && c.level === level); - } - async findById(id) { - return this.courses.get(id) || null; - } - async update(id, dto) { - const course = this.courses.get(id); - if (!course) - return null; - Object.assign(course, dto, { updatedAt: new Date() }); - return course; - } - async remove(id) { - return this.courses.delete(id); - } -}; -exports.CourseService = CourseService; -exports.CourseService = CourseService = __decorate([ - (0, common_1.Injectable)() -], CourseService); -//# sourceMappingURL=course.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/course.service.js.map b/BackendAcademy/dist/src/courses/course.service.js.map deleted file mode 100644 index 77446f84c..000000000 --- a/BackendAcademy/dist/src/courses/course.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"course.service.js","sourceRoot":"","sources":["../../../src/courses/course.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,mDAA+C;AAKxC,IAAM,aAAa,GAAnB,MAAM,aAAa;IAAnB;QACY,YAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;IAmClE,CAAC;IAjCC,KAAK,CAAC,MAAM,CAAC,GAAoB;QAC/B,MAAM,MAAM,GAAG,IAAI,4BAAY,CAAC;YAC9B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,GAAG,GAAG;SACP,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,GAAoB;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;CACF,CAAA;AApCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAoCzB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/dto/create-course.dto.d.ts b/BackendAcademy/dist/src/courses/dto/create-course.dto.d.ts deleted file mode 100644 index f37a4fdfb..000000000 --- a/BackendAcademy/dist/src/courses/dto/create-course.dto.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { CourseLevel } from '../interfaces/course-level.enum'; -export declare class CreateCourseDto { - title: string; - description: string; - level: CourseLevel; - order: number; - learningPathId: string; - duration: number; - prerequisites?: string[]; - skills?: string[]; - xpReward?: number; -} diff --git a/BackendAcademy/dist/src/courses/dto/create-course.dto.js b/BackendAcademy/dist/src/courses/dto/create-course.dto.js deleted file mode 100644 index 233443532..000000000 --- a/BackendAcademy/dist/src/courses/dto/create-course.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateCourseDto = void 0; -class CreateCourseDto { -} -exports.CreateCourseDto = CreateCourseDto; -//# sourceMappingURL=create-course.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/dto/create-course.dto.js.map b/BackendAcademy/dist/src/courses/dto/create-course.dto.js.map deleted file mode 100644 index 5f2bb2de6..000000000 --- a/BackendAcademy/dist/src/courses/dto/create-course.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"create-course.dto.js","sourceRoot":"","sources":["../../../../src/courses/dto/create-course.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;CAU3B;AAVD,0CAUC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/dto/update-course.dto.d.ts b/BackendAcademy/dist/src/courses/dto/update-course.dto.d.ts deleted file mode 100644 index 0cd4c062d..000000000 --- a/BackendAcademy/dist/src/courses/dto/update-course.dto.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CourseLevel } from '../interfaces/course-level.enum'; -export declare class UpdateCourseDto { - title?: string; - description?: string; - level?: CourseLevel; - order?: number; - learningPathId?: string; - duration?: number; - prerequisites?: string[]; - skills?: string[]; - xpReward?: number; - isActive?: boolean; -} diff --git a/BackendAcademy/dist/src/courses/dto/update-course.dto.js b/BackendAcademy/dist/src/courses/dto/update-course.dto.js deleted file mode 100644 index 9683eed94..000000000 --- a/BackendAcademy/dist/src/courses/dto/update-course.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateCourseDto = void 0; -class UpdateCourseDto { -} -exports.UpdateCourseDto = UpdateCourseDto; -//# sourceMappingURL=update-course.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/dto/update-course.dto.js.map b/BackendAcademy/dist/src/courses/dto/update-course.dto.js.map deleted file mode 100644 index b477ddddb..000000000 --- a/BackendAcademy/dist/src/courses/dto/update-course.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"update-course.dto.js","sourceRoot":"","sources":["../../../../src/courses/dto/update-course.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;CAW3B;AAXD,0CAWC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/index.d.ts b/BackendAcademy/dist/src/courses/index.d.ts deleted file mode 100644 index f4a7b3363..000000000 --- a/BackendAcademy/dist/src/courses/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { CourseModule } from './course.module'; -export { CourseService } from './course.service'; -export { CourseEntity } from './course.entity'; -export { CourseLevel } from './interfaces/course-level.enum'; -export { ICourse, ILesson, ITask } from './interfaces/course.interface'; -export { CreateCourseDto } from './dto/create-course.dto'; -export { UpdateCourseDto } from './dto/update-course.dto'; diff --git a/BackendAcademy/dist/src/courses/index.js b/BackendAcademy/dist/src/courses/index.js deleted file mode 100644 index 5eaab80fe..000000000 --- a/BackendAcademy/dist/src/courses/index.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateCourseDto = exports.CreateCourseDto = exports.CourseLevel = exports.CourseEntity = exports.CourseService = exports.CourseModule = void 0; -var course_module_1 = require("./course.module"); -Object.defineProperty(exports, "CourseModule", { enumerable: true, get: function () { return course_module_1.CourseModule; } }); -var course_service_1 = require("./course.service"); -Object.defineProperty(exports, "CourseService", { enumerable: true, get: function () { return course_service_1.CourseService; } }); -var course_entity_1 = require("./course.entity"); -Object.defineProperty(exports, "CourseEntity", { enumerable: true, get: function () { return course_entity_1.CourseEntity; } }); -var course_level_enum_1 = require("./interfaces/course-level.enum"); -Object.defineProperty(exports, "CourseLevel", { enumerable: true, get: function () { return course_level_enum_1.CourseLevel; } }); -var create_course_dto_1 = require("./dto/create-course.dto"); -Object.defineProperty(exports, "CreateCourseDto", { enumerable: true, get: function () { return create_course_dto_1.CreateCourseDto; } }); -var update_course_dto_1 = require("./dto/update-course.dto"); -Object.defineProperty(exports, "UpdateCourseDto", { enumerable: true, get: function () { return update_course_dto_1.UpdateCourseDto; } }); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/index.js.map b/BackendAcademy/dist/src/courses/index.js.map deleted file mode 100644 index b1aa4c89a..000000000 --- a/BackendAcademy/dist/src/courses/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/courses/index.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,oEAA6D;AAApD,gHAAA,WAAW,OAAA;AAEpB,6DAA0D;AAAjD,oHAAA,eAAe,OAAA;AACxB,6DAA0D;AAAjD,oHAAA,eAAe,OAAA"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/interfaces/course-level.enum.d.ts b/BackendAcademy/dist/src/courses/interfaces/course-level.enum.d.ts deleted file mode 100644 index 9d0ff202b..000000000 --- a/BackendAcademy/dist/src/courses/interfaces/course-level.enum.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare enum CourseLevel { - BEGINNER = "beginner", - INTERMEDIATE = "intermediate", - ADVANCED = "advanced", - WEB3 = "web3" -} diff --git a/BackendAcademy/dist/src/courses/interfaces/course-level.enum.js b/BackendAcademy/dist/src/courses/interfaces/course-level.enum.js deleted file mode 100644 index 25f3da108..000000000 --- a/BackendAcademy/dist/src/courses/interfaces/course-level.enum.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CourseLevel = void 0; -var CourseLevel; -(function (CourseLevel) { - CourseLevel["BEGINNER"] = "beginner"; - CourseLevel["INTERMEDIATE"] = "intermediate"; - CourseLevel["ADVANCED"] = "advanced"; - CourseLevel["WEB3"] = "web3"; -})(CourseLevel || (exports.CourseLevel = CourseLevel = {})); -//# sourceMappingURL=course-level.enum.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/interfaces/course-level.enum.js.map b/BackendAcademy/dist/src/courses/interfaces/course-level.enum.js.map deleted file mode 100644 index a9affff89..000000000 --- a/BackendAcademy/dist/src/courses/interfaces/course-level.enum.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"course-level.enum.js","sourceRoot":"","sources":["../../../../src/courses/interfaces/course-level.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,4CAA6B,CAAA;IAC7B,oCAAqB,CAAA;IACrB,4BAAa,CAAA;AACf,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/interfaces/course.interface.d.ts b/BackendAcademy/dist/src/courses/interfaces/course.interface.d.ts deleted file mode 100644 index ed27a331b..000000000 --- a/BackendAcademy/dist/src/courses/interfaces/course.interface.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { CourseLevel } from './course-level.enum'; -export interface ICourse { - id: string; - title: string; - description: string; - level: CourseLevel; - order: number; - learningPathId: string; - duration: number; - prerequisites: string[]; - skills: string[]; - xpReward: number; - isActive: boolean; - createdAt: Date; - updatedAt: Date; -} -export interface ILesson { - id: string; - courseId: string; - title: string; - content: string; - order: number; - duration: number; - xpReward: number; -} -export interface ITask { - id: string; - lessonId: string; - title: string; - description: string; - difficulty: CourseLevel; - testCases: string[]; - expectedOutput: string; - xpReward: number; - passingScore: number; -} diff --git a/BackendAcademy/dist/src/courses/interfaces/course.interface.js b/BackendAcademy/dist/src/courses/interfaces/course.interface.js deleted file mode 100644 index 9b61930d5..000000000 --- a/BackendAcademy/dist/src/courses/interfaces/course.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=course.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/courses/interfaces/course.interface.js.map b/BackendAcademy/dist/src/courses/interfaces/course.interface.js.map deleted file mode 100644 index 0ead2d958..000000000 --- a/BackendAcademy/dist/src/courses/interfaces/course.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"course.interface.js","sourceRoot":"","sources":["../../../../src/courses/interfaces/course.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/database/database.module.d.ts b/BackendAcademy/dist/src/database/database.module.d.ts deleted file mode 100644 index d6fdcd751..000000000 --- a/BackendAcademy/dist/src/database/database.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class DatabaseModule { -} diff --git a/BackendAcademy/dist/src/database/database.module.js b/BackendAcademy/dist/src/database/database.module.js deleted file mode 100644 index 823e8f3ac..000000000 --- a/BackendAcademy/dist/src/database/database.module.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DatabaseModule = void 0; -const common_1 = require("@nestjs/common"); -const config_1 = require("@nestjs/config"); -const typeorm_1 = require("@nestjs/typeorm"); -let DatabaseModule = class DatabaseModule { -}; -exports.DatabaseModule = DatabaseModule; -exports.DatabaseModule = DatabaseModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forRootAsync({ - imports: [config_1.ConfigModule], - useFactory: (config) => ({ - type: 'postgres', - url: config.get('DATABASE_URL'), - autoLoadEntities: true, - synchronize: config.get('NODE_ENV') !== 'production', - ssl: config.get('NODE_ENV') === 'production' ? { rejectUnauthorized: false } : false, - }), - inject: [config_1.ConfigService], - }), - ], - exports: [typeorm_1.TypeOrmModule], - }) -], DatabaseModule); -//# sourceMappingURL=database.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/database/database.module.js.map b/BackendAcademy/dist/src/database/database.module.js.map deleted file mode 100644 index 78e9ad885..000000000 --- a/BackendAcademy/dist/src/database/database.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"database.module.js","sourceRoot":"","sources":["../../../src/database/database.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,2CAA6D;AAC7D,6CAAgD;AAmBzC,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAjB1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,YAAY,CAAC;gBACzB,OAAO,EAAE,CAAC,qBAAY,CAAC;gBACvB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAS,cAAc,CAAC;oBACvC,gBAAgB,EAAE,IAAI;oBACtB,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY;oBACpD,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK;iBACrF,CAAC;gBACF,MAAM,EAAE,CAAC,sBAAa,CAAC;aACxB,CAAC;SACH;QACD,OAAO,EAAE,CAAC,uBAAa,CAAC;KACzB,CAAC;GACW,cAAc,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/health/health.controller.d.ts b/BackendAcademy/dist/src/health/health.controller.d.ts deleted file mode 100644 index e17799f9e..000000000 --- a/BackendAcademy/dist/src/health/health.controller.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare class HealthController { - check(): { - status: string; - timestamp: string; - uptime: number; - }; -} diff --git a/BackendAcademy/dist/src/health/health.controller.js b/BackendAcademy/dist/src/health/health.controller.js deleted file mode 100644 index 3f81625b4..000000000 --- a/BackendAcademy/dist/src/health/health.controller.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HealthController = void 0; -const common_1 = require("@nestjs/common"); -let HealthController = class HealthController { - check() { - return { - status: 'ok', - timestamp: new Date().toISOString(), - uptime: process.uptime(), - }; - } -}; -exports.HealthController = HealthController; -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], HealthController.prototype, "check", null); -exports.HealthController = HealthController = __decorate([ - (0, common_1.Controller)('health') -], HealthController); -//# sourceMappingURL=health.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/health/health.controller.js.map b/BackendAcademy/dist/src/health/health.controller.js.map deleted file mode 100644 index 1d5b6f6a5..000000000 --- a/BackendAcademy/dist/src/health/health.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"health.controller.js","sourceRoot":"","sources":["../../../src/health/health.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AAG1C,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B,KAAK;QACH,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;SACzB,CAAC;IACJ,CAAC;CACF,CAAA;AATY,4CAAgB;AAE3B;IADC,IAAA,YAAG,GAAE;;;;6CAOL;2BARU,gBAAgB;IAD5B,IAAA,mBAAU,EAAC,QAAQ,CAAC;GACR,gBAAgB,CAS5B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.d.ts b/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.d.ts deleted file mode 100644 index 764152f36..000000000 --- a/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare class GetLeaderboardDto { - timeRange?: 'daily' | 'weekly' | 'monthly' | 'allTime'; - category?: string; - difficulty?: string; - limit?: number; - offset?: number; - userId?: string; -} diff --git a/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.js b/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.js deleted file mode 100644 index c50b383f2..000000000 --- a/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetLeaderboardDto = void 0; -class GetLeaderboardDto { -} -exports.GetLeaderboardDto = GetLeaderboardDto; -//# sourceMappingURL=get-leaderboard.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.js.map b/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.js.map deleted file mode 100644 index 547f947b0..000000000 --- a/BackendAcademy/dist/src/leaderboard/dto/get-leaderboard.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"get-leaderboard.dto.js","sourceRoot":"","sources":["../../../../src/leaderboard/dto/get-leaderboard.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,iBAAiB;CAO7B;AAPD,8CAOC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.d.ts b/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.d.ts deleted file mode 100644 index 0c8ad38b0..000000000 --- a/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export interface LeaderboardEntry { - rank: number; - userId: string; - username: string; - avatarUrl?: string; - score: number; - challengesCompleted: number; - accuracy: number; - streak: number; -} -export interface LeaderboardFilters { - timeRange?: 'daily' | 'weekly' | 'monthly' | 'allTime'; - category?: string; - difficulty?: string; - limit?: number; - offset?: number; -} -export interface LeaderboardResponse { - entries: LeaderboardEntry[]; - total: number; - hasMore: boolean; - filters: LeaderboardFilters; - userRank?: LeaderboardEntry; -} diff --git a/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.js b/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.js deleted file mode 100644 index 93650cd2d..000000000 --- a/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=leaderboard.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.js.map b/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.js.map deleted file mode 100644 index fec26d261..000000000 --- a/BackendAcademy/dist/src/leaderboard/interfaces/leaderboard.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"leaderboard.interface.js","sourceRoot":"","sources":["../../../../src/leaderboard/interfaces/leaderboard.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.controller.d.ts b/BackendAcademy/dist/src/leaderboard/leaderboard.controller.d.ts deleted file mode 100644 index 612fb51d8..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.controller.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { LeaderboardService } from './leaderboard.service'; -import { GetLeaderboardDto } from './dto/get-leaderboard.dto'; -import { LeaderboardResponse } from './interfaces/leaderboard.interface'; -export declare class LeaderboardController { - private readonly leaderboardService; - constructor(leaderboardService: LeaderboardService); - getLeaderboard(getLeaderboardDto: GetLeaderboardDto): Promise; -} diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.controller.js b/BackendAcademy/dist/src/leaderboard/leaderboard.controller.js deleted file mode 100644 index d53d70a07..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.controller.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LeaderboardController = void 0; -const common_1 = require("@nestjs/common"); -const leaderboard_service_1 = require("./leaderboard.service"); -const get_leaderboard_dto_1 = require("./dto/get-leaderboard.dto"); -let LeaderboardController = class LeaderboardController { - constructor(leaderboardService) { - this.leaderboardService = leaderboardService; - } - async getLeaderboard(getLeaderboardDto) { - return this.leaderboardService.getLeaderboard(getLeaderboardDto); - } -}; -exports.LeaderboardController = LeaderboardController; -__decorate([ - (0, common_1.Get)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [get_leaderboard_dto_1.GetLeaderboardDto]), - __metadata("design:returntype", Promise) -], LeaderboardController.prototype, "getLeaderboard", null); -exports.LeaderboardController = LeaderboardController = __decorate([ - (0, common_1.Controller)('leaderboard'), - __metadata("design:paramtypes", [leaderboard_service_1.LeaderboardService]) -], LeaderboardController); -//# sourceMappingURL=leaderboard.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.controller.js.map b/BackendAcademy/dist/src/leaderboard/leaderboard.controller.js.map deleted file mode 100644 index 07b45944e..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"leaderboard.controller.js","sourceRoot":"","sources":["../../../src/leaderboard/leaderboard.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;AACxD,+DAA2D;AAC3D,mEAA8D;AAIvD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAAG,CAAC;IAGjE,AAAN,KAAK,CAAC,cAAc,CAAU,iBAAoC;QAChE,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACnE,CAAC;CACF,CAAA;AAPY,sDAAqB;AAI1B;IADL,IAAA,YAAG,GAAE;IACgB,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAoB,uCAAiB;;2DAEjE;gCANU,qBAAqB;IADjC,IAAA,mBAAU,EAAC,aAAa,CAAC;qCAEyB,wCAAkB;GADxD,qBAAqB,CAOjC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.module.d.ts b/BackendAcademy/dist/src/leaderboard/leaderboard.module.d.ts deleted file mode 100644 index 557c3e6b9..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class LeaderboardModule { -} diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.module.js b/BackendAcademy/dist/src/leaderboard/leaderboard.module.js deleted file mode 100644 index db2208937..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LeaderboardModule = void 0; -const common_1 = require("@nestjs/common"); -const leaderboard_controller_1 = require("./leaderboard.controller"); -const leaderboard_service_1 = require("./leaderboard.service"); -let LeaderboardModule = class LeaderboardModule { -}; -exports.LeaderboardModule = LeaderboardModule; -exports.LeaderboardModule = LeaderboardModule = __decorate([ - (0, common_1.Module)({ - controllers: [leaderboard_controller_1.LeaderboardController], - providers: [leaderboard_service_1.LeaderboardService], - exports: [leaderboard_service_1.LeaderboardService], - }) -], LeaderboardModule); -//# sourceMappingURL=leaderboard.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.module.js.map b/BackendAcademy/dist/src/leaderboard/leaderboard.module.js.map deleted file mode 100644 index 5dc3c5729..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"leaderboard.module.js","sourceRoot":"","sources":["../../../src/leaderboard/leaderboard.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qEAAiE;AACjE,+DAA2D;AAOpD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAL7B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,8CAAqB,CAAC;QACpC,SAAS,EAAE,CAAC,wCAAkB,CAAC;QAC/B,OAAO,EAAE,CAAC,wCAAkB,CAAC;KAC9B,CAAC;GACW,iBAAiB,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.service.d.ts b/BackendAcademy/dist/src/leaderboard/leaderboard.service.d.ts deleted file mode 100644 index 70a7ede59..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.service.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { GetLeaderboardDto } from './dto/get-leaderboard.dto'; -import { LeaderboardResponse } from './interfaces/leaderboard.interface'; -export declare class LeaderboardService { - private sampleUsers; - getLeaderboard(getLeaderboardDto: GetLeaderboardDto): Promise; -} diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.service.js b/BackendAcademy/dist/src/leaderboard/leaderboard.service.js deleted file mode 100644 index 31a518481..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.service.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LeaderboardService = void 0; -const common_1 = require("@nestjs/common"); -const uuid_1 = require("uuid"); -let LeaderboardService = class LeaderboardService { - constructor() { - this.sampleUsers = [ - { - userId: (0, uuid_1.v4)(), - username: 'rustmaster', - avatarUrl: 'https://example.com/avatars/rustmaster.png', - score: 15420, - challengesCompleted: 127, - accuracy: 94.5, - streak: 45, - }, - { - userId: (0, uuid_1.v4)(), - username: 'codewarrior', - avatarUrl: 'https://example.com/avatars/codewarrior.png', - score: 14890, - challengesCompleted: 118, - accuracy: 92.3, - streak: 32, - }, - { - userId: (0, uuid_1.v4)(), - username: 'memorieslock', - avatarUrl: 'https://example.com/avatars/memorieslock.png', - score: 14250, - challengesCompleted: 112, - accuracy: 91.8, - streak: 28, - }, - { - userId: (0, uuid_1.v4)(), - username: 'rustacean', - avatarUrl: 'https://example.com/avatars/rustacean.png', - score: 13780, - challengesCompleted: 105, - accuracy: 89.7, - streak: 21, - }, - { - userId: (0, uuid_1.v4)(), - username: 'systemshade', - avatarUrl: 'https://example.com/avatars/systemshade.png', - score: 13150, - challengesCompleted: 98, - accuracy: 88.2, - streak: 18, - }, - { - userId: (0, uuid_1.v4)(), - username: 'codelover', - avatarUrl: 'https://example.com/avatars/codelover.png', - score: 12890, - challengesCompleted: 92, - accuracy: 87.5, - streak: 15, - }, - { - userId: (0, uuid_1.v4)(), - username: 'learningdev', - avatarUrl: 'https://example.com/avatars/learningdev.png', - score: 11560, - challengesCompleted: 85, - accuracy: 85.3, - streak: 12, - }, - { - userId: (0, uuid_1.v4)(), - username: 'newbiecoder', - avatarUrl: 'https://example.com/avatars/newbiecoder.png', - score: 9870, - challengesCompleted: 67, - accuracy: 82.1, - streak: 8, - }, - ]; - } - async getLeaderboard(getLeaderboardDto) { - const { timeRange = 'allTime', category, difficulty, limit = 10, offset = 0, userId } = getLeaderboardDto; - let sortedEntries = [...this.sampleUsers] - .sort((a, b) => b.score - a.score) - .map((entry, index) => ({ - ...entry, - rank: index + 1, - })); - const paginatedEntries = sortedEntries.slice(offset, offset + limit); - const total = sortedEntries.length; - const hasMore = offset + limit < total; - let userRank; - if (userId) { - userRank = sortedEntries.find(entry => entry.userId === userId); - } - return { - entries: paginatedEntries, - total, - hasMore, - filters: { - timeRange, - category, - difficulty, - limit, - offset, - }, - userRank, - }; - } -}; -exports.LeaderboardService = LeaderboardService; -exports.LeaderboardService = LeaderboardService = __decorate([ - (0, common_1.Injectable)() -], LeaderboardService); -//# sourceMappingURL=leaderboard.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/leaderboard/leaderboard.service.js.map b/BackendAcademy/dist/src/leaderboard/leaderboard.service.js.map deleted file mode 100644 index 1ecc22ad7..000000000 --- a/BackendAcademy/dist/src/leaderboard/leaderboard.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"leaderboard.service.js","sourceRoot":"","sources":["../../../src/leaderboard/leaderboard.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/main.d.ts b/BackendAcademy/dist/src/main.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/BackendAcademy/dist/src/main.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/BackendAcademy/dist/src/main.js b/BackendAcademy/dist/src/main.js deleted file mode 100644 index 728fb9deb..000000000 --- a/BackendAcademy/dist/src/main.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const core_1 = require("@nestjs/core"); -const app_module_1 = require("./app.module"); -const common_1 = require("@nestjs/common"); -async function bootstrap() { - const app = core_1.NestFactory.create(app_module_1.AppModule); - const logger = new common_1.Logger('Bootstrap'); - (await app).enableCors({ - origin: process.env.CORS_ORIGIN || '*', - methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'], - credentials: true, - }); - (await app).useGlobalPipes(new common_1.ValidationPipe({ whitelist: true, transform: true })); - const port = process.env.PORT || 3000; - await (await app).listen(port); - logger.log(`Backend running on http://localhost:${port}`); -} -bootstrap(); -//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/main.js.map b/BackendAcademy/dist/src/main.js.map deleted file mode 100644 index f47512c52..000000000 --- a/BackendAcademy/dist/src/main.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,2CAAwD;AAExD,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC;IAGvC,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG;QACtC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;QAClD,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAGH,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,uBAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAErF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AACD,SAAS,EAAE,CAAC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/dto/create-notification.dto.d.ts b/BackendAcademy/dist/src/notifications/dto/create-notification.dto.d.ts deleted file mode 100644 index 21dd34296..000000000 --- a/BackendAcademy/dist/src/notifications/dto/create-notification.dto.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare class CreateNotificationDto { - userId: string; - type: 'push' | 'in-app'; - title: string; - message: string; -} diff --git a/BackendAcademy/dist/src/notifications/dto/create-notification.dto.js b/BackendAcademy/dist/src/notifications/dto/create-notification.dto.js deleted file mode 100644 index fe6cc5eba..000000000 --- a/BackendAcademy/dist/src/notifications/dto/create-notification.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateNotificationDto = void 0; -class CreateNotificationDto { -} -exports.CreateNotificationDto = CreateNotificationDto; -//# sourceMappingURL=create-notification.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/dto/create-notification.dto.js.map b/BackendAcademy/dist/src/notifications/dto/create-notification.dto.js.map deleted file mode 100644 index 9ec97dd29..000000000 --- a/BackendAcademy/dist/src/notifications/dto/create-notification.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"create-notification.dto.js","sourceRoot":"","sources":["../../../../src/notifications/dto/create-notification.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAqB;CAKjC;AALD,sDAKC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.d.ts b/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.d.ts deleted file mode 100644 index d25354da8..000000000 --- a/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface Notification { - id: string; - userId: string; - type: 'push' | 'in-app'; - title: string; - message: string; - isRead: boolean; - createdAt: Date; -} diff --git a/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.js b/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.js deleted file mode 100644 index 76f3fe6d8..000000000 --- a/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=notifications.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.js.map b/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.js.map deleted file mode 100644 index 31ded2400..000000000 --- a/BackendAcademy/dist/src/notifications/interfaces/notifications.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"notifications.interface.js","sourceRoot":"","sources":["../../../../src/notifications/interfaces/notifications.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/notifications.controller.d.ts b/BackendAcademy/dist/src/notifications/notifications.controller.d.ts deleted file mode 100644 index 18404bee7..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.controller.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { NotificationsService } from './notifications.service'; -import { CreateNotificationDto } from './dto/create-notification.dto'; -export declare class NotificationsController { - private readonly notificationsService; - constructor(notificationsService: NotificationsService); - create(createNotificationDto: CreateNotificationDto): import("./interfaces/notifications.interface").Notification; - findAll(): import("./interfaces/notifications.interface").Notification[]; - findByUserId(userId: string): import("./interfaces/notifications.interface").Notification[]; -} diff --git a/BackendAcademy/dist/src/notifications/notifications.controller.js b/BackendAcademy/dist/src/notifications/notifications.controller.js deleted file mode 100644 index d019ee110..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.controller.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NotificationsController = void 0; -const common_1 = require("@nestjs/common"); -const notifications_service_1 = require("./notifications.service"); -const create_notification_dto_1 = require("./dto/create-notification.dto"); -let NotificationsController = class NotificationsController { - constructor(notificationsService) { - this.notificationsService = notificationsService; - } - create(createNotificationDto) { - return this.notificationsService.create(createNotificationDto); - } - findAll() { - return this.notificationsService.findAll(); - } - findByUserId(userId) { - return this.notificationsService.findByUserId(userId); - } -}; -exports.NotificationsController = NotificationsController; -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [create_notification_dto_1.CreateNotificationDto]), - __metadata("design:returntype", void 0) -], NotificationsController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], NotificationsController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)('user'), - __param(0, (0, common_1.Query)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", void 0) -], NotificationsController.prototype, "findByUserId", null); -exports.NotificationsController = NotificationsController = __decorate([ - (0, common_1.Controller)('notifications'), - __metadata("design:paramtypes", [notifications_service_1.NotificationsService]) -], NotificationsController); -//# sourceMappingURL=notifications.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/notifications.controller.js.map b/BackendAcademy/dist/src/notifications/notifications.controller.js.map deleted file mode 100644 index 86ecb9afe..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"notifications.controller.js","sourceRoot":"","sources":["../../../src/notifications/notifications.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoE;AACpE,mEAA+D;AAC/D,2EAAsE;AAG/D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YAA6B,oBAA0C;QAA1C,yBAAoB,GAApB,oBAAoB,CAAsB;IAAG,CAAC;IAG3E,MAAM,CAAS,qBAA4C;QACzD,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjE,CAAC;IAGD,OAAO;QACL,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;IAC7C,CAAC;IAGD,YAAY,CAAkB,MAAc;QAC1C,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AAjBY,0DAAuB;AAIlC;IADC,IAAA,aAAI,GAAE;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAwB,+CAAqB;;qDAE1D;AAGD;IADC,IAAA,YAAG,GAAE;;;;sDAGL;AAGD;IADC,IAAA,YAAG,EAAC,MAAM,CAAC;IACE,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;2DAE5B;kCAhBU,uBAAuB;IADnC,IAAA,mBAAU,EAAC,eAAe,CAAC;qCAEyB,4CAAoB;GAD5D,uBAAuB,CAiBnC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/notifications.module.d.ts b/BackendAcademy/dist/src/notifications/notifications.module.d.ts deleted file mode 100644 index 9000e288e..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class NotificationsModule { -} diff --git a/BackendAcademy/dist/src/notifications/notifications.module.js b/BackendAcademy/dist/src/notifications/notifications.module.js deleted file mode 100644 index ad529a622..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NotificationsModule = void 0; -const common_1 = require("@nestjs/common"); -const notifications_controller_1 = require("./notifications.controller"); -const notifications_service_1 = require("./notifications.service"); -let NotificationsModule = class NotificationsModule { -}; -exports.NotificationsModule = NotificationsModule; -exports.NotificationsModule = NotificationsModule = __decorate([ - (0, common_1.Module)({ - controllers: [notifications_controller_1.NotificationsController], - providers: [notifications_service_1.NotificationsService], - exports: [notifications_service_1.NotificationsService], - }) -], NotificationsModule); -//# sourceMappingURL=notifications.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/notifications.module.js.map b/BackendAcademy/dist/src/notifications/notifications.module.js.map deleted file mode 100644 index ed189a0d6..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"notifications.module.js","sourceRoot":"","sources":["../../../src/notifications/notifications.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yEAAqE;AACrE,mEAA+D;AAOxD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAG,CAAA;AAAtB,kDAAmB;8BAAnB,mBAAmB;IAL/B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,kDAAuB,CAAC;QACtC,SAAS,EAAE,CAAC,4CAAoB,CAAC;QACjC,OAAO,EAAE,CAAC,4CAAoB,CAAC;KAChC,CAAC;GACW,mBAAmB,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/notifications.service.d.ts b/BackendAcademy/dist/src/notifications/notifications.service.d.ts deleted file mode 100644 index 191b5fb2a..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.service.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Notification } from './interfaces/notifications.interface'; -import { CreateNotificationDto } from './dto/create-notification.dto'; -export declare class NotificationsService { - private notifications; - create(createNotificationDto: CreateNotificationDto): Notification; - findAll(): Notification[]; - findByUserId(userId: string): Notification[]; -} diff --git a/BackendAcademy/dist/src/notifications/notifications.service.js b/BackendAcademy/dist/src/notifications/notifications.service.js deleted file mode 100644 index 2a6fffe77..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.service.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NotificationsService = void 0; -const common_1 = require("@nestjs/common"); -let NotificationsService = class NotificationsService { - constructor() { - this.notifications = []; - } - create(createNotificationDto) { - const newNotification = { - id: Math.random().toString(36).substring(2, 9), - ...createNotificationDto, - isRead: false, - createdAt: new Date(), - }; - this.notifications.push(newNotification); - return newNotification; - } - findAll() { - return this.notifications; - } - findByUserId(userId) { - return this.notifications.filter(n => n.userId === userId); - } -}; -exports.NotificationsService = NotificationsService; -exports.NotificationsService = NotificationsService = __decorate([ - (0, common_1.Injectable)() -], NotificationsService); -//# sourceMappingURL=notifications.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/notifications/notifications.service.js.map b/BackendAcademy/dist/src/notifications/notifications.service.js.map deleted file mode 100644 index c88da1bbb..000000000 --- a/BackendAcademy/dist/src/notifications/notifications.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"notifications.service.js","sourceRoot":"","sources":["../../../src/notifications/notifications.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAKrC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAA1B;QACG,kBAAa,GAAmB,EAAE,CAAC;IAoB7C,CAAC;IAlBC,MAAM,CAAC,qBAA4C;QACjD,MAAM,eAAe,GAAiB;YACpC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9C,GAAG,qBAAqB;YACxB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC7D,CAAC;CACF,CAAA;AArBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CAqBhC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/redis/redis.module.d.ts b/BackendAcademy/dist/src/redis/redis.module.d.ts deleted file mode 100644 index 4aab95337..000000000 --- a/BackendAcademy/dist/src/redis/redis.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class RedisModule { -} diff --git a/BackendAcademy/dist/src/redis/redis.module.js b/BackendAcademy/dist/src/redis/redis.module.js deleted file mode 100644 index ef1470a13..000000000 --- a/BackendAcademy/dist/src/redis/redis.module.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RedisModule = void 0; -const common_1 = require("@nestjs/common"); -const config_1 = require("@nestjs/config"); -let RedisModule = class RedisModule { -}; -exports.RedisModule = RedisModule; -exports.RedisModule = RedisModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [config_1.ConfigModule], - providers: [ - { - provide: 'REDIS_OPTIONS', - useFactory: (config) => ({ - host: config.get('REDIS_HOST', 'localhost'), - port: config.get('REDIS_PORT', 6379), - password: config.get('REDIS_PASSWORD'), - }), - inject: [config_1.ConfigService], - }, - ], - exports: ['REDIS_OPTIONS'], - }) -], RedisModule); -//# sourceMappingURL=redis.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/redis/redis.module.js.map b/BackendAcademy/dist/src/redis/redis.module.js.map deleted file mode 100644 index 338ba2c86..000000000 --- a/BackendAcademy/dist/src/redis/redis.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"redis.module.js","sourceRoot":"","sources":["../../../src/redis/redis.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,2CAA6D;AAkBtD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IAhBvB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC;QACvB,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAS,YAAY,EAAE,WAAW,CAAC;oBACnD,IAAI,EAAE,MAAM,CAAC,GAAG,CAAS,YAAY,EAAE,IAAI,CAAC;oBAC5C,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAS,gBAAgB,CAAC;iBAC/C,CAAC;gBACF,MAAM,EAAE,CAAC,sBAAa,CAAC;aACxB;SACF;QACD,OAAO,EAAE,CAAC,eAAe,CAAC;KAC3B,CAAC;GACW,WAAW,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/index.d.ts b/BackendAcademy/dist/src/rewards/index.d.ts deleted file mode 100644 index 071ea14bf..000000000 --- a/BackendAcademy/dist/src/rewards/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { RewardsModule } from './rewards.module'; -export { RewardsService } from './rewards.service'; -export { RewardsController } from './rewards.controller'; -export { MAX_LEVEL, levelForXp, xpThresholdForLevel, xpToNextLevel, } from './rewards.constants'; -export type { LevelThreshold, UserProgressionResponse, ThresholdsResponse, LeaderboardEntry, LeaderboardResponse, UserLeaderboardPosition, PrizeDistribution, PrizePoolResponse, CreatePrizePoolRequest, } from './interfaces/rewards.interfaces'; diff --git a/BackendAcademy/dist/src/rewards/index.js b/BackendAcademy/dist/src/rewards/index.js deleted file mode 100644 index 20e4d4773..000000000 --- a/BackendAcademy/dist/src/rewards/index.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.xpToNextLevel = exports.xpThresholdForLevel = exports.levelForXp = exports.MAX_LEVEL = exports.RewardsController = exports.RewardsService = exports.RewardsModule = void 0; -var rewards_module_1 = require("./rewards.module"); -Object.defineProperty(exports, "RewardsModule", { enumerable: true, get: function () { return rewards_module_1.RewardsModule; } }); -var rewards_service_1 = require("./rewards.service"); -Object.defineProperty(exports, "RewardsService", { enumerable: true, get: function () { return rewards_service_1.RewardsService; } }); -var rewards_controller_1 = require("./rewards.controller"); -Object.defineProperty(exports, "RewardsController", { enumerable: true, get: function () { return rewards_controller_1.RewardsController; } }); -var rewards_constants_1 = require("./rewards.constants"); -Object.defineProperty(exports, "MAX_LEVEL", { enumerable: true, get: function () { return rewards_constants_1.MAX_LEVEL; } }); -Object.defineProperty(exports, "levelForXp", { enumerable: true, get: function () { return rewards_constants_1.levelForXp; } }); -Object.defineProperty(exports, "xpThresholdForLevel", { enumerable: true, get: function () { return rewards_constants_1.xpThresholdForLevel; } }); -Object.defineProperty(exports, "xpToNextLevel", { enumerable: true, get: function () { return rewards_constants_1.xpToNextLevel; } }); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/index.js.map b/BackendAcademy/dist/src/rewards/index.js.map deleted file mode 100644 index 3fffdc53e..000000000 --- a/BackendAcademy/dist/src/rewards/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rewards/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,yDAK6B;AAJ3B,8GAAA,SAAS,OAAA;AACT,+GAAA,UAAU,OAAA;AACV,wHAAA,mBAAmB,OAAA;AACnB,kHAAA,aAAa,OAAA"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.d.ts b/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.d.ts deleted file mode 100644 index de8909e8b..000000000 --- a/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.d.ts +++ /dev/null @@ -1,58 +0,0 @@ -export interface LevelThreshold { - level: number; - xpRequired: number; - title: string; -} -export interface StreakInfo { - currentStreak: number; - lastActivityDate: string | null; -} -export interface UserProgressionResponse { - userId: string; - xp: number; - level: number; - xpToNextLevel: number; - currentLevelThreshold: number; - nextLevelThreshold: number | null; - streak: StreakInfo; -} -export interface ThresholdsResponse { - thresholds: LevelThreshold[]; -} -export interface LeaderboardEntry { - rank: number; - userId: string; - xp: number; - level: number; - title: string; -} -export interface LeaderboardResponse { - leaderboard: LeaderboardEntry[]; - totalParticipants: number; -} -export interface UserLeaderboardPosition { - userId: string; - rank: number; - xp: number; - level: number; - title: string; - totalParticipants: number; -} -export interface PrizeDistribution { - rank: number; - userId: string; - amount: number; - distributedAt: Date; -} -export interface PrizePoolResponse { - id: string; - totalAmount: number; - currency: string; - distributedAt: Date | null; - createdAt: Date; - distribution: PrizeDistribution[]; -} -export interface CreatePrizePoolRequest { - totalAmount: number; - currency?: string; -} diff --git a/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.js b/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.js deleted file mode 100644 index 6d56978d0..000000000 --- a/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=rewards.interfaces.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.js.map b/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.js.map deleted file mode 100644 index 90eb41263..000000000 --- a/BackendAcademy/dist/src/rewards/interfaces/rewards.interfaces.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rewards.interfaces.js","sourceRoot":"","sources":["../../../../src/rewards/interfaces/rewards.interfaces.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.constants.d.ts b/BackendAcademy/dist/src/rewards/rewards.constants.d.ts deleted file mode 100644 index 746f81c1b..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.constants.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export declare const MAX_LEVEL = 50; -export declare const STREAK_MILESTONE_XP = 500; -export declare const STREAK_MILESTONE_DAYS = 7; -export declare const LEVEL_MILESTONE_XP = 1000; -export declare const LEVEL_MILESTONE_INTERVAL = 5; -export declare function xpThresholdForLevel(level: number): number; -export declare function levelForXp(xp: number): number; -export declare function xpToNextLevel(xp: number, level: number): number; -export declare const LEADERBOARD_DEFAULT_TOP_N = 100; -export declare const PRIZE_POOL_DEFAULT_CURRENCY = "XLM"; -export declare const PRIZE_POOL_DEFAULT_AMOUNT = 1000; -export declare const PRIZE_DISTRIBUTION_PERCENTAGES: { - rank: number; - percentage: number; -}[]; diff --git a/BackendAcademy/dist/src/rewards/rewards.constants.js b/BackendAcademy/dist/src/rewards/rewards.constants.js deleted file mode 100644 index 16c38d3cb..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.constants.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PRIZE_DISTRIBUTION_PERCENTAGES = exports.PRIZE_POOL_DEFAULT_AMOUNT = exports.PRIZE_POOL_DEFAULT_CURRENCY = exports.LEADERBOARD_DEFAULT_TOP_N = exports.LEVEL_MILESTONE_INTERVAL = exports.LEVEL_MILESTONE_XP = exports.STREAK_MILESTONE_DAYS = exports.STREAK_MILESTONE_XP = exports.MAX_LEVEL = void 0; -exports.xpThresholdForLevel = xpThresholdForLevel; -exports.levelForXp = levelForXp; -exports.xpToNextLevel = xpToNextLevel; -exports.MAX_LEVEL = 50; -exports.STREAK_MILESTONE_XP = 500; -exports.STREAK_MILESTONE_DAYS = 7; -exports.LEVEL_MILESTONE_XP = 1000; -exports.LEVEL_MILESTONE_INTERVAL = 5; -function xpThresholdForLevel(level) { - if (level <= 1) - return 0; - return 100 * (level - 1) * (level - 1); -} -function levelForXp(xp) { - let level = 1; - for (let n = 2; n <= exports.MAX_LEVEL; n++) { - if (xp >= xpThresholdForLevel(n)) { - level = n; - } - else { - break; - } - } - return level; -} -function xpToNextLevel(xp, level) { - if (level >= exports.MAX_LEVEL) - return 0; - return xpThresholdForLevel(level + 1) - xp; -} -exports.LEADERBOARD_DEFAULT_TOP_N = 100; -exports.PRIZE_POOL_DEFAULT_CURRENCY = 'XLM'; -exports.PRIZE_POOL_DEFAULT_AMOUNT = 1000; -exports.PRIZE_DISTRIBUTION_PERCENTAGES = [ - { rank: 1, percentage: 30 }, - { rank: 2, percentage: 20 }, - { rank: 3, percentage: 15 }, - { rank: 4, percentage: 7.5 }, - { rank: 5, percentage: 7.5 }, - { rank: 6, percentage: 4 }, - { rank: 7, percentage: 4 }, - { rank: 8, percentage: 4 }, - { rank: 9, percentage: 4 }, - { rank: 10, percentage: 4 }, -]; -//# sourceMappingURL=rewards.constants.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.constants.js.map b/BackendAcademy/dist/src/rewards/rewards.constants.js.map deleted file mode 100644 index 538d7f7fc..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.constants.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rewards.constants.js","sourceRoot":"","sources":["../../../src/rewards/rewards.constants.ts"],"names":[],"mappings":";;;AAwCA,kDAGC;AAQD,gCAUC;AASD,sCAGC;AA9DY,QAAA,SAAS,GAAG,EAAE,CAAC;AAKf,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAK1B,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAK1B,QAAA,kBAAkB,GAAG,IAAI,CAAC;AAK1B,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAS1C,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAQD,SAAgB,UAAU,CAAC,EAAU;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,iBAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,EAAE,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD,SAAgB,aAAa,CAAC,EAAU,EAAE,KAAa;IACrD,IAAI,KAAK,IAAI,iBAAS;QAAE,OAAO,CAAC,CAAC;IACjC,OAAO,mBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7C,CAAC;AAUY,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAShC,QAAA,2BAA2B,GAAG,KAAK,CAAC;AAMpC,QAAA,yBAAyB,GAAG,IAAI,CAAC;AAWjC,QAAA,8BAA8B,GAA2C;IACpF,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,EAAE,EAAE;IAC5B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,EAAE,EAAE;IAC5B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,EAAE,EAAE;IAC5B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,GAAG,EAAE;IAC7B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,GAAG,EAAE;IAC7B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,CAAC,EAAE;IAC3B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,CAAC,EAAE;IAC3B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,CAAC,EAAE;IAC3B,EAAE,IAAI,EAAE,CAAC,EAAG,UAAU,EAAE,CAAC,EAAE;IAC3B,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;CAC5B,CAAC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.controller.d.ts b/BackendAcademy/dist/src/rewards/rewards.controller.d.ts deleted file mode 100644 index fe5e6affa..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.controller.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { RewardsService } from './rewards.service'; -import type { UserProgressionResponse, ThresholdsResponse, LevelThreshold, LeaderboardResponse, UserLeaderboardPosition, PrizePoolResponse, CreatePrizePoolRequest } from './interfaces/rewards.interfaces'; -export declare class RewardsController { - private readonly rewardsService; - constructor(rewardsService: RewardsService); - getAllThresholds(): ThresholdsResponse; - getLevelThreshold(level: number): LevelThreshold; - getUserProgression(userId: string): UserProgressionResponse; - getLeaderboard(topN: number): LeaderboardResponse; - getUserLeaderboardPosition(userId: string): UserLeaderboardPosition; - getPrizePool(): PrizePoolResponse; - createPrizePool(body: CreatePrizePoolRequest): PrizePoolResponse; - distributePrizes(): PrizePoolResponse; -} diff --git a/BackendAcademy/dist/src/rewards/rewards.controller.js b/BackendAcademy/dist/src/rewards/rewards.controller.js deleted file mode 100644 index b597c57bb..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.controller.js +++ /dev/null @@ -1,117 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RewardsController = void 0; -const common_1 = require("@nestjs/common"); -const rewards_service_1 = require("./rewards.service"); -let RewardsController = class RewardsController { - constructor(rewardsService) { - this.rewardsService = rewardsService; - } - getAllThresholds() { - return this.rewardsService.getAllThresholds(); - } - getLevelThreshold(level) { - return this.rewardsService.getLevelThreshold(level); - } - getUserProgression(userId) { - return this.rewardsService.getUserProgression(userId); - } - getLeaderboard(topN) { - return this.rewardsService.getLeaderboard(topN); - } - getUserLeaderboardPosition(userId) { - return this.rewardsService.getUserLeaderboardPosition(userId); - } - getPrizePool() { - const pool = this.rewardsService.getPrizePool(); - if (!pool) { - throw new common_1.NotFoundException('No prize pool has been created yet.'); - } - return pool; - } - createPrizePool(body) { - return this.rewardsService.createPrizePool(body.totalAmount, body.currency); - } - distributePrizes() { - return this.rewardsService.distributePrizes(); - } -}; -exports.RewardsController = RewardsController; -__decorate([ - (0, common_1.Get)('thresholds'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Object) -], RewardsController.prototype, "getAllThresholds", null); -__decorate([ - (0, common_1.Get)('thresholds/:level'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('level', common_1.ParseIntPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Object) -], RewardsController.prototype, "getLevelThreshold", null); -__decorate([ - (0, common_1.Get)('progression/:userId'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Object) -], RewardsController.prototype, "getUserProgression", null); -__decorate([ - (0, common_1.Get)('leaderboard'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Query)('topN', common_1.ParseIntPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Object) -], RewardsController.prototype, "getLeaderboard", null); -__decorate([ - (0, common_1.Get)('leaderboard/:userId'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Object) -], RewardsController.prototype, "getUserLeaderboardPosition", null); -__decorate([ - (0, common_1.Get)('prize-pool'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Object) -], RewardsController.prototype, "getPrizePool", null); -__decorate([ - (0, common_1.Post)('prize-pool'), - (0, common_1.HttpCode)(common_1.HttpStatus.CREATED), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Object) -], RewardsController.prototype, "createPrizePool", null); -__decorate([ - (0, common_1.Post)('prize-pool/distribute'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Object) -], RewardsController.prototype, "distributePrizes", null); -exports.RewardsController = RewardsController = __decorate([ - (0, common_1.Controller)('rewards'), - __metadata("design:paramtypes", [rewards_service_1.RewardsService]) -], RewardsController); -//# sourceMappingURL=rewards.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.controller.js.map b/BackendAcademy/dist/src/rewards/rewards.controller.js.map deleted file mode 100644 index 0f31a3048..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rewards.controller.js","sourceRoot":"","sources":["../../../src/rewards/rewards.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAWwB;AACxB,uDAAmD;AAsB5C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAY/D,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;IAChD,CAAC;IAaD,iBAAiB,CACe,KAAa;QAE3C,OAAO,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAqBD,kBAAkB,CACC,MAAc;QAE/B,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAaD,cAAc,CACiB,IAAY;QAEzC,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAWD,0BAA0B,CACP,MAAc;QAE/B,OAAO,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAWD,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC,qCAAqC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAYD,eAAe,CACL,IAA4B;QAEpC,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CACxC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IAWD,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;IAChD,CAAC;CACF,CAAA;AA3IY,8CAAiB;AAa5B;IAFC,IAAA,YAAG,EAAC,YAAY,CAAC;IACjB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;;;;yDAGvB;AAaD;IAFC,IAAA,YAAG,EAAC,mBAAmB,CAAC;IACxB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IAErB,WAAA,IAAA,cAAK,EAAC,OAAO,EAAE,qBAAY,CAAC,CAAA;;;;0DAG9B;AAqBD;IAFC,IAAA,YAAG,EAAC,qBAAqB,CAAC;IAC1B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IAErB,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;2DAGjB;AAaD;IAFC,IAAA,YAAG,EAAC,aAAa,CAAC;IAClB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IAErB,WAAA,IAAA,cAAK,EAAC,MAAM,EAAE,qBAAY,CAAC,CAAA;;;;uDAG7B;AAWD;IAFC,IAAA,YAAG,EAAC,qBAAqB,CAAC;IAC1B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IAErB,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;mEAGjB;AAWD;IAFC,IAAA,YAAG,EAAC,YAAY,CAAC;IACjB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;;;;qDAOvB;AAYD;IAFC,IAAA,aAAI,EAAC,YAAY,CAAC;IAClB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,OAAO,CAAC;IAE1B,WAAA,IAAA,aAAI,GAAE,CAAA;;;;wDAMR;AAWD;IAFC,IAAA,aAAI,EAAC,uBAAuB,CAAC;IAC7B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;;;;yDAGvB;4BA1IU,iBAAiB;IAD7B,IAAA,mBAAU,EAAC,SAAS,CAAC;qCAEyB,gCAAc;GADhD,iBAAiB,CA2I7B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.module.d.ts b/BackendAcademy/dist/src/rewards/rewards.module.d.ts deleted file mode 100644 index 3394bb1e8..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class RewardsModule { -} diff --git a/BackendAcademy/dist/src/rewards/rewards.module.js b/BackendAcademy/dist/src/rewards/rewards.module.js deleted file mode 100644 index 0ccd7b981..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RewardsModule = void 0; -const common_1 = require("@nestjs/common"); -const rewards_controller_1 = require("./rewards.controller"); -const rewards_service_1 = require("./rewards.service"); -let RewardsModule = class RewardsModule { -}; -exports.RewardsModule = RewardsModule; -exports.RewardsModule = RewardsModule = __decorate([ - (0, common_1.Module)({ - controllers: [rewards_controller_1.RewardsController], - providers: [rewards_service_1.RewardsService], - exports: [rewards_service_1.RewardsService], - }) -], RewardsModule); -//# sourceMappingURL=rewards.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.module.js.map b/BackendAcademy/dist/src/rewards/rewards.module.js.map deleted file mode 100644 index e6dbf580f..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rewards.module.js","sourceRoot":"","sources":["../../../src/rewards/rewards.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6DAAyD;AACzD,uDAAmD;AAa5C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IALzB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,sCAAiB,CAAC;QAChC,SAAS,EAAE,CAAC,gCAAc,CAAC;QAC3B,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.service.d.ts b/BackendAcademy/dist/src/rewards/rewards.service.d.ts deleted file mode 100644 index c3742e92f..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.service.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { LevelThreshold, UserProgressionResponse, ThresholdsResponse, LeaderboardResponse, UserLeaderboardPosition, PrizePoolResponse } from './interfaces/rewards.interfaces'; -export declare class RewardsService { - getAllThresholds(): ThresholdsResponse; - getLevelThreshold(level: number): LevelThreshold; - getUserProgression(userId: string): UserProgressionResponse; - addXp(userId: string, amount: number): UserProgressionResponse; - recordActivity(userId: string, date: Date, xpAmount: number): UserProgressionResponse; - resetXp(userId: string): void; - getLeaderboard(topN?: number): LeaderboardResponse; - getUserLeaderboardPosition(userId: string): UserLeaderboardPosition; - getPrizePool(): PrizePoolResponse | null; - createPrizePool(totalAmount: number, currency?: string): PrizePoolResponse; - distributePrizes(): PrizePoolResponse; -} diff --git a/BackendAcademy/dist/src/rewards/rewards.service.js b/BackendAcademy/dist/src/rewards/rewards.service.js deleted file mode 100644 index cfd490216..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.service.js +++ /dev/null @@ -1,238 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RewardsService = void 0; -const common_1 = require("@nestjs/common"); -const rewards_constants_1 = require("./rewards.constants"); -const xpStore = new Map(); -const prizePoolStore = new Map(); -const streakStore = new Map(); -function levelTitle(level) { - const titles = { - 1: 'Newcomer', - 5: 'Apprentice', - 10: 'Practitioner', - 15: 'Journeyman', - 20: 'Specialist', - 25: 'Expert', - 30: 'Senior', - 35: 'Master', - 40: 'Grandmaster', - 45: 'Legend', - 50: 'Academy Champion', - }; - for (let t = level; t >= 1; t--) { - if (titles[t]) { - const offset = level - t; - return offset === 0 ? titles[t] : `${titles[t]} ${offset}`; - } - } - return `Level ${level}`; -} -let RewardsService = class RewardsService { - getAllThresholds() { - const thresholds = []; - for (let level = 1; level <= rewards_constants_1.MAX_LEVEL; level++) { - thresholds.push({ - level, - xpRequired: (0, rewards_constants_1.xpThresholdForLevel)(level), - title: levelTitle(level), - }); - } - return { thresholds }; - } - getLevelThreshold(level) { - if (level < 1 || level > rewards_constants_1.MAX_LEVEL) { - throw new common_1.NotFoundException(`Level ${level} does not exist. Valid range: 1–${rewards_constants_1.MAX_LEVEL}.`); - } - return { - level, - xpRequired: (0, rewards_constants_1.xpThresholdForLevel)(level), - title: levelTitle(level), - }; - } - getUserProgression(userId) { - const xp = xpStore.get(userId); - if (xp === undefined) { - throw new common_1.NotFoundException(`User '${userId}' not found in the rewards system.`); - } - const level = (0, rewards_constants_1.levelForXp)(xp); - const remaining = (0, rewards_constants_1.xpToNextLevel)(xp, level); - const nextThreshold = level < rewards_constants_1.MAX_LEVEL ? (0, rewards_constants_1.xpThresholdForLevel)(level + 1) : null; - const streakData = streakStore.get(userId) ?? { - currentStreak: 0, - lastActivityDate: null, - }; - return { - userId, - xp, - level, - xpToNextLevel: remaining, - currentLevelThreshold: (0, rewards_constants_1.xpThresholdForLevel)(level), - nextLevelThreshold: nextThreshold, - streak: { - currentStreak: streakData.currentStreak, - lastActivityDate: streakData.lastActivityDate - ? streakData.lastActivityDate.toISOString() - : null, - }, - }; - } - addXp(userId, amount) { - if (amount <= 0) { - throw new Error('XP amount must be a positive integer.'); - } - const current = xpStore.get(userId) ?? 0; - xpStore.set(userId, current + amount); - return this.getUserProgression(userId); - } - recordActivity(userId, date, xpAmount) { - if (xpAmount <= 0) { - throw new Error('XP amount must be a positive integer.'); - } - const streakData = streakStore.get(userId) ?? { - currentStreak: 0, - lastActivityDate: null, - }; - let streakBonusXp = 0; - if (streakData.lastActivityDate) { - const lastDate = new Date(streakData.lastActivityDate); - const today = new Date(date.getTime()); - today.setHours(0, 0, 0, 0); - const last = new Date(lastDate.getTime()); - last.setHours(0, 0, 0, 0); - const diffDays = Math.round((today.getTime() - last.getTime()) / (1000 * 60 * 60 * 24)); - if (diffDays === 1) { - streakData.currentStreak += 1; - } - else if (diffDays > 1) { - streakData.currentStreak = 1; - } - } - else { - streakData.currentStreak = 1; - } - streakData.lastActivityDate = date; - streakStore.set(userId, streakData); - if (streakData.currentStreak > 0 && - streakData.currentStreak % rewards_constants_1.STREAK_MILESTONE_DAYS === 0) { - streakBonusXp = rewards_constants_1.STREAK_MILESTONE_XP; - } - const currentXp = xpStore.get(userId) ?? 0; - const oldLevel = (0, rewards_constants_1.levelForXp)(currentXp); - const newXpBeforeLevelMilestone = currentXp + xpAmount + streakBonusXp; - const newLevel = (0, rewards_constants_1.levelForXp)(newXpBeforeLevelMilestone); - let levelBonusXp = 0; - for (let m = rewards_constants_1.LEVEL_MILESTONE_INTERVAL; m <= rewards_constants_1.MAX_LEVEL; m += rewards_constants_1.LEVEL_MILESTONE_INTERVAL) { - if (oldLevel < m && newLevel >= m) { - levelBonusXp += rewards_constants_1.LEVEL_MILESTONE_XP; - } - } - xpStore.set(userId, newXpBeforeLevelMilestone + levelBonusXp); - return this.getUserProgression(userId); - } - resetXp(userId) { - xpStore.set(userId, 0); - streakStore.delete(userId); - } - getLeaderboard(topN = rewards_constants_1.LEADERBOARD_DEFAULT_TOP_N) { - const sorted = Array.from(xpStore.entries()) - .map(([userId, xp]) => ({ userId, xp, level: (0, rewards_constants_1.levelForXp)(xp) })) - .sort((a, b) => b.xp - a.xp) - .slice(0, topN) - .map((entry, index) => ({ - rank: index + 1, - userId: entry.userId, - xp: entry.xp, - level: entry.level, - title: levelTitle(entry.level), - })); - return { - leaderboard: sorted, - totalParticipants: xpStore.size, - }; - } - getUserLeaderboardPosition(userId) { - if (!xpStore.has(userId)) { - throw new common_1.NotFoundException(`User '${userId}' not found in the rewards system.`); - } - const entries = Array.from(xpStore.entries()).sort((a, b) => b[1] - a[1]); - const rank = entries.findIndex(([id]) => id === userId) + 1; - const xp = xpStore.get(userId); - const level = (0, rewards_constants_1.levelForXp)(xp); - return { - userId, - rank, - xp, - level, - title: levelTitle(level), - totalParticipants: xpStore.size, - }; - } - getPrizePool() { - const pools = Array.from(prizePoolStore.entries()); - if (pools.length === 0) - return null; - const [id, pool] = pools[pools.length - 1]; - return { id, ...pool }; - } - createPrizePool(totalAmount, currency = rewards_constants_1.PRIZE_POOL_DEFAULT_CURRENCY) { - if (totalAmount <= 0) { - throw new Error('Prize pool totalAmount must be positive.'); - } - const id = `prize_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`; - const pool = { - totalAmount, - currency, - distributedAt: null, - createdAt: new Date(), - distribution: [], - }; - prizePoolStore.set(id, pool); - return { id, ...pool }; - } - distributePrizes() { - const pools = Array.from(prizePoolStore.entries()); - let id; - let pool; - if (pools.length === 0) { - const created = this.createPrizePool(rewards_constants_1.PRIZE_POOL_DEFAULT_AMOUNT, rewards_constants_1.PRIZE_POOL_DEFAULT_CURRENCY); - id = created.id; - pool = prizePoolStore.get(id); - } - else { - [id, pool] = pools[pools.length - 1]; - if (pool.distributedAt) { - return { id, ...pool }; - } - } - const leaderboard = this.getLeaderboard(10); - const distribution = []; - for (const entry of leaderboard.leaderboard) { - const config = rewards_constants_1.PRIZE_DISTRIBUTION_PERCENTAGES.find((c) => c.rank === entry.rank); - if (config) { - const amount = Math.floor((pool.totalAmount * config.percentage) / 100); - distribution.push({ - rank: entry.rank, - userId: entry.userId, - amount, - distributedAt: new Date(), - }); - } - } - pool.distribution = distribution; - pool.distributedAt = new Date(); - prizePoolStore.set(id, pool); - return { id, ...pool }; - } -}; -exports.RewardsService = RewardsService; -exports.RewardsService = RewardsService = __decorate([ - (0, common_1.Injectable)() -], RewardsService); -//# sourceMappingURL=rewards.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.service.js.map b/BackendAcademy/dist/src/rewards/rewards.service.js.map deleted file mode 100644 index 6989934e7..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rewards.service.js","sourceRoot":"","sources":["../../../src/rewards/rewards.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.service.spec.d.ts b/BackendAcademy/dist/src/rewards/rewards.service.spec.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.service.spec.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/BackendAcademy/dist/src/rewards/rewards.service.spec.js b/BackendAcademy/dist/src/rewards/rewards.service.spec.js deleted file mode 100644 index c7c8e9012..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.service.spec.js +++ /dev/null @@ -1,396 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const testing_1 = require("@nestjs/testing"); -const common_1 = require("@nestjs/common"); -const rewards_service_1 = require("./rewards.service"); -const rewards_constants_1 = require("./rewards.constants"); -describe('rewards.constants helpers', () => { - describe('xpThresholdForLevel', () => { - it('level 1 starts at 0 XP', () => { - expect((0, rewards_constants_1.xpThresholdForLevel)(1)).toBe(0); - }); - it('level 2 requires 100 XP', () => { - expect((0, rewards_constants_1.xpThresholdForLevel)(2)).toBe(100); - }); - it('level 3 requires 400 XP', () => { - expect((0, rewards_constants_1.xpThresholdForLevel)(3)).toBe(400); - }); - it('level 10 requires 8100 XP', () => { - expect((0, rewards_constants_1.xpThresholdForLevel)(10)).toBe(8100); - }); - it('level 50 (MAX) returns a positive value', () => { - expect((0, rewards_constants_1.xpThresholdForLevel)(rewards_constants_1.MAX_LEVEL)).toBeGreaterThan(0); - }); - }); - describe('levelForXp', () => { - it('0 XP → level 1', () => { - expect((0, rewards_constants_1.levelForXp)(0)).toBe(1); - }); - it('99 XP → level 1 (threshold for L2 is 100)', () => { - expect((0, rewards_constants_1.levelForXp)(99)).toBe(1); - }); - it('100 XP → level 2', () => { - expect((0, rewards_constants_1.levelForXp)(100)).toBe(2); - }); - it('400 XP → level 3', () => { - expect((0, rewards_constants_1.levelForXp)(400)).toBe(3); - }); - it('large XP value caps at MAX_LEVEL', () => { - expect((0, rewards_constants_1.levelForXp)(Number.MAX_SAFE_INTEGER)).toBe(rewards_constants_1.MAX_LEVEL); - }); - it('exactly at level 10 threshold → level 10', () => { - expect((0, rewards_constants_1.levelForXp)((0, rewards_constants_1.xpThresholdForLevel)(10))).toBe(10); - }); - it('one XP below level 10 threshold → level 9', () => { - expect((0, rewards_constants_1.levelForXp)((0, rewards_constants_1.xpThresholdForLevel)(10) - 1)).toBe(9); - }); - }); - describe('xpToNextLevel', () => { - it('returns 0 at MAX_LEVEL', () => { - expect((0, rewards_constants_1.xpToNextLevel)((0, rewards_constants_1.xpThresholdForLevel)(rewards_constants_1.MAX_LEVEL), rewards_constants_1.MAX_LEVEL)).toBe(0); - }); - it('at level 1 with 0 XP → 100 XP to next', () => { - expect((0, rewards_constants_1.xpToNextLevel)(0, 1)).toBe(100); - }); - it('at level 2 with 100 XP → 300 XP to next (L3 = 400)', () => { - expect((0, rewards_constants_1.xpToNextLevel)(100, 2)).toBe(300); - }); - }); -}); -describe('RewardsService', () => { - let service; - beforeEach(async () => { - const module = await testing_1.Test.createTestingModule({ - providers: [rewards_service_1.RewardsService], - }).compile(); - service = module.get(rewards_service_1.RewardsService); - }); - describe('getAllThresholds()', () => { - it('returns exactly MAX_LEVEL entries', () => { - const { thresholds } = service.getAllThresholds(); - expect(thresholds).toHaveLength(rewards_constants_1.MAX_LEVEL); - }); - it('first entry is level 1 with 0 XP required', () => { - const { thresholds } = service.getAllThresholds(); - expect(thresholds[0]).toMatchObject({ level: 1, xpRequired: 0 }); - }); - it('last entry is level MAX_LEVEL', () => { - const { thresholds } = service.getAllThresholds(); - expect(thresholds[rewards_constants_1.MAX_LEVEL - 1].level).toBe(rewards_constants_1.MAX_LEVEL); - }); - it('thresholds are monotonically increasing', () => { - const { thresholds } = service.getAllThresholds(); - for (let i = 1; i < thresholds.length; i++) { - expect(thresholds[i].xpRequired).toBeGreaterThan(thresholds[i - 1].xpRequired); - } - }); - it('each entry has a non-empty title string', () => { - const { thresholds } = service.getAllThresholds(); - for (const t of thresholds) { - expect(typeof t.title).toBe('string'); - expect(t.title.length).toBeGreaterThan(0); - } - }); - }); - describe('getLevelThreshold(level)', () => { - it('returns correct data for level 1', () => { - const result = service.getLevelThreshold(1); - expect(result).toMatchObject({ level: 1, xpRequired: 0 }); - }); - it('returns correct data for level 10', () => { - const result = service.getLevelThreshold(10); - expect(result).toMatchObject({ level: 10, xpRequired: 8100 }); - }); - it('throws NotFoundException for level 0', () => { - expect(() => service.getLevelThreshold(0)).toThrow(common_1.NotFoundException); - }); - it('throws NotFoundException for level 51', () => { - expect(() => service.getLevelThreshold(51)).toThrow(common_1.NotFoundException); - }); - it('throws NotFoundException for negative level', () => { - expect(() => service.getLevelThreshold(-5)).toThrow(common_1.NotFoundException); - }); - }); - describe('getUserProgression(userId)', () => { - const USER = 'test-user-abc'; - beforeEach(() => { - service.resetXp(USER); - }); - it('returns level 1 and correct fields at 0 XP', () => { - const prog = service.getUserProgression(USER); - expect(prog).toMatchObject({ - userId: USER, - xp: 0, - level: 1, - xpToNextLevel: 100, - currentLevelThreshold: 0, - nextLevelThreshold: 100, - streak: { - currentStreak: 0, - lastActivityDate: null, - }, - }); - }); - it('advances to level 2 after exactly 100 XP', () => { - service.addXp(USER, 100); - const prog = service.getUserProgression(USER); - expect(prog.level).toBe(2); - }); - it('stays at level 1 with 99 XP', () => { - service.addXp(USER, 99); - const prog = service.getUserProgression(USER); - expect(prog.level).toBe(1); - expect(prog.xpToNextLevel).toBe(1); - }); - it('correctly computes xpToNextLevel mid-level', () => { - service.addXp(USER, 250); - const prog = service.getUserProgression(USER); - expect(prog.level).toBe(2); - expect(prog.xpToNextLevel).toBe(400 - 250); - }); - it('at MAX_LEVEL xpToNextLevel is 0 and nextLevelThreshold is null', () => { - service.addXp(USER, (0, rewards_constants_1.xpThresholdForLevel)(rewards_constants_1.MAX_LEVEL)); - const prog = service.getUserProgression(USER); - expect(prog.level).toBe(rewards_constants_1.MAX_LEVEL); - expect(prog.xpToNextLevel).toBe(0); - expect(prog.nextLevelThreshold).toBeNull(); - }); - it('throws NotFoundException for unknown user', () => { - expect(() => service.getUserProgression('ghost-user-xyz')).toThrow(common_1.NotFoundException); - }); - }); - describe('addXp()', () => { - it('throws on zero XP', () => { - expect(() => service.addXp('u', 0)).toThrow(); - }); - it('throws on negative XP', () => { - expect(() => service.addXp('u', -10)).toThrow(); - }); - it('creates the user record if it does not exist', () => { - const prog = service.addXp('brand-new-user', 50); - expect(prog.xp).toBe(50); - }); - }); - describe('getLeaderboard()', () => { - const USERS = ['lead-alice', 'lead-bob', 'lead-charlie']; - beforeEach(() => { - for (const u of USERS) - service.resetXp(u); - service.addXp(USERS[0], 500); - service.addXp(USERS[1], 900); - service.addXp(USERS[2], 200); - }); - it('returns entries sorted by XP descending', () => { - const { leaderboard } = service.getLeaderboard(10); - expect(leaderboard[0].userId).toBe(USERS[1]); - expect(leaderboard[1].userId).toBe(USERS[0]); - expect(leaderboard[2].userId).toBe(USERS[2]); - }); - it('respects the topN parameter', () => { - const { leaderboard } = service.getLeaderboard(2); - expect(leaderboard).toHaveLength(2); - }); - it('reports totalParticipants correctly', () => { - const { totalParticipants } = service.getLeaderboard(10); - expect(totalParticipants).toBeGreaterThanOrEqual(USERS.length); - }); - it('assigns increasing rank numbers', () => { - const { leaderboard } = service.getLeaderboard(10); - leaderboard.forEach((entry, i) => { - expect(entry.rank).toBe(i + 1); - }); - }); - it('each entry has a non-empty title', () => { - const { leaderboard } = service.getLeaderboard(10); - for (const entry of leaderboard) { - expect(typeof entry.title).toBe('string'); - expect(entry.title.length).toBeGreaterThan(0); - } - }); - }); - describe('getUserLeaderboardPosition(userId)', () => { - const USERS = ['rank-alice', 'rank-bob', 'rank-charlie']; - beforeEach(() => { - const allKnown = [ - ...USERS, - 'test-user-abc', - 'brand-new-user', - 'u', - 'lead-alice', - 'lead-bob', - 'lead-charlie', - ]; - for (const u of allKnown) - service.resetXp(u); - service.addXp(USERS[0], 100); - service.addXp(USERS[1], 700); - service.addXp(USERS[2], 400); - }); - it('returns rank 1 for the top user', () => { - const pos = service.getUserLeaderboardPosition(USERS[1]); - expect(pos.rank).toBe(1); - }); - it('returns correct rank for a middle user', () => { - const pos = service.getUserLeaderboardPosition(USERS[2]); - expect(pos.rank).toBe(2); - }); - it('returns correct rank for the last user', () => { - const pos = service.getUserLeaderboardPosition(USERS[0]); - expect(pos.rank).toBe(3); - }); - it('throws NotFoundException for unknown user', () => { - expect(() => service.getUserLeaderboardPosition('ghost-user')).toThrow(common_1.NotFoundException); - }); - it('includes totalParticipants count', () => { - const pos = service.getUserLeaderboardPosition(USERS[1]); - expect(pos.totalParticipants).toBeGreaterThanOrEqual(USERS.length); - }); - }); - describe('getPrizePool() / createPrizePool()', () => { - it('getPrizePool returns null when no pool exists', () => { - expect(service.getPrizePool()).toBeNull(); - }); - it('createPrizePool creates a pool with correct values', () => { - const pool = service.createPrizePool(5000, 'XLM'); - expect(pool.totalAmount).toBe(5000); - expect(pool.currency).toBe('XLM'); - expect(pool.distributedAt).toBeNull(); - expect(pool.distribution).toEqual([]); - expect(pool.id).toMatch(/^prize_/); - }); - it('createPrizePool uses default currency when omitted', () => { - const pool = service.createPrizePool(100); - expect(pool.currency).toBe(rewards_constants_1.PRIZE_POOL_DEFAULT_CURRENCY); - }); - it('createPrizePool throws on non-positive amount', () => { - expect(() => service.createPrizePool(0)).toThrow(); - expect(() => service.createPrizePool(-10)).toThrow(); - }); - it('getPrizePool returns the latest pool', () => { - service.createPrizePool(100); - const second = service.createPrizePool(200); - const latest = service.getPrizePool(); - expect(latest.id).toBe(second.id); - expect(latest.totalAmount).toBe(200); - }); - }); - describe('distributePrizes()', () => { - const USERS = ['dist-alice', 'dist-bob', 'dist-charlie']; - beforeEach(() => { - for (const u of USERS) - service.resetXp(u); - service.addXp(USERS[0], 100); - service.addXp(USERS[1], 200); - service.addXp(USERS[2], 300); - }); - it('auto-creates a pool if none exists', () => { - const result = service.distributePrizes(); - expect(result.totalAmount).toBeGreaterThan(0); - expect(result.distributedAt).toBeInstanceOf(Date); - }); - it('distributes prizes to top 10 leaderboard members', () => { - const result = service.distributePrizes(); - expect(result.distribution.length).toBeGreaterThan(0); - expect(result.distribution.length).toBeLessThanOrEqual(10); - }); - it('top rank receives the largest amount', () => { - const result = service.distributePrizes(); - const amounts = result.distribution.map((d) => d.amount); - for (let i = 1; i < amounts.length; i++) { - expect(amounts[i - 1]).toBeGreaterThanOrEqual(amounts[i]); - } - }); - it('distribution amounts use the configured percentages', () => { - const result = service.distributePrizes(); - for (const dist of result.distribution) { - const config = rewards_constants_1.PRIZE_DISTRIBUTION_PERCENTAGES.find((c) => c.rank === dist.rank); - expect(config).toBeDefined(); - if (config) { - const expected = Math.floor((result.totalAmount * config.percentage) / 100); - expect(dist.amount).toBe(expected); - } - } - }); - it('marks the pool as distributed', () => { - const result = service.distributePrizes(); - expect(result.distributedAt).toBeInstanceOf(Date); - }); - it('is idempotent — second call returns same result', () => { - const first = service.distributePrizes(); - const second = service.distributePrizes(); - expect(second.id).toBe(first.id); - expect(second.distributedAt).toEqual(first.distributedAt); - describe('recordActivity(userId, date, xpAmount)', () => { - const USER = 'activity-user'; - const BASE_DATE = new Date('2023-01-01T12:00:00Z'); - beforeEach(() => { - service.resetXp(USER); - }); - it('records initial activity for a new user', () => { - const prog = service.recordActivity(USER, BASE_DATE, 100); - expect(prog.xp).toBe(100); - expect(prog.streak.currentStreak).toBe(1); - expect(prog.streak.lastActivityDate).toBe(BASE_DATE.toISOString()); - }); - it('increases streak for consecutive days', () => { - service.recordActivity(USER, BASE_DATE, 10); - const nextDay = new Date(BASE_DATE.getTime() + 24 * 60 * 60 * 1000); - const prog = service.recordActivity(USER, nextDay, 10); - expect(prog.streak.currentStreak).toBe(2); - expect(prog.streak.lastActivityDate).toBe(nextDay.toISOString()); - }); - it('does not increase streak for same-day activity', () => { - service.recordActivity(USER, BASE_DATE, 10); - const sameDay = new Date(BASE_DATE.getTime() + 1 * 60 * 60 * 1000); - const prog = service.recordActivity(USER, sameDay, 10); - expect(prog.streak.currentStreak).toBe(1); - expect(prog.streak.lastActivityDate).toBe(sameDay.toISOString()); - }); - it('resets streak if there is a gap of more than one day', () => { - service.recordActivity(USER, BASE_DATE, 10); - const gapDay = new Date(BASE_DATE.getTime() + 2 * 24 * 60 * 60 * 1000); - const prog = service.recordActivity(USER, gapDay, 10); - expect(prog.streak.currentStreak).toBe(1); - expect(prog.streak.lastActivityDate).toBe(gapDay.toISOString()); - }); - it('awards streak milestone XP', () => { - for (let i = 0; i < rewards_constants_1.STREAK_MILESTONE_DAYS - 1; i++) { - const d = new Date(BASE_DATE.getTime() + i * 24 * 60 * 60 * 1000); - service.recordActivity(USER, d, 10); - } - const milestoneDay = new Date(BASE_DATE.getTime() + (rewards_constants_1.STREAK_MILESTONE_DAYS - 1) * 24 * 60 * 60 * 1000); - const prog = service.recordActivity(USER, milestoneDay, 10); - expect(prog.streak.currentStreak).toBe(rewards_constants_1.STREAK_MILESTONE_DAYS); - expect(prog.xp).toBe(10 * rewards_constants_1.STREAK_MILESTONE_DAYS + rewards_constants_1.STREAK_MILESTONE_XP); - }); - it('awards level milestone XP', () => { - const level4Xp = (0, rewards_constants_1.xpThresholdForLevel)(4); - service.recordActivity(USER, BASE_DATE, level4Xp); - const prog = service.recordActivity(USER, BASE_DATE, 1000); - expect(prog.level).toBeGreaterThanOrEqual(5); - expect(prog.xp).toBe(level4Xp + 1000 + rewards_constants_1.LEVEL_MILESTONE_XP); - }); - it('awards multiple level milestones if crossing several at once', () => { - const hugeXp = (0, rewards_constants_1.xpThresholdForLevel)(11); - const prog = service.recordActivity(USER, BASE_DATE, hugeXp); - expect(prog.level).toBeGreaterThanOrEqual(11); - expect(prog.xp).toBe(hugeXp + 2 * rewards_constants_1.LEVEL_MILESTONE_XP); - }); - }); - }); - describe('resetXp(userId)', () => { - const USER = 'reset-user'; - beforeEach(() => { - service.recordActivity(USER, new Date(), 100); - }); - it('resets XP to 0 and clears streak', () => { - service.resetXp(USER); - const prog = service.getUserProgression(USER); - expect(prog.xp).toBe(0); - expect(prog.streak.currentStreak).toBe(0); - expect(prog.streak.lastActivityDate).toBeNull(); - }); - }); - }); -}); -//# sourceMappingURL=rewards.service.spec.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/rewards/rewards.service.spec.js.map b/BackendAcademy/dist/src/rewards/rewards.service.spec.js.map deleted file mode 100644 index 1c00d85e9..000000000 --- a/BackendAcademy/dist/src/rewards/rewards.service.spec.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rewards.service.spec.js","sourceRoot":"","sources":["../../../src/rewards/rewards.service.spec.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/anti-cheat.controller.d.ts b/BackendAcademy/dist/src/security/anti-cheat.controller.d.ts deleted file mode 100644 index 2973a3ca6..000000000 --- a/BackendAcademy/dist/src/security/anti-cheat.controller.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AntiCheatService } from './anti-cheat.service'; -import { CheckSubmissionDto } from './dto/check-submission.dto'; -import { AntiCheatResult } from './interfaces/anti-cheat.interface'; -export declare class AntiCheatController { - private readonly antiCheatService; - constructor(antiCheatService: AntiCheatService); - check(dto: CheckSubmissionDto): Promise; - checkBatch(dtos: CheckSubmissionDto[]): Promise; -} diff --git a/BackendAcademy/dist/src/security/anti-cheat.controller.js b/BackendAcademy/dist/src/security/anti-cheat.controller.js deleted file mode 100644 index a7e2c7bae..000000000 --- a/BackendAcademy/dist/src/security/anti-cheat.controller.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AntiCheatController = void 0; -const common_1 = require("@nestjs/common"); -const anti_cheat_service_1 = require("./anti-cheat.service"); -const check_submission_dto_1 = require("./dto/check-submission.dto"); -let AntiCheatController = class AntiCheatController { - constructor(antiCheatService) { - this.antiCheatService = antiCheatService; - } - async check(dto) { - return this.antiCheatService.analyzeSubmission(dto); - } - async checkBatch(dtos) { - return this.antiCheatService.analyzeSubmissions(dtos); - } -}; -exports.AntiCheatController = AntiCheatController; -__decorate([ - (0, common_1.Post)('check'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [check_submission_dto_1.CheckSubmissionDto]), - __metadata("design:returntype", Promise) -], AntiCheatController.prototype, "check", null); -__decorate([ - (0, common_1.Post)('check-batch'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Array]), - __metadata("design:returntype", Promise) -], AntiCheatController.prototype, "checkBatch", null); -exports.AntiCheatController = AntiCheatController = __decorate([ - (0, common_1.Controller)('security/anti-cheat'), - __metadata("design:paramtypes", [anti_cheat_service_1.AntiCheatService]) -], AntiCheatController); -//# sourceMappingURL=anti-cheat.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/anti-cheat.controller.js.map b/BackendAcademy/dist/src/security/anti-cheat.controller.js.map deleted file mode 100644 index d666500a8..000000000 --- a/BackendAcademy/dist/src/security/anti-cheat.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"anti-cheat.controller.js","sourceRoot":"","sources":["../../../src/security/anti-cheat.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8E;AAC9E,6DAAwD;AACxD,qEAAgE;AAazD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,YAA6B,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;IAAG,CAAC;IAS7D,AAAN,KAAK,CAAC,KAAK,CAAS,GAAuB;QACzC,OAAO,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IASK,AAAN,KAAK,CAAC,UAAU,CAAS,IAA0B;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AAxBY,kDAAmB;AAUxB;IAFL,IAAA,aAAI,EAAC,OAAO,CAAC;IACb,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,yCAAkB;;gDAE1C;AASK;IAFL,IAAA,aAAI,EAAC,aAAa,CAAC;IACnB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACN,WAAA,IAAA,aAAI,GAAE,CAAA;;;;qDAEvB;8BAvBU,mBAAmB;IAD/B,IAAA,mBAAU,EAAC,qBAAqB,CAAC;qCAEe,qCAAgB;GADpD,mBAAmB,CAwB/B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/anti-cheat.service.d.ts b/BackendAcademy/dist/src/security/anti-cheat.service.d.ts deleted file mode 100644 index 8e8066758..000000000 --- a/BackendAcademy/dist/src/security/anti-cheat.service.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AntiCheatResult } from './interfaces/anti-cheat.interface'; -import { CheckSubmissionDto } from './dto/check-submission.dto'; -export declare class AntiCheatService { - private readonly logger; - analyzeSubmission(dto: CheckSubmissionDto): Promise; - analyzeSubmissions(dtos: CheckSubmissionDto[]): Promise; -} diff --git a/BackendAcademy/dist/src/security/anti-cheat.service.js b/BackendAcademy/dist/src/security/anti-cheat.service.js deleted file mode 100644 index a612b27d3..000000000 --- a/BackendAcademy/dist/src/security/anti-cheat.service.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var AntiCheatService_1; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AntiCheatService = void 0; -const common_1 = require("@nestjs/common"); -let AntiCheatService = AntiCheatService_1 = class AntiCheatService { - constructor() { - this.logger = new common_1.Logger(AntiCheatService_1.name); - } - async analyzeSubmission(dto) { - this.logger.log(`[PLACEHOLDER] Analysing submission for learnerId=${dto.learnerId}, taskId=${dto.taskId}`); - return { - flagged: false, - confidence: 0, - riskLevel: 'low', - reason: 'AI anti-cheat check not yet implemented — placeholder result returned.', - recommendedAction: 'none', - }; - } - async analyzeSubmissions(dtos) { - this.logger.log(`[PLACEHOLDER] Batch analysing ${dtos.length} submission(s)`); - return Promise.all(dtos.map((dto) => this.analyzeSubmission(dto))); - } -}; -exports.AntiCheatService = AntiCheatService; -exports.AntiCheatService = AntiCheatService = AntiCheatService_1 = __decorate([ - (0, common_1.Injectable)() -], AntiCheatService); -//# sourceMappingURL=anti-cheat.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/anti-cheat.service.js.map b/BackendAcademy/dist/src/security/anti-cheat.service.js.map deleted file mode 100644 index eb195619f..000000000 --- a/BackendAcademy/dist/src/security/anti-cheat.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"anti-cheat.service.js","sourceRoot":"","sources":["../../../src/security/anti-cheat.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AAe7C,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAAtB;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAC;IA6C9D,CAAC;IApCC,KAAK,CAAC,iBAAiB,CAAC,GAAuB;QAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,oDAAoD,GAAG,CAAC,SAAS,YAAY,GAAG,CAAC,MAAM,EAAE,CAC1F,CAAC;QAeF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,wEAAwE;YAChF,iBAAiB,EAAE,MAAM;SAC1B,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,kBAAkB,CAAC,IAA0B;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAE9E,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;CACF,CAAA;AA9CY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CA8C5B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/dto/check-submission.dto.d.ts b/BackendAcademy/dist/src/security/dto/check-submission.dto.d.ts deleted file mode 100644 index 7bb55e409..000000000 --- a/BackendAcademy/dist/src/security/dto/check-submission.dto.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare class CheckSubmissionDto { - learnerId: string; - taskId: string; - content: string; - metadata?: Record; -} diff --git a/BackendAcademy/dist/src/security/dto/check-submission.dto.js b/BackendAcademy/dist/src/security/dto/check-submission.dto.js deleted file mode 100644 index 2dc7f2b6c..000000000 --- a/BackendAcademy/dist/src/security/dto/check-submission.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CheckSubmissionDto = void 0; -class CheckSubmissionDto { -} -exports.CheckSubmissionDto = CheckSubmissionDto; -//# sourceMappingURL=check-submission.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/dto/check-submission.dto.js.map b/BackendAcademy/dist/src/security/dto/check-submission.dto.js.map deleted file mode 100644 index 6d27011c3..000000000 --- a/BackendAcademy/dist/src/security/dto/check-submission.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"check-submission.dto.js","sourceRoot":"","sources":["../../../../src/security/dto/check-submission.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;CAe9B;AAfD,gDAeC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/index.d.ts b/BackendAcademy/dist/src/security/index.d.ts deleted file mode 100644 index 99bdec720..000000000 --- a/BackendAcademy/dist/src/security/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { SecurityModule } from './security.module'; -export { AntiCheatService } from './anti-cheat.service'; -export { AntiCheatController } from './anti-cheat.controller'; -export * from './interfaces/anti-cheat.interface'; -export * from './dto/check-submission.dto'; diff --git a/BackendAcademy/dist/src/security/index.js b/BackendAcademy/dist/src/security/index.js deleted file mode 100644 index 922a38bd6..000000000 --- a/BackendAcademy/dist/src/security/index.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AntiCheatController = exports.AntiCheatService = exports.SecurityModule = void 0; -var security_module_1 = require("./security.module"); -Object.defineProperty(exports, "SecurityModule", { enumerable: true, get: function () { return security_module_1.SecurityModule; } }); -var anti_cheat_service_1 = require("./anti-cheat.service"); -Object.defineProperty(exports, "AntiCheatService", { enumerable: true, get: function () { return anti_cheat_service_1.AntiCheatService; } }); -var anti_cheat_controller_1 = require("./anti-cheat.controller"); -Object.defineProperty(exports, "AntiCheatController", { enumerable: true, get: function () { return anti_cheat_controller_1.AntiCheatController; } }); -__exportStar(require("./interfaces/anti-cheat.interface"), exports); -__exportStar(require("./dto/check-submission.dto"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/index.js.map b/BackendAcademy/dist/src/security/index.js.map deleted file mode 100644 index b6f713f5d..000000000 --- a/BackendAcademy/dist/src/security/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/security/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,oEAAkD;AAClD,6DAA2C"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.d.ts b/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.d.ts deleted file mode 100644 index 8cb4f126c..000000000 --- a/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type RiskLevel = 'low' | 'medium' | 'high'; -export interface AntiCheatResult { - flagged: boolean; - confidence: number; - riskLevel: RiskLevel; - reason: string; - recommendedAction: 'none' | 'warn_learner' | 'block_submission' | 'manual_review'; -} -export interface AntiCheatProvider { - analyzeSubmission(learnerId: string, taskId: string, content: string, metadata?: Record): Promise; -} diff --git a/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.js b/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.js deleted file mode 100644 index 7cd0d881d..000000000 --- a/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=anti-cheat.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.js.map b/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.js.map deleted file mode 100644 index 5c4de3f49..000000000 --- a/BackendAcademy/dist/src/security/interfaces/anti-cheat.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"anti-cheat.interface.js","sourceRoot":"","sources":["../../../../src/security/interfaces/anti-cheat.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/security.module.d.ts b/BackendAcademy/dist/src/security/security.module.d.ts deleted file mode 100644 index d734e6e37..000000000 --- a/BackendAcademy/dist/src/security/security.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class SecurityModule { -} diff --git a/BackendAcademy/dist/src/security/security.module.js b/BackendAcademy/dist/src/security/security.module.js deleted file mode 100644 index 4f26246cd..000000000 --- a/BackendAcademy/dist/src/security/security.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SecurityModule = void 0; -const common_1 = require("@nestjs/common"); -const anti_cheat_controller_1 = require("./anti-cheat.controller"); -const anti_cheat_service_1 = require("./anti-cheat.service"); -let SecurityModule = class SecurityModule { -}; -exports.SecurityModule = SecurityModule; -exports.SecurityModule = SecurityModule = __decorate([ - (0, common_1.Module)({ - controllers: [anti_cheat_controller_1.AntiCheatController], - providers: [anti_cheat_service_1.AntiCheatService], - exports: [anti_cheat_service_1.AntiCheatService], - }) -], SecurityModule); -//# sourceMappingURL=security.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/security/security.module.js.map b/BackendAcademy/dist/src/security/security.module.js.map deleted file mode 100644 index 183cb4b69..000000000 --- a/BackendAcademy/dist/src/security/security.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"security.module.js","sourceRoot":"","sources":["../../../src/security/security.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mEAA8D;AAC9D,6DAAwD;AAOjD,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAL1B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,2CAAmB,CAAC;QAClC,SAAS,EAAE,CAAC,qCAAgB,CAAC;QAC7B,OAAO,EAAE,CAAC,qCAAgB,CAAC;KAC5B,CAAC;GACW,cAAc,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/create-submission.dto.d.ts b/BackendAcademy/dist/src/submissions/dto/create-submission.dto.d.ts deleted file mode 100644 index 0537cf594..000000000 --- a/BackendAcademy/dist/src/submissions/dto/create-submission.dto.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare class CreateSubmissionDto { - taskId: string; - userId: string; - content: string; - fileUrl?: string; -} diff --git a/BackendAcademy/dist/src/submissions/dto/create-submission.dto.js b/BackendAcademy/dist/src/submissions/dto/create-submission.dto.js deleted file mode 100644 index c3acf3b59..000000000 --- a/BackendAcademy/dist/src/submissions/dto/create-submission.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateSubmissionDto = void 0; -class CreateSubmissionDto { -} -exports.CreateSubmissionDto = CreateSubmissionDto; -//# sourceMappingURL=create-submission.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/create-submission.dto.js.map b/BackendAcademy/dist/src/submissions/dto/create-submission.dto.js.map deleted file mode 100644 index 3d23a8be4..000000000 --- a/BackendAcademy/dist/src/submissions/dto/create-submission.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"create-submission.dto.js","sourceRoot":"","sources":["../../../../src/submissions/dto/create-submission.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,mBAAmB;CAK/B;AALD,kDAKC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.d.ts b/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.d.ts deleted file mode 100644 index 703eb96ba..000000000 --- a/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare class ReviewQueueQueryDto { - taskId?: string; - cursor?: string; - limit?: number; -} diff --git a/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.js b/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.js deleted file mode 100644 index c32603e6b..000000000 --- a/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ReviewQueueQueryDto = void 0; -class ReviewQueueQueryDto { -} -exports.ReviewQueueQueryDto = ReviewQueueQueryDto; -//# sourceMappingURL=review-queue-query.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.js.map b/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.js.map deleted file mode 100644 index 3a4e63dc6..000000000 --- a/BackendAcademy/dist/src/submissions/dto/review-queue-query.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"review-queue-query.dto.js","sourceRoot":"","sources":["../../../../src/submissions/dto/review-queue-query.dto.ts"],"names":[],"mappings":";;;AAGA,MAAa,mBAAmB;CAkB/B;AAlBD,kDAkBC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/review-submission.dto.d.ts b/BackendAcademy/dist/src/submissions/dto/review-submission.dto.d.ts deleted file mode 100644 index 4797e03ff..000000000 --- a/BackendAcademy/dist/src/submissions/dto/review-submission.dto.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { SubmissionStatus } from '../interfaces/submission-status.enum'; -export declare class ReviewSubmissionDto { - status: SubmissionStatus.APPROVED | SubmissionStatus.REJECTED | SubmissionStatus.NEEDS_REVISION; - feedback?: string; - score?: number; -} diff --git a/BackendAcademy/dist/src/submissions/dto/review-submission.dto.js b/BackendAcademy/dist/src/submissions/dto/review-submission.dto.js deleted file mode 100644 index 71360c685..000000000 --- a/BackendAcademy/dist/src/submissions/dto/review-submission.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ReviewSubmissionDto = void 0; -class ReviewSubmissionDto { -} -exports.ReviewSubmissionDto = ReviewSubmissionDto; -//# sourceMappingURL=review-submission.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/review-submission.dto.js.map b/BackendAcademy/dist/src/submissions/dto/review-submission.dto.js.map deleted file mode 100644 index f0ce288e1..000000000 --- a/BackendAcademy/dist/src/submissions/dto/review-submission.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"review-submission.dto.js","sourceRoot":"","sources":["../../../../src/submissions/dto/review-submission.dto.ts"],"names":[],"mappings":";;;AAKA,MAAa,mBAAmB;CAiB/B;AAjBD,kDAiBC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.d.ts b/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.d.ts deleted file mode 100644 index 2365ce263..000000000 --- a/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { GradingResultStatus } from '../interfaces/grading-result-status.enum'; -import { RubricEntry } from '../interfaces/grading-result.interface'; -export declare class SaveGradingResultDto { - graderId: string; - status: GradingResultStatus; - score: number; - maxScore: number; - feedback: string; - privateNotes?: string; - rubric?: RubricEntry[]; -} diff --git a/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.js b/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.js deleted file mode 100644 index 4b1bcdd98..000000000 --- a/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SaveGradingResultDto = void 0; -class SaveGradingResultDto { -} -exports.SaveGradingResultDto = SaveGradingResultDto; -//# sourceMappingURL=save-grading-result.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.js.map b/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.js.map deleted file mode 100644 index 66b08f777..000000000 --- a/BackendAcademy/dist/src/submissions/dto/save-grading-result.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"save-grading-result.dto.js","sourceRoot":"","sources":["../../../../src/submissions/dto/save-grading-result.dto.ts"],"names":[],"mappings":";;;AASA,MAAa,oBAAoB;CAqBhC;AArBD,oDAqBC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/update-submission.dto.d.ts b/BackendAcademy/dist/src/submissions/dto/update-submission.dto.d.ts deleted file mode 100644 index 89358f8e8..000000000 --- a/BackendAcademy/dist/src/submissions/dto/update-submission.dto.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SubmissionStatus } from '../interfaces/submission-status.enum'; -export declare class UpdateSubmissionDto { - content?: string; - fileUrl?: string; - status?: SubmissionStatus; - feedback?: string; - score?: number; - reviewedBy?: string; -} diff --git a/BackendAcademy/dist/src/submissions/dto/update-submission.dto.js b/BackendAcademy/dist/src/submissions/dto/update-submission.dto.js deleted file mode 100644 index 97f9a5b89..000000000 --- a/BackendAcademy/dist/src/submissions/dto/update-submission.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateSubmissionDto = void 0; -class UpdateSubmissionDto { -} -exports.UpdateSubmissionDto = UpdateSubmissionDto; -//# sourceMappingURL=update-submission.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/dto/update-submission.dto.js.map b/BackendAcademy/dist/src/submissions/dto/update-submission.dto.js.map deleted file mode 100644 index 4ca9bf714..000000000 --- a/BackendAcademy/dist/src/submissions/dto/update-submission.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"update-submission.dto.js","sourceRoot":"","sources":["../../../../src/submissions/dto/update-submission.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,mBAAmB;CAO/B;AAPD,kDAOC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/entities/grading-result.entity.d.ts b/BackendAcademy/dist/src/submissions/entities/grading-result.entity.d.ts deleted file mode 100644 index 4a6e73e84..000000000 --- a/BackendAcademy/dist/src/submissions/entities/grading-result.entity.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { GradingResultStatus } from '../interfaces/grading-result-status.enum'; -import { IGradingResult, RubricEntry } from '../interfaces/grading-result.interface'; -export declare class GradingResultEntity implements IGradingResult { - id: string; - submissionId: string; - graderId: string; - status: GradingResultStatus; - score: number; - maxScore: number; - feedback: string; - privateNotes?: string; - rubric?: RubricEntry[]; - gradedAt: Date; - createdAt: Date; - updatedAt: Date; - constructor(partial: Partial); - get percentage(): number; - get passed(): boolean; -} diff --git a/BackendAcademy/dist/src/submissions/entities/grading-result.entity.js b/BackendAcademy/dist/src/submissions/entities/grading-result.entity.js deleted file mode 100644 index 13d4e196e..000000000 --- a/BackendAcademy/dist/src/submissions/entities/grading-result.entity.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GradingResultEntity = void 0; -const grading_result_status_enum_1 = require("../interfaces/grading-result-status.enum"); -class GradingResultEntity { - constructor(partial) { - Object.assign(this, partial); - this.status = this.status ?? grading_result_status_enum_1.GradingResultStatus.FAIL; - this.score = this.score ?? 0; - this.maxScore = this.maxScore ?? 100; - this.feedback = this.feedback ?? ''; - this.gradedAt = this.gradedAt ?? new Date(); - this.createdAt = this.createdAt ?? new Date(); - this.updatedAt = this.updatedAt ?? new Date(); - } - get percentage() { - if (this.maxScore === 0) - return 0; - return Math.round((this.score / this.maxScore) * 10000) / 100; - } - get passed() { - return this.status === grading_result_status_enum_1.GradingResultStatus.PASS; - } -} -exports.GradingResultEntity = GradingResultEntity; -//# sourceMappingURL=grading-result.entity.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/entities/grading-result.entity.js.map b/BackendAcademy/dist/src/submissions/entities/grading-result.entity.js.map deleted file mode 100644 index 1f8639260..000000000 --- a/BackendAcademy/dist/src/submissions/entities/grading-result.entity.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading-result.entity.js","sourceRoot":"","sources":["../../../../src/submissions/entities/grading-result.entity.ts"],"names":[],"mappings":";;;AAAA,yFAA+E;AAW/E,MAAa,mBAAmB;IAiC9B,YAAY,OAAqC;QAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,gDAAmB,CAAC,IAAI,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;IAChD,CAAC;IAGD,IAAI,UAAU;QACZ,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;IAChE,CAAC;IAGD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,KAAK,gDAAmB,CAAC,IAAI,CAAC;IAClD,CAAC;CACF;AAtDD,kDAsDC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/grading-result.repository.d.ts b/BackendAcademy/dist/src/submissions/grading-result.repository.d.ts deleted file mode 100644 index fedae20e7..000000000 --- a/BackendAcademy/dist/src/submissions/grading-result.repository.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { GradingResultEntity } from './entities/grading-result.entity'; -export declare class GradingResultRepository { - private readonly store; - save(entity: GradingResultEntity): Promise; - findById(id: string): Promise; - findBySubmissionId(submissionId: string): Promise; - findLatestBySubmissionId(submissionId: string): Promise; - findByGraderId(graderId: string): Promise; - delete(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/submissions/grading-result.repository.js b/BackendAcademy/dist/src/submissions/grading-result.repository.js deleted file mode 100644 index eae47796c..000000000 --- a/BackendAcademy/dist/src/submissions/grading-result.repository.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GradingResultRepository = void 0; -const common_1 = require("@nestjs/common"); -let GradingResultRepository = class GradingResultRepository { - constructor() { - this.store = new Map(); - } - async save(entity) { - this.store.set(entity.id, entity); - return entity; - } - async findById(id) { - return this.store.get(id) ?? null; - } - async findBySubmissionId(submissionId) { - return Array.from(this.store.values()) - .filter((r) => r.submissionId === submissionId) - .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime()); - } - async findLatestBySubmissionId(submissionId) { - const results = await this.findBySubmissionId(submissionId); - return results.length > 0 ? results[results.length - 1] : null; - } - async findByGraderId(graderId) { - return Array.from(this.store.values()) - .filter((r) => r.graderId === graderId) - .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime()); - } - async delete(id) { - return this.store.delete(id); - } -}; -exports.GradingResultRepository = GradingResultRepository; -exports.GradingResultRepository = GradingResultRepository = __decorate([ - (0, common_1.Injectable)() -], GradingResultRepository); -//# sourceMappingURL=grading-result.repository.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/grading-result.repository.js.map b/BackendAcademy/dist/src/submissions/grading-result.repository.js.map deleted file mode 100644 index 0da571d14..000000000 --- a/BackendAcademy/dist/src/submissions/grading-result.repository.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading-result.repository.js","sourceRoot":"","sources":["../../../src/submissions/grading-result.repository.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAWrC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAA7B;QACY,UAAK,GAAqC,IAAI,GAAG,EAAE,CAAC;IAoDvE,CAAC;IA/CC,KAAK,CAAC,IAAI,CAAC,MAA2B;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAKD,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAMD,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC;aAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAMD,KAAK,CAAC,wBAAwB,CAAC,YAAoB;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAKD,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;aACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AArDY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;GACA,uBAAuB,CAqDnC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/grading-result.service.d.ts b/BackendAcademy/dist/src/submissions/grading-result.service.d.ts deleted file mode 100644 index f76533d35..000000000 --- a/BackendAcademy/dist/src/submissions/grading-result.service.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { GradingResultRepository } from './grading-result.repository'; -import { SubmissionService } from './submission.service'; -import { GradingResultEntity } from './entities/grading-result.entity'; -import { SaveGradingResultDto } from './dto/save-grading-result.dto'; -export declare class GradingResultService { - private readonly gradingResultRepo; - private readonly submissionService; - constructor(gradingResultRepo: GradingResultRepository, submissionService: SubmissionService); - saveResult(submissionId: string, dto: SaveGradingResultDto): Promise; - getResultsBySubmission(submissionId: string): Promise; - getLatestResult(submissionId: string): Promise; - getResultById(id: string): Promise; - getResultsByGrader(graderId: string): Promise; - deleteResult(id: string): Promise; - private toSubmissionStatus; -} diff --git a/BackendAcademy/dist/src/submissions/grading-result.service.js b/BackendAcademy/dist/src/submissions/grading-result.service.js deleted file mode 100644 index bc8d83e68..000000000 --- a/BackendAcademy/dist/src/submissions/grading-result.service.js +++ /dev/null @@ -1,100 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GradingResultService = void 0; -const common_1 = require("@nestjs/common"); -const grading_result_repository_1 = require("./grading-result.repository"); -const submission_service_1 = require("./submission.service"); -const grading_result_entity_1 = require("./entities/grading-result.entity"); -const submission_status_enum_1 = require("./interfaces/submission-status.enum"); -const grading_result_status_enum_1 = require("./interfaces/grading-result-status.enum"); -let GradingResultService = class GradingResultService { - constructor(gradingResultRepo, submissionService) { - this.gradingResultRepo = gradingResultRepo; - this.submissionService = submissionService; - } - async saveResult(submissionId, dto) { - const submission = await this.submissionService.findById(submissionId); - if (!submission) { - throw new common_1.NotFoundException(`Submission ${submissionId} not found`); - } - if (dto.maxScore <= 0) { - throw new common_1.BadRequestException('maxScore must be greater than 0'); - } - if (dto.score < 0 || dto.score > dto.maxScore) { - throw new common_1.BadRequestException(`score must be between 0 and maxScore (${dto.maxScore})`); - } - const entity = new grading_result_entity_1.GradingResultEntity({ - id: crypto.randomUUID(), - submissionId, - graderId: dto.graderId, - status: dto.status, - score: dto.score, - maxScore: dto.maxScore, - feedback: dto.feedback, - privateNotes: dto.privateNotes, - rubric: dto.rubric, - }); - const saved = await this.gradingResultRepo.save(entity); - const submissionStatus = this.toSubmissionStatus(dto.status); - await this.submissionService.review(submissionId, dto.graderId, submissionStatus, dto.feedback, dto.score); - return saved; - } - async getResultsBySubmission(submissionId) { - const submission = await this.submissionService.findById(submissionId); - if (!submission) { - throw new common_1.NotFoundException(`Submission ${submissionId} not found`); - } - return this.gradingResultRepo.findBySubmissionId(submissionId); - } - async getLatestResult(submissionId) { - const submission = await this.submissionService.findById(submissionId); - if (!submission) { - throw new common_1.NotFoundException(`Submission ${submissionId} not found`); - } - return this.gradingResultRepo.findLatestBySubmissionId(submissionId); - } - async getResultById(id) { - const result = await this.gradingResultRepo.findById(id); - if (!result) { - throw new common_1.NotFoundException(`Grading result ${id} not found`); - } - return result; - } - async getResultsByGrader(graderId) { - return this.gradingResultRepo.findByGraderId(graderId); - } - async deleteResult(id) { - const deleted = await this.gradingResultRepo.delete(id); - if (!deleted) { - throw new common_1.NotFoundException(`Grading result ${id} not found`); - } - } - toSubmissionStatus(gradingStatus) { - switch (gradingStatus) { - case grading_result_status_enum_1.GradingResultStatus.PASS: - return submission_status_enum_1.SubmissionStatus.APPROVED; - case grading_result_status_enum_1.GradingResultStatus.FAIL: - return submission_status_enum_1.SubmissionStatus.REJECTED; - case grading_result_status_enum_1.GradingResultStatus.NEEDS_REVISION: - return submission_status_enum_1.SubmissionStatus.NEEDS_REVISION; - case grading_result_status_enum_1.GradingResultStatus.PARTIAL: - return submission_status_enum_1.SubmissionStatus.NEEDS_REVISION; - } - } -}; -exports.GradingResultService = GradingResultService; -exports.GradingResultService = GradingResultService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [grading_result_repository_1.GradingResultRepository, - submission_service_1.SubmissionService]) -], GradingResultService); -//# sourceMappingURL=grading-result.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/grading-result.service.js.map b/BackendAcademy/dist/src/submissions/grading-result.service.js.map deleted file mode 100644 index a423f2e78..000000000 --- a/BackendAcademy/dist/src/submissions/grading-result.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading-result.service.js","sourceRoot":"","sources":["../../../src/submissions/grading-result.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAIwB;AACxB,2EAAsE;AACtE,6DAAyD;AACzD,4EAAuE;AAEvE,gFAAuE;AACvE,wFAA8E;AASvE,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YACmB,iBAA0C,EAC1C,iBAAoC;QADpC,sBAAiB,GAAjB,iBAAiB,CAAyB;QAC1C,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IASJ,KAAK,CAAC,UAAU,CACd,YAAoB,EACpB,GAAyB;QAGzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,0BAAiB,CAAC,cAAc,YAAY,YAAY,CAAC,CAAC;QACtE,CAAC;QAGD,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,4BAAmB,CAAC,iCAAiC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,4BAAmB,CAC3B,yCAAyC,GAAG,CAAC,QAAQ,GAAG,CACzD,CAAC;QACJ,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,2CAAmB,CAAC;YACrC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,YAAY;YACZ,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAGxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAG7D,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CACjC,YAAY,EACZ,GAAG,CAAC,QAAQ,EACZ,gBAAgB,EAChB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,KAAK,CACV,CAAC;QAEF,OAAO,KAAK,CAAC;IACf,CAAC;IAOD,KAAK,CAAC,sBAAsB,CAAC,YAAoB;QAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,0BAAiB,CAAC,cAAc,YAAY,YAAY,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAOD,KAAK,CAAC,eAAe,CAAC,YAAoB;QACxC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,0BAAiB,CAAC,cAAc,YAAY,YAAY,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAOD,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,0BAAiB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAKD,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QACvC,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAOD,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,0BAAiB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAUO,kBAAkB,CAAC,aAAkC;QAC3D,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,gDAAmB,CAAC,IAAI;gBAC3B,OAAO,yCAAgB,CAAC,QAAQ,CAAC;YACnC,KAAK,gDAAmB,CAAC,IAAI;gBAC3B,OAAO,yCAAgB,CAAC,QAAQ,CAAC;YACnC,KAAK,gDAAmB,CAAC,cAAc;gBACrC,OAAO,yCAAgB,CAAC,cAAc,CAAC;YACzC,KAAK,gDAAmB,CAAC,OAAO;gBAE9B,OAAO,yCAAgB,CAAC,cAAc,CAAC;QAC3C,CAAC;IACH,CAAC;CACF,CAAA;AA9IY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAG2B,mDAAuB;QACvB,sCAAiB;GAH5C,oBAAoB,CA8IhC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/index.d.ts b/BackendAcademy/dist/src/submissions/index.d.ts deleted file mode 100644 index 0239187e3..000000000 --- a/BackendAcademy/dist/src/submissions/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export { SubmissionModule } from './submission.module'; -export { SubmissionService } from './submission.service'; -export { SubmissionEntity } from './submission.entity'; -export { SubmissionStatus } from './interfaces/submission-status.enum'; -export { ISubmission } from './interfaces/submission.interface'; -export { CreateSubmissionDto } from './dto/create-submission.dto'; -export { UpdateSubmissionDto } from './dto/update-submission.dto'; -export { ReviewSubmissionDto } from './dto/review-submission.dto'; -export { ReviewQueueQueryDto } from './dto/review-queue-query.dto'; -export { TutorReviewService } from './tutor-review.service'; -export type { ReviewQueuePage, ReviewStats } from './tutor-review.service'; -export { TutorReviewController } from './tutor-review.controller'; diff --git a/BackendAcademy/dist/src/submissions/index.js b/BackendAcademy/dist/src/submissions/index.js deleted file mode 100644 index ac605e1d7..000000000 --- a/BackendAcademy/dist/src/submissions/index.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorReviewController = exports.TutorReviewService = exports.ReviewQueueQueryDto = exports.ReviewSubmissionDto = exports.UpdateSubmissionDto = exports.CreateSubmissionDto = exports.SubmissionStatus = exports.SubmissionEntity = exports.SubmissionService = exports.SubmissionModule = void 0; -var submission_module_1 = require("./submission.module"); -Object.defineProperty(exports, "SubmissionModule", { enumerable: true, get: function () { return submission_module_1.SubmissionModule; } }); -var submission_service_1 = require("./submission.service"); -Object.defineProperty(exports, "SubmissionService", { enumerable: true, get: function () { return submission_service_1.SubmissionService; } }); -var submission_entity_1 = require("./submission.entity"); -Object.defineProperty(exports, "SubmissionEntity", { enumerable: true, get: function () { return submission_entity_1.SubmissionEntity; } }); -var submission_status_enum_1 = require("./interfaces/submission-status.enum"); -Object.defineProperty(exports, "SubmissionStatus", { enumerable: true, get: function () { return submission_status_enum_1.SubmissionStatus; } }); -var create_submission_dto_1 = require("./dto/create-submission.dto"); -Object.defineProperty(exports, "CreateSubmissionDto", { enumerable: true, get: function () { return create_submission_dto_1.CreateSubmissionDto; } }); -var update_submission_dto_1 = require("./dto/update-submission.dto"); -Object.defineProperty(exports, "UpdateSubmissionDto", { enumerable: true, get: function () { return update_submission_dto_1.UpdateSubmissionDto; } }); -var review_submission_dto_1 = require("./dto/review-submission.dto"); -Object.defineProperty(exports, "ReviewSubmissionDto", { enumerable: true, get: function () { return review_submission_dto_1.ReviewSubmissionDto; } }); -var review_queue_query_dto_1 = require("./dto/review-queue-query.dto"); -Object.defineProperty(exports, "ReviewQueueQueryDto", { enumerable: true, get: function () { return review_queue_query_dto_1.ReviewQueueQueryDto; } }); -var tutor_review_service_1 = require("./tutor-review.service"); -Object.defineProperty(exports, "TutorReviewService", { enumerable: true, get: function () { return tutor_review_service_1.TutorReviewService; } }); -var tutor_review_controller_1 = require("./tutor-review.controller"); -Object.defineProperty(exports, "TutorReviewController", { enumerable: true, get: function () { return tutor_review_controller_1.TutorReviewController; } }); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/index.js.map b/BackendAcademy/dist/src/submissions/index.js.map deleted file mode 100644 index 4d6e35634..000000000 --- a/BackendAcademy/dist/src/submissions/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/submissions/index.ts"],"names":[],"mappings":";;;AAAA,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,8EAAuE;AAA9D,0HAAA,gBAAgB,OAAA;AAEzB,qEAAkE;AAAzD,4HAAA,mBAAmB,OAAA;AAC5B,qEAAkE;AAAzD,4HAAA,mBAAmB,OAAA;AAC5B,qEAAkE;AAAzD,4HAAA,mBAAmB,OAAA;AAC5B,uEAAmE;AAA1D,6HAAA,mBAAmB,OAAA;AAC5B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAE3B,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.d.ts b/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.d.ts deleted file mode 100644 index d553bb55e..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare enum GradingResultStatus { - PASS = "pass", - FAIL = "fail", - NEEDS_REVISION = "needs_revision", - PARTIAL = "partial" -} diff --git a/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.js b/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.js deleted file mode 100644 index 8934cdb08..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GradingResultStatus = void 0; -var GradingResultStatus; -(function (GradingResultStatus) { - GradingResultStatus["PASS"] = "pass"; - GradingResultStatus["FAIL"] = "fail"; - GradingResultStatus["NEEDS_REVISION"] = "needs_revision"; - GradingResultStatus["PARTIAL"] = "partial"; -})(GradingResultStatus || (exports.GradingResultStatus = GradingResultStatus = {})); -//# sourceMappingURL=grading-result-status.enum.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.js.map b/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.js.map deleted file mode 100644 index 7d106c2d3..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/grading-result-status.enum.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading-result-status.enum.js","sourceRoot":"","sources":["../../../../src/submissions/interfaces/grading-result-status.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC7B,oCAAa,CAAA;IACb,oCAAa,CAAA;IACb,wDAAiC,CAAA;IACjC,0CAAmB,CAAA;AACrB,CAAC,EALW,mBAAmB,mCAAnB,mBAAmB,QAK9B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.d.ts b/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.d.ts deleted file mode 100644 index bd5248f11..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { GradingResultStatus } from './grading-result-status.enum'; -export interface IGradingResult { - id: string; - submissionId: string; - graderId: string; - status: GradingResultStatus; - score: number; - maxScore: number; - feedback: string; - privateNotes?: string; - rubric?: RubricEntry[]; - gradedAt: Date; - createdAt: Date; - updatedAt: Date; -} -export interface RubricEntry { - criterion: string; - points: number; - maxPoints: number; - comment?: string; -} diff --git a/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.js b/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.js deleted file mode 100644 index 7a666e2eb..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=grading-result.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.js.map b/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.js.map deleted file mode 100644 index 43a50ec26..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/grading-result.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"grading-result.interface.js","sourceRoot":"","sources":["../../../../src/submissions/interfaces/grading-result.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.d.ts b/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.d.ts deleted file mode 100644 index 5baf59c7f..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare enum SubmissionStatus { - PENDING = "pending", - APPROVED = "approved", - REJECTED = "rejected", - NEEDS_REVISION = "needs_revision" -} diff --git a/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.js b/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.js deleted file mode 100644 index f35c51cb2..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionStatus = void 0; -var SubmissionStatus; -(function (SubmissionStatus) { - SubmissionStatus["PENDING"] = "pending"; - SubmissionStatus["APPROVED"] = "approved"; - SubmissionStatus["REJECTED"] = "rejected"; - SubmissionStatus["NEEDS_REVISION"] = "needs_revision"; -})(SubmissionStatus || (exports.SubmissionStatus = SubmissionStatus = {})); -//# sourceMappingURL=submission-status.enum.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.js.map b/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.js.map deleted file mode 100644 index 174a93e62..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/submission-status.enum.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submission-status.enum.js","sourceRoot":"","sources":["../../../../src/submissions/interfaces/submission-status.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;IACrB,yCAAqB,CAAA;IACrB,qDAAiC,CAAA;AACnC,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/submission.interface.d.ts b/BackendAcademy/dist/src/submissions/interfaces/submission.interface.d.ts deleted file mode 100644 index 727c857e7..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/submission.interface.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { SubmissionStatus } from './submission-status.enum'; -export interface ISubmission { - id: string; - taskId: string; - userId: string; - content: string; - fileUrl?: string; - status: SubmissionStatus; - feedback?: string; - score?: number; - submittedAt: Date; - reviewedAt?: Date; - reviewedBy?: string; - createdAt: Date; - updatedAt: Date; -} diff --git a/BackendAcademy/dist/src/submissions/interfaces/submission.interface.js b/BackendAcademy/dist/src/submissions/interfaces/submission.interface.js deleted file mode 100644 index 9b28b2224..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/submission.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=submission.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/interfaces/submission.interface.js.map b/BackendAcademy/dist/src/submissions/interfaces/submission.interface.js.map deleted file mode 100644 index de2f5dfd9..000000000 --- a/BackendAcademy/dist/src/submissions/interfaces/submission.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submission.interface.js","sourceRoot":"","sources":["../../../../src/submissions/interfaces/submission.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.controller.d.ts b/BackendAcademy/dist/src/submissions/submission.controller.d.ts deleted file mode 100644 index dbd4e8bb1..000000000 --- a/BackendAcademy/dist/src/submissions/submission.controller.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { SubmissionService } from './submission.service'; -import { GradingResultService } from './grading-result.service'; -import { CreateSubmissionDto } from './dto/create-submission.dto'; -import { UpdateSubmissionDto } from './dto/update-submission.dto'; -import { SaveGradingResultDto } from './dto/save-grading-result.dto'; -import { SubmissionStatus } from './interfaces/submission-status.enum'; -export declare class SubmissionController { - private readonly submissionService; - private readonly gradingResultService; - constructor(submissionService: SubmissionService, gradingResultService: GradingResultService); - create(dto: CreateSubmissionDto): Promise; - findAll(): Promise; - findByTaskId(taskId: string): Promise; - findByUserId(userId: string): Promise; - findByStatus(status: SubmissionStatus): Promise; - findById(id: string): Promise; - update(id: string, dto: UpdateSubmissionDto): Promise; - review(id: string, reviewerId: string, status: SubmissionStatus, feedback?: string, score?: number): Promise; - remove(id: string): Promise; - saveGradingResult(id: string, dto: SaveGradingResultDto): Promise; - getGradingResults(id: string): Promise; - getLatestGradingResult(id: string): Promise; - getGradingResultById(gradeId: string): Promise; - deleteGradingResult(gradeId: string): Promise; -} diff --git a/BackendAcademy/dist/src/submissions/submission.controller.js b/BackendAcademy/dist/src/submissions/submission.controller.js deleted file mode 100644 index d227af679..000000000 --- a/BackendAcademy/dist/src/submissions/submission.controller.js +++ /dev/null @@ -1,181 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionController = void 0; -const common_1 = require("@nestjs/common"); -const submission_service_1 = require("./submission.service"); -const grading_result_service_1 = require("./grading-result.service"); -const create_submission_dto_1 = require("./dto/create-submission.dto"); -const update_submission_dto_1 = require("./dto/update-submission.dto"); -const save_grading_result_dto_1 = require("./dto/save-grading-result.dto"); -const submission_status_enum_1 = require("./interfaces/submission-status.enum"); -let SubmissionController = class SubmissionController { - constructor(submissionService, gradingResultService) { - this.submissionService = submissionService; - this.gradingResultService = gradingResultService; - } - async create(dto) { - return this.submissionService.create(dto); - } - async findAll() { - return this.submissionService.findAll(); - } - async findByTaskId(taskId) { - return this.submissionService.findByTaskId(taskId); - } - async findByUserId(userId) { - return this.submissionService.findByUserId(userId); - } - async findByStatus(status) { - return this.submissionService.findByStatus(status); - } - async findById(id) { - return this.submissionService.findById(id); - } - async update(id, dto) { - return this.submissionService.update(id, dto); - } - async review(id, reviewerId, status, feedback, score) { - return this.submissionService.review(id, reviewerId, status, feedback, score); - } - async remove(id) { - return this.submissionService.remove(id); - } - async saveGradingResult(id, dto) { - return this.gradingResultService.saveResult(id, dto); - } - async getGradingResults(id) { - return this.gradingResultService.getResultsBySubmission(id); - } - async getLatestGradingResult(id) { - return this.gradingResultService.getLatestResult(id); - } - async getGradingResultById(gradeId) { - return this.gradingResultService.getResultById(gradeId); - } - async deleteGradingResult(gradeId) { - await this.gradingResultService.deleteResult(gradeId); - } -}; -exports.SubmissionController = SubmissionController; -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [create_submission_dto_1.CreateSubmissionDto]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)('task/:taskId'), - __param(0, (0, common_1.Param)('taskId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "findByTaskId", null); -__decorate([ - (0, common_1.Get)('user/:userId'), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "findByUserId", null); -__decorate([ - (0, common_1.Get)('status/:status'), - __param(0, (0, common_1.Param)('status')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "findByStatus", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "findById", null); -__decorate([ - (0, common_1.Put)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, update_submission_dto_1.UpdateSubmissionDto]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "update", null); -__decorate([ - (0, common_1.Post)(':id/review'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Body)('reviewedBy')), - __param(2, (0, common_1.Body)('status')), - __param(3, (0, common_1.Body)('feedback')), - __param(4, (0, common_1.Body)('score')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, String, String, String, Number]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "review", null); -__decorate([ - (0, common_1.Delete)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "remove", null); -__decorate([ - (0, common_1.Post)(':id/grade'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, save_grading_result_dto_1.SaveGradingResultDto]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "saveGradingResult", null); -__decorate([ - (0, common_1.Get)(':id/grades'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "getGradingResults", null); -__decorate([ - (0, common_1.Get)(':id/grades/latest'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "getLatestGradingResult", null); -__decorate([ - (0, common_1.Get)('grades/:gradeId'), - __param(0, (0, common_1.Param)('gradeId', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "getGradingResultById", null); -__decorate([ - (0, common_1.Delete)('grades/:gradeId'), - (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT), - __param(0, (0, common_1.Param)('gradeId', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], SubmissionController.prototype, "deleteGradingResult", null); -exports.SubmissionController = SubmissionController = __decorate([ - (0, common_1.Controller)('submissions'), - __metadata("design:paramtypes", [submission_service_1.SubmissionService, - grading_result_service_1.GradingResultService]) -], SubmissionController); -//# sourceMappingURL=submission.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.controller.js.map b/BackendAcademy/dist/src/submissions/submission.controller.js.map deleted file mode 100644 index 72840b7ec..000000000 --- a/BackendAcademy/dist/src/submissions/submission.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submission.controller.js","sourceRoot":"","sources":["../../../src/submissions/submission.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.entity.d.ts b/BackendAcademy/dist/src/submissions/submission.entity.d.ts deleted file mode 100644 index c085124fe..000000000 --- a/BackendAcademy/dist/src/submissions/submission.entity.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { SubmissionStatus } from './interfaces/submission-status.enum'; -export declare class SubmissionEntity { - id: string; - taskId: string; - userId: string; - content: string; - fileUrl?: string; - status: SubmissionStatus; - feedback?: string; - score?: number; - submittedAt: Date; - reviewedAt?: Date; - reviewedBy?: string; - createdAt: Date; - updatedAt: Date; - constructor(partial: Partial); -} diff --git a/BackendAcademy/dist/src/submissions/submission.entity.js b/BackendAcademy/dist/src/submissions/submission.entity.js deleted file mode 100644 index a7167e1d8..000000000 --- a/BackendAcademy/dist/src/submissions/submission.entity.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionEntity = void 0; -const submission_status_enum_1 = require("./interfaces/submission-status.enum"); -class SubmissionEntity { - constructor(partial) { - Object.assign(this, partial); - this.status = this.status || submission_status_enum_1.SubmissionStatus.PENDING; - this.submittedAt = this.submittedAt || new Date(); - this.createdAt = this.createdAt || new Date(); - this.updatedAt = this.updatedAt || new Date(); - } -} -exports.SubmissionEntity = SubmissionEntity; -//# sourceMappingURL=submission.entity.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.entity.js.map b/BackendAcademy/dist/src/submissions/submission.entity.js.map deleted file mode 100644 index 163106e62..000000000 --- a/BackendAcademy/dist/src/submissions/submission.entity.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submission.entity.js","sourceRoot":"","sources":["../../../src/submissions/submission.entity.ts"],"names":[],"mappings":";;;AAAA,gFAAuE;AAEvE,MAAa,gBAAgB;IAe3B,YAAY,OAAkC;QAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,yCAAgB,CAAC,OAAO,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;IAChD,CAAC;CACF;AAtBD,4CAsBC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.module.d.ts b/BackendAcademy/dist/src/submissions/submission.module.d.ts deleted file mode 100644 index b6d22ae4f..000000000 --- a/BackendAcademy/dist/src/submissions/submission.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class SubmissionModule { -} diff --git a/BackendAcademy/dist/src/submissions/submission.module.js b/BackendAcademy/dist/src/submissions/submission.module.js deleted file mode 100644 index 33d56a453..000000000 --- a/BackendAcademy/dist/src/submissions/submission.module.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionModule = void 0; -const common_1 = require("@nestjs/common"); -const auth_module_1 = require("../auth/auth.module"); -const grading_result_repository_1 = require("./grading-result.repository"); -const grading_result_service_1 = require("./grading-result.service"); -const submission_controller_1 = require("./submission.controller"); -const submission_service_1 = require("./submission.service"); -const tutor_review_controller_1 = require("./tutor-review.controller"); -const tutor_review_service_1 = require("./tutor-review.service"); -let SubmissionModule = class SubmissionModule { -}; -exports.SubmissionModule = SubmissionModule; -exports.SubmissionModule = SubmissionModule = __decorate([ - (0, common_1.Module)({ - imports: [auth_module_1.AuthModule], - controllers: [submission_controller_1.SubmissionController, tutor_review_controller_1.TutorReviewController], - providers: [submission_service_1.SubmissionService, grading_result_service_1.GradingResultService, grading_result_repository_1.GradingResultRepository], - exports: [submission_service_1.SubmissionService, grading_result_service_1.GradingResultService, tutor_review_service_1.TutorReviewService], - }) -], SubmissionModule); -//# sourceMappingURL=submission.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.module.js.map b/BackendAcademy/dist/src/submissions/submission.module.js.map deleted file mode 100644 index cca1dc5bf..000000000 --- a/BackendAcademy/dist/src/submissions/submission.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submission.module.js","sourceRoot":"","sources":["../../../src/submissions/submission.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAiD;AACjD,2EAAsE;AACtE,qEAAgE;AAChE,mEAA+D;AAC/D,6DAAyD;AACzD,uEAAkE;AAClE,iEAA4D;AAQrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAN5B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,wBAAU,CAAC;QACrB,WAAW,EAAE,CAAC,4CAAoB,EAAE,+CAAqB,CAAC;QAC1D,SAAS,EAAE,CAAC,sCAAiB,EAAE,6CAAoB,EAAE,mDAAuB,CAAC;QAC7E,OAAO,EAAE,CAAC,sCAAiB,EAAE,6CAAoB,EAAE,yCAAkB,CAAC;KACvE,CAAC;GACW,gBAAgB,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.service.d.ts b/BackendAcademy/dist/src/submissions/submission.service.d.ts deleted file mode 100644 index 8d6de62d6..000000000 --- a/BackendAcademy/dist/src/submissions/submission.service.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { SubmissionEntity } from './submission.entity'; -import { CreateSubmissionDto } from './dto/create-submission.dto'; -import { UpdateSubmissionDto } from './dto/update-submission.dto'; -import { SubmissionStatus } from './interfaces/submission-status.enum'; -export declare class SubmissionService { - private readonly submissions; - create(dto: CreateSubmissionDto): Promise; - findAll(): Promise; - findById(id: string): Promise; - findByTaskId(taskId: string): Promise; - findByUserId(userId: string): Promise; - findByStatus(status: SubmissionStatus): Promise; - update(id: string, dto: UpdateSubmissionDto): Promise; - review(id: string, reviewerId: string, status: SubmissionStatus, feedback?: string, score?: number): Promise; - remove(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/submissions/submission.service.js b/BackendAcademy/dist/src/submissions/submission.service.js deleted file mode 100644 index 94a922a63..000000000 --- a/BackendAcademy/dist/src/submissions/submission.service.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionService = void 0; -const common_1 = require("@nestjs/common"); -const submission_entity_1 = require("./submission.entity"); -const submission_status_enum_1 = require("./interfaces/submission-status.enum"); -let SubmissionService = class SubmissionService { - constructor() { - this.submissions = new Map(); - } - async create(dto) { - const submission = new submission_entity_1.SubmissionEntity({ - id: crypto.randomUUID(), - ...dto, - }); - this.submissions.set(submission.id, submission); - return submission; - } - async findAll() { - return Array.from(this.submissions.values()); - } - async findById(id) { - return this.submissions.get(id) || null; - } - async findByTaskId(taskId) { - return Array.from(this.submissions.values()).filter(s => s.taskId === taskId); - } - async findByUserId(userId) { - return Array.from(this.submissions.values()).filter(s => s.userId === userId); - } - async findByStatus(status) { - return Array.from(this.submissions.values()).filter(s => s.status === status); - } - async update(id, dto) { - const submission = this.submissions.get(id); - if (!submission) - return null; - Object.assign(submission, dto, { updatedAt: new Date() }); - if (dto.status === submission_status_enum_1.SubmissionStatus.APPROVED || dto.status === submission_status_enum_1.SubmissionStatus.REJECTED) { - submission.reviewedAt = submission.reviewedAt || new Date(); - } - return submission; - } - async review(id, reviewerId, status, feedback, score) { - const submission = this.submissions.get(id); - if (!submission) - throw new common_1.NotFoundException('Submission not found'); - submission.status = status; - submission.reviewedBy = reviewerId; - submission.reviewedAt = new Date(); - submission.updatedAt = new Date(); - if (feedback !== undefined) - submission.feedback = feedback; - if (score !== undefined) - submission.score = score; - return submission; - } - async remove(id) { - return this.submissions.delete(id); - } -}; -exports.SubmissionService = SubmissionService; -exports.SubmissionService = SubmissionService = __decorate([ - (0, common_1.Injectable)() -], SubmissionService); -//# sourceMappingURL=submission.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submission.service.js.map b/BackendAcademy/dist/src/submissions/submission.service.js.map deleted file mode 100644 index f82b01080..000000000 --- a/BackendAcademy/dist/src/submissions/submission.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submission.service.js","sourceRoot":"","sources":["../../../src/submissions/submission.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.controller.d.ts b/BackendAcademy/dist/src/submissions/submissions.controller.d.ts deleted file mode 100644 index b0100d1b2..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.controller.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SubmissionsService } from './submissions.service'; -export declare class SubmissionsController { - private readonly submissionsService; - constructor(submissionsService: SubmissionsService); - findAll(): string[]; - findOne(id: string): string; - create(payload: { - learnerId: string; - taskId: string; - content: string; - }): string; -} diff --git a/BackendAcademy/dist/src/submissions/submissions.controller.js b/BackendAcademy/dist/src/submissions/submissions.controller.js deleted file mode 100644 index fc8aebad5..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.controller.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionsController = void 0; -const common_1 = require("@nestjs/common"); -const submissions_service_1 = require("./submissions.service"); -let SubmissionsController = class SubmissionsController { - constructor(submissionsService) { - this.submissionsService = submissionsService; - } - findAll() { - return this.submissionsService.findAll(); - } - findOne(id) { - return this.submissionsService.findOne(id); - } - create(payload) { - return this.submissionsService.create(payload); - } -}; -exports.SubmissionsController = SubmissionsController; -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Array) -], SubmissionsController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", String) -], SubmissionsController.prototype, "findOne", null); -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", String) -], SubmissionsController.prototype, "create", null); -exports.SubmissionsController = SubmissionsController = __decorate([ - (0, common_1.Controller)('submissions'), - __metadata("design:paramtypes", [submissions_service_1.SubmissionsService]) -], SubmissionsController); -//# sourceMappingURL=submissions.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.controller.js.map b/BackendAcademy/dist/src/submissions/submissions.controller.js.map deleted file mode 100644 index 3e073478a..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submissions.controller.js","sourceRoot":"","sources":["../../../src/submissions/submissions.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoE;AACpE,+DAA2D;AAGpD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAAG,CAAC;IAGvE,OAAO;QACL,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;IAGD,OAAO,CAAc,EAAU;QAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAGD,MAAM,CAAS,OAA+D;QAC5E,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;CACF,CAAA;AAjBY,sDAAqB;AAIhC;IADC,IAAA,YAAG,GAAE;;;;oDAGL;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;IACF,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;oDAEnB;AAGD;IADC,IAAA,aAAI,GAAE;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;;;mDAEb;gCAhBU,qBAAqB;IADjC,IAAA,mBAAU,EAAC,aAAa,CAAC;qCAEyB,wCAAkB;GADxD,qBAAqB,CAiBjC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.module.d.ts b/BackendAcademy/dist/src/submissions/submissions.module.d.ts deleted file mode 100644 index 48f41a25f..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class SubmissionsModule { -} diff --git a/BackendAcademy/dist/src/submissions/submissions.module.js b/BackendAcademy/dist/src/submissions/submissions.module.js deleted file mode 100644 index cbcd0cdd4..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionsModule = void 0; -const common_1 = require("@nestjs/common"); -const submissions_controller_1 = require("./submissions.controller"); -const submissions_service_1 = require("./submissions.service"); -let SubmissionsModule = class SubmissionsModule { -}; -exports.SubmissionsModule = SubmissionsModule; -exports.SubmissionsModule = SubmissionsModule = __decorate([ - (0, common_1.Module)({ - controllers: [submissions_controller_1.SubmissionsController], - providers: [submissions_service_1.SubmissionsService], - exports: [submissions_service_1.SubmissionsService], - }) -], SubmissionsModule); -//# sourceMappingURL=submissions.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.module.js.map b/BackendAcademy/dist/src/submissions/submissions.module.js.map deleted file mode 100644 index 59bde417b..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submissions.module.js","sourceRoot":"","sources":["../../../src/submissions/submissions.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qEAAiE;AACjE,+DAA2D;AAOpD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAL7B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,8CAAqB,CAAC;QACpC,SAAS,EAAE,CAAC,wCAAkB,CAAC;QAC/B,OAAO,EAAE,CAAC,wCAAkB,CAAC;KAC9B,CAAC;GACW,iBAAiB,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.module.spec.d.ts b/BackendAcademy/dist/src/submissions/submissions.module.spec.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.module.spec.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/BackendAcademy/dist/src/submissions/submissions.module.spec.js b/BackendAcademy/dist/src/submissions/submissions.module.spec.js deleted file mode 100644 index a5fe60fc3..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.module.spec.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const testing_1 = require("@nestjs/testing"); -const submissions_module_1 = require("./submissions.module"); -const submissions_controller_1 = require("./submissions.controller"); -const submissions_service_1 = require("./submissions.service"); -describe('SubmissionsModule', () => { - it('should register the submissions controller and service', async () => { - const moduleRef = await testing_1.Test.createTestingModule({ - imports: [submissions_module_1.SubmissionsModule], - }).compile(); - expect(moduleRef.get(submissions_controller_1.SubmissionsController)).toBeInstanceOf(submissions_controller_1.SubmissionsController); - expect(moduleRef.get(submissions_service_1.SubmissionsService)).toBeInstanceOf(submissions_service_1.SubmissionsService); - }); -}); -//# sourceMappingURL=submissions.module.spec.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.module.spec.js.map b/BackendAcademy/dist/src/submissions/submissions.module.spec.js.map deleted file mode 100644 index bad7a2be0..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.module.spec.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submissions.module.spec.js","sourceRoot":"","sources":["../../../src/submissions/submissions.module.spec.ts"],"names":[],"mappings":";;AAAA,6CAAuC;AACvC,6DAAyD;AACzD,qEAAiE;AACjE,+DAA2D;AAE3D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,SAAS,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC/C,OAAO,EAAE,CAAC,sCAAiB,CAAC;SAC7B,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,8CAAqB,CAAC,CAAC,CAAC,cAAc,CAAC,8CAAqB,CAAC,CAAC;QACnF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,wCAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,wCAAkB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.service.d.ts b/BackendAcademy/dist/src/submissions/submissions.service.d.ts deleted file mode 100644 index 9d7c4516d..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.service.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare class SubmissionsService { - private readonly submissions; - findAll(): string[]; - findOne(id: string): string; - create(payload: { - learnerId: string; - taskId: string; - content: string; - }): string; -} diff --git a/BackendAcademy/dist/src/submissions/submissions.service.js b/BackendAcademy/dist/src/submissions/submissions.service.js deleted file mode 100644 index 9d23b6993..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.service.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubmissionsService = void 0; -const common_1 = require("@nestjs/common"); -let SubmissionsService = class SubmissionsService { - constructor() { - this.submissions = []; - } - findAll() { - return this.submissions.map((submission) => submission.id); - } - findOne(id) { - const submission = this.submissions.find((item) => item.id === id); - return submission ? JSON.stringify(submission) : 'Submission not found'; - } - create(payload) { - const submission = { - id: `${Date.now()}`, - ...payload, - }; - this.submissions.push(submission); - return JSON.stringify(submission); - } -}; -exports.SubmissionsService = SubmissionsService; -exports.SubmissionsService = SubmissionsService = __decorate([ - (0, common_1.Injectable)() -], SubmissionsService); -//# sourceMappingURL=submissions.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/submissions.service.js.map b/BackendAcademy/dist/src/submissions/submissions.service.js.map deleted file mode 100644 index 20f4ac8d3..000000000 --- a/BackendAcademy/dist/src/submissions/submissions.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"submissions.service.js","sourceRoot":"","sources":["../../../src/submissions/submissions.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAGrC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAAxB;QACY,gBAAW,GAA8E,EAAE,CAAC;IAoB/G,CAAC;IAlBC,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,OAA+D;QACpE,MAAM,UAAU,GAAG;YACjB,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YACnB,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AArBY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;GACA,kBAAkB,CAqB9B"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/tutor-review.controller.d.ts b/BackendAcademy/dist/src/submissions/tutor-review.controller.d.ts deleted file mode 100644 index e67d399b6..000000000 --- a/BackendAcademy/dist/src/submissions/tutor-review.controller.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Request } from 'express'; -import { TutorReviewService, ReviewQueuePage, ReviewStats } from './tutor-review.service'; -import { ReviewSubmissionDto } from './dto/review-submission.dto'; -import { ReviewQueueQueryDto } from './dto/review-queue-query.dto'; -import { TutorJwtPayload } from '../auth/guards/jwt-tutor.guard'; -type AuthedRequest = Request & { - tutor: TutorJwtPayload; -}; -export declare class TutorReviewController { - private readonly tutorReviewService; - constructor(tutorReviewService: TutorReviewService); - getPendingQueue(query: ReviewQueueQueryDto): Promise; - getNeedsRevisionQueue(query: ReviewQueueQueryDto): Promise; - getStats(taskId?: string): Promise; - getReviewHistory(req: AuthedRequest, query: ReviewQueueQueryDto): Promise; - reviewSubmission(id: string, req: AuthedRequest, dto: ReviewSubmissionDto): Promise; -} -export {}; diff --git a/BackendAcademy/dist/src/submissions/tutor-review.controller.js b/BackendAcademy/dist/src/submissions/tutor-review.controller.js deleted file mode 100644 index 457ba8f87..000000000 --- a/BackendAcademy/dist/src/submissions/tutor-review.controller.js +++ /dev/null @@ -1,87 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorReviewController = void 0; -const common_1 = require("@nestjs/common"); -const tutor_review_service_1 = require("./tutor-review.service"); -const review_submission_dto_1 = require("./dto/review-submission.dto"); -const review_queue_query_dto_1 = require("./dto/review-queue-query.dto"); -const jwt_tutor_guard_1 = require("../auth/guards/jwt-tutor.guard"); -let TutorReviewController = class TutorReviewController { - constructor(tutorReviewService) { - this.tutorReviewService = tutorReviewService; - } - async getPendingQueue(query) { - return this.tutorReviewService.getPendingQueue(query); - } - async getNeedsRevisionQueue(query) { - return this.tutorReviewService.getNeedsRevisionQueue(query); - } - async getStats(taskId) { - return this.tutorReviewService.getStats(taskId); - } - async getReviewHistory(req, query) { - return this.tutorReviewService.getReviewedByTutor(req.tutor.sub, query); - } - async reviewSubmission(id, req, dto) { - return this.tutorReviewService.reviewSubmission(id, req.tutor.sub, dto); - } -}; -exports.TutorReviewController = TutorReviewController; -__decorate([ - (0, common_1.Get)('queue/pending'), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [review_queue_query_dto_1.ReviewQueueQueryDto]), - __metadata("design:returntype", Promise) -], TutorReviewController.prototype, "getPendingQueue", null); -__decorate([ - (0, common_1.Get)('queue/needs-revision'), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [review_queue_query_dto_1.ReviewQueueQueryDto]), - __metadata("design:returntype", Promise) -], TutorReviewController.prototype, "getNeedsRevisionQueue", null); -__decorate([ - (0, common_1.Get)('stats'), - __param(0, (0, common_1.Query)('taskId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TutorReviewController.prototype, "getStats", null); -__decorate([ - (0, common_1.Get)('history'), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_a = typeof AuthedRequest !== "undefined" && AuthedRequest) === "function" ? _a : Object, review_queue_query_dto_1.ReviewQueueQueryDto]), - __metadata("design:returntype", Promise) -], TutorReviewController.prototype, "getReviewHistory", null); -__decorate([ - (0, common_1.Post)(':id'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Req)()), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_b = typeof AuthedRequest !== "undefined" && AuthedRequest) === "function" ? _b : Object, review_submission_dto_1.ReviewSubmissionDto]), - __metadata("design:returntype", Promise) -], TutorReviewController.prototype, "reviewSubmission", null); -exports.TutorReviewController = TutorReviewController = __decorate([ - (0, common_1.UseGuards)(jwt_tutor_guard_1.JwtTutorGuard), - (0, common_1.Controller)('tutor/review'), - __metadata("design:paramtypes", [tutor_review_service_1.TutorReviewService]) -], TutorReviewController); -//# sourceMappingURL=tutor-review.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/tutor-review.controller.js.map b/BackendAcademy/dist/src/submissions/tutor-review.controller.js.map deleted file mode 100644 index ce362f0f6..000000000 --- a/BackendAcademy/dist/src/submissions/tutor-review.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-review.controller.js","sourceRoot":"","sources":["../../../src/submissions/tutor-review.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAYwB;AAGxB,iEAA0F;AAC1F,uEAAkE;AAClE,yEAAmE;AACnE,oEAAgF;AAqBzE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAAG,CAAC;IAgBjE,AAAN,KAAK,CAAC,eAAe,CACV,KAA0B;QAEnC,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAWK,AAAN,KAAK,CAAC,qBAAqB,CAChB,KAA0B;QAEnC,OAAO,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAaK,AAAN,KAAK,CAAC,QAAQ,CAAkB,MAAe;QAC7C,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAaK,AAAN,KAAK,CAAC,gBAAgB,CACb,GAAkB,EAChB,KAA0B;QAEnC,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAsBK,AAAN,KAAK,CAAC,gBAAgB,CACQ,EAAU,EAC/B,GAAkB,EACjB,GAAwB;QAEhC,OAAO,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC;CACF,CAAA;AAlGY,sDAAqB;AAiB1B;IADL,IAAA,YAAG,EAAC,eAAe,CAAC;IAElB,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAQ,4CAAmB;;4DAGpC;AAWK;IADL,IAAA,YAAG,EAAC,sBAAsB,CAAC;IAEzB,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAQ,4CAAmB;;kEAGpC;AAaK;IADL,IAAA,YAAG,EAAC,OAAO,CAAC;IACG,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;qDAE9B;AAaK;IADL,IAAA,YAAG,EAAC,SAAS,CAAC;IAEZ,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,GAAE,CAAA;;yDADI,aAAa,oBAAb,aAAa,gCACT,4CAAmB;;6DAGpC;AAsBK;IAFL,IAAA,aAAI,EAAC,KAAK,CAAC;IACX,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IAErB,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;IAC1B,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;;iEADK,aAAa,oBAAb,aAAa,gCACZ,2CAAmB;;6DAGjC;gCAjGU,qBAAqB;IAFjC,IAAA,kBAAS,EAAC,+BAAa,CAAC;IACxB,IAAA,mBAAU,EAAC,cAAc,CAAC;qCAEwB,yCAAkB;GADxD,qBAAqB,CAkGjC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/tutor-review.service.d.ts b/BackendAcademy/dist/src/submissions/tutor-review.service.d.ts deleted file mode 100644 index 08a3b89d6..000000000 --- a/BackendAcademy/dist/src/submissions/tutor-review.service.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { SubmissionService } from './submission.service'; -import { SubmissionEntity } from './submission.entity'; -import { ReviewSubmissionDto } from './dto/review-submission.dto'; -import { ReviewQueueQueryDto } from './dto/review-queue-query.dto'; -export interface ReviewQueuePage { - items: SubmissionEntity[]; - total: number; - nextCursor: string | null; -} -export interface ReviewStats { - pending: number; - approved: number; - rejected: number; - needs_revision: number; - total: number; -} -export declare class TutorReviewService { - private readonly submissionService; - constructor(submissionService: SubmissionService); - getPendingQueue(query: ReviewQueueQueryDto): Promise; - getNeedsRevisionQueue(query: ReviewQueueQueryDto): Promise; - reviewSubmission(submissionId: string, tutorId: string, dto: ReviewSubmissionDto): Promise; - getStats(taskId?: string): Promise; - getReviewedByTutor(tutorId: string, query: ReviewQueueQueryDto): Promise; -} diff --git a/BackendAcademy/dist/src/submissions/tutor-review.service.js b/BackendAcademy/dist/src/submissions/tutor-review.service.js deleted file mode 100644 index d3b861e1d..000000000 --- a/BackendAcademy/dist/src/submissions/tutor-review.service.js +++ /dev/null @@ -1,121 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorReviewService = void 0; -const common_1 = require("@nestjs/common"); -const submission_service_1 = require("./submission.service"); -const submission_status_enum_1 = require("./interfaces/submission-status.enum"); -const DEFAULT_PAGE_LIMIT = 20; -const MAX_PAGE_LIMIT = 100; -let TutorReviewService = class TutorReviewService { - constructor(submissionService) { - this.submissionService = submissionService; - } - async getPendingQueue(query) { - const limit = Math.min(Math.max(1, Number(query.limit) || DEFAULT_PAGE_LIMIT), MAX_PAGE_LIMIT); - let items = await this.submissionService.findByStatus(submission_status_enum_1.SubmissionStatus.PENDING); - if (query.taskId) { - items = items.filter(s => s.taskId === query.taskId); - } - items.sort((a, b) => a.submittedAt.getTime() - b.submittedAt.getTime()); - if (query.cursor) { - const cursorIndex = items.findIndex(s => s.id === query.cursor); - if (cursorIndex !== -1) { - items = items.slice(cursorIndex + 1); - } - } - const total = items.length; - const page = items.slice(0, limit); - const nextCursor = page.length === limit && total > limit ? page[page.length - 1].id : null; - return { items: page, total, nextCursor }; - } - async getNeedsRevisionQueue(query) { - const limit = Math.min(Math.max(1, Number(query.limit) || DEFAULT_PAGE_LIMIT), MAX_PAGE_LIMIT); - let items = await this.submissionService.findByStatus(submission_status_enum_1.SubmissionStatus.NEEDS_REVISION); - if (query.taskId) { - items = items.filter(s => s.taskId === query.taskId); - } - items.sort((a, b) => a.updatedAt.getTime() - b.updatedAt.getTime()); - if (query.cursor) { - const cursorIndex = items.findIndex(s => s.id === query.cursor); - if (cursorIndex !== -1) { - items = items.slice(cursorIndex + 1); - } - } - const total = items.length; - const page = items.slice(0, limit); - const nextCursor = page.length === limit && total > limit ? page[page.length - 1].id : null; - return { items: page, total, nextCursor }; - } - async reviewSubmission(submissionId, tutorId, dto) { - const submission = await this.submissionService.findById(submissionId); - if (!submission) { - throw new common_1.NotFoundException({ - error: 'SUBMISSION_NOT_FOUND', - message: `Submission ${submissionId} does not exist`, - }); - } - const reviewableStatuses = [ - submission_status_enum_1.SubmissionStatus.PENDING, - submission_status_enum_1.SubmissionStatus.NEEDS_REVISION, - ]; - if (!reviewableStatuses.includes(submission.status)) { - throw new common_1.BadRequestException({ - error: 'SUBMISSION_NOT_REVIEWABLE', - message: `Submission is already in "${submission.status}" state and cannot be reviewed again`, - }); - } - if (dto.score !== undefined && (dto.score < 0 || dto.score > 100)) { - throw new common_1.BadRequestException({ - error: 'INVALID_SCORE', - message: 'Score must be between 0 and 100', - }); - } - return this.submissionService.review(submissionId, tutorId, dto.status, dto.feedback, dto.score); - } - async getStats(taskId) { - let all = await this.submissionService.findAll(); - if (taskId) { - all = all.filter(s => s.taskId === taskId); - } - return { - pending: all.filter(s => s.status === submission_status_enum_1.SubmissionStatus.PENDING).length, - approved: all.filter(s => s.status === submission_status_enum_1.SubmissionStatus.APPROVED).length, - rejected: all.filter(s => s.status === submission_status_enum_1.SubmissionStatus.REJECTED).length, - needs_revision: all.filter(s => s.status === submission_status_enum_1.SubmissionStatus.NEEDS_REVISION).length, - total: all.length, - }; - } - async getReviewedByTutor(tutorId, query) { - const limit = Math.min(Math.max(1, Number(query.limit) || DEFAULT_PAGE_LIMIT), MAX_PAGE_LIMIT); - let items = (await this.submissionService.findAll()).filter(s => s.reviewedBy === tutorId); - if (query.taskId) { - items = items.filter(s => s.taskId === query.taskId); - } - items.sort((a, b) => (b.reviewedAt?.getTime() ?? 0) - (a.reviewedAt?.getTime() ?? 0)); - if (query.cursor) { - const cursorIndex = items.findIndex(s => s.id === query.cursor); - if (cursorIndex !== -1) { - items = items.slice(cursorIndex + 1); - } - } - const total = items.length; - const page = items.slice(0, limit); - const nextCursor = page.length === limit && total > limit ? page[page.length - 1].id : null; - return { items: page, total, nextCursor }; - } -}; -exports.TutorReviewService = TutorReviewService; -exports.TutorReviewService = TutorReviewService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [submission_service_1.SubmissionService]) -], TutorReviewService); -//# sourceMappingURL=tutor-review.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/submissions/tutor-review.service.js.map b/BackendAcademy/dist/src/submissions/tutor-review.service.js.map deleted file mode 100644 index c19ab295a..000000000 --- a/BackendAcademy/dist/src/submissions/tutor-review.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-review.service.js","sourceRoot":"","sources":["../../../src/submissions/tutor-review.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.d.ts b/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.d.ts deleted file mode 100644 index 421e6f549..000000000 --- a/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TutorSpecialty } from '../interfaces/tutor-specialty.enum'; -export declare class CreateTutorProfileDto { - userId: string; - bio: string; - specialties: TutorSpecialty[]; - hourlyRate?: number; - availability?: boolean; -} diff --git a/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.js b/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.js deleted file mode 100644 index 2eea9e026..000000000 --- a/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateTutorProfileDto = void 0; -class CreateTutorProfileDto { -} -exports.CreateTutorProfileDto = CreateTutorProfileDto; -//# sourceMappingURL=create-tutor-profile.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.js.map b/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.js.map deleted file mode 100644 index f69ecee51..000000000 --- a/BackendAcademy/dist/src/users/dto/create-tutor-profile.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"create-tutor-profile.dto.js","sourceRoot":"","sources":["../../../../src/users/dto/create-tutor-profile.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,qBAAqB;CAMjC;AAND,sDAMC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/dto/rate-tutor.dto.d.ts b/BackendAcademy/dist/src/users/dto/rate-tutor.dto.d.ts deleted file mode 100644 index 6026cfd2b..000000000 --- a/BackendAcademy/dist/src/users/dto/rate-tutor.dto.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare class RateTutorDto { - rating: number; - review?: string; -} diff --git a/BackendAcademy/dist/src/users/dto/rate-tutor.dto.js b/BackendAcademy/dist/src/users/dto/rate-tutor.dto.js deleted file mode 100644 index 0463a7735..000000000 --- a/BackendAcademy/dist/src/users/dto/rate-tutor.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RateTutorDto = void 0; -class RateTutorDto { -} -exports.RateTutorDto = RateTutorDto; -//# sourceMappingURL=rate-tutor.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/dto/rate-tutor.dto.js.map b/BackendAcademy/dist/src/users/dto/rate-tutor.dto.js.map deleted file mode 100644 index edae40a32..000000000 --- a/BackendAcademy/dist/src/users/dto/rate-tutor.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rate-tutor.dto.js","sourceRoot":"","sources":["../../../../src/users/dto/rate-tutor.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;CAGxB;AAHD,oCAGC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.d.ts b/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.d.ts deleted file mode 100644 index c4804005e..000000000 --- a/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TutorSpecialty } from '../interfaces/tutor-specialty.enum'; -export declare class UpdateTutorProfileDto { - bio?: string; - specialties?: TutorSpecialty[]; - hourlyRate?: number; - availability?: boolean; - isVerified?: boolean; -} diff --git a/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.js b/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.js deleted file mode 100644 index 840b3b449..000000000 --- a/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateTutorProfileDto = void 0; -class UpdateTutorProfileDto { -} -exports.UpdateTutorProfileDto = UpdateTutorProfileDto; -//# sourceMappingURL=update-tutor-profile.dto.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.js.map b/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.js.map deleted file mode 100644 index 9ba6289ae..000000000 --- a/BackendAcademy/dist/src/users/dto/update-tutor-profile.dto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"update-tutor-profile.dto.js","sourceRoot":"","sources":["../../../../src/users/dto/update-tutor-profile.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,qBAAqB;CAMjC;AAND,sDAMC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/index.d.ts b/BackendAcademy/dist/src/users/index.d.ts deleted file mode 100644 index ec25b2389..000000000 --- a/BackendAcademy/dist/src/users/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { UserProfileModule } from './user-profile.module'; -export { UserProfileService } from './user-profile.service'; -export { UserProfileEntity } from './user-profile.entity'; -export { TutorProfileModule } from './tutor-profile.module'; -export { TutorProfileService } from './tutor-profile.service'; -export { TutorProfileEntity } from './tutor-profile.entity'; -export { TutorSpecialty } from './interfaces/tutor-specialty.enum'; -export { ITutorProfile } from './interfaces/tutor-profile.interface'; -export { CreateTutorProfileDto } from './dto/create-tutor-profile.dto'; -export { UpdateTutorProfileDto } from './dto/update-tutor-profile.dto'; -export { RateTutorDto } from './dto/rate-tutor.dto'; diff --git a/BackendAcademy/dist/src/users/index.js b/BackendAcademy/dist/src/users/index.js deleted file mode 100644 index 08d95803d..000000000 --- a/BackendAcademy/dist/src/users/index.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RateTutorDto = exports.UpdateTutorProfileDto = exports.CreateTutorProfileDto = exports.TutorSpecialty = exports.TutorProfileEntity = exports.TutorProfileService = exports.TutorProfileModule = exports.UserProfileEntity = exports.UserProfileService = exports.UserProfileModule = void 0; -var user_profile_module_1 = require("./user-profile.module"); -Object.defineProperty(exports, "UserProfileModule", { enumerable: true, get: function () { return user_profile_module_1.UserProfileModule; } }); -var user_profile_service_1 = require("./user-profile.service"); -Object.defineProperty(exports, "UserProfileService", { enumerable: true, get: function () { return user_profile_service_1.UserProfileService; } }); -var user_profile_entity_1 = require("./user-profile.entity"); -Object.defineProperty(exports, "UserProfileEntity", { enumerable: true, get: function () { return user_profile_entity_1.UserProfileEntity; } }); -var tutor_profile_module_1 = require("./tutor-profile.module"); -Object.defineProperty(exports, "TutorProfileModule", { enumerable: true, get: function () { return tutor_profile_module_1.TutorProfileModule; } }); -var tutor_profile_service_1 = require("./tutor-profile.service"); -Object.defineProperty(exports, "TutorProfileService", { enumerable: true, get: function () { return tutor_profile_service_1.TutorProfileService; } }); -var tutor_profile_entity_1 = require("./tutor-profile.entity"); -Object.defineProperty(exports, "TutorProfileEntity", { enumerable: true, get: function () { return tutor_profile_entity_1.TutorProfileEntity; } }); -var tutor_specialty_enum_1 = require("./interfaces/tutor-specialty.enum"); -Object.defineProperty(exports, "TutorSpecialty", { enumerable: true, get: function () { return tutor_specialty_enum_1.TutorSpecialty; } }); -var create_tutor_profile_dto_1 = require("./dto/create-tutor-profile.dto"); -Object.defineProperty(exports, "CreateTutorProfileDto", { enumerable: true, get: function () { return create_tutor_profile_dto_1.CreateTutorProfileDto; } }); -var update_tutor_profile_dto_1 = require("./dto/update-tutor-profile.dto"); -Object.defineProperty(exports, "UpdateTutorProfileDto", { enumerable: true, get: function () { return update_tutor_profile_dto_1.UpdateTutorProfileDto; } }); -var rate_tutor_dto_1 = require("./dto/rate-tutor.dto"); -Object.defineProperty(exports, "RateTutorDto", { enumerable: true, get: function () { return rate_tutor_dto_1.RateTutorDto; } }); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/index.js.map b/BackendAcademy/dist/src/users/index.js.map deleted file mode 100644 index d4a9edb82..000000000 --- a/BackendAcademy/dist/src/users/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/users/index.ts"],"names":[],"mappings":";;;AAAA,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,0EAAmE;AAA1D,sHAAA,cAAc,OAAA;AAEvB,2EAAuE;AAA9D,iIAAA,qBAAqB,OAAA;AAC9B,2EAAuE;AAA9D,iIAAA,qBAAqB,OAAA;AAC9B,uDAAoD;AAA3C,8GAAA,YAAY,OAAA"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.d.ts b/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.d.ts deleted file mode 100644 index ed0a02c73..000000000 --- a/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { TutorSpecialty } from './tutor-specialty.enum'; -export interface ITutorProfile { - id: string; - userId: string; - bio: string; - specialties: TutorSpecialty[]; - reputationScore: number; - totalRatings: number; - averageRating: number; - coursesCreated: number; - totalEarnings: number; - isVerified: boolean; - availability: boolean; - hourlyRate: number; - createdAt: Date; - updatedAt: Date; -} diff --git a/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.js b/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.js deleted file mode 100644 index be0f1f95e..000000000 --- a/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=tutor-profile.interface.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.js.map b/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.js.map deleted file mode 100644 index 3746bf3c7..000000000 --- a/BackendAcademy/dist/src/users/interfaces/tutor-profile.interface.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-profile.interface.js","sourceRoot":"","sources":["../../../../src/users/interfaces/tutor-profile.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.d.ts b/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.d.ts deleted file mode 100644 index bfa2112f0..000000000 --- a/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export declare enum TutorSpecialty { - RUST_FUNDAMENTALS = "rust_fundamentals", - OWNERSHIP_BORROWING = "ownership_borrowing", - ADVANCED_RUST = "advanced_rust", - ASYNC_RUST = "async_rust", - WEB3_SOROBAN = "web3_soroban", - CLI_APPLICATIONS = "cli_applications", - RUST_TESTING = "rust_testing", - UNSAFE_RUST_FFI = "unsafe_rust_ffi", - PERFORMANCE_OPTIMIZATION = "performance_optimization", - MACROS_METAPROGRAMMING = "macros_metaprogramming" -} diff --git a/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.js b/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.js deleted file mode 100644 index fae3b6c5e..000000000 --- a/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorSpecialty = void 0; -var TutorSpecialty; -(function (TutorSpecialty) { - TutorSpecialty["RUST_FUNDAMENTALS"] = "rust_fundamentals"; - TutorSpecialty["OWNERSHIP_BORROWING"] = "ownership_borrowing"; - TutorSpecialty["ADVANCED_RUST"] = "advanced_rust"; - TutorSpecialty["ASYNC_RUST"] = "async_rust"; - TutorSpecialty["WEB3_SOROBAN"] = "web3_soroban"; - TutorSpecialty["CLI_APPLICATIONS"] = "cli_applications"; - TutorSpecialty["RUST_TESTING"] = "rust_testing"; - TutorSpecialty["UNSAFE_RUST_FFI"] = "unsafe_rust_ffi"; - TutorSpecialty["PERFORMANCE_OPTIMIZATION"] = "performance_optimization"; - TutorSpecialty["MACROS_METAPROGRAMMING"] = "macros_metaprogramming"; -})(TutorSpecialty || (exports.TutorSpecialty = TutorSpecialty = {})); -//# sourceMappingURL=tutor-specialty.enum.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.js.map b/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.js.map deleted file mode 100644 index 7f87b6d87..000000000 --- a/BackendAcademy/dist/src/users/interfaces/tutor-specialty.enum.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-specialty.enum.js","sourceRoot":"","sources":["../../../../src/users/interfaces/tutor-specialty.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,yDAAuC,CAAA;IACvC,6DAA2C,CAAA;IAC3C,iDAA+B,CAAA;IAC/B,2CAAyB,CAAA;IACzB,+CAA6B,CAAA;IAC7B,uDAAqC,CAAA;IACrC,+CAA6B,CAAA;IAC7B,qDAAmC,CAAA;IACnC,uEAAqD,CAAA;IACrD,mEAAiD,CAAA;AACnD,CAAC,EAXW,cAAc,8BAAd,cAAc,QAWzB"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.controller.d.ts b/BackendAcademy/dist/src/users/tutor-profile.controller.d.ts deleted file mode 100644 index 6ff900193..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.controller.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { TutorProfileService } from './tutor-profile.service'; -import { CreateTutorProfileDto } from './dto/create-tutor-profile.dto'; -import { UpdateTutorProfileDto } from './dto/update-tutor-profile.dto'; -import { RateTutorDto } from './dto/rate-tutor.dto'; -export declare class TutorProfileController { - private readonly tutorService; - constructor(tutorService: TutorProfileService); - create(dto: CreateTutorProfileDto): Promise; - findAll(): Promise; - findByUserId(userId: string): Promise; - findBySpecialty(specialty: string): Promise; - findById(id: string): Promise; - getEarningsSummary(id: string): Promise; - update(id: string, dto: UpdateTutorProfileDto): Promise; - rate(id: string, dto: RateTutorDto): Promise; - remove(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/users/tutor-profile.controller.js b/BackendAcademy/dist/src/users/tutor-profile.controller.js deleted file mode 100644 index c83fddc92..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.controller.js +++ /dev/null @@ -1,122 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorProfileController = void 0; -const common_1 = require("@nestjs/common"); -const tutor_profile_service_1 = require("./tutor-profile.service"); -const create_tutor_profile_dto_1 = require("./dto/create-tutor-profile.dto"); -const update_tutor_profile_dto_1 = require("./dto/update-tutor-profile.dto"); -const rate_tutor_dto_1 = require("./dto/rate-tutor.dto"); -let TutorProfileController = class TutorProfileController { - constructor(tutorService) { - this.tutorService = tutorService; - } - async create(dto) { - return this.tutorService.create(dto); - } - async findAll() { - return this.tutorService.findAll(); - } - async findByUserId(userId) { - return this.tutorService.findByUserId(userId); - } - async findBySpecialty(specialty) { - return this.tutorService.findBySpecialty(specialty); - } - async findById(id) { - return this.tutorService.findById(id); - } - async getEarningsSummary(id) { - return this.tutorService.getEarningsSummary(id); - } - async update(id, dto) { - return this.tutorService.update(id, dto); - } - async rate(id, dto) { - return this.tutorService.rate(id, dto); - } - async remove(id) { - return this.tutorService.remove(id); - } -}; -exports.TutorProfileController = TutorProfileController; -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [create_tutor_profile_dto_1.CreateTutorProfileDto]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)('user/:userId'), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "findByUserId", null); -__decorate([ - (0, common_1.Get)('specialty/:specialty'), - __param(0, (0, common_1.Param)('specialty')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "findBySpecialty", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "findById", null); -__decorate([ - (0, common_1.Get)(':id/earnings'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "getEarningsSummary", null); -__decorate([ - (0, common_1.Put)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, update_tutor_profile_dto_1.UpdateTutorProfileDto]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "update", null); -__decorate([ - (0, common_1.Post)(':id/rate'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, rate_tutor_dto_1.RateTutorDto]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "rate", null); -__decorate([ - (0, common_1.Delete)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TutorProfileController.prototype, "remove", null); -exports.TutorProfileController = TutorProfileController = __decorate([ - (0, common_1.Controller)('tutors'), - __metadata("design:paramtypes", [tutor_profile_service_1.TutorProfileService]) -], TutorProfileController); -//# sourceMappingURL=tutor-profile.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.controller.js.map b/BackendAcademy/dist/src/users/tutor-profile.controller.js.map deleted file mode 100644 index f36fa0f6e..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-profile.controller.js","sourceRoot":"","sources":["../../../src/users/tutor-profile.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.entity.d.ts b/BackendAcademy/dist/src/users/tutor-profile.entity.d.ts deleted file mode 100644 index 42931bd2e..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.entity.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TutorSpecialty } from './interfaces/tutor-specialty.enum'; -export declare class TutorProfileEntity { - id: string; - userId: string; - bio: string; - specialties: TutorSpecialty[]; - reputationScore: number; - totalRatings: number; - averageRating: number; - coursesCreated: number; - totalEarnings: number; - isVerified: boolean; - availability: boolean; - hourlyRate: number; - createdAt: Date; - updatedAt: Date; - constructor(partial: Partial); -} diff --git a/BackendAcademy/dist/src/users/tutor-profile.entity.js b/BackendAcademy/dist/src/users/tutor-profile.entity.js deleted file mode 100644 index 5ca042433..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.entity.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorProfileEntity = void 0; -class TutorProfileEntity { - constructor(partial) { - Object.assign(this, partial); - this.createdAt = this.createdAt || new Date(); - this.updatedAt = this.updatedAt || new Date(); - this.isVerified = this.isVerified ?? false; - this.availability = this.availability ?? true; - this.reputationScore = this.reputationScore || 0; - this.totalRatings = this.totalRatings || 0; - this.averageRating = this.averageRating || 0; - this.coursesCreated = this.coursesCreated || 0; - this.totalEarnings = this.totalEarnings || 0; - this.specialties = this.specialties || []; - this.hourlyRate = this.hourlyRate || 0; - } -} -exports.TutorProfileEntity = TutorProfileEntity; -//# sourceMappingURL=tutor-profile.entity.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.entity.js.map b/BackendAcademy/dist/src/users/tutor-profile.entity.js.map deleted file mode 100644 index f72d1d2ca..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.entity.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-profile.entity.js","sourceRoot":"","sources":["../../../src/users/tutor-profile.entity.ts"],"names":[],"mappings":";;;AAEA,MAAa,kBAAkB;IAgB7B,YAAY,OAAoC;QAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;AA9BD,gDA8BC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.module.d.ts b/BackendAcademy/dist/src/users/tutor-profile.module.d.ts deleted file mode 100644 index f549da3c6..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class TutorProfileModule { -} diff --git a/BackendAcademy/dist/src/users/tutor-profile.module.js b/BackendAcademy/dist/src/users/tutor-profile.module.js deleted file mode 100644 index cdc99dbbd..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorProfileModule = void 0; -const common_1 = require("@nestjs/common"); -const tutor_profile_controller_1 = require("./tutor-profile.controller"); -const tutor_profile_service_1 = require("./tutor-profile.service"); -let TutorProfileModule = class TutorProfileModule { -}; -exports.TutorProfileModule = TutorProfileModule; -exports.TutorProfileModule = TutorProfileModule = __decorate([ - (0, common_1.Module)({ - controllers: [tutor_profile_controller_1.TutorProfileController], - providers: [tutor_profile_service_1.TutorProfileService], - exports: [tutor_profile_service_1.TutorProfileService], - }) -], TutorProfileModule); -//# sourceMappingURL=tutor-profile.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.module.js.map b/BackendAcademy/dist/src/users/tutor-profile.module.js.map deleted file mode 100644 index dbaa48b7e..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-profile.module.js","sourceRoot":"","sources":["../../../src/users/tutor-profile.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yEAAoE;AACpE,mEAA8D;AAOvD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAAG,CAAA;AAArB,gDAAkB;6BAAlB,kBAAkB;IAL9B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,iDAAsB,CAAC;QACrC,SAAS,EAAE,CAAC,2CAAmB,CAAC;QAChC,OAAO,EAAE,CAAC,2CAAmB,CAAC;KAC/B,CAAC;GACW,kBAAkB,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.service.d.ts b/BackendAcademy/dist/src/users/tutor-profile.service.d.ts deleted file mode 100644 index 6b8d1865a..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.service.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { TutorProfileEntity } from './tutor-profile.entity'; -import { CreateTutorProfileDto } from './dto/create-tutor-profile.dto'; -import { UpdateTutorProfileDto } from './dto/update-tutor-profile.dto'; -import { RateTutorDto } from './dto/rate-tutor.dto'; -export interface TutorEarningsSummary { - tutorId: string; - earnedXlm: number; - totalPaidOut: number; - pendingPayouts: number; - payouts: Array<{ - id: string; - amount: number; - status: 'pending' | 'completed'; - paidAt?: Date; - }>; -} -export declare class TutorProfileService { - private readonly profiles; - create(dto: CreateTutorProfileDto): Promise; - findAll(): Promise; - findById(id: string): Promise; - findByUserId(userId: string): Promise; - findBySpecialty(specialty: string): Promise; - update(id: string, dto: UpdateTutorProfileDto): Promise; - rate(id: string, dto: RateTutorDto): Promise; - incrementCoursesCreated(id: string): Promise; - updateEarnings(id: string, amount: number): Promise; - getEarningsSummary(id: string): Promise; - remove(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/users/tutor-profile.service.js b/BackendAcademy/dist/src/users/tutor-profile.service.js deleted file mode 100644 index b437b0782..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.service.js +++ /dev/null @@ -1,88 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TutorProfileService = void 0; -const common_1 = require("@nestjs/common"); -const tutor_profile_entity_1 = require("./tutor-profile.entity"); -let TutorProfileService = class TutorProfileService { - constructor() { - this.profiles = new Map(); - } - async create(dto) { - const profile = new tutor_profile_entity_1.TutorProfileEntity({ - id: crypto.randomUUID(), - ...dto, - }); - this.profiles.set(profile.id, profile); - return profile; - } - async findAll() { - return Array.from(this.profiles.values()); - } - async findById(id) { - return this.profiles.get(id) || null; - } - async findByUserId(userId) { - return (Array.from(this.profiles.values()).find(p => p.userId === userId) || null); - } - async findBySpecialty(specialty) { - return Array.from(this.profiles.values()).filter(p => p.specialties.includes(specialty)); - } - async update(id, dto) { - const profile = this.profiles.get(id); - if (!profile) - return null; - Object.assign(profile, dto, { updatedAt: new Date() }); - return profile; - } - async rate(id, dto) { - const profile = this.profiles.get(id); - if (!profile) - throw new common_1.NotFoundException('Tutor profile not found'); - const total = profile.totalRatings * profile.averageRating + dto.rating; - profile.totalRatings += 1; - profile.averageRating = total / profile.totalRatings; - profile.updatedAt = new Date(); - return profile; - } - async incrementCoursesCreated(id) { - const profile = this.profiles.get(id); - if (profile) { - profile.coursesCreated += 1; - profile.updatedAt = new Date(); - } - } - async updateEarnings(id, amount) { - const profile = this.profiles.get(id); - if (profile) { - profile.totalEarnings += amount; - profile.updatedAt = new Date(); - } - } - async getEarningsSummary(id) { - const profile = this.profiles.get(id); - if (!profile) { - throw new common_1.NotFoundException('Tutor profile not found'); - } - return { - tutorId: profile.id, - earnedXlm: profile.totalEarnings, - totalPaidOut: 0, - pendingPayouts: 0, - payouts: [], - }; - } - async remove(id) { - return this.profiles.delete(id); - } -}; -exports.TutorProfileService = TutorProfileService; -exports.TutorProfileService = TutorProfileService = __decorate([ - (0, common_1.Injectable)() -], TutorProfileService); -//# sourceMappingURL=tutor-profile.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.service.js.map b/BackendAcademy/dist/src/users/tutor-profile.service.js.map deleted file mode 100644 index 49ccb7d50..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-profile.service.js","sourceRoot":"","sources":["../../../src/users/tutor-profile.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.service.spec.d.ts b/BackendAcademy/dist/src/users/tutor-profile.service.spec.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.service.spec.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/BackendAcademy/dist/src/users/tutor-profile.service.spec.js b/BackendAcademy/dist/src/users/tutor-profile.service.spec.js deleted file mode 100644 index c01fa89e7..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.service.spec.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const common_1 = require("@nestjs/common"); -const tutor_profile_service_1 = require("./tutor-profile.service"); -const tutor_specialty_enum_1 = require("./interfaces/tutor-specialty.enum"); -describe('TutorProfileService', () => { - let service; - beforeEach(() => { - service = new tutor_profile_service_1.TutorProfileService(); - }); - it('getEarningsSummary() returns earned XLM and payout details for a tutor', async () => { - const profile = await service.create({ - userId: 'user-1', - bio: 'Test tutor', - specialties: [tutor_specialty_enum_1.TutorSpecialty.WEB3_SOROBAN], - hourlyRate: 50, - }); - await service.updateEarnings(profile.id, 120); - const summary = await service.getEarningsSummary(profile.id); - expect(summary).toMatchObject({ - tutorId: profile.id, - earnedXlm: 120, - totalPaidOut: 0, - pendingPayouts: 0, - payouts: [], - }); - }); - it('getEarningsSummary() throws when the tutor profile does not exist', async () => { - await expect(service.getEarningsSummary('missing-id')).rejects.toThrow(common_1.NotFoundException); - }); -}); -//# sourceMappingURL=tutor-profile.service.spec.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/tutor-profile.service.spec.js.map b/BackendAcademy/dist/src/users/tutor-profile.service.spec.js.map deleted file mode 100644 index b16fc02b6..000000000 --- a/BackendAcademy/dist/src/users/tutor-profile.service.spec.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tutor-profile.service.spec.js","sourceRoot":"","sources":["../../../src/users/tutor-profile.service.spec.ts"],"names":[],"mappings":";;AAAA,2CAAmD;AACnD,mEAA8D;AAC9D,4EAAmE;AAEnE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,OAA4B,CAAC;IAEjC,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,2CAAmB,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YACnC,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,YAAY;YACjB,WAAW,EAAE,CAAC,qCAAc,CAAC,YAAY,CAAC;YAC1C,UAAU,EAAE,EAAE;SACf,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE7D,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,OAAO,CAAC,EAAE;YACnB,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACpE,0BAAiB,CAClB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.controller.d.ts b/BackendAcademy/dist/src/users/user-profile.controller.d.ts deleted file mode 100644 index 3e9634bdd..000000000 --- a/BackendAcademy/dist/src/users/user-profile.controller.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { UserProfileService } from './user-profile.service'; -import { UserProfileEntity } from './user-profile.entity'; -export declare class UserProfileController { - private readonly profileService; - constructor(profileService: UserProfileService); - create(dto: Partial): Promise; - findAll(): Promise; - findByUserId(userId: string): Promise; - findById(id: string): Promise; - update(id: string, updates: Partial): Promise; - remove(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/users/user-profile.controller.js b/BackendAcademy/dist/src/users/user-profile.controller.js deleted file mode 100644 index 5dac4e2df..000000000 --- a/BackendAcademy/dist/src/users/user-profile.controller.js +++ /dev/null @@ -1,88 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserProfileController = void 0; -const common_1 = require("@nestjs/common"); -const user_profile_service_1 = require("./user-profile.service"); -let UserProfileController = class UserProfileController { - constructor(profileService) { - this.profileService = profileService; - } - async create(dto) { - return this.profileService.create(dto); - } - async findAll() { - return this.profileService.findAll(); - } - async findByUserId(userId) { - return this.profileService.findByUserId(userId); - } - async findById(id) { - return this.profileService.findById(id); - } - async update(id, updates) { - return this.profileService.update(id, updates); - } - async remove(id) { - return this.profileService.remove(id); - } -}; -exports.UserProfileController = UserProfileController; -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], UserProfileController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], UserProfileController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)('user/:userId'), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], UserProfileController.prototype, "findByUserId", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], UserProfileController.prototype, "findById", null); -__decorate([ - (0, common_1.Put)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Object]), - __metadata("design:returntype", Promise) -], UserProfileController.prototype, "update", null); -__decorate([ - (0, common_1.Delete)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], UserProfileController.prototype, "remove", null); -exports.UserProfileController = UserProfileController = __decorate([ - (0, common_1.Controller)('user-profiles'), - __metadata("design:paramtypes", [user_profile_service_1.UserProfileService]) -], UserProfileController); -//# sourceMappingURL=user-profile.controller.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.controller.js.map b/BackendAcademy/dist/src/users/user-profile.controller.js.map deleted file mode 100644 index 8878c4e93..000000000 --- a/BackendAcademy/dist/src/users/user-profile.controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user-profile.controller.js","sourceRoot":"","sources":["../../../src/users/user-profile.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CASwB;AACxB,iEAA4D;AAIrD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,cAAkC;QAAlC,mBAAc,GAAd,cAAc,CAAoB;IAAG,CAAC;IAG7D,AAAN,KAAK,CAAC,MAAM,CAAS,GAA+B;QAClD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAkB,MAAc;QAChD,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAA6B,EAAU;QACnD,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CACkB,EAAU,EAC9B,OAAmC;QAE3C,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAA6B,EAAU;QACjD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;CACF,CAAA;AAnCY,sDAAqB;AAI1B;IADL,IAAA,aAAI,GAAE;IACO,WAAA,IAAA,aAAI,GAAE,CAAA;;;;mDAEnB;AAGK;IADL,IAAA,YAAG,GAAE;;;;oDAGL;AAGK;IADL,IAAA,YAAG,EAAC,cAAc,CAAC;IACA,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;yDAElC;AAGK;IADL,IAAA,YAAG,EAAC,KAAK,CAAC;IACK,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;;;;qDAEzC;AAGK;IADL,IAAA,YAAG,EAAC,KAAK,CAAC;IAER,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;;;mDAGR;AAGK;IADL,IAAA,eAAM,EAAC,KAAK,CAAC;IACA,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;;;;mDAEvC;gCAlCU,qBAAqB;IADjC,IAAA,mBAAU,EAAC,eAAe,CAAC;qCAEmB,yCAAkB;GADpD,qBAAqB,CAmCjC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.entity.d.ts b/BackendAcademy/dist/src/users/user-profile.entity.d.ts deleted file mode 100644 index cbb8a9b56..000000000 --- a/BackendAcademy/dist/src/users/user-profile.entity.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export declare class UserProfileEntity { - id: string; - userId: string; - displayName: string; - bio?: string; - avatarUrl?: string; - location?: string; - website?: string; - githubUsername?: string; - skills: string[]; - createdAt: Date; - updatedAt: Date; - constructor(partial: Partial); -} diff --git a/BackendAcademy/dist/src/users/user-profile.entity.js b/BackendAcademy/dist/src/users/user-profile.entity.js deleted file mode 100644 index 1925a6a2d..000000000 --- a/BackendAcademy/dist/src/users/user-profile.entity.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserProfileEntity = void 0; -class UserProfileEntity { - constructor(partial) { - Object.assign(this, partial); - this.skills = this.skills || []; - this.createdAt = this.createdAt || new Date(); - this.updatedAt = this.updatedAt || new Date(); - } -} -exports.UserProfileEntity = UserProfileEntity; -//# sourceMappingURL=user-profile.entity.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.entity.js.map b/BackendAcademy/dist/src/users/user-profile.entity.js.map deleted file mode 100644 index f7562e4a4..000000000 --- a/BackendAcademy/dist/src/users/user-profile.entity.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user-profile.entity.js","sourceRoot":"","sources":["../../../src/users/user-profile.entity.ts"],"names":[],"mappings":";;;AAAA,MAAa,iBAAiB;IAa5B,YAAY,OAAmC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;IAChD,CAAC;CACF;AAnBD,8CAmBC"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.module.d.ts b/BackendAcademy/dist/src/users/user-profile.module.d.ts deleted file mode 100644 index 789540eaf..000000000 --- a/BackendAcademy/dist/src/users/user-profile.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class UserProfileModule { -} diff --git a/BackendAcademy/dist/src/users/user-profile.module.js b/BackendAcademy/dist/src/users/user-profile.module.js deleted file mode 100644 index 316685afe..000000000 --- a/BackendAcademy/dist/src/users/user-profile.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserProfileModule = void 0; -const common_1 = require("@nestjs/common"); -const user_profile_controller_1 = require("./user-profile.controller"); -const user_profile_service_1 = require("./user-profile.service"); -let UserProfileModule = class UserProfileModule { -}; -exports.UserProfileModule = UserProfileModule; -exports.UserProfileModule = UserProfileModule = __decorate([ - (0, common_1.Module)({ - controllers: [user_profile_controller_1.UserProfileController], - providers: [user_profile_service_1.UserProfileService], - exports: [user_profile_service_1.UserProfileService], - }) -], UserProfileModule); -//# sourceMappingURL=user-profile.module.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.module.js.map b/BackendAcademy/dist/src/users/user-profile.module.js.map deleted file mode 100644 index 060318b99..000000000 --- a/BackendAcademy/dist/src/users/user-profile.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user-profile.module.js","sourceRoot":"","sources":["../../../src/users/user-profile.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uEAAkE;AAClE,iEAA4D;AAOrD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAL7B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,+CAAqB,CAAC;QACpC,SAAS,EAAE,CAAC,yCAAkB,CAAC;QAC/B,OAAO,EAAE,CAAC,yCAAkB,CAAC;KAC9B,CAAC;GACW,iBAAiB,CAAG"} \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.service.d.ts b/BackendAcademy/dist/src/users/user-profile.service.d.ts deleted file mode 100644 index 686e7abdb..000000000 --- a/BackendAcademy/dist/src/users/user-profile.service.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { UserProfileEntity } from './user-profile.entity'; -export declare class UserProfileService { - private readonly profiles; - create(profile: Partial): Promise; - findAll(): Promise; - findById(id: string): Promise; - findByUserId(userId: string): Promise; - update(id: string, updates: Partial): Promise; - remove(id: string): Promise; -} diff --git a/BackendAcademy/dist/src/users/user-profile.service.js b/BackendAcademy/dist/src/users/user-profile.service.js deleted file mode 100644 index a541b0d64..000000000 --- a/BackendAcademy/dist/src/users/user-profile.service.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserProfileService = void 0; -const common_1 = require("@nestjs/common"); -const user_profile_entity_1 = require("./user-profile.entity"); -let UserProfileService = class UserProfileService { - constructor() { - this.profiles = new Map(); - } - async create(profile) { - const entity = new user_profile_entity_1.UserProfileEntity({ - id: crypto.randomUUID(), - ...profile, - }); - this.profiles.set(entity.id, entity); - return entity; - } - async findAll() { - return Array.from(this.profiles.values()); - } - async findById(id) { - return this.profiles.get(id) || null; - } - async findByUserId(userId) { - return Array.from(this.profiles.values()).find(p => p.userId === userId) || null; - } - async update(id, updates) { - const profile = this.profiles.get(id); - if (!profile) - return null; - Object.assign(profile, updates, { updatedAt: new Date() }); - return profile; - } - async remove(id) { - return this.profiles.delete(id); - } -}; -exports.UserProfileService = UserProfileService; -exports.UserProfileService = UserProfileService = __decorate([ - (0, common_1.Injectable)() -], UserProfileService); -//# sourceMappingURL=user-profile.service.js.map \ No newline at end of file diff --git a/BackendAcademy/dist/src/users/user-profile.service.js.map b/BackendAcademy/dist/src/users/user-profile.service.js.map deleted file mode 100644 index 187803d85..000000000 --- a/BackendAcademy/dist/src/users/user-profile.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user-profile.service.js","sourceRoot":"","sources":["../../../src/users/user-profile.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,+DAA0D;AAGnD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAAxB;QACY,aAAQ,GAAmC,IAAI,GAAG,EAAE,CAAC;IAiCxE,CAAC;IA/BC,KAAK,CAAC,MAAM,CAAC,OAAmC;QAC9C,MAAM,MAAM,GAAG,IAAI,uCAAiB,CAAC;YACnC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAmC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;CACF,CAAA;AAlCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;GACA,kBAAkB,CAkC9B"} \ No newline at end of file diff --git a/BackendAcademy/dist/tsconfig.tsbuildinfo b/BackendAcademy/dist/tsconfig.tsbuildinfo deleted file mode 100644 index bbd033c2f..000000000 --- a/BackendAcademy/dist/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"program":{"fileNames":["../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2021.full.d.ts","../../node_modules/.pnpm/reflect-metadata@0.1.14/node_modules/reflect-metadata/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscription.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscriber.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Operator.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Observable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/types.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/auditTime.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferCount.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferTime.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferToggle.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferWhen.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/catchError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestAll.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineAll.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatest.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatAll.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMap.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMapTo.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/count.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounceTime.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/defaultIfEmpty.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delayWhen.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilChanged.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilKeyChanged.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/elementAt.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/endWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/every.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustAll.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustMap.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/find.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/findIndex.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/first.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subject.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/groupBy.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/ignoreElements.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/isEmpty.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/last.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/map.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mapTo.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Notification.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/max.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeAll.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMap.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/flatMap.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMapTo.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeScan.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/min.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/ConnectableObservable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/observeOn.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/onErrorResumeNextWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishBehavior.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishLast.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishReplay.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/race.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/raceWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeatWhen.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retryWhen.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/refCount.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sampleTime.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sequenceEqual.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/share.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/shareReplay.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/single.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipLast.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipUntil.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipWhile.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/startWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/subscribeOn.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchAll.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMap.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMapTo.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchScan.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/take.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeLast.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeUntil.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeWhile.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttleTime.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throwIfEmpty.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeInterval.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeoutWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/toArray.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/window.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowCount.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowTime.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowToggle.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowWhen.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/withLatestFrom.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipAll.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipWith.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/operators/index.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/Action.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Scheduler.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestMessage.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLog.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLoggable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/ColdObservable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/HotObservable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncScheduler.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/timerHandle.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncAction.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/VirtualTimeScheduler.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestScheduler.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/testing/index.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/dom/animationFrames.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/BehaviorSubject.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/ReplaySubject.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AsyncSubject.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsapScheduler.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/QueueScheduler.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AnimationFrameScheduler.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/animationFrame.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/identity.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/noop.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/isObservable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/lastValueFrom.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/firstValueFrom.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ArgumentOutOfRangeError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/EmptyError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/NotFoundError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ObjectUnsubscribedError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/SequenceError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/UnsubscriptionError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindCallback.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindNodeCallback.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AnyCatcher.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/combineLatest.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/forkJoin.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/from.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEvent.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEventPattern.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/never.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/of.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/onErrorResumeNext.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/race.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/range.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/throwError.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/using.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/config.d.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/type.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/enums/request-method.enum.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/enums/http-status.enum.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/enums/version-type.enum.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/enums/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/services/logger.service.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/decorators/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/http.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/services/console-logger.service.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/services/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/constants.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/pipes/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/serializer/decorators/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/serializer/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/utils/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/index.d.ts","../src/api-info.controller.ts","../src/app.service.ts","../src/app.controller.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/adapters/http-adapter.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/adapters/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/constants.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/settlement-signal.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/injector.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/serialized-graph.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/module-token-factory.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/compiler.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/modules-container.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/container.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/instance-links-host.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/module-ref.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/module.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/application-config.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/constants.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/discovery/discovery-module.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/discovery/discovery-service.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/discovery/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/exceptions/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/router-proxy.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/context-creator.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/guards/constants.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/execution-context-host.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/guards/guards-consumer.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/guards/guards-context-creator.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/guards/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/interceptors/index.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/pipes/params-token-factory.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/pipes/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/context-utils.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/inquirer/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/graph-inspector.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/metadata-scanner.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/scanner.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/instance-loader.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/injector/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/external-context-creator.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/helpers/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/inspector/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/middleware/builder.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/middleware/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/nest-application-context.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/nest-application.d.ts","../../node_modules/.pnpm/@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.14.4_reflect-metadata@0.1.14_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/nest-factory.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/repl/repl.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/repl/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/request/request-constants.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/request/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/router-module.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/router/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/services/reflector.service.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/services/index.d.ts","../../node_modules/.pnpm/@nestjs+core@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_01ea2191605890596822c701affe093e/node_modules/@nestjs/core/index.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler-storage-record.interface.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler-storage.interface.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler.guard.interface.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler-module-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler.decorator.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler.exception.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler.guard.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler.module.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler.providers.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler-storage-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/throttler.service.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/utilities.d.ts","../../node_modules/.pnpm/@nestjs+throttler@6.5.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_d96646fb05e76a32337310d3f178c091/node_modules/@nestjs/throttler/dist/index.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/validation/ValidationError.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/validation/ValidatorOptions.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/validation-schema/ValidationSchema.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/container.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/validation/ValidationArguments.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/ValidationOptions.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/Allow.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsDefined.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsOptional.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/Validate.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/validation/ValidatorConstraintInterface.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/ValidateBy.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/ValidateIf.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/ValidateNested.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/ValidatePromise.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsLatLong.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsLatitude.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsLongitude.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/Equals.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/NotEquals.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsEmpty.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsNotEmpty.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsIn.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/common/IsNotIn.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/number/IsDivisibleBy.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/number/IsPositive.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/number/IsNegative.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/number/Max.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/number/Min.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/date/MinDate.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/date/MaxDate.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/Contains.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/NotContains.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isBoolean.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isEmail.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isFQDN.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isIBAN.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO31661Alpha2.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO4217.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO6391.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isTaxID.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isURL.d.ts","../../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/index.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsAlpha.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsAlphanumeric.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsDecimal.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsAscii.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsBase64.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsByteLength.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsCreditCard.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsCurrency.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsEmail.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsFQDN.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsFullWidth.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsHalfWidth.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsVariableWidth.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsHexColor.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsHexadecimal.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsMacAddress.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsIP.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsPort.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsISBN.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsISIN.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsISO8601.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsJSON.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsJWT.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsLowercase.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsMobilePhone.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsISO31661Alpha2.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsISO31661Alpha3.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsMongoId.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsMultibyte.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsSurrogatePair.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsUrl.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsUUID.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsFirebasePushId.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsUppercase.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/Length.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/MaxLength.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/MinLength.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/Matches.d.ts","../../node_modules/.pnpm/libphonenumber-js@1.12.40/node_modules/libphonenumber-js/types.d.cts","../../node_modules/.pnpm/libphonenumber-js@1.12.40/node_modules/libphonenumber-js/max/index.d.cts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsPhoneNumber.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsMilitaryTime.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsHash.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsISSN.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsDateString.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsBooleanString.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsNumberString.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsBase32.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsBIC.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsBtcAddress.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsDataURI.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsEAN.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsEthereumAddress.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsHSL.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsIBAN.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsIdentityCard.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsISRC.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsLocale.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsMagnetURI.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsMimeType.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsOctal.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsPassportNumber.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsPostalCode.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsRFC3339.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsRgbColor.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsSemVer.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsStrongPassword.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsTimeZone.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/IsBase58.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/is-tax-id.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/string/is-iso4217-currency-code.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsBoolean.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsDate.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsNumber.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsEnum.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsInt.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsString.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsArray.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/typechecker/IsObject.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/array/ArrayContains.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/array/ArrayNotContains.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/array/ArrayNotEmpty.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/array/ArrayMinSize.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/array/ArrayMaxSize.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/array/ArrayUnique.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/object/IsNotEmptyObject.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/object/IsInstance.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/decorator/decorators.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/validation/ValidationTypes.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/validation/Validator.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/register-decorator.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/metadata/ValidationMetadataArgs.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/metadata/ValidationMetadata.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/metadata/ConstraintMetadata.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/metadata/MetadataStorage.d.ts","../../node_modules/.pnpm/class-validator@0.14.4/node_modules/class-validator/types/index.d.ts","../src/challenges/dto/cast-challenge-vote.dto.ts","../src/challenges/interfaces/challenge-vote.interface.ts","../src/challenges/challenges.service.ts","../src/challenges/challenges.controller.ts","../src/challenges/challenges.module.ts","../src/rewards/rewards.constants.ts","../src/rewards/interfaces/rewards.interfaces.ts","../src/rewards/rewards.service.ts","../src/rewards/rewards.controller.ts","../src/rewards/interfaces/streak.interfaces.ts","../src/rewards/streak.constants.ts","../src/rewards/streak.service.ts","../src/rewards/streak.controller.ts","../src/rewards/rewards.module.ts","../src/security/interfaces/anti-cheat.interface.ts","../src/security/dto/check-submission.dto.ts","../src/security/anti-cheat.service.ts","../src/security/anti-cheat.controller.ts","../src/security/security.module.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/conditional.module.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/interfaces/config-change-event.interface.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/types/config-object.type.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/types/config.type.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/types/no-infer.type.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/types/path-value.type.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/types/index.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/interfaces/config-factory.interface.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/ts5.6/index.d.ts","../../node_modules/.pnpm/dotenv-expand@10.0.0/node_modules/dotenv-expand/lib/main.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/interfaces/config-module-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/config.module.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/config.service.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/utils/register-as.util.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/utils/get-config-token.util.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/utils/index.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/dist/index.d.ts","../../node_modules/.pnpm/@nestjs+config@3.3.0_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0.1_fe412a40442a548ad1c7daeae5dcc96e/node_modules/@nestjs/config/index.d.ts","../src/auth/enums/user-role.enum.ts","../src/auth/interfaces/jwt-payload.interface.ts","../src/auth/guards/jwt-learner.guard.ts","../src/auth/guards/jwt-tutor.guard.ts","../src/auth/guards/jwt-admin.guard.ts","../src/auth/decorators/roles.decorator.ts","../src/auth/guards/roles.guard.ts","../src/auth/auth.module.ts","../src/submissions/interfaces/grading-result-status.enum.ts","../src/submissions/interfaces/grading-result.interface.ts","../src/submissions/entities/grading-result.entity.ts","../src/submissions/grading-result.repository.ts","../src/submissions/interfaces/submission-status.enum.ts","../src/submissions/submission.entity.ts","../src/submissions/dto/create-submission.dto.ts","../src/submissions/dto/update-submission.dto.ts","../src/submissions/submission.service.ts","../src/submissions/dto/save-grading-result.dto.ts","../src/submissions/grading-result.service.ts","../src/submissions/submission.controller.ts","../src/submissions/dto/review-submission.dto.ts","../src/submissions/dto/review-queue-query.dto.ts","../src/submissions/tutor-review.service.ts","../src/submissions/tutor-review.controller.ts","../src/submissions/submission.module.ts","../src/users/interfaces/tutor-specialty.enum.ts","../src/users/interfaces/verification-status.enum.ts","../src/users/tutor-profile.entity.ts","../src/users/dto/create-tutor-profile.dto.ts","../src/users/dto/update-tutor-profile.dto.ts","../src/users/dto/rate-tutor.dto.ts","../src/users/dto/verify-tutor.dto.ts","../src/users/dto/request-verification.dto.ts","../src/users/tutor-profile.service.ts","../src/users/tutor-profile.controller.ts","../src/users/tutor-profile.module.ts","../src/users/user-profile.entity.ts","../src/users/user-profile.service.ts","../src/users/user-profile.controller.ts","../src/users/user-profile.module.ts","../src/ai/dto/create-chat-request.dto.ts","../src/ai/dto/get-hint.dto.ts","../src/ai/dto/pre-score.dto.ts","../src/ai/interfaces/ai.interface.ts","../src/ai/interfaces/pre-score.interface.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/max.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/nil.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/types.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/parse.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/stringify.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v1.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v1ToV6.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v35.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v3.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v4.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v5.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v6.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v6ToV1.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/v7.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/validate.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/version.d.ts","../../node_modules/.pnpm/uuid@14.0.1/node_modules/uuid/dist/index.d.ts","../src/ai/ai.service.ts","../src/ai/ai.controller.ts","../src/ai/ai.module.ts","../src/leaderboard/dto/get-leaderboard.dto.ts","../src/leaderboard/interfaces/leaderboard.interface.ts","../src/leaderboard/leaderboard.service.ts","../src/leaderboard/leaderboard.controller.ts","../src/leaderboard/leaderboard.module.ts","../src/analytics/analytics.entity.ts","../src/analytics/analytics.service.ts","../src/analytics/dto/create-event.dto.ts","../src/analytics/analytics.controller.ts","../src/analytics/analytics.module.ts","../src/social/dto/create-social-post.dto.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/enums/index.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/index.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/ClassTransformer.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/exclude.decorator.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/expose.decorator.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-instance-to-instance.decorator.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-instance-to-plain.decorator.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-plain-to-instance.decorator.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform.decorator.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/type.decorator.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/index.d.ts","../../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/index.d.ts","../src/social/dto/get-social-feed.dto.ts","../src/social/interfaces/social-post.interface.ts","../src/social/dto/update-moderation.dto.ts","../src/social/social.service.ts","../src/social/social.controller.ts","../src/social/social.module.ts","../src/onboarding/onboarding.entity.ts","../src/onboarding/dto/create-onboarding-progress.dto.ts","../src/onboarding/dto/update-onboarding-progress.dto.ts","../src/onboarding/onboarding.service.ts","../src/onboarding/onboarding.controller.ts","../src/onboarding/onboarding.module.ts","../src/lessons/lesson.entity.ts","../src/lessons/dto/create-lesson.dto.ts","../src/lessons/dto/update-lesson.dto.ts","../src/lessons/lesson.service.ts","../src/lessons/lesson.controller.ts","../src/lessons/lesson.module.ts","../src/tasks/interfaces/task-difficulty.enum.ts","../src/tasks/task.entity.ts","../src/tasks/dto/create-task.dto.ts","../src/tasks/dto/update-task.dto.ts","../src/tasks/task.service.ts","../src/tasks/task.controller.ts","../src/tasks/task.module.ts","../src/app.module.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-basic.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-bearer.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/interfaces/open-api-spec.interface.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/types/swagger-enum.type.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-body.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-consumes.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-cookie.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-exclude-endpoint.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-exclude-controller.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-extra-models.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-header.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-hide-property.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-oauth2.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-operation.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-param.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-produces.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/interfaces/schema-object-metadata.interface.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-property.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-query.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-response.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-security.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-use-tags.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/api-extension.decorator.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/decorators/index.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/interfaces/swagger-ui-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/interfaces/swagger-custom-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/interfaces/swagger-document-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/document-builder.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/swagger-module.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/type-helpers/intersection-type.helper.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/type-helpers/omit-type.helper.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/type-helpers/partial-type.helper.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/type-helpers/pick-type.helper.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/type-helpers/index.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/utils/get-schema-path.util.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/utils/index.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/dist/index.d.ts","../../node_modules/.pnpm/@nestjs+swagger@7.4.2_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@0._5e8eb946507c5fbfd61676be6232c918/node_modules/@nestjs/swagger/index.d.ts","../../node_modules/.pnpm/helmet@8.1.0/node_modules/helmet/index.d.cts","../src/main.ts","../src/admin/admin.service.ts","../src/admin/admin.controller.ts","../src/admin/admin.module.ts","../src/admin/admin.service.spec.ts","../src/analytics/dto/index.ts","../src/auth/index.ts","../src/badges/interfaces/badges.interfaces.ts","../src/badges/badges.service.ts","../src/badges/badges.controller.ts","../src/badges/badges.module.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/interfaces/mock-factory.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/interfaces/override-by-factory-options.interface.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/interfaces/override-module.interface.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/testing-module.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/testing-module.builder.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/interfaces/override-by.interface.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/interfaces/index.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/test.d.ts","../../node_modules/.pnpm/@nestjs+testing@10.4.22_@nestjs+common@10.4.22_class-transformer@0.5.1_class-validator@_724edb66aad0e896d54523258ff83c19/node_modules/@nestjs/testing/index.d.ts","../src/badges/badges.service.spec.ts","../src/challenges/challenges.module.spec.ts","../src/challenges/challenges.service.spec.ts","../src/challenges/index.ts","../src/challenges/interfaces/weekly-challenge-metadata.interface.ts","../src/chat/interfaces/chat.interface.ts","../src/chat/dto/create-message.dto.ts","../src/chat/dto/create-room.dto.ts","../src/chat/chat.service.ts","../src/chat/chat.controller.ts","../src/chat/chat.module.ts","../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../node_modules/.pnpm/joi@18.1.1/node_modules/joi/lib/index.d.ts","../src/config/config.module.ts","../src/courses/interfaces/course-level.enum.ts","../src/courses/course.entity.ts","../src/courses/dto/create-course.dto.ts","../src/courses/dto/update-course.dto.ts","../src/courses/course.service.ts","../src/courses/course.controller.ts","../src/courses/course.module.ts","../src/courses/interfaces/course.interface.ts","../src/courses/index.ts","../src/courses/audit/audit.controller.ts","../src/courses/audit/audit.module.ts","../src/courses/audit/audit.service.ts","../src/database/database.module.ts","../src/health/health.controller.ts","../src/lessons/index.ts","../src/lessons/interfaces/lesson.interface.ts","../src/notifications/interfaces/notifications.interface.ts","../src/notifications/dto/create-notification.dto.ts","../src/notifications/notifications.service.ts","../src/notifications/notifications.controller.ts","../src/notifications/notifications.module.ts","../src/onboarding/interfaces/onboarding.interface.ts","../src/redis/redis.module.ts","../src/rewards/index.ts","../src/rewards/rewards.service.spec.ts","../src/rewards/streak.service.spec.ts","../src/security/index.ts","../src/social/index.ts","../src/social/social.controller.spec.ts","../src/social/social.service.spec.ts","../src/submissions/interfaces/submission.interface.ts","../src/submissions/index.ts","../src/submissions/submissions.service.ts","../src/submissions/submissions.controller.ts","../src/submissions/submissions.module.ts","../src/submissions/submissions.module.spec.ts","../src/tasks/index.ts","../src/tasks/interfaces/task.interface.ts","../src/users/interfaces/tutor-profile.interface.ts","../src/users/index.ts","../src/users/tutor-profile.service.spec.ts","../src/users/users.service.ts","../src/users/users.controller.ts","../src/users/users.module.ts","../src/users/users.service.spec.ts","../../node_modules/.pnpm/@jest+expect-utils@29.7.0/node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/index.d.ts","../../node_modules/.pnpm/@sinclair+typebox@0.27.10/node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/.pnpm/@jest+schemas@29.6.3/node_modules/@jest/schemas/build/index.d.ts","../../node_modules/.pnpm/pretty-format@29.7.0/node_modules/pretty-format/build/index.d.ts","../../node_modules/.pnpm/jest-diff@29.7.0/node_modules/jest-diff/build/index.d.ts","../../node_modules/.pnpm/jest-matcher-utils@29.7.0/node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.d.ts","../../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest/index.d.ts"],"fileInfos":[{"version":"f33e5332b24c3773e930e212cbb8b6867c8ba3ec4492064ea78e55a524d57450","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","26f2f787e82c4222710f3b676b4d83eb5ad0a72fa7b746f03449e7a026ce5073","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569",{"version":"21e41a76098aa7a191028256e52a726baafd45a925ea5cf0222eb430c96c1d83","affectsGlobalScope":true},{"version":"35299ae4a62086698444a5aaee27fc7aa377c68cbb90b441c9ace246ffd05c97","affectsGlobalScope":true},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"e0275cd0e42990dc3a16f0b7c8bca3efe87f1c8ad404f80c6db1c7c0b828c59f","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"acae90d417bee324b1372813b5a00829d31c7eb670d299cd7f8f9a648ac05688","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"62a4966981264d1f04c44eb0f4b5bdc3d81c1a54725608861e44755aa24ad6a5","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"c1e8d979afc15d66e2bd5a58c732d5a2ba3ccaae41ac7d5a2c539e6de66a8e51",{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true},"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695",{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true},"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","c91d3f9753a311284e76cdcb348cbb50bca98733336ec726b54d77b7361b34de","cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","cf25d45c02d5fd5d7adb16230a0e1d6715441eef5c0a79a21bfeaa9bbc058939","54c3822eaf6436f2eddc92dd6e410750465aba218adbf8ce5d488d773919ec01","99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","28d47319b97dbeee9130b78eae03b2061d46dedbf92b0d9de13ed7ab8399ccd0","8b8b92781a6bf150f9ee83f3d8ee278b6cdb98b8308c7ab3413684fc5d9078ef","7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","689390db63cb282e6d0e5ce9b8f1ec2ec0912d0e2e6dac7235699a15ad17d339","f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","d928324d17146fce30b99a28d1d6b48648feac72bbd23641d3ce5ac34aefdfee","142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","c33a88f2578e8df2fdf36c6a0482bbee615eb3234c8f084ba31a9a96bd306b7f","22cca068109eb0e6b4f8acc3fe638d1e6ac277e2044246438763319792b546a1","8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","66cd33c4151ea27f6e17c6071652eadde9da1b3637dae65fd060212211c695ce","5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","a96bc00e0c356e29e620eaec24a56d6dd7f4e304feefcc99066a1141c6fe05a7","d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","53b094f1afe442490555eeeb0384fc1ceb487560c83e31f9c64fb934c2dccd94","19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","d406da1eccf18cec56fd29730c24af69758fe3ff49c4f94335e797119cbc0554","4898c93890a136da9156c75acd1a80a941a961b3032a0cf14e1fa09a764448b7","f5d7a845e3e1c6c27351ea5f358073d0b0681537a2da6201fab254aa434121d3","9ddf8e9069327faa75d20135cab675779844f66590249769c3d35dd2a38c2ba9","d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","d40d20ac633703a7333770bfd60360126fc3302d5392d237bbb76e8c529a4f95","35a9867207c488061fb4f6fe4715802fbc164b4400018d2fa0149ad02db9a61c","91bf47a209ad0eae090023c3ebc1165a491cf9758799368ffcbee8dbe7448f33","0abe2cd72812bbfc509975860277c7cd6f6e0be95d765a9da77fee98264a7e32","13286c0c8524606b17a8d68650970bab896fb505f348f71601abf0f2296e8913","fc2a131847515b3dff2f0e835633d9a00a9d03ed59e690e27eec85b7b0522f92","90433c678bc26751eb7a5d54a2bb0a14be6f5717f69abb5f7a04afc75dce15a4","cd0565ace87a2d7802bf4c20ea23a997c54e598b9eb89f9c75e69478c1f7a0b4","738020d2c8fc9df92d5dee4b682d35a776eaedfe2166d12bc8f186e1ea57cc52","86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","f61963dc02ef27c48fb0e0016a413b1e00bcb8b97a3f5d4473cedc7b44c8dc77","272dbfe04cfa965d6fff63fdaba415c1b5a515b1881ae265148f8a84ddeb318f","2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","2b82adc9eead34b824a3f4dad315203fbfa56bee0061ccf9b485820606564f70","eb47aaa5e1b0a69388bb48422a991b9364a9c206a97983e0227289a9e1fca178","d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","db2108aea36e7faa83c38f6fe8225b9ad40835c0cba7fa38e969768299b83173","3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","2828dabf17a6507d39ebcc58fef847e111dcf2d51b8e4ff0d32732c72be032b3","c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","2ad163aaddfa29231a021de6838f59378a210501634f125ed04cfa7d066ffc53","6305acbe492b9882ec940f8f0c8e5d1e1395258852f99328efcb1cf1683ca817","7619b1f6087a4e9336b2c42bd784b05aa4a2204a364b60171e5a628f817a381e","15be9120572c9fbcd3c267bd93b4140354514c9e70734e6fcca65ff4a246f83a","412482ab85893cec1d6f26231359474d1f59f6339e2743c08da1b05fc1d12767","858e2315e58af0d28fcd7f141a2505aba6a76fd10378ba0ad169b0336fee33fc","02da6c1b34f4ae2120d70cf5f9268bf1aedf62e55529d34f5974f5a93655ce38","3ecf179ef1cc28f7f9b46c8d2e496d50b542c176e94ed0147bab147b4a961cd6","b145da03ce7e174af5ced2cbbd16e96d3d5c2212f9a90d3657b63a5650a73b7f","c7aadab66a2bc90eeb0ab145ca4daebcbc038e24359263de3b40e7b1c7affba6","99518dc06286877a7b716e0f22c1a72d3c62be42701324b49f27bcc03573efff","f4575fd196a7e33c7be9773a71bcc5fbe7182a2152be909f6b8e8e7ba2438f06","05cba5acd77a4384389b9c62739104b5a1693efd66e6abac6c5ffc53280ae777","acacda82ebd929fe2fe9e31a37f193fc8498a7393a1c31dc5ceb656e2b45b708","1b13e7c5c58ab894fe65b099b6d19bb8afae6d04252db1bf55fe6ba95a0af954","4355d326c3129e5853b56267903f294ad03e34cc28b75f96b80734882dedac80","37139a8d45342c05b6a5aa1698a2e8e882d6dca5fb9a77aa91f05ac04e92e70b","e37191297f1234d3ae54edbf174489f9a3091a05fe959724db36f8e58d21fb17","3fca8fb3aab1bc7abb9b1420f517e9012fdddcbe18803bea2dd48fad6c45e92e","d0b0779e0cac4809a9a3c764ba3bd68314de758765a8e3b9291fe1671bfeb8a1","d2116b5f989aa68e585ae261b9d6d836be6ed1be0b55b47336d9f3db34674e86","d79a227dd654be16d8006eac8b67212679d1df494dfe6da22ea0bd34a13e010c","b9c89b4a2435c171e0a9a56668f510a376cb7991eaecef08b619e6d484841735","44a298a6c52a7dab8e970e95a6dabe20972a7c31c340842e0dc57f2c822826eb","6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","00b9ff040025f6b00e0f4ac8305fea1809975b325af31541bd9d69fa3b5e57b1","9f96b9fd0362a7bfe6a3aa70baa883c47ae167469c904782c99ccc942f62f0dc","54d91053dc6a2936bfd01a130cc3b524e11aa0349da082e8ac03a8bf44250338","89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","55ae9554811525f24818e19bdc8779fa99df434be7c03e5fc47fa441315f0226","24abac81e9c60089a126704e936192b2309413b40a53d9da68dadd1dd107684e","f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","91d695bba902cc2eda7edc076cd17c5c9340f7bb254597deb6679e343effadbb","e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","ac10457b51ee4a3173b7165c87c795eadd094e024f1d9f0b6f0c131126e3d903","468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","090fda1107e7d4f8f30a2b341834ed949f01737b5ec6021bb6981f8907330bdb","cc32874a27100c32e3706d347eb4f435d6dd5c0d83e547c157352f977bbc6385","e45b069d58c9ac341d371b8bc3db4fa7351b9eee1731bffd651cfc1eb622f844","7f3c74caad25bfb6dfbf78c6fe194efcf8f79d1703d785fc05cd606fe0270525","54f3f7ff36384ca5c9e1627118b43df3014b7e0f62c9722619d19cdb7e43d608","2f346f1233bae487f1f9a11025fc73a1bf9093ee47980a9f4a75b84ea0bb7021","013444d0b8c1f7b5115462c31573a699fee7458381b0611062a0069d3ef810e8","0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","8c4df93dafcf06adc42a63477cc38b352565a3ed0a19dd8ef7dfacc253749327","22a35275abc67f8aba44efc52b2f4b1abc2c94e183d36647fdab5a5e7c1bdf23","99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","32f19b665839b1382b21afc41917cda47a56e744cd3df9986b13a72746d1c522","8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","6c170b8164a9c5c5428b7aea8da3c025f54fc765bbc39c9d71c82b85221da093","fcfcc41c8684298183892f8e2608bfaac4b55271fd5d46dcd63c1b93877c1214","260f889b9e2b69f77be1155348eb345166aec664b3efff6720053c6844a41f28","b8ad793dc17938bc462812e3522bbd3d62519d91d9b4a6422bed1383c2d3eb42","8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","6c6bd91368169cfa94b4f8cc64ebca2b050685ec76bc4082c44ce125b5530cca","f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","272af80940fcc0c8325e4a04322c50d11f8b8842f96ac66cbd440835e958dd14","1803e48a3ec919ccafbcafeef5e410776ca0644ae8c6c87beca4c92d8a964434","875c43c5409e197e72ee517cb1f8fd358406b4adf058dbdc1e50c8db93d68f26","8854713984b9588eac1cab69c9e2a6e1a33760d9a2d182169059991914dd8577","e333d487ca89f26eafb95ea4b59bea8ba26b357e9f2fd3728be81d999f9e8cf6","2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","c503be3ddb3990ab27ca20c6559d29b547d9f9413e05d2987dd7c4bcf52f3736","598b15f0ae9a73082631d14cb8297a1285150ca325dbce98fc29c4f0b7079443","8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","c94c1aa80687a277396307b80774ca540d0559c2f7ba340168c2637c82b1f766","ce7dbf31739cc7bca35ca50e4f0cbd75cd31fd6c05c66841f8748e225dc73aaf","942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","6f6bdb523e5162216efc36ebba4f1ef8e845f1a9e55f15387df8e85206448aee","aa2d6531a04d6379318d29891de396f61ccc171bfd2f8448cc1649c184becdf2","d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","ab710f1ee2866e473454a348cffd8d5486e3c07c255f214e19e59a4f17eece4d","db7ff3459e80382c61441ea9171f183252b6acc82957ecb6285fff4dca55c585","4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","2a899aef0c6c94cc3537fe93ec8047647e77a3f52ee7cacda95a8c956d3623fb","ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","6a52170a5e4600bbb47a94a1dd9522dca7348ce591d8cdbb7d4fe3e23bbea461","6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","16c144a21cd99926eeba1605aec9984439e91aa864d1c210e176ca668f5f586a","af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","fd4107bd5c899165a21ab93768904d5cfb3e98b952f91fbf5a12789a4c0744e6","deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","041bc1c3620322cb6152183857601707ef6626e9d99f736e8780533689fb1bf9","77165b117f552be305d3bc2ef83424ff1e67afb22bfabd14ebebb3468c21fcaa","128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","d8ec19be7d6d3950992c3418f3a4aa2bcad144252bd7c0891462b5879f436e4e","db37aa3208b48bdcbc27c0c1ae3d1b86c0d5159e65543e8ab79cbfb37b1f2f34","d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","2daf06d8e15cbca27baa6c106253b92dad96afd87af9996cf49a47103b97dc95","1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","8109e0580fc71dbefd6091b8825acf83209b6c07d3f54c33afeafab5e1f88844","d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","df29ade4994de2d9327a5f44a706bbe6103022a8f40316839afa38d3e078ee06","82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","d38f45cb868a830d130ac8b87d3f7e8caff4961a3a1feae055de5e538e20879a","4c30a5cb3097befb9704d16aa4670e64e39ea69c5964a1433b9ffd32e1a5a3a1","1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","7b3a5e25bf3c51af55cb2986b89949317aa0f6cbfb5317edd7d4037fa52219a9","3cd50f6a83629c0ec330fc482e587bfa96532d4c9ce85e6c3ddf9f52f63eee11","9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","dadfa5fd3d5c511ca6bfe240243b5cf2e0f87e44ea63e23c4b2fce253c0d4601","2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","2e19656c513ded3efe9d292e55d3661b47f21f48f9c7b22003b8522d6d78e42f","ddecf238214bfa352f7fb8ed748a7ec6c80f1edcb45053af466a4aa6a2b85ffe","896eec3b830d89bc3fb20a38589c111bbe4183dd422e61c6c985d6ccec46a1e9","907dab3492fc59404ecf40f9ad655251741c5f2e471bb0376d11dae3e27cb1d8","8629340be5692664c52a0e242705616c92b21330cb20acf23425fff401ac771f","81477bb2c9b97a9dd5ce7750ab4ae655e74172f0d536d637be345ba76b41cd92","55a6b0318ec658ff37bc88e18a93e5f10ddad7257b379b71abf39e6868b8d4d2","b7d85dc2de8db4ca983d848c8cfad6cf4d743f8cb35afe1957bedf997c858052","83daad5d7ae60a0aede88ea6b9e40853abcbe279c10187342b25e96e35bc9f78","3a4e276e678bae861d453944cf92178deaf9b6dcd363c8d10d5dd89d81b74a0c","db9661c9bca73e5be82c90359e6217540fd3fd674f0b9403edf04a619a57d563","f7a5ab7b54bdc6a13cf1015e1b5d6eeb31d765d54045281bfeefcdfcc982a37c","ec99a3d23510a4cb5bdc996b9f2170c78cde2bfa89a5aee4ca2c009a5f122310","cb5eaaa2a079305b1c5344af739b29c479746f7a7aefffc7175d23d8b7c8dbb0","bd324dccada40f2c94aaa1ebc82b11ce3927b7a2fe74a5ab92b431d495a86e6f","56749bf8b557c4c76181b2fd87e41bde2b67843303ae2eabb299623897d704d6","5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","6fc56a681a637069675b2e11b4aa105efe146f7a88876f23537e9ea139297cf9","33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","176d6f604b228f727afb8e96fd6ff78c7ca38102e07acfb86a0034d8f8a2064a","1b1a02c54361b8c222392054648a2137fc5983ad5680134a653b1d9f655fe43d","8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","2426ed0e9982c3d734a6896b697adf5ae93d634b73eb15b48da8106634f6d911","057431f69d565fb44c246f9f64eac09cf309a9af7afb97e588ebef19cc33c779","960d026ca8bf27a8f7a3920ee50438b50ec913d635aa92542ca07558f9c59eca","71f5d895cc1a8a935c40c070d3d0fade53ae7e303fd76f443b8b541dee19a90c","252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","3dc633586d48fcd04a4f8acdbf7631b8e4a334632f252d5707e04b299069721e","3322858f01c0349ee7968a5ce93a1ca0c154c4692aa8f1721dc5192a9191a168","6dde0a77adad4173a49e6de4edd6ef70f5598cbebb5c80d76c111943854636ca","09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","f7b622759e094a3c2e19640e0cb233b21810d2762b3e894ef7f415334125eb22","99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","9f642953aba68babd23de41de85d4e97f0c39ef074cb8ab8aa7d55237f62aff6","159d95163a0ed369175ae7838fa21a9e9e703de5fdb0f978721293dd403d9f4a","2d2ec3235e01474f45a68f28cf826c2f5228b79f7d474d12ca3604cdcfdac80c","6dd249868034c0434e170ba6e0451d67a0c98e5a74fd57a7999174ee22a0fa7b","9716553c72caf4ff992be810e650707924ec6962f6812bd3fbdb9ac3544fd38f","506bc8f4d2d639bebb120e18d3752ddeee11321fd1070ad2ce05612753c628d6","053c51bbc32db54be396654ab5ecd03a66118d64102ac9e22e950059bc862a5e","1977f62a560f3b0fc824281fd027a97ce06c4b2d47b408f3a439c29f1e9f7e10","627570f2487bd8d899dd4f36ecb20fe0eb2f8c379eff297e24caba0c985a6c43","0f6e0b1a1deb1ab297103955c8cd3797d18f0f7f7d30048ae73ba7c9fb5a1d89","0a051f254f9a16cdde942571baab358018386830fed9bdfff42478e38ba641ce","17269f8dfc30c4846ab7d8b5d3c97ac76f50f33de96f996b9bf974d817ed025b","9e82194af3a7d314ccbc64bb94bfb62f4bfea047db3422a7f6c5caf2d06540a9","083d6f3547ccbf25dfa37b950c50bee6691ed5c42107f038cc324dbca1e173ae","952a9eab21103b79b7a6cca8ad970c3872883aa71273f540285cad360c35da40","8ba48776335db39e0329018c04486907069f3d7ee06ce8b1a6134b7d745271cc","e6d5809e52ed7ef1860d1c483e005d1f71bab36772ef0fd80d5df6db1da0e815","893e5cfbae9ed690b75b8b2118b140665e08d182ed8531e1363ec050905e6cb2","6ae7c7ada66314a0c3acfbf6f6edf379a12106d8d6a1a15bd35bd803908f2c31","e4b1e912737472765e6d2264b8721995f86a463a1225f5e2a27f783ecc013a7b","97146bbe9e6b1aab070510a45976faaf37724c747a42d08563aeae7ba0334b4f","c40d552bd2a4644b0617ec2f0f1c58618a25d098d2d4aa7c65fb446f3c305b54","09e64dea2925f3a0ef972d7c11e7fa75fec4c0824e9383db23eacf17b368532f","424ddba00938bb9ae68138f1d03c669f43556fc3e9448ed676866c864ca3f1d6","a0fe12181346c8404aab9d9a938360133b770a0c08b75a2fce967d77ca4b543f","3cc6eb7935ff45d7628b93bb6aaf1a32e8cb3b24287f9e75694b607484b377b3","ced02e78a2e10f89f4d70440d0a8de952a5946623519c54747bc84214d644bac","efd463021ccc91579ed8ae62584176baab2cd407c555c69214152480531a2072","29647c3b79320cfeecb5862e1f79220e059b26db2be52ea256df9cf9203fb401","e8cdefd2dc293cb4866ee8f04368e7001884650bb0f43357c4fe044cc2e1674f","582a3578ebba9238eb0c5d30b4d231356d3e8116fea497119920208fb48ccf85","185eae4a1e8a54e38f36cd6681cfa54c975a2fc3bc2ba6a39bf8163fac85188d","0c0a02625cf59a0c7be595ccc270904042bea523518299b754c705f76d2a6919","c44fc1bbdb5d1c8025073cb7c5eab553aa02c069235a1fc4613cd096d578ab80","cee72255e129896f0240ceb58c22e207b83d2cc81d8446190d1b4ef9b507ccd6","3b54670e11a8d3512f87e46645aa9c83ae93afead4a302299a192ac5458aa586","c2fc4d3a130e9dc0e40f7e7d192ef2494a39c37da88b5454c8adf143623e5979","2e693158fc1eedba3a5766e032d3620c0e9c8ad0418e4769be8a0f103fdb52cd","516275ccf3e66dc391533afd4d326c44dd750345b68bb573fc592e4e4b74545f","07c342622568693847f6cb898679402dd19740f815fd43bec996daf24a1e2b85","fa40d705f9813843d47f19321591499f14d1a18fa5e8ca9beaee5aac633c3d0d","a7a6330fb015f72d821e23004e63a3827e0c632b614ef3a310b3c81b66de61fd","89968316b7069339433bd42d53fe56df98b6990783dfe00c9513fb4bd01c2a1c","a4096686f982f6977433ee9759ecbef49da29d7e6a5d8278f0fbc7b9f70fce12","62e62a477c56cda719013606616dd856cfdc37c60448d0feb53654860d3113bb","207c107dd2bd23fa9febac2fe05c7c72cdac02c3f57003ab2e1c6794a6db0c05","55133e906c4ddabecdfcbc6a2efd4536a3ac47a8fa0a3fe6d0b918cac882e0d4","2147f8d114cf58c05106c3dccea9924d069c69508b5980ed4011d2b648af2ffe","2eb4012a758b9a7ba9121951d7c4b9f103fe2fc626f13bec3e29037bb9420dc6","fe61f001bd4bd0a374daa75a2ba6d1bb12c849060a607593a3d9a44e6b1df590","cfe8221c909ad721b3da6080570553dea2f0e729afbdbcf2c141252cf22f39b5","34e89249b6d840032b9acdec61d136877f84f2cd3e3980355b8a18f119809956","6f36ff8f8a898184277e7c6e3bf6126f91c7a8b6a841f5b5e6cb415cfc34820e","4b6378c9b1b3a2521316c96f5c777e32a1b14d05b034ccd223499e26de8a379c","07be5ae9bf5a51f3d98ffcfacf7de2fe4842a7e5016f741e9fad165bb929be93","cb1b37eda1afc730d2909a0f62cac4a256276d5e62fea36db1473981a5a65ab1","195f855b39c8a6e50eb1f37d8f794fbd98e41199dffbc98bf629506b6def73d7","471386a0a7e4eb88c260bdde4c627e634a772bf22f830c4ec1dad823154fd6f5","108314a60f3cb2454f2d889c1fb8b3826795399e5d92e87b2918f14d70c01e69","d75cc838286d6b1260f0968557cd5f28495d7341c02ac93989fb5096deddfb47","d531dc11bb3a8a577bd9ff83e12638098bfc9e0856b25852b91aac70b0887f2a","19968b998a2ab7dfd39de0c942fc738b2b610895843fec25477bc393687babd8","c0e6319f0839d76beed6e37b45ec4bb80b394d836db308ae9db4dea0fe8a9297","1a7b11be5c442dab3f4af9faf20402798fddf1d3c904f7b310f05d91423ba870","079d3f1ddcaf6c0ff28cfc7851b0ce79fcd694b3590afa6b8efa6d1656216924","2c817fa37b3d2aa72f01ce4d3f93413a7fbdecafe1b9fb7bd7baaa1bbd46eb08","682203aed293a0986cc2fccc6321d862742b48d7359118ac8f36b290d28920d2","7406d75a4761b34ce126f099eafe6643b929522e9696e5db5043f4e5c74a9e40","7e9c4e62351e3af1e5e49e88ebb1384467c9cd7a03c132a3b96842ccdc8045c4","ea1f9c60a912065c08e0876bd9500e8fa194738855effb4c7962f1bfb9b1da86","903f34c920e699dacbc483780b45d1f1edcb1ebf4b585a999ece78e403bb2db3","100ebfd0470433805c43be5ae377b7a15f56b5d7181c314c21789c4fe9789595","12533f60d36d03d3cf48d91dc0b1d585f530e4c9818a4d695f672f2901a74a86","21d9968dad7a7f021080167d874b718197a60535418e240389d0b651dd8110e7","2ef7349b243bce723d67901991d5ad0dfc534da994af61c7c172a99ff599e135","fa103f65225a4b42576ae02d17604b02330aea35b8aaf889a8423d38c18fa253","1b9173f64a1eaee88fa0c66ab4af8474e3c9741e0b0bd1d83bfca6f0574b6025","1b212f0159d984162b3e567678e377f522d7bee4d02ada1cc770549c51087170","46bd71615bdf9bfa8499b9cfce52da03507f7140c93866805d04155fa19caa1b","86cb49eb242fe19c5572f58624354ffb8743ff0f4522428ebcabc9d54a837c73","fc2fb9f11e930479d03430ee5b6588c3788695372b0ab42599f3ec7e78c0f6d5","bb1e5cf70d99c277c9f1fe7a216b527dd6bd2f26b307a8ab65d24248fb3319f5","817547eacf93922e22570ba411f23e9164544dead83e379c7ae9c1cfc700c2cf","a728478cb11ab09a46e664c0782610d7dd5c9db3f9a249f002c92918ca0308f7","9e91ef9c3e057d6d9df8bcbfbba0207e83ef9ab98aa302cf9223e81e32fdfe8d","66d30ef7f307f95b3f9c4f97e6c1a5e4c462703de03f2f81aca8a1a2f8739dbd","293ca178fd6c23ed33050052c6544c9d630f9d3b11d42c36aa86218472129243","90a4be0e17ba5824558c38c93894e7f480b3adf5edd1fe04877ab56c56111595","fadd55cddab059940934df39ce2689d37110cfe37cc6775f06b0e8decf3092d7","91324fe0902334523537221b6c0bef83901761cfd3bd1f140c9036fa6710fa2b","b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","41744c67366a0482db029a21f0df4b52cd6f1c85cbc426b981b83b378ccb6e65","c3f3cf7561dd31867635c22f3c47c8491af4cfa3758c53e822a136828fc24e5d","a88ddea30fae38aa071a43b43205312dc5ff86f9e21d85ba26b14690dc19d95e","b5b2d0510e5455234016bbbaba3839ca21adbc715d1b9c3d6dede7d411a28545","5515f17f45c6aafe6459afa3318bba040cb466a8d91617041566808a5fd77a44","4df1f0c17953b0450aa988c9930061f8861b114e1649e1a16cfd70c5cbdf8d83","441104b363d80fe57eb79a50d495e0b7e3ebeb45a5f0d1a4067d71ef75e8fbfa","d1dbc755d3497a2d922c2981a9e1b9458360f221b4e17f3c1f5c6834e97ddafd","617c1d5035f48ddb6bccb6eac569d5ea9aaffff4dbe20445e15967a2d78c244a","b27bdd4ec1c1689765e4f43537e855fc431dd5bd6aa211dd3f2b0d659172e824","7ea8de94f8a725c30a04a1df05a763945e743fad2d36b9646ecb6cf6fd32bc95","17bac6d436e149d7129a013b3f32905a3d7d56a736961b61cba9a9e8821eb1c3","e69ad4135f4203fd9dc27b14d9f8249925d37345b4d72a10fad486e71d673f19","93d756f6291636f878b70b01404057a251ba3b838874f2e8e7be85d89add8c68","b59f2e70a0e25e5890b4eb43bc830f19c6186167a7e2396689617081772bfe99","33da6975c5d3894be099a14b2077e111571808ee6a3bed641a99412314c67c7b","b764f373ae0b8bbfe0b006c6894743b9648257d724593fcf2552951608be0b44","c18f13b7b4249cb9da1bf2f70d055437ac9b2389d78c28e9a45f6ef6c424676a","6d1be06c97222704cf2c8e6de93cd9fbe7b61861b79102e9b35ae6f8f1fe8be3","756f7f22fb048fc78c71bc97c8ffa1195cd28174b9e3e0cd92b3e51226a8682c","339df134f771bca2fdb5edd2f2b8aff18f6696e4954941e150f5ef6e5a3c3de0","0246e0e65e349597d30816676d5c5d9fe82a6d9e82fa1b9e97bae4a95e9bca37","aedf6e7f655e460fb54efe495f1e32c7720dbb77ad221c78d74df542be92d80f","11b8ae6c4d8dca51c778a7aa35cc343820b392052acb92d1e61399dd29761739","caacc3de460080cdbe43e3d85463392eeb57d248d243ce73d584f28aa39925c6","df6660cfaab28113563b38b818cab52fd3d95c1686ef30f11120628a2bccd02f","dff93e0997c4e64ff29e9f70cad172c0b438c4f58c119f17a51c94d48164475a","fd1ddf926b323dfa439be49c1d41bbe233fe5656975a11183aeb3bf2addfa3bb","6dda11db28da6bcc7ff09242cd1866bdddd0ae91e2db3bea03ba66112399641a","ea4cd1e72af1aa49cf208b9cb4caf542437beb7a7a5b522f50a5f1b7480362ed","903a7d68a222d94da11a5a89449fdd5dd75d83cd95af34c0242e10b85ec33a93","e7fe2e7ed5c3a7beff60361632be19a8943e53466b7dd69c34f89faf473206d7","b4896cee83379e159f83021e262223354db79e439092e485611163e2082224ff","5243e79a643e41d9653011d6c66e95048fc0478eb8593dc079b70877a2e3990e",{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true},"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a",{"version":"1456e80bd8a3870034d89f91bd7df12ac29acfb083e31c0bb1fb38ca7bf5fbc2","affectsGlobalScope":true},{"version":"a98aedd64ad81793f146d36d1611ed9ba61b8b49ff040f0d13a103ed626595d9","affectsGlobalScope":true},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true},"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107",{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true},"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f",{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true},"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c",{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true},"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a",{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true},"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45",{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true},"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86",{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true},"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d",{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true},"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee",{"version":"fad4e3c207fe23922d0b2d06b01acbfb9714c4f2685cf80fd384c8a100c82fd0","affectsGlobalScope":true},"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5",{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true},"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9",{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true},"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e",{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true},"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","0ea329e5eab6719ff83bcb97e8bd03f1faab4feb74704010783b881fc9d80f92","08bb8fb1430620b088894ecbb0a6cb972f963d63911bb3704febfa0d3a2f6ea5","5e4631f04c72971410015548c8137d6b007256c071ec504de385372033fec177","eb234b3e285e8bc071bdddc1ec0460095e13ead6222d44b02c4e0869522f9ba3","ce4e58f029088cc5f0e6e7c7863f6ace0bc04c2c4be7bc6730471c2432bd5895","018421260380d05df31b567b90368e1eacf22655b2b8dc2c11e0e76e5fd8978f","ef803dca265d6ba37f97b46e21c66d055a3007f71c1995d9ef15d4a07b0d2ad0","3d4adf825b7ac087cfbf3d54a7dc16a3959877bb4f5080e14d5e9d8d6159eba8","f9e034b1ae29825c00532e08ea852b0c72885c343ee48d2975db0a6481218ab3","1193f49cbb883f40326461fe379e58ffa4c18d15bf6d6a1974ad2894e4fb20f3","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","bee7e21907a064fae4baccd873a180c029e031470789bb6cd21609efef0c8b4a","3d928c4372b8d83284de942bf4c3b99649b1162f47b77ff833bc5cf8b075a0f5","7a0a6b62733c1c3f2f13d4a3ef3dba365cb693acb4662ec3d97455f32cb8254f","0f71bc08c27ad3cd440bfd342d3830f4d9b255ecfe44e472bcfbca9028475631","ec4d85015cae1a3a758d401484a0406b5a6323c99553914af21f6ceb42e81523","269764b3e0be5a745a5b1cfd7aa58ae4349121c40d4ada6bca17220839362dfe","953b9557e13e783828fb1a2c3e31d5fa14f44a9c3f5a4419ef21b2a1a588162f","8c50488fdff7c5ad08169448c03f85eae9f011fc8c93c8fbd5ff57f04c27d020","46b0f10d68e0a0fefb88504c9a71ec993fab863afef6469a02c8e8102a1c4c23","301b41934549831e498eb99326ebd2f679be4750367fa2777351c46acbddb2be","7fad7443723a73096fe6e41553fff60cfe392d081369a2d98c6328bca06c7e56","97bbc2389cecb81631b3533d677cd1d1b793db3cff6c658a316db09f8b57e71a","61dfb5e3b153ce9f1dbe8cd7552fab0625e8007587c0ca7c41f0d4eb1553023b","ee9fe1b822505ae95a9461819bea36ed462be911a0e4c0fad117f1f4ac5e0131","d9d029190bcefe75ec9d2ae49b3861be2d74c5983537edcdf12359a8d55d192b","54bfc5db4f9f127b8ddbaa5273aa1ec563d8e0adc44c5f422e1f071708e72050","1057c69d919ee35eccfb02318d8029476553392f2c3c0bf9f20e8707d3ba3592","9eaf891e972d3b5d0af55df81866939fbf106d382e67362635d8c532b011f43b","7449b761de9361de1f389e81804c9b1829ef242c9eec98356a23fdc821e5474a","ca4446f42563a73dc98c513562d56c942bb892fdb4bef557057e6197937197c4","f035080b8b46b7e323dab3649b9017e3759201383f464cc51612f3beaba3e0de","b43420545223fa4e12b3b77d4a31d43436d85c150b2af271bf68a7b884ef9310","c67c43be94296c92d2b81595140d0e07c77db65b4520a46eb9be552f917797cd","2b7595f6837362c83bcee85d40405f3f0187fd5106f5beae24a32a0fb4de567e","786d7e4d277060b3fc262c4cf8ca1514a6efe4b5257f03116804a775e4b30b5d","745831eccc3c3d616d3f2b6b3cdea063d421a3f2e6f4a32d351957c18d506d47","0de451c94829ecb84bb361f95dafb1665b5581c6071e6143079b67f2d3784322","9c357b200ba68ece85c79642d98c3be9e478b2b456fcaaaaaa44d820abae3ef9","e9af4777a368d59afa70a8f7a9cd8395c09d9e83af85ffa92552a77ebe24645f","5aeb344fd5e9ea29b30211a3c006f51ccfff0774ff3884b9847ee51b9aed86e0","e3f4f9f0f2eda4eb168c8245f952c91be857de1e5cb8d52a87e892dc9fe96a21","4f30f608a056faea81b39e0c721cf68a9a7fa674328f36c5c728e4da32af0ce6","c098888fd9fe882ad7740df8547119a2d375a41b5ff0b04b12547c8c05403bc9",{"version":"044a8606ab4dfb537c9ff3fb9288e84855612cdc72d3b14585b38f30d7db5082","signature":"d5f2f337abf798c91d2767ec07f6a4b86c5b33cb09bbc1add23fb725cc08f531"},{"version":"6109fb15c508c115beb5d4e35d7000da5488d53d42878799ac495bdec74c8652","signature":"b800a0bc103bae2a5a723c902ea0617a2ed212a13a6bbef970524cb98312f47b"},{"version":"9a8708da4a574c1c26479408cd722fa04b6f19dd3660f15e4c460c3a6b96a0f1","signature":"81cd1d7d46093604680beb7467d357d0859984713f5a3c85c6d194e04df838c4"},"8cc9efdadc17b3ad9d1c246ab3004b06944d878c27a9f10e5c1a586b6fb473eb","dd6406a9c5c2908556117d8922e4cc5cbd727b99cda584cdb6a13382f9fb69a3","a86260f7b60cab88ff97b86c2de1d4734622c52a5b3c8fc731365c991f531cc6","1e3cdb2b97c8425cfde4727c98869aebf13aaa1ec7f98a6d0da8417a70a8e786","741ba076a4d9fbbd0fbffb7ea851cf68336b2ab0b3a0e66f2618671a7c2c964c","29a0b77bf231eed6a846a6d7602e8fe3d9cb5cbea786ab4551a56e24ee86f589","1b74f6df22aff6bf22641fca04bb1784bece93d595ac6c95539134688ca6be01","5e5810c3b7955d249a5e0fd5ad420e0a4e42c939ba71afb111ff15a6bbb38cc7","e9ca9afd8e61742754691a2d7eaf489184c728fa4eefb82b50d967e8272a9fdc","6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","bd821b87e2c0fb5f509cedf47da465c447451835ce0fe2a752c4fc53a9f95a5b","f1d7352c0f7041abb43e1054abb14fb8c53a13dd54bcc1d67b97d2c02bb5028c","fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","08f88f75fc2f516413477606a4122b6d3f6eb6680e8eb79f3fda5a5d2ed306df","6ab9821afd2a06879620eb4e041b9492a90f294e9b733ae5eb022edaa3964a45","003533cc3fa10cc457668d4256d21a65706a67a04251962cfe85d240502f8d67","6c00cb8a4b187505dfe21aff242b07f69f84f5c832e8ab4357af69daaee1b0df","de14ddf9d780367c6a117bd8a1718d491aff66094186523b3eea680ea7035a7c","ee06b94d0521cfaf91e4b003518eeefc45bbd594b0c22955fe35be282958252b","9e5f8fdaeb03f1699392b4724a58ca7b47c5cbb6762920d2bfc722c265495ede","d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","a1597b0039f39e9f3eeaf120f02d0c94a826fad30b027a2abfdb8d580c89be70","04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","1de82ba3718b2b3bc5333c5bc35da5cfc46d1b654edc012de46bbce48126fcce","42549cb3d0fa0eab1ef6d2ed3fd31e5aa272bc5b6c23a2d0025a7aee7c0fa021","e847a644c3914d1bd310cb3cd44bbd9d79ecf180232b3b98587bc40da3b7653d","3af5b4b5bd3d97b677a8bd0d0a0572a11d47a429d99795f3804a18ed328e4dff","ca5a8f05f6b296271e2decaf973fc3415f1733aa46617e2c1df547f62aab9962","f41575d0da2bccdc0dd890ad70a4834ad02d78e2ff37089222720083fd7278ec","7381735514b056ff7f40c49c5ce892f611a9a1c0689e2c6dc9360586398ce2cf","e228e581d3a4705474b5576ac2946aa3fd51cb142ad3a60c8ccd4e3a5452f660","57e36f57e548dada9d49ee619318511375ed9086c9601ca669bf120cbb72eb23","d890f2f637f459f5637ee9f10b0dd0f8f2ae592273110b0e48c641f3932e7121","b882ceb446abf78bc4340b3dd4a095ea852b359c4c6e8dff272eadbdd0c117e4","466c55057c1df53813113e10f4865ad464ae14c003a57118cd08532342a41345","8f2f50ff3be2725b5585f101c9e3fd7791b182917abaf80ecf874d2924fb2152","24db74322b1299b6d2518cdfae3f8fb796fb60f8dbcc2fbd00a8b8b2d816637a","eeaf4847702fbb72f530e120c6e12a8062e17ae0882dc47a0d3493d7598aa34d","b6e995b5ef6661f5636ff738e67e4ec90150768ef119ad74b473c404304408a1","5d470930bf6142d7cbda81c157869024527dc7911ba55d90b8387ef6e1585aa1","074483fdbf20b30bd450e54e6892e96ea093430c313e61be5fdfe51588baa2d6","b7e6a6a3495301360edb9e1474702db73d18be7803b3f5c6c05571212acccd16","aa7527285c94043f21baf6e337bc60a92c20b6efaa90859473f6476954ac5f79","dd3be6d9dcd79e46d192175a756546630f2dc89dab28073823c936557b977f26","8d0566152618a1da6536c75a5659c139522d67c63a9ae27e8228d76ab0420584","ba06bf784edafe0db0e2bd1f6ecf3465b81f6b1819871bf190a0e0137b5b7f18","a0500233cb989bcb78f5f1a81f51eabc06b5c39e3042c560a7489f022f1f55a3","220508b3fb6b773f49d8fb0765b04f90ef15caacf0f3d260e3412ed38f71ef09","1ad113089ad5c188fec4c9a339cb53d1bcbb65682407d6937557bb23a6e1d4e5","e56427c055602078cbf0e58e815960541136388f4fc62554813575508def98b6","1f58b0676a80db38df1ce19d15360c20ce9e983b35298a5d0b4aa4eb4fb67e0f","3d67e7eb73c6955ee27f1d845cae88923f75c8b0830d4b5440eea2339958e8ec","11fec302d58b56033ab07290a3abc29e9908e29d504db9468544b15c4cd7670d","c66d6817c931633650edf19a8644eea61aeeb84190c7219911cefa8ddea8bd9a","ab1359707e4fc610c5f37f1488063af65cda3badca6b692d44b95e8380e0f6c2","37deda160549729287645b3769cf126b0a17e7e2218737352676705a01d5957e","d80ffdd55e7f4bc69cde66933582b8592d3736d3b0d1d8cc63995a7b2bcca579","c9b71952b2178e8737b63079dba30e1b29872240b122905cbaba756cb60b32f5","b596585338b0d870f0e19e6b6bcbf024f76328f2c4f4e59745714e38ee9b0582","e6717fc103dfa1635947bf2b41161b5e4f2fabbcaf555754cc1b4340ec4ca587","c36186d7bdf1f525b7685ee5bf639e4b157b1e803a70c25f234d4762496f771f","026726932a4964341ab8544f12b912c8dfaa388d2936b71cc3eca0cffb49cc1d","83188d037c81bd27076218934ba9e1742ddb69cd8cc64cdb8a554078de38eb12","7d82f2d6a89f07c46c7e3e9071ab890124f95931d9c999ba8f865fa6ef6cbf72","4fc523037d14d9bb6ddb586621a93dd05b6c6d8d59919a40c436ca3ac29d9716","198914dd957e34dfd4d7ba05dd19daf4ad149714eafc9136c550b79710140139","b753aa014ba3888ff2d54bde089acd6ddec4382614c672afea09b2bdc61bbde9","6d2b05592acf6f37e957c5051ac2ca1a4770ed672e4a4c469db14617bf26bb74","73e630c6f37ef4ce28838b93674d5ba373f29973456caf74cc1b890a31ab0ce6","06c41402046b7357e496b4443cfb310f499c3674bc4626a5e09d945aba8169f2","263277903237521ae76d0ce997738a4d438a30d875178028e683913e3e5b1d53","d7ab4c1ce5c0a124ab4c76b55e8568755a8d430dfa6bb0ab31fe822250f1c42f","a2c20422c31e0adeeb0e832cbad1a472e4760f2a7652c9920596d425065b8ec3","80fcb28d3802188b7542d2a97725b6563ef2de167bf1aa85479d067eed0c6376","8a639f6d983a939377de955f1d4553fc5ce720ea57095b7aacbf754271fe41c3","7bafb3cfa3140bbeaf029b61c679fa68635750a3aa249d59907929af1745bf82","e787f90b286fb556ff13c338825bf269b819119cabd3e61b3b94dba68f403892","5cd52dfba8c7541c806876fe121b6ea76345a2d6a3d01838e5de385a4c5080c4","2f7bc531e23823451914b122f19fd66acd771bd117c3d5c2daa5b3b46c458adc","b792857d85f18f1d993b5290648669d3fa26e166955c5440ad6f5fb268618ef4","49ca62872d3449bd8a1f59bb39b39dfcc4d780903db90266b1be6696e15756a5","64ef2b224641f1d1b26aa7ef59a5d4bf6212bd158919d9cc3156819ba7a88302","9a1b02dcb0883601be32659a36e44ce7e9d489934e5a45d1fa2ea28551639eee","a2ee0c21abc1bc300f9ea198871870bb4fa12a4827c649832f381bb39822a4ef","5a71ffc5d5fffc38f92efb9a0b7011fd212e693ee491a3cc89814b42ee02430c","fa2409d976b714cbaf86970d8e3a079ac1e5d587e8134af8de37eb0cbe515a8d","8bbe64af63f4cf0b642bf49033413615b2ee0707c59f9c7e99e347e1d02679ac","291578be81f43dba920a437997ef7b0f155f800f9f61998d9f648b3d6c478dd0","fd8a4f338dfaba13dbc36edac1fdf2861f8084bbe16b98c3af7dc95e3ad30fb6","682f887182dda1d4d7f6e76edbf0e68721c8b547996d2863d8e313fcc7c766f0",{"version":"f68153bdc7977f884c188337a3cfd7ca611222c0049654dd72df17a9f41a269b","signature":"b82491e2990291580288c5602d4c017238977749d52b17391f0e45d9a29be644"},"6ecc423e71318bafbd230e6059e082c377170dfc7e02fccfa600586f8604d452","772f9bdd2bf50c9c01b0506001545e9b878faa7394ad6e7d90b49b179a024584","f204b03cb07517d71715ac8bc7552542bfab395adb53e31c07fbc67de6856de1","7467736a77548887faa90a7d0e074459810a5db4bbc6de302a2be6c05287ccae","39504a2c1278ee4d0dc1a34e27c80e58b4c53c08c87e3a7fc924f18c936bebb5","cd1ccdd9fd7980d43dfede5d42ee3d18064baed98b136089cf7c8221d562f058","d60f9a4fd1e734e7b79517f02622426ea1000deb7d6549dfdece043353691a4e","403d28b5e5f8fcff795ac038902033ec5890143e950af45bd91a3ed231e8b59c","c73b59f91088c00886d44ca296d53a75c263c3bda31e3b2f37ceb137382282be","e7aa2c584edb0970cb4bb01eb10344200286055f9a22bc3dadcc5a1f9199af3e","bfeb476eb0049185cb94c2bfcadb3ce1190554bbcf170d2bf7c68ed9bb00458e","ae23a65a2b664ffe979b0a2a98842e10bdf3af67a356f14bbc9d77eb3ab13585","eccf6ad2a8624329653896e8dbd03f30756cbd902a81b5d3942d6cf0e1a21575","1930c964051c04b4b5475702613cd5a27fcc2d33057aa946ff52bfca990dbc84","2793d525d79404df346e4ef58a82f9b6d28a7650beeb17378cd121c45ba03f02","62463aa3d299ae0cdc5473d2ac32213a05753c3adce87a8801c6d2b114a64116","c9c2eabaad71c534d7de16385977f95184fdf3ddd0339dadbd5d599488d94f90","d0642c453e6af4c0700182bec4afc5b2cc9498fe27c9b1bcf2e6f75dd1892699","8f4469dd750d15f72ba66876c8bc429d3c9ce49599a13f868a427d6681d45351","d1e888a33faeb1f0e3c558bbe0ea4a55056318e0b2f8eba72ffd6729c3bbff4e","f689c0633e8c95f550d36af943d775f3fae3dac81a28714b45c7af0bbb76a980","fef736cfb404b4db9aa942f377dbbac6edb76d18aabd3b647713fa75da8939e9","45659c92e49dfca4601acc7e57fbb03a71513c69768984baf86ead8d20387a01","0239d8f6a3f51b26cbdbb9362f4fde35651c6bd0ff3d9fc09ee4a2da6065cb4e","6e5ab399ec7bd61d4f86421cc6074fd904379c3923706c899d15146e4f9a08c8","c9ffec02582eed74f518ae3e32a5dcf4ac835532e548300c5c5f950cdfeead5f","df343f5de08f5b607a3c7954ff1b512b7fa983d561e136cce0b6dc6849602a15","8fc97ef271771dc6f81a9c846d007ac4f0cb5779e3f441c1de54dfda5046fe7b","b5a060e2a4c54695076f871ddc0c91a0ff8eea1262177c4ede5593acbf1ca3bb","08ee70765d3fa7c5bad4afbbe1c542771e17f84bfd5e3e872ae1fdc5160836c8","1c225a18846203fafc4334658715b0d3fd3ee842c4cfd42e628a535eda17730d","7ce93da38595d1caf57452d57e0733474564c2b290459d34f6e9dcf66e2d8beb","d7b672c1c583e9e34ff6df2549d6a55d7ca3adaf72e6a05081ea9ee625dac59f","f3a2902e84ebdef6525ed6bf116387a1256ea9ae8eeb36c22f070b7c9ea4cf09","33bb0d96cea9782d701332e6b7390f8efae3af92fd3e2aa2ac45e4a610e705d6","ae3e98448468e46474d817b5ebe74db11ab22c2feb60e292d96ce1a4ee963623","f0a2fdee9e801ac9320a8660dd6b8a930bf8c5b658d390ae0feafdba8b633688","7beb7f04f6186bdac5e622d44e4cac38d9f2b9fcad984b10d3762e369524dd77","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","53477a1815e915b8c20222a2ac8f9e3de880a1e8c8dbf9dae529b3d2e2b4a53b",{"version":"5fb25cb95930f125b856f382b6f64612ee692cdc5d39383bbc2715ffaa4decef","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"135a3871d264b1381ef6743c43ca1d21f5a6dba4f76b6174e577e0ae04550f51","ab20d41527c9c66becc01d8ec823b517714b420310d13a9e51717934749b9282","58c23db335d5e0e381b7ae320458751a84e5f16248ef396f445f3313452120d6","bb872f5a19d45430cdc2e53c57c4aa82ce5a5645c407fb9e4063e39e5d965bbe","7d21022d17c06b6e10e37c282a48560c0d8cb640ea01d3a4781379caf596756b","33580b35457674d8a2f8417aa24c3ccba90ee9947e90bee6ad8485c2f83b034e","c0e13a6a0af77361e26e53be5c636e04486231a69f99f555c851ecc55bb6733c","861af2c967b801cffae5c62f83507982f6a72d6e86a5d37193ad5afbc69a6be2","9f8e9e49d58dcf2754c127c3b2dc7b5ca55d5540b0c326c3e29d0bfdbab0d82a","069480da2d416930b0a13263f995db56771822500774145519b8ff065bb0c116","6990f2fb809692c89ecee29660a7680543246d0aee7bfc6756a1047a9918cc29","b84b0deafa5845fd2f21e49945eec5642fc74616f4b324e32e1f5bdf84a0eb54","884cd5093164bd0d95afa8854b426df08997a085668f123992ec1bb8eb2accc1","fc892a9c766a171ee80ae5f90cdb1276a509a10bb8a9cc4ade22a637cd849eab","36575bacee68738975db0d0c1443298906e1a9de846543de8087adf2417137bb","052bfda778ba1d93404739c42f8c8be8c8f35bb4df1f05740542de9c8786000e","db114ef2aba1c12605774caca9a12f389e23a084f007662129450c669da9e981","927c6cf84c59b3ca7fdb6d3cbc3aa986193337b6a9758994575106f6073ee737","0a33b8bff876368beef794f5f08e8221103efa394f9e0e27e19f557a8cdaa0a0","1afee7c708266355a2d1c369346a60055d28aa5f1477f6c0ec5218a24154e87e","382d5ac2952474a18d08ef2a3102e1559e78e78a8a4e336f85de60d10ee298fa","3fa074582e0a506b323a6a01f7c14fbf61e21f2ce610a4d6d3bda0c68ce6b9c2","19ac2c64a498009493c9da7e2cf0f4f8a84fdaf754564dd712935bb15d1bde09","42d538cf38e71521bf01b21c35bd5f41d861521f44f37d6a33b3b34c938c5cfa","732e8f056ccd1799b91bc6af8a006dedc869f83f88bdd7288453d195934f85e5","24e261c3ebbb52744d1a1f9e6c0d7a53f50c8942ad0b3abeb38958b5d0f006a6","15f5f26017423f7ab5bef6b5013f333a61beb01f1f7152efa57946a7f44b1982","56399e5f14de156cfc4ec74fb366928d46d19a52c9784eabaea043b56c99e17b","e46f90c4ee4dad38f26380359f59cfc7ec5b98ad5eb6834015ca837e867d0be2","809d4663dfaa9143df2b4d9083d414d0da5edd6b279d508d1de18380ed3693c8","bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","f99e029e32fb28eb19bd398a4eead9cb541c4017ead3541447c76bf57b5ce91f","d436da99e0c818232c78e7d303f29b1eb49119195bcf1c20d36c3128b81ff5a7","8ee002a6f5ef4a06fd8f9841da114420f1d398f5fe3cf0460780d6ce32b6dd68","be81d35f33e8ae6345b4323f872bda7f1646ec2a063c47172284595270b65fa4","32846b50a644e7a8403259088291bba099cb92d705206f9585a719513122d3cb","c6f7763e146e82e1c9f38fbcc4e0effa33984a7f2f43c3e99b9f514a5e50b714","1b004fcb6bb7297a33d82630cc1db581e702341709989356dbe335594a19c0b2","4bfbdccf040191da27687339c360ba0d90d332af2bbcecf59fe2ff54216b28be","9eb9b2b9ea69069a7cff968b979f1d864bf86389fb7e9dfa3f91a24aff97ed3d","da1cc27058f0c468a18b2b81f284ec46e8f04c02c2fb5cadf3a43e9adbe019c0","bde570453e965713d2d69cc1e5958d87acb1b1c87234cddf23d85423966fc720","cd41d0d1bd90f5cb52763a18df7d09da349caabfa5927028d22b0a8c2db9f25f","b0b4ccace4f1a5770f5ff88a24ab7707ecded6e89bed53f715dd16a42a75cd1c","cbbaa93f6e4d45a84138f9285e0323a334d713b5b910241a9746c1c6be1a8d6a","61bc4283deb413d489d89868cde2ceeef1c7e63fceb21073be2b79511767ba03","ec8e31b963684b9cff4b1ae25c2df5da6c09e1449844e94ce9be52f4dbd1d472","946b750ec0908edadb054ee6d9cd3df65f423efcecfc8632cae05029c68fa433","aadb96dc9b7762167f42208e058153721d129e27e043db4674bf904b8e09c7ca","c392b8efcf40beb09a3a5534cdb323b45ab5cbc7e403fff4545276751bb8d7aa","9b224615f3ce9ac6bc75c63286b0f7cb4e40659f60845dc42ccab3b9a98b47c6","2f628f24199c06e4dc056610ca7a9d7fb13050c177634bede6033f8ac220c538","9f5b9f9b3cc5649207927773378f7a284d17c5a4f4205c3955b312466a93dd90","41094febe33233a54e9fc58fba998d32121223cbf2f10cbca629ea2432ff0b2e","c191c1809b0ce1ae8f2bd2be299441f6948ebe88e64d8466cf24dba9a9dd80ee","426fb2892e70df7815dde29cfa016b27de421bd2b6b4c4cabd931b5b747fe538","17f8276dd70c54f3478e00ee98cbea9f53e30dca52735e2a75deb98242f2f32c","44fe2ad6c0ccb587da913ff396993791079cd1d639858bc62e95040803732c32","3e896335d08a134c7e3674ffb8d166266603f071c7f2f5be597e99a64202bd8b","2bc3ab2cb6d707975bcbca8cf145b8e8b9f4227dd2c123d526c9d39f4e46112b","b09d39f1425bb493c68b9736793e7002fa9ecd2581dc4ba2c19d8a36ce8361c3","9fd6d69e71c739eb30a92d867e456c0dd4f67717daa03c4becf1eac2bced0610","9f01cc1f06f802caf668d6333bda0d03ff4949312d616ea9462ac78b32b26987","a4a690f03b376801cff064b15a0289f953f02f09301633d6a17003031277b0d0","203d528105777fa96732992712606a7836e717bbb3e791d941fb3ba5da8f80f7","3de4d1db0730f07506865b96bfe756ee54705fa53d896b3694faba63e9d431c3","f52c66b611bce2c9f2c13060c7629986b88e9c5c75e468ddca897b174bfb9353","d2ecad9d3f106ca8ace9e6384b4c3a2c0fa133e1f3577e8e2be4d924e82f08f4","bd148d9c5b54c5a2765cb6ec384da8a2b31bbb67002fcdde99f6120e1d9fab65","bfaaae0317a3dfe965f808489b58aa6ea676f990e22eb7f08b9a69a6bd9ad091","2e0e879c8f3cf34e43c182d336f09266214f064ee6f417c658051aaa33f884f5","e6ff6d3f4756d0d0d98bcabfb763b8901e92a7a233f44222dac809c2eb86a3f2","4f7707712e35388c7798a88e04a95276324c5d17e90f8a0d69d283d1b239ebd2",{"version":"60f326f09ef7ab81cebe9aa2db5f6b213c0fe6578a895385284b645e1c61f3b4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"18034f5e18834e894a8fcee7699ecffd36de4a782d3f961fa06ed2b165207cc6","39c300bb2aaef5dc84ce3d73d2c1819f02c372b1096d9151c0fe180470688f60","19ff6e335cf5a64247219c3b159f634ee882823897844d348f02572bddca48f1","cc329081b947383db3261ef84d018a7a96cd4e4be9f2dc993265fb7657f72c0c","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true}],"root":[[401,403],[649,667],[787,831],[849,862],[890,915],[956,966],[976,986],[989,1034]],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./","removeComments":true,"rootDir":"..","skipLibCheck":true,"sourceMap":true,"strictBindCallApply":false,"strictNullChecks":false,"target":8},"fileIdsList":[[400,681,728,957],[400,681,728,957,958],[681,728,957],[400,681,728],[400,681,728,827,828,829,830,849],[400,681,728,849,850],[400,681,728,827,828,829,830,831,848],[648,681,728],[681,728],[400,681,728,857,858,859],[400,681,728,858,860],[400,681,728,857],[681,728,859],[400,402,681,728],[400,402,403,496,509,653,662,667,681,728,811,822,826,851,856,861,895,901,907,914],[400,681,728,786,789,790,791,793],[400,681,728,787],[400,681,728,787,788],[400,496,681,728,787,788,792],[681,728,787,788,789,790,791,792,793,794],[681,728,787],[400,681,728,963,964],[400,681,728,964,965],[400,681,728,964,975],[400,681,728,963],[400,649,650,651,681,728],[651,652,653,681,728,975],[400,651,652,681,728],[400,651,681,728],[400,649,650,681,728],[649,650,651,652,653,681,728],[400,681,728,982,983,984],[400,681,728,984,985],[400,681,728,981,982,983],[400,681,728,786,988],[400,681,728,992,993,994],[681,728,990],[400,681,728,994,995],[400,681,728,991,992,993],[648,681,728,990],[681,728,990,991,992,993,994,996,997],[400,681,728,786],[400,681,728,852,853,854],[400,681,728,854,855],[400,681,728,848,852,853],[681,728,902,903,904,905,907],[400,681,728,903,904,905],[681,728,848],[400,681,728,905,906],[400,681,728,902,903,904],[400,496,681,728,915,954,955],[400,681,728,1007,1008],[400,681,728,1008,1009],[400,681,728,1006,1007],[400,681,728,896,897,898,899],[400,681,728,899,900],[400,681,728,896,897,898],[654,655,656,657,658,660,661,662,681,728],[400,655,656,681,728],[400,656,657,660,661,681,728],[400,654,656,681,728,975],[400,654,655,681,728],[400,658,660,681,728],[400,660,681,728,975],[400,658,659,681,728],[400,663,664,665,681,728],[400,663,664,681,728],[663,664,665,666,667,681,728],[400,665,666,681,728],[648,681,728,889],[648,681,728,891],[681,728,862,890,891,892,893,894,895],[681,728,893,894],[400,681,728,862,890,891,892,893],[400,681,728,893,894],[400,681,728,862,892,893,975],[400,681,728,862,890,891,892],[681,728,799],[648,681,728,795,796],[648,681,728,799],[681,728,795,796],[400,681,728,797],[400,681,728,795,797,798,799,803,804],[681,728,799,800,801,802,803,807,808,809,810,811,1020],[681,728,795],[400,681,728,799,801,802,803,804,805],[400,681,728,794,798,803,805,806,809,810],[400,681,728,799,800,801,802],[400,681,728,1022],[681,728,975,1022,1023,1024],[400,681,728,1022,1023],[400,681,728,790,807,808,809],[400,681,728,799,800,803,807,808],[648,681,728,908],[681,728,908,909,910,911,912,914],[681,728,908],[400,681,728,910,911,912],[681,728,848,908],[400,681,728,912,913],[400,681,728,909,910,911],[648,681,728,812],[681,728,812,813,814,815,816,817,818,819,820,822,823,824,826,1028],[681,728,812,813],[400,681,728,814,815,816,817,818,819,820],[400,681,728,820,821],[400,681,728,812,813,820],[400,681,728,813,814,815,816,817,818,819],[400,681,728,823,824],[400,681,728,824,825],[400,681,728,823],[400,681,728,1031],[400,681,728,1031,1032],[681,728,1031],[681,728,1037],[305,681,728],[55,306,307,308,309,310,311,312,313,314,315,316,317,318,681,728],[258,292,681,728],[265,681,728],[255,305,400,681,728],[323,324,325,326,327,328,329,330,681,728],[260,681,728],[305,400,681,728],[319,322,331,681,728],[320,321,681,728],[296,681,728],[260,261,262,263,681,728],[333,681,728],[278,681,728],[333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,681,728],[361,681,728],[356,357,681,728],[358,360,681,728,758],[54,264,305,332,355,360,362,369,392,397,399,681,728],[60,258,681,728],[59,681,728],[60,250,251,435,440,681,728],[250,258,681,728],[59,249,681,728],[258,371,681,728],[252,373,681,728],[249,253,681,728],[59,305,681,728],[257,258,681,728],[270,681,728],[272,273,274,275,276,681,728],[264,681,728],[264,265,280,284,681,728],[278,279,285,286,287,681,728],[56,57,58,59,60,250,251,252,253,254,255,256,257,258,259,265,270,271,277,284,288,289,290,292,300,301,302,303,304,681,728],[283,681,728],[266,267,268,269,681,728],[258,266,267,681,728],[258,264,265,681,728],[258,268,681,728],[258,296,681,728],[291,293,294,295,296,297,298,299,681,728],[56,258,681,728],[292,681,728],[56,258,291,295,297,681,728],[267,681,728],[293,681,728],[258,292,293,294,681,728],[282,681,728],[258,262,282,300,681,728],[280,281,283,681,728],[254,256,265,271,280,285,301,302,305,681,728],[60,254,256,259,301,302,681,728],[263,681,728],[249,681,728],[282,305,363,367,681,728],[367,368,681,728],[305,363,681,728],[305,363,364,681,728],[364,365,681,728],[364,365,366,681,728],[259,681,728],[384,385,681,728],[384,681,728],[385,386,387,388,389,390,681,728],[383,681,728],[375,385,681,728],[385,386,387,388,389,681,728],[259,384,385,388,681,728],[370,376,377,378,379,380,381,382,391,681,728],[259,305,376,681,728],[259,375,681,728],[259,375,400,681,728],[252,258,259,371,372,373,374,375,681,728],[249,305,371,372,393,681,728],[305,371,681,728],[395,681,728],[332,393,681,728],[393,394,396,681,728],[282,359,681,728],[291,681,728],[264,305,681,728],[398,681,728],[400,681,728,779],[249,669,674,681,728],[668,674,681,728,779,780,781,784],[674,681,728],[675,681,728,777],[669,675,681,728,778],[670,671,672,673,681,728],[681,728,782,783],[674,681,728,779,785],[681,728,785],[280,284,305,400,681,728],[404,681,728],[305,400,424,425,681,728],[406,681,728],[400,418,423,424,681,728],[428,429,681,728],[60,305,419,424,438,681,728],[400,405,431,681,728],[59,400,432,435,681,728],[305,419,424,426,437,439,443,681,728],[59,441,442,681,728],[432,681,728],[249,305,400,446,681,728],[305,400,419,424,426,438,681,728],[445,447,448,681,728],[305,424,681,728],[424,681,728],[305,400,446,681,728],[59,305,400,681,728],[305,400,418,419,424,444,446,449,452,457,458,471,472,681,728],[249,404,681,728],[431,434,473,681,728],[458,470,681,728],[54,405,426,427,430,433,465,470,474,477,481,482,483,485,487,493,495,681,728],[305,400,412,420,423,424,681,728],[305,416,681,728],[305,400,406,415,416,417,418,423,424,426,496,681,728],[418,419,422,424,460,469,681,728],[305,400,411,423,424,681,728],[459,681,728],[400,419,424,681,728],[400,412,419,423,464,681,728],[305,400,406,411,423,681,728],[400,417,418,422,462,466,467,468,681,728],[400,412,419,420,421,423,424,681,728],[258,400,681,728],[305,406,419,422,424,681,728],[423,681,728],[408,409,410,419,423,424,463,681,728],[415,464,475,476,681,728],[400,406,424,681,728],[400,406,681,728],[407,408,409,410,413,415,681,728],[412,681,728],[414,415,681,728],[400,407,408,409,410,413,414,681,728],[450,451,681,728],[305,419,424,426,438,681,728],[461,681,728],[289,681,728],[270,305,478,479,681,728],[480,681,728],[305,426,681,728],[305,419,426,681,728],[283,305,400,412,419,420,421,423,424,681,728],[280,282,305,400,405,419,426,464,482,681,728],[283,284,400,404,484,681,728],[454,455,456,681,728],[400,453,681,728],[486,681,728],[400,681,728,756],[489,491,492,681,728],[488,681,728],[490,681,728],[400,418,423,489,681,728],[436,681,728],[305,400,406,419,423,424,426,461,462,464,465,681,728],[494,681,728],[400,681,728,918,919],[681,728,918,919],[681,728,918],[681,728,932],[400,681,728,918],[681,728,916,917,920,921,922,923,924,925,926,927,928,929,930,931,933,934,935,936,937,938],[681,728,918,943],[54,681,728,939,943,944,945,950,952],[681,728,918,941,942],[681,728,918,940],[400,681,728,943],[681,728,946,947,948,949],[681,728,951],[681,728,953],[681,728,970,971,973,974],[681,728,967,968,972],[681,728,968,971],[461,681,728,971],[296,681,728,971],[283,400,461,465,681,728,969,970,973],[400,419,423,426,464,484,496,681,728],[498,499,500,501,502,503,504,505,507,508,681,728],[305,498,499,681,728],[497,681,728],[500,681,728],[400,496,498,499,500,681,728],[400,497,500,681,728],[400,500,681,728],[400,498,500,681,728],[400,497,498,506,681,728],[681,728,1039,1042],[681,725,728],[681,727,728],[681,728,733,761],[681,728,729,734,739,747,758,769],[681,728,729,730,739,747],[676,677,678,681,728],[681,728,731,770],[681,728,732,733,740,748],[681,728,733,758,766],[681,728,734,736,739,747],[681,727,728,735],[681,728,736,737],[681,728,738,739],[681,727,728,739],[681,728,739,740,741,758,769],[681,728,739,740,741,754,758,761],[681,728,736,739,742,747,758,769],[681,728,739,740,742,743,747,758,766,769],[681,728,742,744,758,766,769],[681,728,739,745],[681,728,746,769,774],[681,728,736,739,747,758],[681,728,748],[681,728,749],[681,727,728,750],[681,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775],[681,728,752],[681,728,753],[681,728,739,754,755],[681,728,754,756,770,772],[681,728,739,758,759,761],[681,728,760,761],[681,728,758,759],[681,728,761],[681,728,762],[681,725,728,758,763],[681,728,739,764,765],[681,728,764,765],[681,728,733,747,758,766],[681,728,767],[728],[679,680,681,682,683,684,685,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775],[681,728,747,768],[681,728,742,753,769],[681,728,733,770],[681,728,758,771],[681,728,746,772],[681,728,773],[681,723,728],[681,723,728,739,741,750,758,761,769,772,774],[681,728,758,775],[543,544,545,546,547,548,549,550,551,681,728],[681,728,879],[681,728,881,882,883,884,885,886,887],[681,728,870],[681,728,871,879,880,888],[681,728,872],[681,728,866],[681,728,863,864,865,866,867,868,869,872,873,874,875,876,877,878],[681,728,871,873],[681,728,874,879],[514,681,728],[515,681,728],[514,515,520,681,728],[516,517,518,519,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,681,728],[515,552,681,728],[515,592,681,728],[510,511,512,513,514,515,520,640,641,642,643,647,681,728],[520,681,728],[512,645,646,681,728],[514,644,681,728],[515,520,681,728],[510,511,681,728],[681,728,776],[681,728,1035,1041],[681,728,742],[681,728,1039],[681,728,1036,1040],[681,728,987],[591,681,728],[681,728,1038],[61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,77,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,180,181,182,184,193,195,196,197,198,199,200,202,203,205,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,681,728],[106,681,728],[64,65,681,728],[61,62,63,65,681,728],[62,65,681,728],[65,106,681,728],[61,65,183,681,728],[63,64,65,681,728],[61,65,681,728],[65,681,728],[64,681,728],[61,64,106,681,728],[62,64,65,222,681,728],[64,65,222,681,728],[64,230,681,728],[62,64,65,681,728],[74,681,728],[97,681,728],[118,681,728],[64,65,106,681,728],[65,113,681,728],[64,65,106,124,681,728],[64,65,124,681,728],[65,165,681,728],[61,65,184,681,728],[190,192,681,728],[61,65,183,190,191,681,728],[183,184,192,681,728],[190,681,728],[61,65,190,191,192,681,728],[206,681,728],[201,681,728],[204,681,728],[62,64,184,185,186,187,681,728],[106,184,185,186,187,681,728],[184,186,681,728],[64,185,186,188,189,193,681,728],[61,64,681,728],[65,208,681,728],[66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,681,728],[194,681,728],[681,695,699,728,769],[681,695,728,758,769],[681,690,728],[681,692,695,728,766,769],[681,728,747,766],[681,690,728,776],[681,692,695,728,747,769],[681,687,688,691,694,728,739,758,769],[681,695,702,728],[681,687,693,728],[681,695,716,717,728],[681,691,695,728,761,769,776],[681,716,728,776],[681,689,690,728,776],[681,695,728],[681,689,690,691,692,693,694,695,696,697,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,717,718,719,720,721,722,728],[681,695,710,728],[681,695,702,703,728],[681,693,695,703,704,728],[681,694,728],[681,687,690,695,728],[681,695,699,703,704,728],[681,699,728],[681,693,695,698,728,769],[681,687,692,695,702,728],[681,728,758],[681,690,695,716,728,774,776],[681,728,832,833,834,835,836,837,838,840,841,842,843,844,845,846,847],[681,728,834],[681,728,834,839],[814,815,816,817,818,819,820],[814,815,816,817,818,819]],"referencedMap":[[958,1],[959,2],[960,3],[957,4],[850,5],[851,6],[849,7],[827,8],[828,8],[829,8],[830,9],[831,9],[860,10],[857,9],[861,11],[858,12],[859,8],[961,13],[401,4],[403,14],[915,15],[402,4],[794,16],[792,17],[787,9],[791,18],[789,18],[790,18],[793,19],[962,20],[788,21],[965,22],[966,23],[976,24],[964,25],[963,9],[652,26],[977,27],[653,28],[978,29],[651,30],[649,8],[979,31],[650,9],[980,9],[985,32],[986,33],[984,34],[982,9],[983,9],[981,9],[989,35],[999,9],[1000,9],[1001,4],[995,36],[991,37],[996,38],[994,39],[992,40],[993,40],[998,41],[990,9],[997,37],[1002,42],[1003,4],[852,9],[853,9],[855,43],[856,44],[854,45],[903,8],[904,8],[1004,46],[1005,9],[906,47],[902,48],[907,49],[905,50],[956,51],[1007,8],[1006,9],[1009,52],[1010,53],[1008,54],[897,8],[898,8],[1011,9],[900,55],[896,48],[901,56],[899,57],[1012,42],[1013,58],[655,9],[658,9],[654,9],[657,59],[662,60],[1014,61],[656,62],[659,9],[661,63],[1015,64],[660,65],[666,66],[665,67],[664,8],[1016,68],[663,9],[667,69],[862,8],[890,70],[892,71],[1017,72],[891,9],[1018,73],[894,74],[895,75],[1019,76],[893,77],[801,8],[808,9],[807,78],[804,79],[802,80],[797,81],[798,82],[805,83],[1021,84],[795,9],[796,85],[799,9],[1020,78],[806,86],[800,78],[811,87],[803,88],[1023,89],[1025,90],[1024,91],[1022,4],[810,92],[809,93],[910,94],[911,94],[1026,95],[908,9],[1027,96],[913,97],[909,98],[914,99],[912,100],[815,101],[817,8],[819,8],[816,101],[818,8],[1029,102],[1028,103],[812,9],[813,9],[821,104],[814,103],[822,105],[1030,106],[820,107],[825,108],[823,9],[826,109],[824,110],[1032,111],[1033,112],[1034,113],[1031,4],[1035,9],[1038,114],[406,9],[317,9],[55,9],[306,115],[307,115],[308,9],[309,4],[319,116],[310,9],[311,117],[312,9],[313,9],[314,115],[315,115],[316,115],[318,118],[326,119],[328,9],[325,9],[331,120],[329,9],[327,9],[323,121],[324,122],[330,9],[332,123],[320,9],[322,124],[321,125],[261,9],[264,126],[260,9],[453,9],[262,9],[263,9],[349,127],[334,127],[341,127],[338,127],[351,127],[342,127],[348,127],[333,128],[352,127],[355,129],[346,127],[336,127],[354,127],[339,127],[337,127],[347,127],[343,127],[353,127],[340,127],[350,127],[335,127],[345,127],[344,127],[362,130],[358,131],[357,9],[356,9],[361,132],[400,133],[56,9],[57,9],[58,9],[435,134],[60,135],[441,136],[440,137],[250,138],[251,135],[371,9],[280,9],[281,9],[372,139],[252,9],[373,9],[374,140],[59,9],[254,141],[255,9],[253,142],[256,141],[257,9],[259,143],[271,144],[272,9],[277,145],[273,9],[274,9],[275,9],[276,9],[278,9],[279,146],[285,147],[288,148],[286,9],[287,9],[305,149],[289,9],[290,9],[484,150],[270,151],[268,152],[266,153],[267,154],[269,9],[297,155],[291,9],[300,156],[293,157],[298,158],[296,159],[299,160],[294,161],[295,162],[283,163],[301,164],[284,165],[303,166],[304,167],[292,9],[258,9],[265,168],[302,169],[368,170],[363,9],[369,171],[364,172],[365,173],[366,174],[367,175],[370,176],[386,177],[385,178],[391,179],[383,9],[384,180],[387,177],[388,181],[390,182],[389,183],[392,184],[377,185],[378,186],[381,187],[380,187],[379,186],[382,186],[376,188],[394,189],[393,190],[396,191],[395,192],[397,193],[359,163],[360,194],[282,9],[398,195],[375,196],[399,197],[668,4],[780,198],[781,199],[785,200],[669,9],[675,201],[778,202],[779,203],[670,9],[671,9],[674,204],[672,9],[673,9],[783,9],[784,205],[782,206],[786,207],[404,208],[405,209],[426,210],[427,211],[428,9],[429,212],[430,213],[439,214],[432,215],[436,216],[444,217],[442,4],[443,218],[433,219],[445,9],[447,220],[448,221],[449,222],[438,223],[434,224],[458,225],[446,226],[473,227],[431,228],[474,229],[471,230],[472,4],[496,231],[421,232],[417,233],[419,234],[470,235],[412,236],[460,237],[459,9],[420,238],[467,239],[424,240],[468,9],[469,241],[422,242],[416,243],[423,244],[418,245],[411,9],[464,246],[477,247],[475,4],[407,4],[463,248],[408,122],[409,211],[410,249],[414,250],[413,251],[476,252],[415,253],[452,254],[450,220],[451,255],[461,122],[462,256],[465,257],[480,258],[481,259],[478,260],[479,261],[482,262],[483,263],[485,264],[457,265],[454,266],[455,115],[456,255],[487,267],[486,268],[493,269],[425,4],[489,270],[488,4],[491,271],[490,9],[492,272],[437,273],[466,274],[495,275],[494,4],[916,9],[917,9],[920,276],[921,9],[922,9],[924,9],[923,9],[938,9],[925,9],[926,277],[927,9],[928,9],[929,278],[930,276],[931,9],[933,279],[934,276],[935,280],[936,278],[937,9],[939,281],[944,282],[953,283],[943,284],[918,9],[932,280],[941,285],[942,9],[940,9],[945,286],[950,287],[946,4],[947,4],[948,4],[949,4],[919,9],[951,9],[952,288],[954,289],[975,290],[973,291],[967,4],[968,9],[972,292],[969,293],[974,294],[971,295],[970,296],[509,297],[500,298],[506,9],[497,9],[498,299],[501,300],[502,4],[503,301],[499,302],[504,303],[505,304],[507,305],[508,9],[1037,9],[987,9],[1043,306],[725,307],[726,307],[727,308],[728,309],[729,310],[730,311],[676,9],[679,312],[677,9],[678,9],[731,313],[732,314],[733,315],[734,316],[735,317],[736,318],[737,318],[738,319],[739,320],[740,321],[741,322],[682,9],[742,323],[743,324],[744,325],[745,326],[746,327],[747,328],[748,329],[749,330],[750,331],[751,332],[752,333],[753,334],[754,335],[755,335],[756,336],[757,9],[758,337],[760,338],[759,339],[761,340],[762,341],[763,342],[764,343],[765,344],[766,345],[767,346],[681,347],[680,9],[776,348],[768,349],[769,350],[770,351],[771,352],[772,353],[773,354],[683,9],[684,9],[685,9],[724,355],[774,356],[775,357],[552,358],[543,9],[544,9],[545,9],[546,9],[547,9],[548,9],[549,9],[550,9],[551,9],[686,9],[1036,9],[880,359],[881,359],[882,359],[888,360],[883,359],[884,359],[885,359],[886,359],[887,359],[871,361],[870,9],[889,362],[877,9],[873,363],[864,9],[863,9],[865,9],[866,359],[867,364],[879,365],[868,359],[869,359],[874,366],[875,367],[876,359],[872,9],[878,9],[513,9],[515,368],[632,369],[636,369],[635,369],[633,369],[634,369],[637,369],[516,369],[528,369],[517,369],[530,369],[532,369],[525,369],[526,369],[527,369],[531,369],[533,369],[518,369],[529,369],[519,369],[521,370],[522,369],[523,369],[524,369],[540,369],[539,369],[640,371],[534,369],[536,369],[535,369],[537,369],[538,369],[639,369],[638,369],[541,369],[553,372],[554,372],[556,369],[601,369],[600,369],[621,369],[557,372],[598,369],[602,369],[558,369],[559,369],[560,372],[603,369],[597,372],[555,372],[604,369],[561,372],[605,369],[562,372],[585,369],[563,369],[606,369],[564,369],[595,372],[566,369],[567,369],[607,369],[569,369],[571,369],[572,369],[578,369],[579,369],[573,372],[609,369],[596,372],[608,372],[574,369],[575,369],[610,369],[576,369],[568,372],[611,369],[594,369],[612,369],[577,372],[580,369],[581,369],[599,372],[613,369],[614,369],[593,373],[570,369],[615,372],[616,369],[617,369],[618,369],[619,372],[582,369],[620,369],[584,372],[586,369],[583,372],[565,369],[587,369],[590,369],[588,369],[589,369],[542,369],[623,369],[622,369],[630,369],[624,369],[625,369],[627,369],[628,369],[626,369],[631,369],[629,369],[648,374],[646,375],[647,376],[645,377],[644,369],[643,378],[512,9],[514,9],[510,9],[641,9],[642,379],[520,368],[511,9],[777,380],[1042,381],[955,382],[1040,383],[1041,384],[988,385],[592,386],[591,9],[1039,387],[54,9],[249,388],[222,9],[200,389],[198,389],[113,390],[64,391],[63,392],[199,393],[184,394],[106,395],[62,396],[61,397],[248,392],[213,398],[212,398],[124,399],[220,390],[221,390],[223,400],[224,390],[225,397],[226,390],[197,390],[227,390],[228,401],[229,390],[230,398],[231,402],[232,390],[233,390],[234,390],[235,390],[236,398],[237,390],[238,390],[239,390],[240,390],[241,403],[242,390],[243,390],[244,390],[245,390],[246,390],[66,397],[67,397],[68,397],[69,397],[70,397],[71,397],[72,397],[73,390],[75,404],[76,397],[74,397],[77,397],[78,397],[79,397],[80,397],[81,397],[82,397],[83,390],[84,397],[85,397],[86,397],[87,397],[88,397],[89,390],[90,397],[91,397],[92,397],[93,397],[94,397],[95,397],[96,390],[98,405],[97,397],[99,397],[100,397],[101,397],[102,397],[103,403],[104,390],[105,390],[119,406],[107,407],[108,397],[109,397],[110,390],[111,397],[112,397],[114,408],[115,397],[116,397],[117,397],[118,397],[120,397],[121,397],[122,397],[123,397],[125,409],[126,397],[127,397],[128,397],[129,390],[130,397],[131,410],[132,410],[133,410],[134,390],[135,397],[136,397],[137,397],[142,397],[138,397],[139,390],[140,397],[141,390],[143,397],[144,397],[145,397],[146,397],[147,397],[148,397],[149,390],[150,397],[151,397],[152,397],[153,397],[154,397],[155,397],[156,397],[157,397],[158,397],[159,397],[160,397],[161,397],[162,397],[163,397],[164,397],[165,397],[166,411],[167,397],[168,397],[169,397],[170,397],[171,397],[172,397],[173,390],[174,390],[175,390],[176,390],[177,390],[178,397],[179,397],[180,397],[181,397],[247,390],[183,412],[206,413],[201,413],[192,414],[190,415],[204,416],[193,417],[207,418],[202,419],[203,416],[205,420],[191,9],[196,9],[188,421],[189,422],[186,9],[187,423],[185,397],[194,424],[65,425],[214,9],[215,9],[216,9],[217,9],[218,9],[219,9],[208,9],[211,398],[210,9],[209,426],[182,427],[195,428],[51,9],[52,9],[9,9],[10,9],[14,9],[13,9],[2,9],[15,9],[16,9],[17,9],[18,9],[19,9],[20,9],[21,9],[22,9],[3,9],[4,9],[23,9],[27,9],[24,9],[25,9],[26,9],[28,9],[29,9],[30,9],[5,9],[31,9],[32,9],[33,9],[34,9],[6,9],[38,9],[35,9],[36,9],[37,9],[39,9],[7,9],[40,9],[45,9],[46,9],[41,9],[42,9],[43,9],[44,9],[8,9],[53,9],[50,9],[47,9],[48,9],[49,9],[1,9],[12,9],[11,9],[702,429],[712,430],[701,429],[722,431],[693,432],[692,433],[721,380],[715,434],[720,435],[695,436],[709,437],[694,438],[718,439],[690,440],[689,380],[719,441],[691,442],[696,443],[697,9],[700,443],[687,9],[723,444],[713,445],[704,446],[705,447],[707,448],[703,449],[706,450],[716,380],[698,451],[699,452],[708,453],[688,454],[711,445],[710,443],[714,9],[717,455],[848,456],[832,9],[833,9],[835,457],[836,9],[834,9],[837,457],[838,457],[840,458],[839,457],[841,457],[842,458],[843,457],[844,9],[845,457],[846,9],[847,9]],"exportedModulesMap":[[958,1],[959,2],[960,3],[957,4],[850,5],[851,6],[849,7],[827,8],[828,8],[829,8],[830,9],[831,9],[860,10],[857,9],[861,11],[858,12],[859,8],[961,13],[401,4],[403,14],[402,4],[794,16],[792,17],[787,9],[791,18],[789,18],[790,18],[793,19],[962,20],[788,21],[965,22],[966,23],[976,24],[964,25],[963,9],[652,26],[977,27],[653,28],[978,29],[651,30],[649,8],[979,31],[650,9],[980,9],[985,32],[986,33],[984,34],[982,9],[983,9],[981,9],[989,35],[999,9],[1000,9],[1001,4],[995,36],[991,37],[996,38],[994,39],[992,40],[993,40],[998,41],[990,9],[997,37],[1002,42],[1003,4],[852,9],[853,9],[855,43],[856,44],[854,45],[903,8],[904,8],[1004,46],[1005,9],[906,47],[902,48],[907,49],[905,50],[1007,8],[1006,9],[1009,52],[1010,53],[1008,54],[897,8],[898,8],[1011,9],[900,55],[896,48],[901,56],[899,57],[1012,42],[1013,58],[655,9],[658,9],[654,9],[657,59],[662,60],[1014,61],[656,62],[659,9],[661,63],[1015,64],[660,65],[666,66],[665,67],[664,8],[1016,68],[663,9],[667,69],[862,8],[890,70],[892,71],[1017,72],[891,9],[1018,73],[894,74],[895,75],[1019,76],[893,77],[801,8],[808,9],[807,78],[804,79],[802,80],[797,81],[798,82],[805,83],[1021,84],[795,9],[796,85],[799,9],[1020,78],[806,86],[800,78],[811,87],[803,88],[1023,89],[1025,90],[1024,91],[1022,4],[810,92],[809,93],[910,94],[911,94],[1026,95],[908,9],[1027,96],[913,97],[909,98],[914,99],[912,100],[815,101],[817,8],[819,8],[816,101],[818,8],[1029,102],[1028,103],[812,9],[813,9],[821,459],[814,103],[820,460],[825,108],[823,9],[826,109],[824,110],[1032,111],[1033,112],[1034,113],[1031,4],[1035,9],[1038,114],[406,9],[317,9],[55,9],[306,115],[307,115],[308,9],[309,4],[319,116],[310,9],[311,117],[312,9],[313,9],[314,115],[315,115],[316,115],[318,118],[326,119],[328,9],[325,9],[331,120],[329,9],[327,9],[323,121],[324,122],[330,9],[332,123],[320,9],[322,124],[321,125],[261,9],[264,126],[260,9],[453,9],[262,9],[263,9],[349,127],[334,127],[341,127],[338,127],[351,127],[342,127],[348,127],[333,128],[352,127],[355,129],[346,127],[336,127],[354,127],[339,127],[337,127],[347,127],[343,127],[353,127],[340,127],[350,127],[335,127],[345,127],[344,127],[362,130],[358,131],[357,9],[356,9],[361,132],[400,133],[56,9],[57,9],[58,9],[435,134],[60,135],[441,136],[440,137],[250,138],[251,135],[371,9],[280,9],[281,9],[372,139],[252,9],[373,9],[374,140],[59,9],[254,141],[255,9],[253,142],[256,141],[257,9],[259,143],[271,144],[272,9],[277,145],[273,9],[274,9],[275,9],[276,9],[278,9],[279,146],[285,147],[288,148],[286,9],[287,9],[305,149],[289,9],[290,9],[484,150],[270,151],[268,152],[266,153],[267,154],[269,9],[297,155],[291,9],[300,156],[293,157],[298,158],[296,159],[299,160],[294,161],[295,162],[283,163],[301,164],[284,165],[303,166],[304,167],[292,9],[258,9],[265,168],[302,169],[368,170],[363,9],[369,171],[364,172],[365,173],[366,174],[367,175],[370,176],[386,177],[385,178],[391,179],[383,9],[384,180],[387,177],[388,181],[390,182],[389,183],[392,184],[377,185],[378,186],[381,187],[380,187],[379,186],[382,186],[376,188],[394,189],[393,190],[396,191],[395,192],[397,193],[359,163],[360,194],[282,9],[398,195],[375,196],[399,197],[668,4],[780,198],[781,199],[785,200],[669,9],[675,201],[778,202],[779,203],[670,9],[671,9],[674,204],[672,9],[673,9],[783,9],[784,205],[782,206],[786,207],[404,208],[405,209],[426,210],[427,211],[428,9],[429,212],[430,213],[439,214],[432,215],[436,216],[444,217],[442,4],[443,218],[433,219],[445,9],[447,220],[448,221],[449,222],[438,223],[434,224],[458,225],[446,226],[473,227],[431,228],[474,229],[471,230],[472,4],[496,231],[421,232],[417,233],[419,234],[470,235],[412,236],[460,237],[459,9],[420,238],[467,239],[424,240],[468,9],[469,241],[422,242],[416,243],[423,244],[418,245],[411,9],[464,246],[477,247],[475,4],[407,4],[463,248],[408,122],[409,211],[410,249],[414,250],[413,251],[476,252],[415,253],[452,254],[450,220],[451,255],[461,122],[462,256],[465,257],[480,258],[481,259],[478,260],[479,261],[482,262],[483,263],[485,264],[457,265],[454,266],[455,115],[456,255],[487,267],[486,268],[493,269],[425,4],[489,270],[488,4],[491,271],[490,9],[492,272],[437,273],[466,274],[495,275],[494,4],[916,9],[917,9],[920,276],[921,9],[922,9],[924,9],[923,9],[938,9],[925,9],[926,277],[927,9],[928,9],[929,278],[930,276],[931,9],[933,279],[934,276],[935,280],[936,278],[937,9],[939,281],[944,282],[953,283],[943,284],[918,9],[932,280],[941,285],[942,9],[940,9],[945,286],[950,287],[946,4],[947,4],[948,4],[949,4],[919,9],[951,9],[952,288],[954,289],[975,290],[973,291],[967,4],[968,9],[972,292],[969,293],[974,294],[971,295],[970,296],[509,297],[500,298],[506,9],[497,9],[498,299],[501,300],[502,4],[503,301],[499,302],[504,303],[505,304],[507,305],[508,9],[1037,9],[987,9],[1043,306],[725,307],[726,307],[727,308],[728,309],[729,310],[730,311],[676,9],[679,312],[677,9],[678,9],[731,313],[732,314],[733,315],[734,316],[735,317],[736,318],[737,318],[738,319],[739,320],[740,321],[741,322],[682,9],[742,323],[743,324],[744,325],[745,326],[746,327],[747,328],[748,329],[749,330],[750,331],[751,332],[752,333],[753,334],[754,335],[755,335],[756,336],[757,9],[758,337],[760,338],[759,339],[761,340],[762,341],[763,342],[764,343],[765,344],[766,345],[767,346],[681,347],[680,9],[776,348],[768,349],[769,350],[770,351],[771,352],[772,353],[773,354],[683,9],[684,9],[685,9],[724,355],[774,356],[775,357],[552,358],[543,9],[544,9],[545,9],[546,9],[547,9],[548,9],[549,9],[550,9],[551,9],[686,9],[1036,9],[880,359],[881,359],[882,359],[888,360],[883,359],[884,359],[885,359],[886,359],[887,359],[871,361],[870,9],[889,362],[877,9],[873,363],[864,9],[863,9],[865,9],[866,359],[867,364],[879,365],[868,359],[869,359],[874,366],[875,367],[876,359],[872,9],[878,9],[513,9],[515,368],[632,369],[636,369],[635,369],[633,369],[634,369],[637,369],[516,369],[528,369],[517,369],[530,369],[532,369],[525,369],[526,369],[527,369],[531,369],[533,369],[518,369],[529,369],[519,369],[521,370],[522,369],[523,369],[524,369],[540,369],[539,369],[640,371],[534,369],[536,369],[535,369],[537,369],[538,369],[639,369],[638,369],[541,369],[553,372],[554,372],[556,369],[601,369],[600,369],[621,369],[557,372],[598,369],[602,369],[558,369],[559,369],[560,372],[603,369],[597,372],[555,372],[604,369],[561,372],[605,369],[562,372],[585,369],[563,369],[606,369],[564,369],[595,372],[566,369],[567,369],[607,369],[569,369],[571,369],[572,369],[578,369],[579,369],[573,372],[609,369],[596,372],[608,372],[574,369],[575,369],[610,369],[576,369],[568,372],[611,369],[594,369],[612,369],[577,372],[580,369],[581,369],[599,372],[613,369],[614,369],[593,373],[570,369],[615,372],[616,369],[617,369],[618,369],[619,372],[582,369],[620,369],[584,372],[586,369],[583,372],[565,369],[587,369],[590,369],[588,369],[589,369],[542,369],[623,369],[622,369],[630,369],[624,369],[625,369],[627,369],[628,369],[626,369],[631,369],[629,369],[648,374],[646,375],[647,376],[645,377],[644,369],[643,378],[512,9],[514,9],[510,9],[641,9],[642,379],[520,368],[511,9],[777,380],[1042,381],[955,382],[1040,383],[1041,384],[988,385],[592,386],[591,9],[1039,387],[54,9],[249,388],[222,9],[200,389],[198,389],[113,390],[64,391],[63,392],[199,393],[184,394],[106,395],[62,396],[61,397],[248,392],[213,398],[212,398],[124,399],[220,390],[221,390],[223,400],[224,390],[225,397],[226,390],[197,390],[227,390],[228,401],[229,390],[230,398],[231,402],[232,390],[233,390],[234,390],[235,390],[236,398],[237,390],[238,390],[239,390],[240,390],[241,403],[242,390],[243,390],[244,390],[245,390],[246,390],[66,397],[67,397],[68,397],[69,397],[70,397],[71,397],[72,397],[73,390],[75,404],[76,397],[74,397],[77,397],[78,397],[79,397],[80,397],[81,397],[82,397],[83,390],[84,397],[85,397],[86,397],[87,397],[88,397],[89,390],[90,397],[91,397],[92,397],[93,397],[94,397],[95,397],[96,390],[98,405],[97,397],[99,397],[100,397],[101,397],[102,397],[103,403],[104,390],[105,390],[119,406],[107,407],[108,397],[109,397],[110,390],[111,397],[112,397],[114,408],[115,397],[116,397],[117,397],[118,397],[120,397],[121,397],[122,397],[123,397],[125,409],[126,397],[127,397],[128,397],[129,390],[130,397],[131,410],[132,410],[133,410],[134,390],[135,397],[136,397],[137,397],[142,397],[138,397],[139,390],[140,397],[141,390],[143,397],[144,397],[145,397],[146,397],[147,397],[148,397],[149,390],[150,397],[151,397],[152,397],[153,397],[154,397],[155,397],[156,397],[157,397],[158,397],[159,397],[160,397],[161,397],[162,397],[163,397],[164,397],[165,397],[166,411],[167,397],[168,397],[169,397],[170,397],[171,397],[172,397],[173,390],[174,390],[175,390],[176,390],[177,390],[178,397],[179,397],[180,397],[181,397],[247,390],[183,412],[206,413],[201,413],[192,414],[190,415],[204,416],[193,417],[207,418],[202,419],[203,416],[205,420],[191,9],[196,9],[188,421],[189,422],[186,9],[187,423],[185,397],[194,424],[65,425],[214,9],[215,9],[216,9],[217,9],[218,9],[219,9],[208,9],[211,398],[210,9],[209,426],[182,427],[195,428],[51,9],[52,9],[9,9],[10,9],[14,9],[13,9],[2,9],[15,9],[16,9],[17,9],[18,9],[19,9],[20,9],[21,9],[22,9],[3,9],[4,9],[23,9],[27,9],[24,9],[25,9],[26,9],[28,9],[29,9],[30,9],[5,9],[31,9],[32,9],[33,9],[34,9],[6,9],[38,9],[35,9],[36,9],[37,9],[39,9],[7,9],[40,9],[45,9],[46,9],[41,9],[42,9],[43,9],[44,9],[8,9],[53,9],[50,9],[47,9],[48,9],[49,9],[1,9],[12,9],[11,9],[702,429],[712,430],[701,429],[722,431],[693,432],[692,433],[721,380],[715,434],[720,435],[695,436],[709,437],[694,438],[718,439],[690,440],[689,380],[719,441],[691,442],[696,443],[697,9],[700,443],[687,9],[723,444],[713,445],[704,446],[705,447],[707,448],[703,449],[706,450],[716,380],[698,451],[699,452],[708,453],[688,454],[711,445],[710,443],[714,9],[717,455],[848,456],[832,9],[833,9],[835,457],[836,9],[834,9],[837,457],[838,457],[840,458],[839,457],[841,457],[842,458],[843,457],[844,9],[845,457],[846,9],[847,9]],"semanticDiagnosticsPerFile":[958,959,960,957,850,851,849,827,828,829,830,831,860,857,861,858,859,961,401,403,915,402,[794,[{"file":"../src/auth/auth.module.ts","start":67,"length":13,"messageText":"Cannot find module '@nestjs/jwt' or its corresponding type declarations.","category":1,"code":2307}]],792,787,[791,[{"file":"../src/auth/guards/jwt-admin.guard.ts","start":157,"length":13,"messageText":"Cannot find module '@nestjs/jwt' or its corresponding type declarations.","category":1,"code":2307}]],[789,[{"file":"../src/auth/guards/jwt-learner.guard.ts","start":157,"length":13,"messageText":"Cannot find module '@nestjs/jwt' or its corresponding type declarations.","category":1,"code":2307}]],[790,[{"file":"../src/auth/guards/jwt-tutor.guard.ts","start":157,"length":13,"messageText":"Cannot find module '@nestjs/jwt' or its corresponding type declarations.","category":1,"code":2307}]],793,962,788,965,966,976,964,963,652,977,653,978,651,649,979,650,980,985,986,984,982,983,981,989,999,[1000,[{"file":"../src/courses/audit/audit.module.ts","start":31,"length":28,"messageText":"Cannot find module './logging/audit-log.module' or its corresponding type declarations.","category":1,"code":2307},{"file":"../src/courses/audit/audit.module.ts","start":63,"length":6,"messageText":"Cannot find name 'Module'. Did you mean 'module'?","category":1,"code":2552,"relatedInformation":[{"file":"../../node_modules/.pnpm/@types+node@20.19.37/node_modules/@types/node/module.d.ts","start":22726,"length":6,"messageText":"'module' is declared here.","category":3,"code":2728}]}]],1001,995,991,996,994,992,993,998,990,997,[1002,[{"file":"../src/database/database.module.ts","start":141,"length":17,"messageText":"Cannot find module '@nestjs/typeorm' or its corresponding type declarations.","category":1,"code":2307}]],1003,852,853,855,856,854,903,904,1004,1005,906,902,907,905,956,1007,1006,1009,1010,1008,897,898,1011,900,896,901,899,1012,1013,655,658,654,657,662,1014,656,659,661,1015,660,666,665,664,1016,663,667,862,890,[892,[{"file":"../src/social/dto/update-moderation.dto.ts","start":205,"length":16,"messageText":"'ModerationStatus' only refers to a type, but is being used as a value here.","category":1,"code":2693}]],1017,891,1018,894,895,1019,893,801,808,807,804,802,797,798,805,1021,795,796,799,1020,806,800,811,803,1023,1025,1024,1022,[810,[{"file":"../src/submissions/tutor-review.controller.ts","start":438,"length":15,"messageText":"Module '\"../auth/guards/jwt-tutor.guard\"' has no exported member 'TutorJwtPayload'.","category":1,"code":2305}]],809,910,911,1026,908,1027,913,909,914,912,815,817,819,816,818,1029,1028,812,813,821,814,822,1030,820,825,823,826,824,1032,1033,1034,1031,1035,1038,406,317,55,306,307,308,309,319,310,311,312,313,314,315,316,318,326,328,325,331,329,327,323,324,330,332,320,322,321,261,264,260,453,262,263,349,334,341,338,351,342,348,333,352,355,346,336,354,339,337,347,343,353,340,350,335,345,344,362,358,357,356,361,400,56,57,58,435,60,441,440,250,251,371,280,281,372,252,373,374,59,254,255,253,256,257,259,271,272,277,273,274,275,276,278,279,285,288,286,287,305,289,290,484,270,268,266,267,269,297,291,300,293,298,296,299,294,295,283,301,284,303,304,292,258,265,302,368,363,369,364,365,366,367,370,386,385,391,383,384,387,388,390,389,392,377,378,381,380,379,382,376,394,393,396,395,397,359,360,282,398,375,399,668,780,781,785,669,675,778,779,670,671,674,672,673,783,784,782,786,404,405,426,427,428,429,430,439,432,436,444,442,443,433,445,447,448,449,438,434,458,446,473,431,474,471,472,496,421,417,419,470,412,460,459,420,467,424,468,469,422,416,423,418,411,464,477,475,407,463,408,409,410,414,413,476,415,452,450,451,461,462,465,480,481,478,479,482,483,485,457,454,455,456,487,486,493,425,489,488,491,490,492,437,466,495,494,916,917,920,921,922,924,923,938,925,926,927,928,929,930,931,933,934,935,936,937,939,944,953,943,918,932,941,942,940,945,950,946,947,948,949,919,951,952,954,975,973,967,968,972,969,974,971,970,509,500,506,497,498,501,502,503,499,504,505,507,508,1037,987,1043,725,726,727,728,729,730,676,679,677,678,731,732,733,734,735,736,737,738,739,740,741,682,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,760,759,761,762,763,764,765,766,767,681,680,776,768,769,770,771,772,773,683,684,685,724,774,775,552,543,544,545,546,547,548,549,550,551,686,1036,880,881,882,888,883,884,885,886,887,871,870,889,877,873,864,863,865,866,867,879,868,869,874,875,876,872,878,513,515,632,636,635,633,634,637,516,528,517,530,532,525,526,527,531,533,518,529,519,521,522,523,524,540,539,640,534,536,535,537,538,639,638,541,553,554,556,601,600,621,557,598,602,558,559,560,603,597,555,604,561,605,562,585,563,606,564,595,566,567,607,569,571,572,578,579,573,609,596,608,574,575,610,576,568,611,594,612,577,580,581,599,613,614,593,570,615,616,617,618,619,582,620,584,586,583,565,587,590,588,589,542,623,622,630,624,625,627,628,626,631,629,648,646,647,645,644,643,512,514,510,641,642,520,511,777,1042,955,1040,1041,988,592,591,1039,54,249,222,200,198,113,64,63,199,184,106,62,61,248,213,212,124,220,221,223,224,225,226,197,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,66,67,68,69,70,71,72,73,75,76,74,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,98,97,99,100,101,102,103,104,105,119,107,108,109,110,111,112,114,115,116,117,118,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,142,138,139,140,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,247,183,206,201,192,190,204,193,207,202,203,205,191,196,188,189,186,187,185,194,65,214,215,216,217,218,219,208,211,210,209,182,195,51,52,9,10,14,13,2,15,16,17,18,19,20,21,22,3,4,23,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,53,50,47,48,49,1,12,11,702,712,701,722,693,692,721,715,720,695,709,694,718,690,689,719,691,696,697,700,687,723,713,704,705,707,703,706,716,698,699,708,688,711,710,714,717,848,832,833,835,836,834,837,838,840,839,841,842,843,844,845,846,847],"affectedFilesPendingEmit":[958,959,960,957,850,851,849,827,828,829,830,831,860,857,861,858,859,961,401,403,915,402,794,792,787,791,789,790,793,962,788,965,966,976,964,963,652,977,653,978,651,649,979,650,980,985,986,984,982,983,981,989,999,1000,1001,995,991,996,994,992,993,998,990,997,1002,1003,852,853,855,856,854,903,904,1004,1005,906,902,907,905,956,1007,1006,1009,1010,1008,897,898,1011,900,896,901,899,1012,1013,655,658,654,657,662,1014,656,659,661,1015,660,666,665,664,1016,663,667,862,890,892,1017,891,1018,894,895,1019,893,801,808,807,804,802,797,798,805,1021,795,796,799,1020,806,800,811,803,1023,1025,1024,1022,810,809,910,911,1026,908,1027,913,909,914,912,815,817,819,816,818,1029,1028,812,813,821,814,822,1030,820,825,823,826,824,1032,1033,1034,1031]},"version":"5.3.3"} \ No newline at end of file diff --git a/BackendAcademy/package-lock.json b/BackendAcademy/package-lock.json index ca4d53286..0e41a8f09 100644 --- a/BackendAcademy/package-lock.json +++ b/BackendAcademy/package-lock.json @@ -22,6 +22,7 @@ "class-validator": "^0.14.0", "helmet": "^8.1.0", "joi": "^17.13.4", + "multer": "^1.4.5-lts.1", "prom-client": "^15.1.3", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", @@ -32,6 +33,7 @@ "@nestjs/cli": "^10.0.0", "@nestjs/testing": "^10.0.0", "@types/jest": "^30.0.0", + "@types/multer": "^1.4.12", "@types/node": "^20.0.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", @@ -39,7 +41,8 @@ "jest": "^29.7.0", "ts-jest": "^29.1.0", "ts-node": "^10.9.0", - "typescript": "^5.2.2" + "typescript": "^5.2.2", + "typescript-eslint": "^7.18.0" } }, "node_modules/@angular-devkit/core": { @@ -1616,6 +1619,39 @@ "@nestjs/core": "^10.0.0" } }, + "node_modules/@nestjs/platform-express/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/multer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", + "object-assign": "^4.1.1", + "type-is": "^1.6.18", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/@nestjs/schematics": { "version": "10.2.3", "dev": true, @@ -1938,6 +1974,27 @@ "@babel/types": "^7.28.2" } }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/eslint": { "version": "9.6.1", "dev": true, @@ -1961,6 +2018,31 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "dev": true, @@ -1969,6 +2051,13 @@ "@types/node": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "dev": true, @@ -2200,6 +2289,16 @@ "@types/node": "*" } }, + "node_modules/@types/multer": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.13.tgz", + "integrity": "sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/node": { "version": "20.19.43", "license": "MIT", @@ -2207,11 +2306,46 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/semver": { "version": "7.7.1", "dev": true, "license": "MIT" }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "dev": true, @@ -3520,18 +3654,56 @@ "license": "MIT" }, "node_modules/concat-stream": { - "version": "2.0.0", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "engines": [ - "node >= 6.0" + "node >= 0.8" ], "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", - "readable-stream": "^3.0.2", + "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/consola": { "version": "2.15.3", "license": "MIT" @@ -3571,7 +3743,6 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/cors": { @@ -6438,19 +6609,22 @@ "license": "MIT" }, "node_modules/multer": { - "version": "2.0.2", + "version": "1.4.5-lts.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.2.tgz", + "integrity": "sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==", + "deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.", "license": "MIT", "dependencies": { "append-field": "^1.0.0", - "busboy": "^1.6.0", - "concat-stream": "^2.0.0", - "mkdirp": "^0.5.6", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", "object-assign": "^4.1.1", - "type-is": "^1.6.18", - "xtend": "^4.0.2" + "type-is": "^1.6.4", + "xtend": "^4.0.0" }, "engines": { - "node": ">= 10.16.0" + "node": ">= 6.0.0" } }, "node_modules/mute-stream": { @@ -6905,6 +7079,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" "node_modules/prom-client": { "version": "15.1.3", "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz", @@ -8297,6 +8476,8 @@ }, "node_modules/typedarray": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "license": "MIT" }, "node_modules/typeorm": { @@ -8504,6 +8685,242 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.18.0.tgz", + "integrity": "sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/uglify-js": { "version": "3.19.3", "dev": true, diff --git a/BackendAcademy/package.json b/BackendAcademy/package.json index 46950d34c..6f0a84109 100644 --- a/BackendAcademy/package.json +++ b/BackendAcademy/package.json @@ -25,6 +25,7 @@ "class-validator": "^0.14.0", "helmet": "^8.1.0", "joi": "^17.13.4", + "multer": "^1.4.5-lts.1", "prom-client": "^15.1.3", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", @@ -35,6 +36,7 @@ "@nestjs/cli": "^10.0.0", "@nestjs/testing": "^10.0.0", "@types/jest": "^30.0.0", + "@types/multer": "^1.4.12", "@types/node": "^20.0.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", @@ -42,6 +44,7 @@ "jest": "^29.7.0", "ts-jest": "^29.1.0", "ts-node": "^10.9.0", - "typescript": "^5.2.2" + "typescript": "^5.2.2", + "typescript-eslint": "^7.18.0" } } diff --git a/BackendAcademy/src/app.module.ts b/BackendAcademy/src/app.module.ts index 80d2630e2..caade999b 100644 --- a/BackendAcademy/src/app.module.ts +++ b/BackendAcademy/src/app.module.ts @@ -25,6 +25,7 @@ import { LoggingModule } from './logging/logging.module'; import { ProgressModule } from './courses/progress/progress.module'; import { AppConfigModule } from './config/config.module'; import { ContractsModule } from './contracts/contracts.module'; +import { AssetsModule } from './assets/assets.module'; import { PathfindingModule } from './pathfinding/pathfinding.module'; import { MonitoringModule } from './monitoring/monitoring.module'; import { SearchModule } from './search/search.module'; @@ -57,6 +58,7 @@ import { SessionsModule } from './sessions/sessions.module'; OnboardingModule, LessonModule, TaskModule, + AssetsModule, JobsModule, LoggingModule, PathfindingModule, diff --git a/BackendAcademy/src/assets/assets.controller.spec.ts b/BackendAcademy/src/assets/assets.controller.spec.ts new file mode 100644 index 000000000..828ff3bfe --- /dev/null +++ b/BackendAcademy/src/assets/assets.controller.spec.ts @@ -0,0 +1,123 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AssetsController } from './assets.controller'; +import { AssetsService } from './assets.service'; +import { NotFoundException } from '@nestjs/common'; +import type { Asset, AssetListResponse } from './interfaces/asset.interface'; + +describe('AssetsController', () => { + let controller: AssetsController; + let service: jest.Mocked; + + const sampleAsset: Asset = { + id: '11111111-1111-4111-8111-111111111111', + filename: 'asset-11111111-1111-4111-8111-111111111111.txt', + originalName: 'sample.txt', + mimeType: 'text/plain', + size: 12, + uploadedAt: '2025-01-01T00:00:00.000Z', + url: '/api/v1/assets/11111111-1111-4111-8111-111111111111/download', + name: 'Sample', + }; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [AssetsController], + providers: [ + { + provide: AssetsService, + useValue: { + list: jest.fn(), + findById: jest.fn(), + openReadStream: jest.fn(), + registerBuffer: jest.fn(), + remove: jest.fn(), + }, + }, + ], + }).compile(); + + controller = module.get(AssetsController); + service = module.get(AssetsService) as jest.Mocked; + }); + + it('lists assets with newest sort by default', () => { + const response: AssetListResponse = { total: 1, assets: [sampleAsset] }; + service.list.mockReturnValue(response); + + expect(controller.list(undefined)).toEqual(response); + expect(service.list).toHaveBeenCalledWith('newest'); + }); + + it('passes through explicit sort orders', () => { + service.list.mockReturnValue({ total: 0, assets: [] }); + + controller.list('oldest'); + expect(service.list).toHaveBeenLastCalledWith('oldest'); + + controller.list('name'); + expect(service.list).toHaveBeenLastCalledWith('name'); + + controller.list('bogus'); + expect(service.list).toHaveBeenLastCalledWith('newest'); + }); + + it('looks up an asset by id', () => { + service.findById.mockReturnValue(sampleAsset); + expect(controller.findOne(sampleAsset.id)).toEqual(sampleAsset); + }); + + it('returns an open stream when downloading an asset', async () => { + service.findById.mockReturnValue(sampleAsset); + + const stream = { on: jest.fn(), pipe: jest.fn() } as unknown as NodeJS.ReadableStream & { + on: jest.Mock; + pipe: jest.Mock; + }; + service.openReadStream.mockResolvedValue(stream as never); + + const result = await controller.download(sampleAsset.id); + + expect(result).toBeDefined(); + expect(service.openReadStream).toHaveBeenCalledWith(sampleAsset.id); + }); + + it('propagates NotFoundException on download for missing assets', async () => { + service.findById.mockImplementation(() => { + throw new NotFoundException(`Asset 'missing' not found`); + }); + + await expect( + controller.download('22222222-2222-4222-8222-222222222222'), + ).rejects.toThrow(NotFoundException); + }); + + it('registers an upload through the service', async () => { + const file = { + buffer: Buffer.from('hello'), + originalname: 'hello.txt', + mimetype: 'text/plain', + size: 5, + } as unknown as Express.Multer.File; + const dto = { name: 'Hello', description: 'A greeting' }; + + service.registerBuffer.mockResolvedValue(sampleAsset); + + const result = await controller.upload(file, dto); + + expect(result).toEqual(sampleAsset); + expect(service.registerBuffer).toHaveBeenCalledWith({ + buffer: file.buffer, + originalName: file.originalname, + mimeType: file.mimetype, + size: file.size, + name: dto.name, + description: dto.description, + }); + }); + + it('removes an asset via the service', async () => { + service.remove.mockResolvedValue(undefined); + await controller.remove(sampleAsset.id); + expect(service.remove).toHaveBeenCalledWith(sampleAsset.id); + }); +}); diff --git a/BackendAcademy/src/assets/assets.controller.ts b/BackendAcademy/src/assets/assets.controller.ts new file mode 100644 index 000000000..4386cf8cb --- /dev/null +++ b/BackendAcademy/src/assets/assets.controller.ts @@ -0,0 +1,162 @@ +import { + Controller, + Delete, + Get, + HttpCode, + HttpStatus, + Param, + ParseUUIDPipe, + Post, + Query, + StreamableFile, + UploadedFile, + UseInterceptors, + Body, +} from '@nestjs/common'; +import { FileInterceptor } from '@nestjs/platform-express'; +import { + ApiBody, + ApiConsumes, + ApiOperation, + ApiParam, + ApiProduces, + ApiQuery, + ApiResponse, + ApiTags, +} from '@nestjs/swagger'; +import { memoryStorage } from 'multer'; + +import { AssetsService } from './assets.service'; +import { UploadAssetDto } from './dto/upload-asset.dto'; +import type { Asset, AssetListResponse, AssetSortOrder } from './interfaces/asset.interface'; + +/** + * REST surface for stored (uploaded) assets. Static, prebuilt assets are + * served separately via `app.useStaticAssets()` mounted in `main.ts` so + * that read-only directory does not flow through this controller. + */ +@ApiTags('assets') +@Controller('assets') +export class AssetsController { + constructor(private readonly assetsService: AssetsService) {} + + /** + * `GET /assets` — list all stored assets, optionally sorted. + */ + @Get() + @ApiOperation({ summary: 'List stored assets' }) + @ApiQuery({ + name: 'sort', + required: false, + enum: ['newest', 'oldest', 'name'], + description: 'Sort order; defaults to `newest`.', + }) + @ApiResponse({ status: 200, description: 'List of asset metadata.' }) + list(@Query('sort') sort?: string): AssetListResponse { + const normalized: AssetSortOrder = + sort === 'oldest' || sort === 'name' ? sort : 'newest'; + return this.assetsService.list(normalized); + } + + /** + * `GET /assets/:id` — fetch metadata for a single asset. + */ + @Get(':id') + @ApiOperation({ summary: 'Get asset metadata' }) + @ApiParam({ name: 'id', format: 'uuid' }) + @ApiResponse({ status: 200, description: 'Asset metadata found.' }) + @ApiResponse({ status: 404, description: 'Asset not found.' }) + findOne(@Param('id', new ParseUUIDPipe()) id: string): Asset { + return this.assetsService.findById(id); + } + + /** + * `GET /assets/:id/download` — stream the asset content back to the + * client. `Content-Type`, length and disposition are attached directly + * to the `StreamableFile` so we avoid mixing `@Res` directives with the + * controller return value. + */ + @Get(':id/download') + @ApiOperation({ summary: 'Download asset content' }) + @ApiProduces('application/octet-stream', 'image/*', 'video/*', 'audio/*') + @ApiParam({ name: 'id', format: 'uuid' }) + @ApiResponse({ status: 200, description: 'Asset content stream.' }) + @ApiResponse({ status: 404, description: 'Asset not found.' }) + async download( + @Param('id', new ParseUUIDPipe()) id: string, + ): Promise { + const asset = this.assetsService.findById(id); + const stream = await this.assetsService.openReadStream(id); + + return new StreamableFile(stream, { + type: asset.mimeType, + length: asset.size, + disposition: `attachment; filename="${asset.originalName.replace(/"/g, '')}"`, + }); + } + + /** + * `POST /assets` — upload a new asset via `multipart/form-data`. + * + * The accompanying text fields are validated against `UploadAssetDto` + * by the global `ValidationPipe`. + */ + @Post() + @HttpCode(HttpStatus.CREATED) + @UseInterceptors( + FileInterceptor('file', { + // Buffer the upload in memory; the service persists the buffer to + // disk. This keeps the controller-bound storage configuration free + // of synchronous filesystem calls and is easier to test. + storage: memoryStorage(), + limits: { + fileSize: + Number(process.env.ASSETS_MAX_SIZE_MB ?? 10) * 1024 * 1024, + }, + }), + ) + @ApiConsumes('multipart/form-data') + @ApiBody({ + schema: { + type: 'object', + properties: { + file: { type: 'string', format: 'binary' }, + name: { type: 'string', nullable: true }, + description: { type: 'string', nullable: true }, + }, + required: ['file'], + }, + }) + @ApiOperation({ summary: 'Upload an asset' }) + @ApiResponse({ status: 201, description: 'Asset successfully stored.' }) + @ApiResponse({ status: 400, description: 'Invalid asset payload.' }) + async upload( + @UploadedFile() file: Express.Multer.File, + @Body() dto: UploadAssetDto, + ): Promise { + if (!file) { + throw new Error('No file provided under field "file"'); + } + return this.assetsService.registerBuffer({ + buffer: file.buffer, + originalName: file.originalname, + mimeType: file.mimetype || 'application/octet-stream', + size: file.size, + name: dto.name, + description: dto.description, + }); + } + + /** + * `DELETE /assets/:id` — remove an asset and its underlying file. + */ + @Delete(':id') + @HttpCode(HttpStatus.NO_CONTENT) + @ApiOperation({ summary: 'Delete an asset' }) + @ApiParam({ name: 'id', format: 'uuid' }) + @ApiResponse({ status: 204, description: 'Asset removed.' }) + @ApiResponse({ status: 404, description: 'Asset not found.' }) + async remove(@Param('id', new ParseUUIDPipe()) id: string): Promise { + await this.assetsService.remove(id); + } +} diff --git a/BackendAcademy/src/assets/assets.module.ts b/BackendAcademy/src/assets/assets.module.ts new file mode 100644 index 000000000..7558cd6d3 --- /dev/null +++ b/BackendAcademy/src/assets/assets.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { AssetsController } from './assets.controller'; +import { AssetsService } from './assets.service'; + +/** + * Module exposing asset upload, metadata, download, and delete endpoints + * to the rest of the BackendAcademy application. + */ +@Module({ + controllers: [AssetsController], + providers: [AssetsService], + exports: [AssetsService], +}) +export class AssetsModule {} diff --git a/BackendAcademy/src/assets/assets.service.spec.ts b/BackendAcademy/src/assets/assets.service.spec.ts new file mode 100644 index 000000000..613b43388 --- /dev/null +++ b/BackendAcademy/src/assets/assets.service.spec.ts @@ -0,0 +1,197 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ConfigService } from '@nestjs/config'; +import { BadRequestException, NotFoundException } from '@nestjs/common'; +import { promises as fs } from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; + +import { AssetsService } from './assets.service'; + +describe('AssetsService', () => { + let service: AssetsService; + let tmpDir: string; + let originalUploadDir: string | undefined; + let originalBaseUrl: string | undefined; + let originalMaxMb: string | undefined; + + beforeEach(async () => { + tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'assets-spec-')); + originalUploadDir = process.env.ASSETS_UPLOAD_DIR; + originalBaseUrl = process.env.ASSETS_BASE_URL; + originalMaxMb = process.env.ASSETS_MAX_SIZE_MB; + process.env.ASSETS_UPLOAD_DIR = tmpDir; + process.env.ASSETS_MAX_SIZE_MB = '5'; + process.env.ASSETS_BASE_URL = '/api/v1/assets'; + + const module: TestingModule = await Test.createTestingModule({ + providers: [ + AssetsService, + { + provide: ConfigService, + useValue: { + get: (key: string) => { + if (key === 'ASSETS_UPLOAD_DIR') return tmpDir; + if (key === 'ASSETS_MAX_SIZE_MB') return '5'; + if (key === 'ASSETS_BASE_URL') return '/api/v1/assets'; + return undefined; + }, + }, + }, + ], + }).compile(); + + service = module.get(AssetsService); + // Allow the eager mkdir inside the service constructor to settle. + await new Promise((resolve) => setImmediate(resolve)); + }); + + afterEach(async () => { + process.env.ASSETS_UPLOAD_DIR = originalUploadDir; + process.env.ASSETS_BASE_URL = originalBaseUrl; + process.env.ASSETS_MAX_SIZE_MB = originalMaxMb; + await fs.rm(tmpDir, { recursive: true, force: true }); + }); + + it('persists a buffered upload and exposes metadata', async () => { + const asset = await service.registerBuffer({ + buffer: Buffer.from('hello world'), + originalName: 'greeting.txt', + mimeType: 'text/plain', + size: 11, + name: 'Greeting', + description: 'A small text greeting', + }); + + expect(asset.id).toMatch( + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, + ); + expect(asset.size).toBe(11); + expect(asset.originalName).toBe('greeting.txt'); + expect(asset.url).toBe(`/api/v1/assets/${asset.id}/download`); + expect(asset.name).toBe('Greeting'); + expect(asset.description).toBe('A small text greeting'); + + const onDisk = path.join(tmpDir, asset.filename); + const written = await fs.readFile(onDisk, 'utf-8'); + expect(written).toBe('hello world'); + }); + + it('rejects uploads with disallowed MIME types', async () => { + await expect( + service.registerBuffer({ + buffer: Buffer.from('???'), + originalName: 'script.bin', + mimeType: 'application/x-msdos-program', + size: 3, + }), + ).rejects.toThrow(BadRequestException); + }); + + it('rejects zero-byte and over-limit uploads', async () => { + await expect( + service.registerBuffer({ + buffer: Buffer.alloc(0), + originalName: 'empty.bin', + mimeType: 'image/png', + size: 0, + }), + ).rejects.toThrow(BadRequestException); + + await expect( + service.registerBuffer({ + buffer: Buffer.alloc(6 * 1024 * 1024), + originalName: 'big.png', + mimeType: 'image/png', + size: 6 * 1024 * 1024, + }), + ).rejects.toThrow(BadRequestException); + }); + + it('lists assets newest first by default', async () => { + const first = await service.registerBuffer({ + buffer: Buffer.from('1'), + originalName: 'a.txt', + mimeType: 'text/plain', + size: 1, + }); + // Force the second upload to have a strictly newer timestamp. + await new Promise((resolve) => setTimeout(resolve, 5)); + const second = await service.registerBuffer({ + buffer: Buffer.from('2'), + originalName: 'b.txt', + mimeType: 'text/plain', + size: 1, + }); + + const newest = service.list(); + expect(newest.total).toBe(2); + expect(newest.assets[0].id).toBe(second.id); + expect(newest.assets[1].id).toBe(first.id); + + const oldest = service.list('oldest'); + expect(oldest.assets[0].id).toBe(first.id); + + const byName = service.list('name'); + expect(byName.assets[0].originalName).toBe('a.txt'); + expect(byName.assets[1].originalName).toBe('b.txt'); + }); + + it('throws NotFoundException for lookups of unknown assets', () => { + expect(() => service.findById('11111111-1111-4111-8111-111111111111')).toThrow( + NotFoundException, + ); + }); + + it('deletes an asset and removes its file from disk', async () => { + const asset = await service.registerBuffer({ + buffer: Buffer.from('bye'), + originalName: 'bye.txt', + mimeType: 'text/plain', + size: 3, + }); + + const onDisk = path.join(tmpDir, asset.filename); + await expect(fs.access(onDisk)).resolves.toBeUndefined(); + + await service.remove(asset.id); + await expect(fs.access(onDisk)).rejects.toThrow(); + + expect(() => service.findById(asset.id)).toThrow(NotFoundException); + }); + + it('produces a sanitized filename that contains the asset id', async () => { + const asset = await service.registerBuffer({ + buffer: Buffer.from('x'), + originalName: '../etc/passwd', + mimeType: 'text/plain', + size: 1, + }); + expect(asset.filename).not.toContain('..'); + expect(asset.filename).not.toContain('/'); + expect(asset.filename).toContain(asset.id); + }); + + it('uses the default size limit when ASSETS_MAX_SIZE_MB is invalid', async () => { + const altTmp = await fs.mkdtemp(path.join(os.tmpdir(), 'assets-spec-alt-')); + const module: TestingModule = await Test.createTestingModule({ + providers: [ + AssetsService, + { + provide: ConfigService, + useValue: { + get: (key: string) => { + if (key === 'ASSETS_UPLOAD_DIR') return altTmp; + if (key === 'ASSETS_MAX_SIZE_MB') return 'not-a-number'; + if (key === 'ASSETS_BASE_URL') return '/api/v1/assets'; + return undefined; + }, + }, + }, + ], + }).compile(); + + const altService = module.get(AssetsService); + expect(altService.getMaxSizeBytes()).toBe(10 * 1024 * 1024); + await fs.rm(altTmp, { recursive: true, force: true }); + }); +}); diff --git a/BackendAcademy/src/assets/assets.service.ts b/BackendAcademy/src/assets/assets.service.ts new file mode 100644 index 000000000..230b531ec --- /dev/null +++ b/BackendAcademy/src/assets/assets.service.ts @@ -0,0 +1,322 @@ +import { + BadRequestException, + Injectable, + Logger, + NotFoundException, + OnModuleDestroy, +} from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { promises as fs, createReadStream, type ReadStream } from 'node:fs'; +import * as path from 'node:path'; +import { randomUUID } from 'node:crypto'; +import type { + Asset, + AssetListResponse, + AssetSortOrder, +} from './interfaces/asset.interface'; + +/** + * Default cap (in bytes) on the size of a single uploaded asset when the + * operator does not set `ASSETS_MAX_SIZE_MB` (10 MB). + */ +const DEFAULT_MAX_SIZE_BYTES = 10 * 1024 * 1024; + +/** + * Maximum number of characters permitted in a stored filename before it is + * truncated. Keeps `route` and `fs` operations inside reasonable bounds. + */ +const MAX_FILENAME_LENGTH = 200; + +/** + * Default directory (relative to the process working directory) where + * uploaded assets are persisted when `ASSETS_UPLOAD_DIR` is unset. + */ +const DEFAULT_UPLOAD_DIR = './data/uploads'; + +/** + * Set of MIME types accepted by the upload endpoint by default. Operators + * may override the cap via `ASSETS_MAX_SIZE_MB`; the allow-list itself is + * intentionally fixed for the placeholder backend. + */ +const ALLOWED_MIME_PREFIXES = ['image/', 'video/', 'audio/', 'application/pdf', 'text/']; + +/** + * Service responsible for persisting uploaded assets, maintaining their + * metadata, and resolving them for download. + * + * NOTE: for the placeholder backend we keep the metadata in-memory in a + * `Map`. This means metadata is reset on every process restart. The + * physical files on disk survive restarts because they are evicted via + * `cleanupOrphanedFiles` on module shutdown. + */ +@Injectable() +export class AssetsService implements OnModuleDestroy { + private readonly logger = new Logger(AssetsService.name); + private readonly uploadDir: string; + private readonly baseUrl: string; + private readonly maxSizeBytes: number; + private readonly registry = new Map(); + + constructor(private readonly configService: ConfigService) { + this.uploadDir = path.resolve( + this.configService.get('ASSETS_UPLOAD_DIR') ?? DEFAULT_UPLOAD_DIR, + ); + this.baseUrl = + this.configService.get('ASSETS_BASE_URL') ?? '/api/v1/assets'; + this.maxSizeBytes = this.resolveMaxSizeBytes(); + + // Eagerly create the upload directory so first uploads do not race. + void fs + .mkdir(this.uploadDir, { recursive: true }) + .catch((err: unknown) => + this.logger.error( + `Failed to prepare upload directory ${this.uploadDir}: ${this.toMessage(err)}`, + ), + ); + } + + /** + * Returns the list of all stored assets, optionally sorted. + * + * @param sort Sorting order; defaults to `newest`. + */ + list(sort: AssetSortOrder = 'newest'): AssetListResponse { + const assets = Array.from(this.registry.values()); + + const sorted = [...assets].sort((a, b) => { + switch (sort) { + case 'oldest': + return a.uploadedAt.localeCompare(b.uploadedAt); + case 'name': + return a.originalName.localeCompare(b.originalName); + case 'newest': + default: + return b.uploadedAt.localeCompare(a.uploadedAt); + } + }); + + return { total: sorted.length, assets: sorted }; + } + + /** + * Returns the metadata of a single asset. + * + * @throws NotFoundException when no asset with the given id exists. + */ + findById(id: string): Asset { + const asset = this.registry.get(id); + if (!asset) { + throw new NotFoundException(`Asset '${id}' not found`); + } + return asset; + } + + /** + * Returns a read stream for the given asset. Used by the controller to + * implement the download endpoint. + * + * @throws NotFoundException when the asset's metadata is missing or the + * physical file is missing on disk. + */ + async openReadStream(id: string): Promise { + const asset = this.findById(id); + const fullPath = this.resolveOnDiskPath(asset.filename); + try { + await fs.access(fullPath); + } catch (err: unknown) { + throw new NotFoundException( + `Asset '${id}' file is missing on disk: ${this.toMessage(err)}`, + ); + } + return createReadStream(fullPath); + } + + /** + * Registers a freshly-uploaded file (already buffered in memory by + * multer's `memoryStorage`) in the metadata registry, persisting the + * buffer to the managed upload directory. + * + * @param buffer Bytes of the upload. + * @param originalName Original filename from the client. + * @param mimeType Detected MIME type. + * @param size Size in bytes uploaded. + * @param name Optional human-friendly name. + * @param description Optional description. + */ + async registerBuffer(params: { + buffer: Buffer; + originalName: string; + mimeType: string; + size: number; + name?: string; + description?: string; + }): Promise { + this.assertMimeAllowed(params.mimeType); + this.assertSizeAllowed(params.size); + + const id = randomUUID(); + const safeName = this.sanitizeFilename(params.originalName, id); + const finalPath = this.resolveOnDiskPath(safeName); + + try { + await fs.writeFile(finalPath, params.buffer); + } catch (err: unknown) { + throw new BadRequestException( + `Failed to persist uploaded asset: ${this.toMessage(err)}`, + ); + } + + const asset: Asset = { + id, + filename: safeName, + originalName: params.originalName, + mimeType: params.mimeType, + size: params.size, + uploadedAt: new Date().toISOString(), + url: this.buildDownloadUrl(id), + name: params.name, + description: params.description, + }; + + this.registry.set(id, asset); + return asset; + } + + /** + * Removes an asset's metadata and (best-effort) its file from disk. + * + * @throws NotFoundException when the asset cannot be found. + */ + async remove(id: string): Promise { + const asset = this.findById(id); + this.registry.delete(id); + + const fullPath = this.resolveOnDiskPath(asset.filename); + try { + await fs.unlink(fullPath); + } catch (err: unknown) { + const error = err as NodeJS.ErrnoException; + if (error?.code !== 'ENOENT') { + this.logger.warn( + `Failed to unlink asset file ${fullPath}: ${this.toMessage(err)}`, + ); + } + // swallow ENOENT — file already missing is harmless. + } + } + + /** + * On graceful shutdown, prune any files left in the upload directory + * which are not referenced by the registry. This protects against + * orphaned tmp files from aborted uploads between restarts. + */ + async onModuleDestroy(): Promise { + try { + const entries = await fs.readdir(this.uploadDir); + await Promise.all( + entries.map(async (entry) => { + if (this.isManagedFilename(entry)) return; + const target = path.join(this.uploadDir, entry); + try { + await fs.unlink(target); + } catch (err: unknown) { + this.logger.warn( + `Failed to remove orphaned asset ${target}: ${this.toMessage(err)}`, + ); + } + }), + ); + } catch (err: unknown) { + this.logger.warn( + `Asset cleanup on shutdown failed: ${this.toMessage(err)}`, + ); + } + } + + /** Exposed for the controller when constructing multer storage options. */ + getUploadDir(): string { + return this.uploadDir; + } + + /** Exposed for the controller when announcing upload limits. */ + getMaxSizeBytes(): number { + return this.maxSizeBytes; + } + + /** Exposed for tests so the in-memory registry can be cleared. */ + clearRegistryForTests(): void { + this.registry.clear(); + } + + // --------------------------------------------------------------------------- + // Internal helpers + // --------------------------------------------------------------------------- + + private resolveOnDiskPath(filename: string): string { + const resolved = path.resolve(this.uploadDir, filename); + if (!resolved.startsWith(this.uploadDir)) { + throw new BadRequestException('Invalid asset filename'); + } + return resolved; + } + + private buildDownloadUrl(id: string): string { + const base = this.baseUrl.replace(/\/+$/, ''); + return `${base}/${id}/download`; + } + + private resolveMaxSizeBytes(): number { + const configured = this.configService.get('ASSETS_MAX_SIZE_MB'); + const mb = configured ? Number(configured) : 10; + if (!Number.isFinite(mb) || mb <= 0) { + return DEFAULT_MAX_SIZE_BYTES; + } + return Math.floor(mb * 1024 * 1024); + } + + private assertSizeAllowed(size: number): void { + if (size <= 0) { + throw new BadRequestException('Uploaded asset is empty'); + } + if (size > this.maxSizeBytes) { + throw new BadRequestException( + `Asset exceeds maximum size of ${this.maxSizeBytes} bytes`, + ); + } + } + + private assertMimeAllowed(mime: string): void { + const allowed = ALLOWED_MIME_PREFIXES.some((prefix) => + mime.toLowerCase().startsWith(prefix), + ); + if (!allowed) { + throw new BadRequestException( + `Asset MIME type '${mime}' is not allowed`, + ); + } + } + + private sanitizeFilename(original: string, id: string): string { + const ext = path.extname(original).toLowerCase().slice(0, 16) || ''; + const stem = path + .basename(original, path.extname(original)) + .replace(/[^a-zA-Z0-9._-]+/g, '-') + .slice(0, MAX_FILENAME_LENGTH - id.length - ext.length - 1); + const base = `${stem || 'asset'}-${id}${ext}`; + return base.length > MAX_FILENAME_LENGTH + ? base.slice(0, MAX_FILENAME_LENGTH) + : base; + } + + private isManagedFilename(entry: string): boolean { + for (const asset of this.registry.values()) { + if (asset.filename === entry) return true; + } + return false; + } + + private toMessage(err: unknown): string { + if (err instanceof Error) return err.message; + return String(err); + } +} diff --git a/BackendAcademy/src/assets/dto/upload-asset.dto.ts b/BackendAcademy/src/assets/dto/upload-asset.dto.ts new file mode 100644 index 000000000..47f0eed35 --- /dev/null +++ b/BackendAcademy/src/assets/dto/upload-asset.dto.ts @@ -0,0 +1,29 @@ +import { IsOptional, IsString, MaxLength } from 'class-validator'; + +/** + * Optional metadata supplied alongside a multipart file upload. + * + * The actual file is captured separately via `@UploadedFile()`; this DTO + * only validates the accompanying text fields. + * + * Note: the global `ValidationPipe` is configured with + * `forbidNonWhitelisted: true`, so adding unlisted multipart fields will + * cause the request to be rejected — that is the desired behaviour. + */ +export class UploadAssetDto { + /** + * Optional human-friendly display name for the asset. + */ + @IsOptional() + @IsString() + @MaxLength(120) + name?: string; + + /** + * Optional longer description for the asset. + */ + @IsOptional() + @IsString() + @MaxLength(500) + description?: string; +} diff --git a/BackendAcademy/src/assets/interfaces/asset.interface.ts b/BackendAcademy/src/assets/interfaces/asset.interface.ts new file mode 100644 index 000000000..abd2d1dcc --- /dev/null +++ b/BackendAcademy/src/assets/interfaces/asset.interface.ts @@ -0,0 +1,48 @@ +/** + * Metadata describing a single stored asset (either uploaded via POST /assets + * or located under the public static-asset directory). + */ +export interface Asset { + /** Stable opaque identifier for the asset (UUID v4). */ + id: string; + /** + * Filename on disk (or relative path under the static directory). + * This is the value used to look the file up at serve time. + */ + filename: string; + /** Original filename as supplied by the client at upload time. */ + originalName: string; + /** Detected/stored MIME type of the asset (e.g. `image/png`). */ + mimeType: string; + /** Size of the asset in bytes. */ + size: number; + /** ISO 8601 timestamp the asset was registered. */ + uploadedAt: string; + /** + * Public URL where the asset content can be downloaded. + * For uploaded assets this resolves to the REST download endpoint. + */ + url: string; + /** Optional human-friendly name supplied by the uploader. */ + name?: string; + /** Optional description supplied by the uploader. */ + description?: string; +} + +/** + * Response shape for `GET /assets`. + */ +export interface AssetListResponse { + /** Total number of assets returned. */ + total: number; + /** List of asset metadata records. */ + assets: Asset[]; +} + +/** + * Sort order for `GET /assets`. + * - `newest` (default): most recently uploaded first + * - `oldest`: oldest first + * - `name`: alphabetical by originalName + */ +export type AssetSortOrder = 'newest' | 'oldest' | 'name'; diff --git a/BackendAcademy/src/config/config.module.ts b/BackendAcademy/src/config/config.module.ts index 2d6224993..0b32c00c3 100644 --- a/BackendAcademy/src/config/config.module.ts +++ b/BackendAcademy/src/config/config.module.ts @@ -19,6 +19,12 @@ import * as Joi from 'joi'; AI_MODEL: Joi.string().optional(), AI_MAX_TOKENS: Joi.number().default(4096), AI_TEMPERATURE: Joi.number().default(0.7), + + // Static / uploaded asset support + ASSETS_UPLOAD_DIR: Joi.string().optional(), + ASSETS_MAX_SIZE_MB: Joi.number().optional(), + ASSETS_BASE_URL: Joi.string().optional(), + ASSETS_STATIC_DIR: Joi.string().optional(), }), }), ], diff --git a/BackendAcademy/src/main.ts b/BackendAcademy/src/main.ts index 4b86d4d15..03818a648 100644 --- a/BackendAcademy/src/main.ts +++ b/BackendAcademy/src/main.ts @@ -1,11 +1,14 @@ import { NestFactory } from '@nestjs/core'; +import { NestExpressApplication } from '@nestjs/platform-express'; import { AppModule } from './app.module'; import { ValidationPipe, Logger, VersioningType } from '@nestjs/common'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import helmet from 'helmet'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; async function bootstrap() { - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule); const logger = new Logger('Bootstrap'); app.use(helmet()); @@ -39,6 +42,25 @@ async function bootstrap() { const document = SwaggerModule.createDocument(app, swaggerConfig); SwaggerModule.setup('api/docs', app, document); + // Serve read-only, prebuilt static assets from `ASSETS_STATIC_DIR` + // (default: `./public`) at the URL prefix `/static`. The directory is + // created on demand if missing so the backend can boot in a fresh + // clone without crashing. + const staticDir = path.resolve( + process.env.ASSETS_STATIC_DIR ?? './public', + ); + try { + fs.mkdirSync(staticDir, { recursive: true }); + app.useStaticAssets(staticDir, { prefix: '/static/' }); + logger.log(`Static assets served from ${staticDir} at /static/`); + } catch (err) { + logger.warn( + `Failed to mount static asset directory ${staticDir}: ${ + err instanceof Error ? err.message : String(err) + }`, + ); + } + const port = process.env.PORT || 3000; await app.listen(port); logger.log(`Backend running on http://localhost:${port}`);