From b36760f6b9433388e7806e120fc97c63fc3bbea0 Mon Sep 17 00:00:00 2001 From: Lorenzo Trujillo Date: Wed, 13 Nov 2024 22:41:17 -0600 Subject: [PATCH 01/12] commit --- backend/.gitignore | 58 -- backend/dist/admin/admin.controller.d.ts | 14 + backend/dist/admin/admin.controller.js | 72 +++ backend/dist/admin/admin.controller.js.map | 1 + backend/dist/admin/admin.module.d.ts | 2 + backend/dist/admin/admin.module.js | 31 + backend/dist/admin/admin.module.js.map | 1 + backend/dist/admin/admin.service.d.ts | 15 + backend/dist/admin/admin.service.js | 78 +++ backend/dist/admin/admin.service.js.map | 1 + backend/dist/admin/dto/create-admin.dto.d.ts | 11 + backend/dist/admin/dto/create-admin.dto.js | 43 ++ .../dist/admin/dto/create-admin.dto.js.map | 1 + backend/dist/admin/dto/get-admin.dto.d.ts | 7 + backend/dist/admin/dto/get-admin.dto.js | 37 ++ backend/dist/admin/dto/get-admin.dto.js.map | 1 + backend/dist/admin/dto/update-admin.dto.d.ts | 5 + backend/dist/admin/dto/update-admin.dto.js | 9 + .../dist/admin/dto/update-admin.dto.js.map | 1 + backend/dist/admin/entities/admin.entity.d.ts | 13 + backend/dist/admin/entities/admin.entity.js | 68 +++ .../dist/admin/entities/admin.entity.js.map | 1 + backend/dist/app.controller.d.ts | 5 + backend/dist/app.controller.js | 25 + backend/dist/app.controller.js.map | 1 + backend/dist/app.module.d.ts | 2 + backend/dist/app.module.js | 120 ++++ backend/dist/app.module.js.map | 1 + backend/dist/app.service.d.ts | 2 + backend/dist/app.service.js | 17 + backend/dist/app.service.js.map | 1 + backend/dist/auth/admin/authAdmin.guard.d.ts | 11 + backend/dist/auth/admin/authAdmin.guard.js | 48 ++ .../dist/auth/admin/authAdmin.guard.js.map | 1 + backend/dist/auth/admin/authAdmin.module.d.ts | 2 + backend/dist/auth/admin/authAdmin.module.js | 33 ++ .../dist/auth/admin/authAdmin.module.js.map | 1 + .../dist/auth/admin/authAdmin.service.d.ts | 24 + backend/dist/auth/admin/authAdmin.service.js | 122 ++++ .../dist/auth/admin/authAdmin.service.js.map | 1 + .../dist/auth/admin/authAdmincontroller.d.ts | 21 + .../dist/auth/admin/authAdmincontroller.js | 136 +++++ .../auth/admin/authAdmincontroller.js.map | 1 + .../admin/dto/admin-reset-password.dto.d.ts | 13 + .../admin/dto/admin-reset-password.dto.js | 36 ++ .../admin/dto/admin-reset-password.dto.js.map | 1 + .../auth/admin/dto/admin-signin-res.dto.d.ts | 7 + .../auth/admin/dto/admin-signin-res.dto.js | 34 ++ .../admin/dto/admin-signin-res.dto.js.map | 1 + .../auth/admin/dto/get-reset-code.dto.d.ts | 3 + .../dist/auth/admin/dto/get-reset-code.dto.js | 3 + .../auth/admin/dto/get-reset-code.dto.js.map | 1 + .../dist/auth/admin/dto/login-admin.dto.d.ts | 4 + .../dist/auth/admin/dto/login-admin.dto.js | 25 + .../auth/admin/dto/login-admin.dto.js.map | 1 + .../entitites/admin-reset-code.entity.d.ts | 7 + .../entitites/admin-reset-code.entity.js | 37 ++ .../entitites/admin-reset-code.entity.js.map | 1 + .../auth/admin/interface/customAdminReq.d.ts | 5 + .../auth/admin/interface/customAdminReq.js | 3 + .../admin/interface/customAdminReq.js.map | 1 + .../auth/encryption/encryption.service.d.ts | 4 + .../auth/encryption/encryption.service.js | 26 + .../auth/encryption/encryption.service.js.map | 1 + backend/dist/auth/role.decorator.d.ts | 1 + backend/dist/auth/role.decorator.js | 6 + backend/dist/auth/role.decorator.js.map | 1 + backend/dist/auth/user/authUser.guard.d.ts | 9 + backend/dist/auth/user/authUser.guard.js | 43 ++ backend/dist/auth/user/authUser.guard.js.map | 1 + backend/dist/auth/user/authUser.module.d.ts | 2 + backend/dist/auth/user/authUser.module.js | 33 ++ backend/dist/auth/user/authUser.module.js.map | 1 + .../dist/auth/user/authUsercontroller.d.ts | 29 + backend/dist/auth/user/authUsercontroller.js | 160 ++++++ .../dist/auth/user/authUsercontroller.js.map | 1 + backend/dist/auth/user/authUserservice.d.ts | 30 + backend/dist/auth/user/authUserservice.js | 157 +++++ backend/dist/auth/user/authUserservice.js.map | 1 + .../auth/user/dto/get-reset-code.dto.d.ts | 3 + .../dist/auth/user/dto/get-reset-code.dto.js | 3 + .../auth/user/dto/get-reset-code.dto.js.map | 1 + .../dist/auth/user/dto/login-user.dto.d.ts | 4 + backend/dist/auth/user/dto/login-user.dto.js | 25 + .../dist/auth/user/dto/login-user.dto.js.map | 1 + .../dist/auth/user/dto/update-pwd.dto.d.ts | 4 + backend/dist/auth/user/dto/update-pwd.dto.js | 25 + .../dist/auth/user/dto/update-pwd.dto.js.map | 1 + .../user/dto/user-reset-password.dto.d.ts | 16 + .../auth/user/dto/user-reset-password.dto.js | 43 ++ .../user/dto/user-reset-password.dto.js.map | 1 + .../auth/user/dto/user-signin-res.dto.d.ts | 8 + .../dist/auth/user/dto/user-signin-res.dto.js | 38 ++ .../auth/user/dto/user-signin-res.dto.js.map | 1 + .../entities/user-confirm-code.entity.d.ts | 7 + .../user/entities/user-confirm-code.entity.js | 37 ++ .../entities/user-confirm-code.entity.js.map | 1 + .../user/entities/user-reset-code.entity.d.ts | 7 + .../user/entities/user-reset-code.entity.js | 37 ++ .../entities/user-reset-code.entity.js.map | 1 + .../auth/user/interface/customUserReq.d.ts | 5 + .../dist/auth/user/interface/customUserReq.js | 3 + .../auth/user/interface/customUserReq.js.map | 1 + .../dist/category/category.controller.d.ts | 14 + backend/dist/category/category.controller.js | 74 +++ .../dist/category/category.controller.js.map | 1 + backend/dist/category/category.module.d.ts | 2 + backend/dist/category/category.module.js | 33 ++ backend/dist/category/category.module.js.map | 1 + backend/dist/category/category.service.d.ts | 10 + backend/dist/category/category.service.js | 52 ++ backend/dist/category/category.service.js.map | 1 + .../category/dto/create-category-req.dto.d.ts | 4 + .../category/dto/create-category-req.dto.js | 25 + .../dto/create-category-req.dto.js.map | 1 + .../category/dto/create-category.dto.d.ts | 6 + .../dist/category/dto/create-category.dto.js | 7 + .../category/dto/create-category.dto.js.map | 1 + .../category/dto/update-category.dto.d.ts | 5 + .../dist/category/dto/update-category.dto.js | 9 + .../category/dto/update-category.dto.js.map | 1 + .../category/entities/category.entity.d.ts | 5 + .../dist/category/entities/category.entity.js | 32 ++ .../category/entities/category.entity.js.map | 1 + backend/dist/constants/db.constants.d.ts | 8 + backend/dist/constants/db.constants.js | 13 + backend/dist/constants/db.constants.js.map | 1 + backend/dist/constants/google.constants.d.ts | 3 + backend/dist/constants/google.constants.js | 10 + .../dist/constants/google.constants.js.map | 1 + backend/dist/constants/jwt.constants.d.ts | 3 + backend/dist/constants/jwt.constants.js | 10 + backend/dist/constants/jwt.constants.js.map | 1 + backend/dist/constants/mail.constants.d.ts | 5 + backend/dist/constants/mail.constants.js | 10 + backend/dist/constants/mail.constants.js.map | 1 + backend/dist/constants/server.contants.d.ts | 7 + backend/dist/constants/server.contants.js | 24 + backend/dist/constants/server.contants.js.map | 1 + .../database-seeder.module.d.ts | 2 + .../database-seeder/database-seeder.module.js | 68 +++ .../database-seeder.module.js.map | 1 + .../database-seeder.service.d.ts | 20 + .../database-seeder.service.js | 123 ++++ .../database-seeder.service.js.map | 1 + backend/dist/database-seeder/states.json | 9 + backend/dist/email/email.service.d.ts | 7 + backend/dist/email/email.service.js | 53 ++ backend/dist/email/email.service.js.map | 1 + backend/dist/main.d.ts | 1 + backend/dist/main.js | 34 ++ backend/dist/main.js.map | 1 + backend/dist/place/dto/create-date.dto.d.ts | 6 + backend/dist/place/dto/create-date.dto.js | 25 + backend/dist/place/dto/create-date.dto.js.map | 1 + .../dist/place/dto/create-place-date.dto.d.ts | 17 + .../dist/place/dto/create-place-date.dto.js | 78 +++ .../place/dto/create-place-date.dto.js.map | 1 + .../dist/place/dto/create-place-trad.dto.d.ts | 6 + .../dist/place/dto/create-place-trad.dto.js | 33 ++ .../place/dto/create-place-trad.dto.js.map | 1 + backend/dist/place/dto/create-place.dto.d.ts | 15 + backend/dist/place/dto/create-place.dto.js | 7 + .../dist/place/dto/create-place.dto.js.map | 1 + backend/dist/place/dto/get-place.dto.d.ts | 17 + backend/dist/place/dto/get-place.dto.js | 74 +++ backend/dist/place/dto/get-place.dto.js.map | 1 + .../dist/place/dto/update-place.req.dto.d.ts | 5 + .../dist/place/dto/update-place.req.dto.js | 9 + .../place/dto/update-place.req.dto.js.map | 1 + .../place/entities/available-date.entity.d.ts | 7 + .../place/entities/available-date.entity.js | 38 ++ .../entities/available-date.entity.js.map | 1 + .../entities/place-traduction.entity.d.ts | 6 + .../place/entities/place-traduction.entity.js | 38 ++ .../entities/place-traduction.entity.js.map | 1 + backend/dist/place/entities/place.entity.d.ts | 24 + backend/dist/place/entities/place.entity.js | 89 +++ .../dist/place/entities/place.entity.js.map | 1 + backend/dist/place/place.controller.d.ts | 19 + backend/dist/place/place.controller.js | 143 +++++ backend/dist/place/place.controller.js.map | 1 + backend/dist/place/place.module.d.ts | 2 + backend/dist/place/place.module.js | 75 +++ backend/dist/place/place.module.js.map | 1 + backend/dist/place/place.service.d.ts | 25 + backend/dist/place/place.service.js | 262 +++++++++ backend/dist/place/place.service.js.map | 1 + backend/dist/place/utils/isPlaceOpen.d.ts | 2 + backend/dist/place/utils/isPlaceOpen.js | 14 + backend/dist/place/utils/isPlaceOpen.js.map | 1 + .../PointOfInterest.controller.d.ts | 12 + .../PointOfInterest.controller.js | 117 ++++ .../PointOfInterest.controller.js.map | 1 + .../PointOfInterest.module.d.ts | 2 + .../pointOfInterest/PointOfInterest.module.js | 48 ++ .../PointOfInterest.module.js.map | 1 + .../PointOfInterest.service.d.ts | 26 + .../PointOfInterest.service.js | 301 ++++++++++ .../PointOfInterest.service.js.map | 1 + .../pointOfInterest/dto/create-point.dto.d.ts | 6 + .../pointOfInterest/dto/create-point.dto.js | 7 + .../dto/create-point.dto.js.map | 1 + .../dto/create-pointAndTraduction.dto.d.ts | 9 + .../dto/create-pointAndTraduction.dto.js | 45 ++ .../dto/create-pointAndTraduction.dto.js.map | 1 + .../dto/create-pointTrad.dto.d.ts | 8 + .../dto/create-pointTrad.dto.js | 7 + .../dto/create-pointTrad.dto.js.map | 1 + .../pointOfInterest/dto/getPoint.dto.d.ts | 8 + .../dist/pointOfInterest/dto/getPoint.dto.js | 7 + .../pointOfInterest/dto/getPoint.dto.js.map | 1 + .../dto/printPointInfo.dto.d.ts | 5 + .../pointOfInterest/dto/printPointInfo.dto.js | 7 + .../dto/printPointInfo.dto.js.map | 1 + .../pointOfInterest/dto/update-point.dto.d.ts | 5 + .../pointOfInterest/dto/update-point.dto.js | 9 + .../dto/update-point.dto.js.map | 1 + .../entities/PointOfInterest.entity.d.ts | 7 + .../entities/PointOfInterest.entity.js | 38 ++ .../entities/PointOfInterest.entity.js.map | 1 + .../PointOfInterestTraduction.entity.d.ts | 9 + .../PointOfInterestTraduction.entity.js | 43 ++ .../PointOfInterestTraduction.entity.js.map | 1 + .../pointOfInterest/enum/available.enum.d.ts | 11 + .../pointOfInterest/enum/available.enum.js | 16 + .../enum/available.enum.js.map | 1 + .../dist/pointOfInterest/utils/qrcode.d.ts | 1 + backend/dist/pointOfInterest/utils/qrcode.js | 32 ++ .../dist/pointOfInterest/utils/qrcode.js.map | 1 + backend/dist/route/dto/create-route-req.d.ts | 9 + backend/dist/route/dto/create-route-req.js | 40 ++ .../dist/route/dto/create-route-req.js.map | 1 + backend/dist/route/dto/create-route.dto.d.ts | 8 + backend/dist/route/dto/create-route.dto.js | 7 + .../dist/route/dto/create-route.dto.js.map | 1 + .../dist/route/dto/recommend-route.dto.d.ts | 7 + backend/dist/route/dto/recommend-route.dto.js | 3 + .../dist/route/dto/recommend-route.dto.js.map | 1 + backend/dist/route/dto/update-route.dto.d.ts | 5 + backend/dist/route/dto/update-route.dto.js | 9 + .../dist/route/dto/update-route.dto.js.map | 1 + .../dist/route/dto/updateRouteStatus.dto.d.ts | 4 + .../dist/route/dto/updateRouteStatus.dto.js | 22 + .../route/dto/updateRouteStatus.dto.js.map | 1 + backend/dist/route/entities/route.entity.d.ts | 17 + backend/dist/route/entities/route.entity.js | 59 ++ .../dist/route/entities/route.entity.js.map | 1 + backend/dist/route/route.controller.d.ts | 16 + backend/dist/route/route.controller.js | 148 +++++ backend/dist/route/route.controller.js.map | 1 + backend/dist/route/route.module.d.ts | 2 + backend/dist/route/route.module.js | 72 +++ backend/dist/route/route.module.js.map | 1 + backend/dist/route/route.service.d.ts | 27 + backend/dist/route/route.service.js | 227 ++++++++ backend/dist/route/route.service.js.map | 1 + backend/dist/route/utils/math.d.ts | 6 + backend/dist/route/utils/math.js | 3 + backend/dist/route/utils/math.js.map | 1 + backend/dist/route/utils/recommendations.d.ts | 14 + backend/dist/route/utils/recommendations.js | 99 ++++ .../dist/route/utils/recommendations.js.map | 1 + backend/dist/route/utils/sort.d.ts | 3 + backend/dist/route/utils/sort.js | 12 + backend/dist/route/utils/sort.js.map | 1 + backend/dist/shared/dto/payload-jwt.dto.d.ts | 4 + backend/dist/shared/dto/payload-jwt.dto.js | 7 + .../dist/shared/dto/payload-jwt.dto.js.map | 1 + backend/dist/shared/enum/admin-role.enum.d.ts | 12 + backend/dist/shared/enum/admin-role.enum.js | 18 + .../dist/shared/enum/admin-role.enum.js.map | 1 + backend/dist/shared/enum/languages.enum.d.ts | 4 + backend/dist/shared/enum/languages.enum.js | 9 + .../dist/shared/enum/languages.enum.js.map | 1 + .../dist/shared/enum/user-status.enum.d.ts | 4 + backend/dist/shared/enum/user-status.enum.js | 9 + .../dist/shared/enum/user-status.enum.js.map | 1 + .../interceptors/file-save.interceptor.d.ts | 1 + .../interceptors/file-save.interceptor.js | 25 + .../interceptors/file-save.interceptor.js.map | 1 + .../shared/pipe/file-validation.pipe.d.ts | 4 + .../dist/shared/pipe/file-validation.pipe.js | 24 + .../shared/pipe/file-validation.pipe.js.map | 1 + backend/dist/state/dto/create-state.dto.d.ts | 4 + backend/dist/state/dto/create-state.dto.js | 7 + .../dist/state/dto/create-state.dto.js.map | 1 + backend/dist/state/dto/state-res.dto.d.ts | 5 + backend/dist/state/dto/state-res.dto.js | 29 + backend/dist/state/dto/state-res.dto.js.map | 1 + backend/dist/state/entities/state.entity.d.ts | 7 + backend/dist/state/entities/state.entity.js | 37 ++ .../dist/state/entities/state.entity.js.map | 1 + backend/dist/state/state.controller.d.ts | 7 + backend/dist/state/state.controller.js | 42 ++ backend/dist/state/state.controller.js.map | 1 + backend/dist/state/state.module.d.ts | 2 + backend/dist/state/state.module.js | 26 + backend/dist/state/state.module.js.map | 1 + backend/dist/state/state.service.d.ts | 15 + backend/dist/state/state.service.js | 56 ++ backend/dist/state/state.service.js.map | 1 + .../dist/town/dto/create-town-trad.dto.d.ts | 6 + backend/dist/town/dto/create-town-trad.dto.js | 7 + .../dist/town/dto/create-town-trad.dto.js.map | 1 + backend/dist/town/dto/create-town.dto.d.ts | 7 + backend/dist/town/dto/create-town.dto.js | 10 + backend/dist/town/dto/create-town.dto.js.map | 1 + backend/dist/town/dto/createTownReq.dto.d.ts | 8 + backend/dist/town/dto/createTownReq.dto.js | 44 ++ .../dist/town/dto/createTownReq.dto.js.map | 1 + backend/dist/town/dto/town-res.dto.d.ts | 7 + backend/dist/town/dto/town-res.dto.js | 7 + backend/dist/town/dto/town-res.dto.js.map | 1 + backend/dist/town/dto/update-town.dto.d.ts | 5 + backend/dist/town/dto/update-town.dto.js | 7 + backend/dist/town/dto/update-town.dto.js.map | 1 + .../town/entities/town-traduction.entity.d.ts | 6 + .../town/entities/town-traduction.entity.js | 35 ++ .../entities/town-traduction.entity.js.map | 1 + backend/dist/town/entities/town.entity.d.ts | 10 + backend/dist/town/entities/town.entity.js | 49 ++ backend/dist/town/entities/town.entity.js.map | 1 + backend/dist/town/town.controller.d.ts | 22 + backend/dist/town/town.controller.js | 135 +++++ backend/dist/town/town.controller.js.map | 1 + backend/dist/town/town.module.d.ts | 2 + backend/dist/town/town.module.js | 35 ++ backend/dist/town/town.module.js.map | 1 + backend/dist/town/town.service.d.ts | 25 + backend/dist/town/town.service.js | 124 ++++ backend/dist/town/town.service.js.map | 1 + .../dto/create-travel-place.dto.d.ts | 7 + .../dto/create-travel-place.dto.js | 7 + .../dto/create-travel-place.dto.js.map | 1 + .../dto/update-travel-place.dto.d.ts | 5 + .../dto/update-travel-place.dto.js | 9 + .../dto/update-travel-place.dto.js.map | 1 + .../entities/travel-place.entity.d.ts | 10 + .../entities/travel-place.entity.js | 48 ++ .../entities/travel-place.entity.js.map | 1 + .../travel-place/travel-place.controller.d.ts | 7 + .../travel-place/travel-place.controller.js | 39 ++ .../travel-place.controller.js.map | 1 + .../travel-place/travel-place.module.d.ts | 2 + .../dist/travel-place/travel-place.module.js | 27 + .../travel-place/travel-place.module.js.map | 1 + .../travel-place/travel-place.service.d.ts | 12 + .../dist/travel-place/travel-place.service.js | 50 ++ .../travel-place/travel-place.service.js.map | 1 + backend/dist/tsconfig.build.tsbuildinfo | 1 + backend/dist/user/dto/create-user.dto.d.ts | 7 + backend/dist/user/dto/create-user.dto.js | 37 ++ backend/dist/user/dto/create-user.dto.js.map | 1 + .../dto/update-preferedCategories.dto.d.ts | 3 + .../user/dto/update-preferedCategories.dto.js | 21 + .../dto/update-preferedCategories.dto.js.map | 1 + backend/dist/user/dto/update-user.dto.d.ts | 7 + backend/dist/user/dto/update-user.dto.js | 32 ++ backend/dist/user/dto/update-user.dto.js.map | 1 + backend/dist/user/dto/user-response.d.ts | 7 + backend/dist/user/dto/user-response.js | 37 ++ backend/dist/user/dto/user-response.js.map | 1 + backend/dist/user/entities/user.entity.d.ts | 15 + backend/dist/user/entities/user.entity.js | 64 +++ backend/dist/user/entities/user.entity.js.map | 1 + backend/dist/user/user.controller.d.ts | 20 + backend/dist/user/user.controller.js | 138 +++++ backend/dist/user/user.controller.js.map | 1 + backend/dist/user/user.module.d.ts | 2 + backend/dist/user/user.module.js | 33 ++ backend/dist/user/user.module.js.map | 1 + backend/dist/user/user.service.d.ts | 22 + backend/dist/user/user.service.js | 126 ++++ backend/dist/user/user.service.js.map | 1 + .../dist/visited/dto/create-visited.dto.d.ts | 4 + .../dist/visited/dto/create-visited.dto.js | 25 + .../visited/dto/create-visited.dto.js.map | 1 + .../dist/visited/dto/update-visited.dto.d.ts | 5 + .../dist/visited/dto/update-visited.dto.js | 9 + .../visited/dto/update-visited.dto.js.map | 1 + .../dist/visited/entities/visited.entity.d.ts | 9 + .../dist/visited/entities/visited.entity.js | 44 ++ .../visited/entities/visited.entity.js.map | 1 + .../visited/templates/visit_template.d.ts | 1 + .../dist/visited/templates/visit_template.js | 131 +++++ .../visited/templates/visit_template.js.map | 1 + .../utils/visited_places_image_creator.d.ts | 4 + .../utils/visited_places_image_creator.js | 43 ++ .../utils/visited_places_image_creator.js.map | 1 + backend/dist/visited/visited.controller.d.ts | 32 ++ backend/dist/visited/visited.controller.js | 74 +++ .../dist/visited/visited.controller.js.map | 1 + backend/dist/visited/visited.module.d.ts | 2 + backend/dist/visited/visited.module.js | 66 +++ backend/dist/visited/visited.module.js.map | 1 + backend/dist/visited/visited.service.d.ts | 42 ++ backend/dist/visited/visited.service.js | 95 +++ backend/dist/visited/visited.service.js.map | 1 + backend/src/app.module.ts | 2 +- backend/src/constants/db.constants.ts | 1 + backend/src/constants/server.contants.ts | 2 +- .../static/{qr/example.png => audios/h.html} | 0 backend/static/index.html | 1 + backend/static/places/default.jpeg | Bin 136079 -> 0 bytes backend/static/places/h.html | 0 backend/static/points/default.jpeg | Bin 136079 -> 0 bytes backend/static/points/h.html | 0 backend/static/qr/h.html | 0 backend/static/visits/h.html | 0 mobile/app.json | 28 +- .../screens/activity_description_page.tsx | 2 +- .../auth/pages/reset_password_page_error.tsx | 24 +- .../modals/server_connection_error.tsx | 5 +- .../rating_page/full_page_rating.tsx | 22 +- mobile/src/common/const/api.ts | 2 +- mobile/src/common/screens/error_page.tsx | 10 +- mobile/src/common/screens/scan_page.tsx | 67 +-- mobile/src/lang/english_lang.ts | 35 ++ mobile/src/lang/lang.ts | 56 ++ mobile/src/lang/spanish_lang.ts | 36 ++ .../place/screens/state_selection_page.tsx | 43 +- .../place/screens/town_activities_page.tsx | 4 +- .../src/place/screens/town_selection_page.tsx | 4 +- .../src/profile/components/interest_slide.tsx | 13 +- mobile/src/profile/screens/account_page.tsx | 10 +- .../profile/screens/change_password_page.tsx | 10 +- .../src/profile/screens/edit_profile_page.tsx | 7 +- .../components/maps/custom_map_marker.tsx | 142 +++-- mobile/src/route/screens/route_preview.tsx | 27 +- .../src/travel/components/activity_list.tsx | 7 +- .../travel/components/travel_details_tile.tsx | 5 +- .../travel/screens/download_image_error.tsx | 32 +- mobile/src/travel/screens/download_travel.tsx | 38 +- .../travel/screens/travel_details_page.tsx | 7 +- .../travel/screens/travel_history_page.tsx | 5 +- web/build/asset-manifest.json | 18 + web/build/favicon.ico | Bin 0 -> 3870 bytes web/build/index.html | 1 + web/build/logo192.png | Bin 0 -> 5347 bytes web/build/logo512.png | Bin 0 -> 9664 bytes web/build/logotipo.png | Bin 0 -> 12368 bytes web/build/manifest.json | 25 + web/build/robots.txt | 3 + web/build/static/css/main.13f800af.css | 2 + web/build/static/css/main.13f800af.css.map | 1 + web/build/static/js/453.c5eaf93b.chunk.js | 2 + web/build/static/js/453.c5eaf93b.chunk.js.map | 1 + web/build/static/js/879.e9a7feb3.chunk.js | 3 + .../js/879.e9a7feb3.chunk.js.LICENSE.txt | 1 + web/build/static/js/879.e9a7feb3.chunk.js.map | 1 + web/build/static/js/main.d4b31880.js | 3 + .../static/js/main.d4b31880.js.LICENSE.txt | 102 ++++ web/build/static/js/main.d4b31880.js.map | 1 + ...65ba036ed117d36fe.649173ccde91e0590992.png | Bin 0 -> 108308 bytes web/package-lock.json | 542 ++++++++++++++++++ web/package.json | 6 +- web/railway.json | 7 + web/src/core/constants/api_url.ts | 3 +- 459 files changed, 8829 insertions(+), 264 deletions(-) delete mode 100644 backend/.gitignore create mode 100644 backend/dist/admin/admin.controller.d.ts create mode 100644 backend/dist/admin/admin.controller.js create mode 100644 backend/dist/admin/admin.controller.js.map create mode 100644 backend/dist/admin/admin.module.d.ts create mode 100644 backend/dist/admin/admin.module.js create mode 100644 backend/dist/admin/admin.module.js.map create mode 100644 backend/dist/admin/admin.service.d.ts create mode 100644 backend/dist/admin/admin.service.js create mode 100644 backend/dist/admin/admin.service.js.map create mode 100644 backend/dist/admin/dto/create-admin.dto.d.ts create mode 100644 backend/dist/admin/dto/create-admin.dto.js create mode 100644 backend/dist/admin/dto/create-admin.dto.js.map create mode 100644 backend/dist/admin/dto/get-admin.dto.d.ts create mode 100644 backend/dist/admin/dto/get-admin.dto.js create mode 100644 backend/dist/admin/dto/get-admin.dto.js.map create mode 100644 backend/dist/admin/dto/update-admin.dto.d.ts create mode 100644 backend/dist/admin/dto/update-admin.dto.js create mode 100644 backend/dist/admin/dto/update-admin.dto.js.map create mode 100644 backend/dist/admin/entities/admin.entity.d.ts create mode 100644 backend/dist/admin/entities/admin.entity.js create mode 100644 backend/dist/admin/entities/admin.entity.js.map create mode 100644 backend/dist/app.controller.d.ts create mode 100644 backend/dist/app.controller.js create mode 100644 backend/dist/app.controller.js.map create mode 100644 backend/dist/app.module.d.ts create mode 100644 backend/dist/app.module.js create mode 100644 backend/dist/app.module.js.map create mode 100644 backend/dist/app.service.d.ts create mode 100644 backend/dist/app.service.js create mode 100644 backend/dist/app.service.js.map create mode 100644 backend/dist/auth/admin/authAdmin.guard.d.ts create mode 100644 backend/dist/auth/admin/authAdmin.guard.js create mode 100644 backend/dist/auth/admin/authAdmin.guard.js.map create mode 100644 backend/dist/auth/admin/authAdmin.module.d.ts create mode 100644 backend/dist/auth/admin/authAdmin.module.js create mode 100644 backend/dist/auth/admin/authAdmin.module.js.map create mode 100644 backend/dist/auth/admin/authAdmin.service.d.ts create mode 100644 backend/dist/auth/admin/authAdmin.service.js create mode 100644 backend/dist/auth/admin/authAdmin.service.js.map create mode 100644 backend/dist/auth/admin/authAdmincontroller.d.ts create mode 100644 backend/dist/auth/admin/authAdmincontroller.js create mode 100644 backend/dist/auth/admin/authAdmincontroller.js.map create mode 100644 backend/dist/auth/admin/dto/admin-reset-password.dto.d.ts create mode 100644 backend/dist/auth/admin/dto/admin-reset-password.dto.js create mode 100644 backend/dist/auth/admin/dto/admin-reset-password.dto.js.map create mode 100644 backend/dist/auth/admin/dto/admin-signin-res.dto.d.ts create mode 100644 backend/dist/auth/admin/dto/admin-signin-res.dto.js create mode 100644 backend/dist/auth/admin/dto/admin-signin-res.dto.js.map create mode 100644 backend/dist/auth/admin/dto/get-reset-code.dto.d.ts create mode 100644 backend/dist/auth/admin/dto/get-reset-code.dto.js create mode 100644 backend/dist/auth/admin/dto/get-reset-code.dto.js.map create mode 100644 backend/dist/auth/admin/dto/login-admin.dto.d.ts create mode 100644 backend/dist/auth/admin/dto/login-admin.dto.js create mode 100644 backend/dist/auth/admin/dto/login-admin.dto.js.map create mode 100644 backend/dist/auth/admin/entitites/admin-reset-code.entity.d.ts create mode 100644 backend/dist/auth/admin/entitites/admin-reset-code.entity.js create mode 100644 backend/dist/auth/admin/entitites/admin-reset-code.entity.js.map create mode 100644 backend/dist/auth/admin/interface/customAdminReq.d.ts create mode 100644 backend/dist/auth/admin/interface/customAdminReq.js create mode 100644 backend/dist/auth/admin/interface/customAdminReq.js.map create mode 100644 backend/dist/auth/encryption/encryption.service.d.ts create mode 100644 backend/dist/auth/encryption/encryption.service.js create mode 100644 backend/dist/auth/encryption/encryption.service.js.map create mode 100644 backend/dist/auth/role.decorator.d.ts create mode 100644 backend/dist/auth/role.decorator.js create mode 100644 backend/dist/auth/role.decorator.js.map create mode 100644 backend/dist/auth/user/authUser.guard.d.ts create mode 100644 backend/dist/auth/user/authUser.guard.js create mode 100644 backend/dist/auth/user/authUser.guard.js.map create mode 100644 backend/dist/auth/user/authUser.module.d.ts create mode 100644 backend/dist/auth/user/authUser.module.js create mode 100644 backend/dist/auth/user/authUser.module.js.map create mode 100644 backend/dist/auth/user/authUsercontroller.d.ts create mode 100644 backend/dist/auth/user/authUsercontroller.js create mode 100644 backend/dist/auth/user/authUsercontroller.js.map create mode 100644 backend/dist/auth/user/authUserservice.d.ts create mode 100644 backend/dist/auth/user/authUserservice.js create mode 100644 backend/dist/auth/user/authUserservice.js.map create mode 100644 backend/dist/auth/user/dto/get-reset-code.dto.d.ts create mode 100644 backend/dist/auth/user/dto/get-reset-code.dto.js create mode 100644 backend/dist/auth/user/dto/get-reset-code.dto.js.map create mode 100644 backend/dist/auth/user/dto/login-user.dto.d.ts create mode 100644 backend/dist/auth/user/dto/login-user.dto.js create mode 100644 backend/dist/auth/user/dto/login-user.dto.js.map create mode 100644 backend/dist/auth/user/dto/update-pwd.dto.d.ts create mode 100644 backend/dist/auth/user/dto/update-pwd.dto.js create mode 100644 backend/dist/auth/user/dto/update-pwd.dto.js.map create mode 100644 backend/dist/auth/user/dto/user-reset-password.dto.d.ts create mode 100644 backend/dist/auth/user/dto/user-reset-password.dto.js create mode 100644 backend/dist/auth/user/dto/user-reset-password.dto.js.map create mode 100644 backend/dist/auth/user/dto/user-signin-res.dto.d.ts create mode 100644 backend/dist/auth/user/dto/user-signin-res.dto.js create mode 100644 backend/dist/auth/user/dto/user-signin-res.dto.js.map create mode 100644 backend/dist/auth/user/entities/user-confirm-code.entity.d.ts create mode 100644 backend/dist/auth/user/entities/user-confirm-code.entity.js create mode 100644 backend/dist/auth/user/entities/user-confirm-code.entity.js.map create mode 100644 backend/dist/auth/user/entities/user-reset-code.entity.d.ts create mode 100644 backend/dist/auth/user/entities/user-reset-code.entity.js create mode 100644 backend/dist/auth/user/entities/user-reset-code.entity.js.map create mode 100644 backend/dist/auth/user/interface/customUserReq.d.ts create mode 100644 backend/dist/auth/user/interface/customUserReq.js create mode 100644 backend/dist/auth/user/interface/customUserReq.js.map create mode 100644 backend/dist/category/category.controller.d.ts create mode 100644 backend/dist/category/category.controller.js create mode 100644 backend/dist/category/category.controller.js.map create mode 100644 backend/dist/category/category.module.d.ts create mode 100644 backend/dist/category/category.module.js create mode 100644 backend/dist/category/category.module.js.map create mode 100644 backend/dist/category/category.service.d.ts create mode 100644 backend/dist/category/category.service.js create mode 100644 backend/dist/category/category.service.js.map create mode 100644 backend/dist/category/dto/create-category-req.dto.d.ts create mode 100644 backend/dist/category/dto/create-category-req.dto.js create mode 100644 backend/dist/category/dto/create-category-req.dto.js.map create mode 100644 backend/dist/category/dto/create-category.dto.d.ts create mode 100644 backend/dist/category/dto/create-category.dto.js create mode 100644 backend/dist/category/dto/create-category.dto.js.map create mode 100644 backend/dist/category/dto/update-category.dto.d.ts create mode 100644 backend/dist/category/dto/update-category.dto.js create mode 100644 backend/dist/category/dto/update-category.dto.js.map create mode 100644 backend/dist/category/entities/category.entity.d.ts create mode 100644 backend/dist/category/entities/category.entity.js create mode 100644 backend/dist/category/entities/category.entity.js.map create mode 100644 backend/dist/constants/db.constants.d.ts create mode 100644 backend/dist/constants/db.constants.js create mode 100644 backend/dist/constants/db.constants.js.map create mode 100644 backend/dist/constants/google.constants.d.ts create mode 100644 backend/dist/constants/google.constants.js create mode 100644 backend/dist/constants/google.constants.js.map create mode 100644 backend/dist/constants/jwt.constants.d.ts create mode 100644 backend/dist/constants/jwt.constants.js create mode 100644 backend/dist/constants/jwt.constants.js.map create mode 100644 backend/dist/constants/mail.constants.d.ts create mode 100644 backend/dist/constants/mail.constants.js create mode 100644 backend/dist/constants/mail.constants.js.map create mode 100644 backend/dist/constants/server.contants.d.ts create mode 100644 backend/dist/constants/server.contants.js create mode 100644 backend/dist/constants/server.contants.js.map create mode 100644 backend/dist/database-seeder/database-seeder.module.d.ts create mode 100644 backend/dist/database-seeder/database-seeder.module.js create mode 100644 backend/dist/database-seeder/database-seeder.module.js.map create mode 100644 backend/dist/database-seeder/database-seeder.service.d.ts create mode 100644 backend/dist/database-seeder/database-seeder.service.js create mode 100644 backend/dist/database-seeder/database-seeder.service.js.map create mode 100644 backend/dist/database-seeder/states.json create mode 100644 backend/dist/email/email.service.d.ts create mode 100644 backend/dist/email/email.service.js create mode 100644 backend/dist/email/email.service.js.map create mode 100644 backend/dist/main.d.ts create mode 100644 backend/dist/main.js create mode 100644 backend/dist/main.js.map create mode 100644 backend/dist/place/dto/create-date.dto.d.ts create mode 100644 backend/dist/place/dto/create-date.dto.js create mode 100644 backend/dist/place/dto/create-date.dto.js.map create mode 100644 backend/dist/place/dto/create-place-date.dto.d.ts create mode 100644 backend/dist/place/dto/create-place-date.dto.js create mode 100644 backend/dist/place/dto/create-place-date.dto.js.map create mode 100644 backend/dist/place/dto/create-place-trad.dto.d.ts create mode 100644 backend/dist/place/dto/create-place-trad.dto.js create mode 100644 backend/dist/place/dto/create-place-trad.dto.js.map create mode 100644 backend/dist/place/dto/create-place.dto.d.ts create mode 100644 backend/dist/place/dto/create-place.dto.js create mode 100644 backend/dist/place/dto/create-place.dto.js.map create mode 100644 backend/dist/place/dto/get-place.dto.d.ts create mode 100644 backend/dist/place/dto/get-place.dto.js create mode 100644 backend/dist/place/dto/get-place.dto.js.map create mode 100644 backend/dist/place/dto/update-place.req.dto.d.ts create mode 100644 backend/dist/place/dto/update-place.req.dto.js create mode 100644 backend/dist/place/dto/update-place.req.dto.js.map create mode 100644 backend/dist/place/entities/available-date.entity.d.ts create mode 100644 backend/dist/place/entities/available-date.entity.js create mode 100644 backend/dist/place/entities/available-date.entity.js.map create mode 100644 backend/dist/place/entities/place-traduction.entity.d.ts create mode 100644 backend/dist/place/entities/place-traduction.entity.js create mode 100644 backend/dist/place/entities/place-traduction.entity.js.map create mode 100644 backend/dist/place/entities/place.entity.d.ts create mode 100644 backend/dist/place/entities/place.entity.js create mode 100644 backend/dist/place/entities/place.entity.js.map create mode 100644 backend/dist/place/place.controller.d.ts create mode 100644 backend/dist/place/place.controller.js create mode 100644 backend/dist/place/place.controller.js.map create mode 100644 backend/dist/place/place.module.d.ts create mode 100644 backend/dist/place/place.module.js create mode 100644 backend/dist/place/place.module.js.map create mode 100644 backend/dist/place/place.service.d.ts create mode 100644 backend/dist/place/place.service.js create mode 100644 backend/dist/place/place.service.js.map create mode 100644 backend/dist/place/utils/isPlaceOpen.d.ts create mode 100644 backend/dist/place/utils/isPlaceOpen.js create mode 100644 backend/dist/place/utils/isPlaceOpen.js.map create mode 100644 backend/dist/pointOfInterest/PointOfInterest.controller.d.ts create mode 100644 backend/dist/pointOfInterest/PointOfInterest.controller.js create mode 100644 backend/dist/pointOfInterest/PointOfInterest.controller.js.map create mode 100644 backend/dist/pointOfInterest/PointOfInterest.module.d.ts create mode 100644 backend/dist/pointOfInterest/PointOfInterest.module.js create mode 100644 backend/dist/pointOfInterest/PointOfInterest.module.js.map create mode 100644 backend/dist/pointOfInterest/PointOfInterest.service.d.ts create mode 100644 backend/dist/pointOfInterest/PointOfInterest.service.js create mode 100644 backend/dist/pointOfInterest/PointOfInterest.service.js.map create mode 100644 backend/dist/pointOfInterest/dto/create-point.dto.d.ts create mode 100644 backend/dist/pointOfInterest/dto/create-point.dto.js create mode 100644 backend/dist/pointOfInterest/dto/create-point.dto.js.map create mode 100644 backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.d.ts create mode 100644 backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js create mode 100644 backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js.map create mode 100644 backend/dist/pointOfInterest/dto/create-pointTrad.dto.d.ts create mode 100644 backend/dist/pointOfInterest/dto/create-pointTrad.dto.js create mode 100644 backend/dist/pointOfInterest/dto/create-pointTrad.dto.js.map create mode 100644 backend/dist/pointOfInterest/dto/getPoint.dto.d.ts create mode 100644 backend/dist/pointOfInterest/dto/getPoint.dto.js create mode 100644 backend/dist/pointOfInterest/dto/getPoint.dto.js.map create mode 100644 backend/dist/pointOfInterest/dto/printPointInfo.dto.d.ts create mode 100644 backend/dist/pointOfInterest/dto/printPointInfo.dto.js create mode 100644 backend/dist/pointOfInterest/dto/printPointInfo.dto.js.map create mode 100644 backend/dist/pointOfInterest/dto/update-point.dto.d.ts create mode 100644 backend/dist/pointOfInterest/dto/update-point.dto.js create mode 100644 backend/dist/pointOfInterest/dto/update-point.dto.js.map create mode 100644 backend/dist/pointOfInterest/entities/PointOfInterest.entity.d.ts create mode 100644 backend/dist/pointOfInterest/entities/PointOfInterest.entity.js create mode 100644 backend/dist/pointOfInterest/entities/PointOfInterest.entity.js.map create mode 100644 backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.d.ts create mode 100644 backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js create mode 100644 backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js.map create mode 100644 backend/dist/pointOfInterest/enum/available.enum.d.ts create mode 100644 backend/dist/pointOfInterest/enum/available.enum.js create mode 100644 backend/dist/pointOfInterest/enum/available.enum.js.map create mode 100644 backend/dist/pointOfInterest/utils/qrcode.d.ts create mode 100644 backend/dist/pointOfInterest/utils/qrcode.js create mode 100644 backend/dist/pointOfInterest/utils/qrcode.js.map create mode 100644 backend/dist/route/dto/create-route-req.d.ts create mode 100644 backend/dist/route/dto/create-route-req.js create mode 100644 backend/dist/route/dto/create-route-req.js.map create mode 100644 backend/dist/route/dto/create-route.dto.d.ts create mode 100644 backend/dist/route/dto/create-route.dto.js create mode 100644 backend/dist/route/dto/create-route.dto.js.map create mode 100644 backend/dist/route/dto/recommend-route.dto.d.ts create mode 100644 backend/dist/route/dto/recommend-route.dto.js create mode 100644 backend/dist/route/dto/recommend-route.dto.js.map create mode 100644 backend/dist/route/dto/update-route.dto.d.ts create mode 100644 backend/dist/route/dto/update-route.dto.js create mode 100644 backend/dist/route/dto/update-route.dto.js.map create mode 100644 backend/dist/route/dto/updateRouteStatus.dto.d.ts create mode 100644 backend/dist/route/dto/updateRouteStatus.dto.js create mode 100644 backend/dist/route/dto/updateRouteStatus.dto.js.map create mode 100644 backend/dist/route/entities/route.entity.d.ts create mode 100644 backend/dist/route/entities/route.entity.js create mode 100644 backend/dist/route/entities/route.entity.js.map create mode 100644 backend/dist/route/route.controller.d.ts create mode 100644 backend/dist/route/route.controller.js create mode 100644 backend/dist/route/route.controller.js.map create mode 100644 backend/dist/route/route.module.d.ts create mode 100644 backend/dist/route/route.module.js create mode 100644 backend/dist/route/route.module.js.map create mode 100644 backend/dist/route/route.service.d.ts create mode 100644 backend/dist/route/route.service.js create mode 100644 backend/dist/route/route.service.js.map create mode 100644 backend/dist/route/utils/math.d.ts create mode 100644 backend/dist/route/utils/math.js create mode 100644 backend/dist/route/utils/math.js.map create mode 100644 backend/dist/route/utils/recommendations.d.ts create mode 100644 backend/dist/route/utils/recommendations.js create mode 100644 backend/dist/route/utils/recommendations.js.map create mode 100644 backend/dist/route/utils/sort.d.ts create mode 100644 backend/dist/route/utils/sort.js create mode 100644 backend/dist/route/utils/sort.js.map create mode 100644 backend/dist/shared/dto/payload-jwt.dto.d.ts create mode 100644 backend/dist/shared/dto/payload-jwt.dto.js create mode 100644 backend/dist/shared/dto/payload-jwt.dto.js.map create mode 100644 backend/dist/shared/enum/admin-role.enum.d.ts create mode 100644 backend/dist/shared/enum/admin-role.enum.js create mode 100644 backend/dist/shared/enum/admin-role.enum.js.map create mode 100644 backend/dist/shared/enum/languages.enum.d.ts create mode 100644 backend/dist/shared/enum/languages.enum.js create mode 100644 backend/dist/shared/enum/languages.enum.js.map create mode 100644 backend/dist/shared/enum/user-status.enum.d.ts create mode 100644 backend/dist/shared/enum/user-status.enum.js create mode 100644 backend/dist/shared/enum/user-status.enum.js.map create mode 100644 backend/dist/shared/interceptors/file-save.interceptor.d.ts create mode 100644 backend/dist/shared/interceptors/file-save.interceptor.js create mode 100644 backend/dist/shared/interceptors/file-save.interceptor.js.map create mode 100644 backend/dist/shared/pipe/file-validation.pipe.d.ts create mode 100644 backend/dist/shared/pipe/file-validation.pipe.js create mode 100644 backend/dist/shared/pipe/file-validation.pipe.js.map create mode 100644 backend/dist/state/dto/create-state.dto.d.ts create mode 100644 backend/dist/state/dto/create-state.dto.js create mode 100644 backend/dist/state/dto/create-state.dto.js.map create mode 100644 backend/dist/state/dto/state-res.dto.d.ts create mode 100644 backend/dist/state/dto/state-res.dto.js create mode 100644 backend/dist/state/dto/state-res.dto.js.map create mode 100644 backend/dist/state/entities/state.entity.d.ts create mode 100644 backend/dist/state/entities/state.entity.js create mode 100644 backend/dist/state/entities/state.entity.js.map create mode 100644 backend/dist/state/state.controller.d.ts create mode 100644 backend/dist/state/state.controller.js create mode 100644 backend/dist/state/state.controller.js.map create mode 100644 backend/dist/state/state.module.d.ts create mode 100644 backend/dist/state/state.module.js create mode 100644 backend/dist/state/state.module.js.map create mode 100644 backend/dist/state/state.service.d.ts create mode 100644 backend/dist/state/state.service.js create mode 100644 backend/dist/state/state.service.js.map create mode 100644 backend/dist/town/dto/create-town-trad.dto.d.ts create mode 100644 backend/dist/town/dto/create-town-trad.dto.js create mode 100644 backend/dist/town/dto/create-town-trad.dto.js.map create mode 100644 backend/dist/town/dto/create-town.dto.d.ts create mode 100644 backend/dist/town/dto/create-town.dto.js create mode 100644 backend/dist/town/dto/create-town.dto.js.map create mode 100644 backend/dist/town/dto/createTownReq.dto.d.ts create mode 100644 backend/dist/town/dto/createTownReq.dto.js create mode 100644 backend/dist/town/dto/createTownReq.dto.js.map create mode 100644 backend/dist/town/dto/town-res.dto.d.ts create mode 100644 backend/dist/town/dto/town-res.dto.js create mode 100644 backend/dist/town/dto/town-res.dto.js.map create mode 100644 backend/dist/town/dto/update-town.dto.d.ts create mode 100644 backend/dist/town/dto/update-town.dto.js create mode 100644 backend/dist/town/dto/update-town.dto.js.map create mode 100644 backend/dist/town/entities/town-traduction.entity.d.ts create mode 100644 backend/dist/town/entities/town-traduction.entity.js create mode 100644 backend/dist/town/entities/town-traduction.entity.js.map create mode 100644 backend/dist/town/entities/town.entity.d.ts create mode 100644 backend/dist/town/entities/town.entity.js create mode 100644 backend/dist/town/entities/town.entity.js.map create mode 100644 backend/dist/town/town.controller.d.ts create mode 100644 backend/dist/town/town.controller.js create mode 100644 backend/dist/town/town.controller.js.map create mode 100644 backend/dist/town/town.module.d.ts create mode 100644 backend/dist/town/town.module.js create mode 100644 backend/dist/town/town.module.js.map create mode 100644 backend/dist/town/town.service.d.ts create mode 100644 backend/dist/town/town.service.js create mode 100644 backend/dist/town/town.service.js.map create mode 100644 backend/dist/travel-place/dto/create-travel-place.dto.d.ts create mode 100644 backend/dist/travel-place/dto/create-travel-place.dto.js create mode 100644 backend/dist/travel-place/dto/create-travel-place.dto.js.map create mode 100644 backend/dist/travel-place/dto/update-travel-place.dto.d.ts create mode 100644 backend/dist/travel-place/dto/update-travel-place.dto.js create mode 100644 backend/dist/travel-place/dto/update-travel-place.dto.js.map create mode 100644 backend/dist/travel-place/entities/travel-place.entity.d.ts create mode 100644 backend/dist/travel-place/entities/travel-place.entity.js create mode 100644 backend/dist/travel-place/entities/travel-place.entity.js.map create mode 100644 backend/dist/travel-place/travel-place.controller.d.ts create mode 100644 backend/dist/travel-place/travel-place.controller.js create mode 100644 backend/dist/travel-place/travel-place.controller.js.map create mode 100644 backend/dist/travel-place/travel-place.module.d.ts create mode 100644 backend/dist/travel-place/travel-place.module.js create mode 100644 backend/dist/travel-place/travel-place.module.js.map create mode 100644 backend/dist/travel-place/travel-place.service.d.ts create mode 100644 backend/dist/travel-place/travel-place.service.js create mode 100644 backend/dist/travel-place/travel-place.service.js.map create mode 100644 backend/dist/tsconfig.build.tsbuildinfo create mode 100644 backend/dist/user/dto/create-user.dto.d.ts create mode 100644 backend/dist/user/dto/create-user.dto.js create mode 100644 backend/dist/user/dto/create-user.dto.js.map create mode 100644 backend/dist/user/dto/update-preferedCategories.dto.d.ts create mode 100644 backend/dist/user/dto/update-preferedCategories.dto.js create mode 100644 backend/dist/user/dto/update-preferedCategories.dto.js.map create mode 100644 backend/dist/user/dto/update-user.dto.d.ts create mode 100644 backend/dist/user/dto/update-user.dto.js create mode 100644 backend/dist/user/dto/update-user.dto.js.map create mode 100644 backend/dist/user/dto/user-response.d.ts create mode 100644 backend/dist/user/dto/user-response.js create mode 100644 backend/dist/user/dto/user-response.js.map create mode 100644 backend/dist/user/entities/user.entity.d.ts create mode 100644 backend/dist/user/entities/user.entity.js create mode 100644 backend/dist/user/entities/user.entity.js.map create mode 100644 backend/dist/user/user.controller.d.ts create mode 100644 backend/dist/user/user.controller.js create mode 100644 backend/dist/user/user.controller.js.map create mode 100644 backend/dist/user/user.module.d.ts create mode 100644 backend/dist/user/user.module.js create mode 100644 backend/dist/user/user.module.js.map create mode 100644 backend/dist/user/user.service.d.ts create mode 100644 backend/dist/user/user.service.js create mode 100644 backend/dist/user/user.service.js.map create mode 100644 backend/dist/visited/dto/create-visited.dto.d.ts create mode 100644 backend/dist/visited/dto/create-visited.dto.js create mode 100644 backend/dist/visited/dto/create-visited.dto.js.map create mode 100644 backend/dist/visited/dto/update-visited.dto.d.ts create mode 100644 backend/dist/visited/dto/update-visited.dto.js create mode 100644 backend/dist/visited/dto/update-visited.dto.js.map create mode 100644 backend/dist/visited/entities/visited.entity.d.ts create mode 100644 backend/dist/visited/entities/visited.entity.js create mode 100644 backend/dist/visited/entities/visited.entity.js.map create mode 100644 backend/dist/visited/templates/visit_template.d.ts create mode 100644 backend/dist/visited/templates/visit_template.js create mode 100644 backend/dist/visited/templates/visit_template.js.map create mode 100644 backend/dist/visited/utils/visited_places_image_creator.d.ts create mode 100644 backend/dist/visited/utils/visited_places_image_creator.js create mode 100644 backend/dist/visited/utils/visited_places_image_creator.js.map create mode 100644 backend/dist/visited/visited.controller.d.ts create mode 100644 backend/dist/visited/visited.controller.js create mode 100644 backend/dist/visited/visited.controller.js.map create mode 100644 backend/dist/visited/visited.module.d.ts create mode 100644 backend/dist/visited/visited.module.js create mode 100644 backend/dist/visited/visited.module.js.map create mode 100644 backend/dist/visited/visited.service.d.ts create mode 100644 backend/dist/visited/visited.service.js create mode 100644 backend/dist/visited/visited.service.js.map rename backend/static/{qr/example.png => audios/h.html} (100%) create mode 100644 backend/static/index.html delete mode 100644 backend/static/places/default.jpeg create mode 100644 backend/static/places/h.html delete mode 100644 backend/static/points/default.jpeg create mode 100644 backend/static/points/h.html create mode 100644 backend/static/qr/h.html create mode 100644 backend/static/visits/h.html create mode 100644 web/build/asset-manifest.json create mode 100644 web/build/favicon.ico create mode 100644 web/build/index.html create mode 100644 web/build/logo192.png create mode 100644 web/build/logo512.png create mode 100644 web/build/logotipo.png create mode 100644 web/build/manifest.json create mode 100644 web/build/robots.txt create mode 100644 web/build/static/css/main.13f800af.css create mode 100644 web/build/static/css/main.13f800af.css.map create mode 100644 web/build/static/js/453.c5eaf93b.chunk.js create mode 100644 web/build/static/js/453.c5eaf93b.chunk.js.map create mode 100644 web/build/static/js/879.e9a7feb3.chunk.js create mode 100644 web/build/static/js/879.e9a7feb3.chunk.js.LICENSE.txt create mode 100644 web/build/static/js/879.e9a7feb3.chunk.js.map create mode 100644 web/build/static/js/main.d4b31880.js create mode 100644 web/build/static/js/main.d4b31880.js.LICENSE.txt create mode 100644 web/build/static/js/main.d4b31880.js.map create mode 100644 web/build/static/media/Admin-595b40b65ba036ed117d36fe.649173ccde91e0590992.png create mode 100644 web/railway.json diff --git a/backend/.gitignore b/backend/.gitignore deleted file mode 100644 index f793d336..00000000 --- a/backend/.gitignore +++ /dev/null @@ -1,58 +0,0 @@ -#static files -/static -# compiled output -/dist -/node_modules -/build - -# Logs -logs -*.log -npm-debug.log* -pnpm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# OS -.DS_Store - -# Tests -/coverage -/.nyc_output - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# temp directory -.temp -.tmp - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/backend/dist/admin/admin.controller.d.ts b/backend/dist/admin/admin.controller.d.ts new file mode 100644 index 00000000..a78c7fbb --- /dev/null +++ b/backend/dist/admin/admin.controller.d.ts @@ -0,0 +1,14 @@ +import { AdminService } from './admin.service'; +import { CustomAdminRequest } from 'src/auth/admin/interface/customAdminReq'; +export declare class AdminController { + private readonly adminService; + constructor(adminService: AdminService); + whoAmI(req: CustomAdminRequest): Promise<{ + email: string; + name: string; + lastName: string; + role: string; + idTown: number; + }>; + findAllByTown(idTown: number): Promise; +} diff --git a/backend/dist/admin/admin.controller.js b/backend/dist/admin/admin.controller.js new file mode 100644 index 00000000..42846e7b --- /dev/null +++ b/backend/dist/admin/admin.controller.js @@ -0,0 +1,72 @@ +"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.AdminController = void 0; +const common_1 = require("@nestjs/common"); +const admin_service_1 = require("./admin.service"); +const swagger_1 = require("@nestjs/swagger"); +const admin_role_enum_1 = require("../shared/enum/admin-role.enum"); +const role_decorator_1 = require("../auth/role.decorator"); +const authAdmin_guard_1 = require("../auth/admin/authAdmin.guard"); +let AdminController = class AdminController { + constructor(adminService) { + this.adminService = adminService; + } + async whoAmI(req) { + return { + email: req.admin.email, + name: req.admin.name, + lastName: req.admin.lastName, + role: req.admin.role, + idTown: req.admin?.idTown?.townId || null, + }; + } + async findAllByTown(idTown) { + try { + const admins = await this.adminService.findAllByTown(idTown); + return admins; + } + catch (e) { + return e; + } + } +}; +exports.AdminController = AdminController; +__decorate([ + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.ADMIN_ROLES), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.Get)('admin/whoami'), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], AdminController.prototype, "whoAmI", null); +__decorate([ + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.SUPERADMIN_ROLES), + (0, swagger_1.ApiParam)({ name: 'idTown', type: Number }), + (0, common_1.Get)('admin/:idTown'), + (0, swagger_1.ApiBearerAuth)('jwt'), + __param(0, (0, common_1.Param)('idTown')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number]), + __metadata("design:returntype", Promise) +], AdminController.prototype, "findAllByTown", null); +exports.AdminController = AdminController = __decorate([ + (0, common_1.Controller)(''), + (0, swagger_1.ApiTags)('Admin'), + __metadata("design:paramtypes", [admin_service_1.AdminService]) +], AdminController); +//# sourceMappingURL=admin.controller.js.map \ No newline at end of file diff --git a/backend/dist/admin/admin.controller.js.map b/backend/dist/admin/admin.controller.js.map new file mode 100644 index 00000000..4be22dcf --- /dev/null +++ b/backend/dist/admin/admin.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.controller.js","sourceRoot":"","sources":["../../src/admin/admin.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwE;AACxE,mDAA+C;AAC/C,6CAAmE;AACnE,oEAAgF;AAChF,2DAAgD;AAEhD,mEAAgE;AAIzD,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAMrD,AAAN,KAAK,CAAC,MAAM,CAAQ,GAAuB;QACzC,OAAO;YACL,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;YACtB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI;YACpB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;YAC5B,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI;YACpB,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI;SAC1C,CAAC;IACJ,CAAC;IAOK,AAAN,KAAK,CAAC,aAAa,CAAkB,MAAc;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;CACF,CAAA;AA9BY,0CAAe;AAOpB;IAJL,IAAA,kBAAS,EAAC,gCAAc,CAAC;IACzB,IAAA,sBAAK,EAAC,6BAAW,CAAC;IAClB,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,YAAG,EAAC,cAAc,CAAC;IACN,WAAA,IAAA,YAAG,GAAE,CAAA;;;;6CAQlB;AAOK;IALL,IAAA,kBAAS,EAAC,gCAAc,CAAC;IACzB,IAAA,sBAAK,EAAC,kCAAgB,CAAC;IACvB,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1C,IAAA,YAAG,EAAC,eAAe,CAAC;IACpB,IAAA,uBAAa,EAAC,KAAK,CAAC;IACA,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;oDAOnC;0BA7BU,eAAe;IAF3B,IAAA,mBAAU,EAAC,EAAE,CAAC;IACd,IAAA,iBAAO,EAAC,OAAO,CAAC;qCAE4B,4BAAY;GAD5C,eAAe,CA8B3B"} \ No newline at end of file diff --git a/backend/dist/admin/admin.module.d.ts b/backend/dist/admin/admin.module.d.ts new file mode 100644 index 00000000..41d02076 --- /dev/null +++ b/backend/dist/admin/admin.module.d.ts @@ -0,0 +1,2 @@ +export declare class AdminModule { +} diff --git a/backend/dist/admin/admin.module.js b/backend/dist/admin/admin.module.js new file mode 100644 index 00000000..d3b41d57 --- /dev/null +++ b/backend/dist/admin/admin.module.js @@ -0,0 +1,31 @@ +"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.AdminModule = void 0; +const common_1 = require("@nestjs/common"); +const admin_service_1 = require("./admin.service"); +const admin_controller_1 = require("./admin.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const admin_entity_1 = require("./entities/admin.entity"); +const town_entity_1 = require("../town/entities/town.entity"); +const authAdmin_service_1 = require("../auth/admin/authAdmin.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const admin_reset_code_entity_1 = require("../auth/admin/entitites/admin-reset-code.entity"); +let AdminModule = class AdminModule { +}; +exports.AdminModule = AdminModule; +exports.AdminModule = AdminModule = __decorate([ + (0, common_1.Module)({ + controllers: [admin_controller_1.AdminController], + providers: [admin_service_1.AdminService, authAdmin_service_1.AuthAdminService, jwt_1.JwtService, encryption_service_1.EncryptionService], + imports: [typeorm_1.TypeOrmModule.forFeature([admin_entity_1.Admin, town_entity_1.Town, admin_reset_code_entity_1.AdminResetCode])], + exports: [admin_service_1.AdminService], + }) +], AdminModule); +//# sourceMappingURL=admin.module.js.map \ No newline at end of file diff --git a/backend/dist/admin/admin.module.js.map b/backend/dist/admin/admin.module.js.map new file mode 100644 index 00000000..612fab3e --- /dev/null +++ b/backend/dist/admin/admin.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.module.js","sourceRoot":"","sources":["../../src/admin/admin.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAC/C,yDAAqD;AACrD,6CAAgD;AAChD,0DAAgD;AAChD,8DAAqD;AACrD,uEAAoE;AACpE,qCAAyC;AACzC,8EAA2E;AAC3E,6FAAkF;AAQ3E,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IANvB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,4BAAY,EAAE,oCAAgB,EAAE,gBAAU,EAAE,sCAAiB,CAAC;QAC1E,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,oBAAK,EAAE,kBAAI,EAAE,wCAAc,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"} \ No newline at end of file diff --git a/backend/dist/admin/admin.service.d.ts b/backend/dist/admin/admin.service.d.ts new file mode 100644 index 00000000..92bb1f5a --- /dev/null +++ b/backend/dist/admin/admin.service.d.ts @@ -0,0 +1,15 @@ +import { CreateAdminDto } from './dto/create-admin.dto'; +import { Admin } from './entities/admin.entity'; +import { Repository } from 'typeorm'; +import { Town } from 'src/town/entities/town.entity'; +import { GetAdminDto } from './dto/get-admin.dto'; +export declare class AdminService { + private adminRepository; + private townRepository; + constructor(adminRepository: Repository, townRepository: Repository); + create(createAdminDto: CreateAdminDto): Promise; + findOne(email: string): Promise; + adminExists(email: string): Promise; + updatePassword(email: string, password: string): Promise; + findAllByTown(idTown: number): Promise; +} diff --git a/backend/dist/admin/admin.service.js b/backend/dist/admin/admin.service.js new file mode 100644 index 00000000..c3712d9b --- /dev/null +++ b/backend/dist/admin/admin.service.js @@ -0,0 +1,78 @@ +"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.AdminService = void 0; +const common_1 = require("@nestjs/common"); +const admin_entity_1 = require("./entities/admin.entity"); +const typeorm_1 = require("typeorm"); +const typeorm_2 = require("@nestjs/typeorm"); +const town_entity_1 = require("../town/entities/town.entity"); +const admin_role_enum_1 = require("../shared/enum/admin-role.enum"); +let AdminService = class AdminService { + constructor(adminRepository, townRepository) { + this.adminRepository = adminRepository; + this.townRepository = townRepository; + } + async create(createAdminDto) { + let town = null; + if (createAdminDto.role == admin_role_enum_1.ADMIN_ROLE.ADMIN) { + town = await this.townRepository.findOneByOrFail({ townId: createAdminDto.idTown }); + } + await this.adminRepository.insert({ ...createAdminDto, idTown: town }); + } + async findOne(email) { + try { + return await this.adminRepository.findOneByOrFail({ email }); + } + catch (error) { + throw new common_1.UnauthorizedException('Admin not found'); + } + } + async adminExists(email) { + const admin = await this.adminRepository.findOneBy({ email }); + if (admin) + return true; + else + return false; + } + async updatePassword(email, password) { + await this.adminRepository.update({ email }, { password }); + } + async findAllByTown(idTown) { + const res = await this.adminRepository + .createQueryBuilder('admin') + .leftJoinAndSelect('admin.idTown', 'town') + .where('admin.idTown = :idTown', { idTown: idTown }) + .getMany(); + const admins = res.map((admin) => { + return { + email: admin.email, + idTown: admin.idTown.townId, + name: admin.name, + lastName: admin.lastName, + status: admin.status, + }; + }); + return admins; + } +}; +exports.AdminService = AdminService; +exports.AdminService = AdminService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_2.InjectRepository)(admin_entity_1.Admin)), + __param(1, (0, typeorm_2.InjectRepository)(town_entity_1.Town)), + __metadata("design:paramtypes", [typeorm_1.Repository, + typeorm_1.Repository]) +], AdminService); +//# sourceMappingURL=admin.service.js.map \ No newline at end of file diff --git a/backend/dist/admin/admin.service.js.map b/backend/dist/admin/admin.service.js.map new file mode 100644 index 00000000..59979aca --- /dev/null +++ b/backend/dist/admin/admin.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.service.js","sourceRoot":"","sources":["../../src/admin/admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAmE;AAEnE,0DAAgD;AAChD,qCAAqC;AACrC,6CAAmD;AACnD,8DAAqD;AACrD,oEAA6D;AAItD,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YACmC,eAAkC,EACnC,cAAgC;QAD/B,oBAAe,GAAf,eAAe,CAAmB;QACnC,mBAAc,GAAd,cAAc,CAAkB;IAC/D,CAAC;IACJ,KAAK,CAAC,MAAM,CAAC,cAA8B;QACzC,IAAI,IAAI,GAAS,IAAI,CAAC;QACtB,IAAI,cAAc,CAAC,IAAI,IAAI,4BAAU,CAAC,KAAK,EAAE,CAAC;YAC5C,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,8BAAqB,CAAC,iBAAiB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,IAAI,CAAC;;YAClB,OAAO,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,QAAgB;QAClD,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,eAAe;aAC1C,kBAAkB,CAAC,OAAO,CAAC;aAC3B,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC;aACzC,KAAK,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;aACnD,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAe,EAAE;YAC3D,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;gBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAhDY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,oBAAK,CAAC,CAAA;IACvB,WAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;qCAD2B,oBAAU;QACZ,oBAAU;GAHjD,YAAY,CAgDxB"} \ No newline at end of file diff --git a/backend/dist/admin/dto/create-admin.dto.d.ts b/backend/dist/admin/dto/create-admin.dto.d.ts new file mode 100644 index 00000000..d3e65da6 --- /dev/null +++ b/backend/dist/admin/dto/create-admin.dto.d.ts @@ -0,0 +1,11 @@ +import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum'; +import { UserStatus } from 'src/shared/enum/user-status.enum'; +export declare class CreateAdminDto { + email: string; + idTown: number; + password: string; + name: string; + lastName: string; + role: ADMIN_ROLE; + status: UserStatus; +} diff --git a/backend/dist/admin/dto/create-admin.dto.js b/backend/dist/admin/dto/create-admin.dto.js new file mode 100644 index 00000000..3e3b875f --- /dev/null +++ b/backend/dist/admin/dto/create-admin.dto.js @@ -0,0 +1,43 @@ +"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.CreateAdminDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const admin_role_enum_1 = require("../../shared/enum/admin-role.enum"); +const user_status_enum_1 = require("../../shared/enum/user-status.enum"); +class CreateAdminDto { + constructor() { + this.role = admin_role_enum_1.ADMIN_ROLE.ADMIN; + this.status = user_status_enum_1.UserStatus.ACTIVE; + } +} +exports.CreateAdminDto = CreateAdminDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateAdminDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], CreateAdminDto.prototype, "idTown", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateAdminDto.prototype, "password", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateAdminDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateAdminDto.prototype, "lastName", void 0); +//# sourceMappingURL=create-admin.dto.js.map \ No newline at end of file diff --git a/backend/dist/admin/dto/create-admin.dto.js.map b/backend/dist/admin/dto/create-admin.dto.js.map new file mode 100644 index 00000000..5f0617de --- /dev/null +++ b/backend/dist/admin/dto/create-admin.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-admin.dto.js","sourceRoot":"","sources":["../../../src/admin/dto/create-admin.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,uEAA6D;AAC7D,yEAA8D;AAE9D,MAAa,cAAc;IAA3B;QAgBE,SAAI,GAAe,4BAAU,CAAC,KAAK,CAAC;QACpC,WAAM,GAAe,6BAAU,CAAC,MAAM,CAAC;IACzC,CAAC;CAAA;AAlBD,wCAkBC;AAhBC;IADC,IAAA,qBAAW,GAAE;;6CACA;AAGd;IADC,IAAA,qBAAW,GAAE;;8CACC;AAGf;IADC,IAAA,qBAAW,GAAE;;gDACG;AAGjB;IADC,IAAA,qBAAW,GAAE;;4CACD;AAGb;IADC,IAAA,qBAAW,GAAE;;gDACG"} \ No newline at end of file diff --git a/backend/dist/admin/dto/get-admin.dto.d.ts b/backend/dist/admin/dto/get-admin.dto.d.ts new file mode 100644 index 00000000..14b15647 --- /dev/null +++ b/backend/dist/admin/dto/get-admin.dto.d.ts @@ -0,0 +1,7 @@ +export declare class GetAdminDto { + email: string; + idTown: number; + name: string; + lastName: string; + status: string; +} diff --git a/backend/dist/admin/dto/get-admin.dto.js b/backend/dist/admin/dto/get-admin.dto.js new file mode 100644 index 00000000..05d89c90 --- /dev/null +++ b/backend/dist/admin/dto/get-admin.dto.js @@ -0,0 +1,37 @@ +"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.GetAdminDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class GetAdminDto { +} +exports.GetAdminDto = GetAdminDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetAdminDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], GetAdminDto.prototype, "idTown", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetAdminDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetAdminDto.prototype, "lastName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetAdminDto.prototype, "status", void 0); +//# sourceMappingURL=get-admin.dto.js.map \ No newline at end of file diff --git a/backend/dist/admin/dto/get-admin.dto.js.map b/backend/dist/admin/dto/get-admin.dto.js.map new file mode 100644 index 00000000..a9a2ab3a --- /dev/null +++ b/backend/dist/admin/dto/get-admin.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"get-admin.dto.js","sourceRoot":"","sources":["../../../src/admin/dto/get-admin.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,WAAW;CAevB;AAfD,kCAeC;AAbC;IADC,IAAA,qBAAW,GAAE;;0CACA;AAGd;IADC,IAAA,qBAAW,GAAE;;2CACC;AAGf;IADC,IAAA,qBAAW,GAAE;;yCACD;AAGb;IADC,IAAA,qBAAW,GAAE;;6CACG;AAGjB;IADC,IAAA,qBAAW,GAAE;;2CACC"} \ No newline at end of file diff --git a/backend/dist/admin/dto/update-admin.dto.d.ts b/backend/dist/admin/dto/update-admin.dto.d.ts new file mode 100644 index 00000000..963dd835 --- /dev/null +++ b/backend/dist/admin/dto/update-admin.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateAdminDto } from './create-admin.dto'; +declare const UpdateAdminDto_base: import("@nestjs/mapped-types").MappedType>; +export declare class UpdateAdminDto extends UpdateAdminDto_base { +} +export {}; diff --git a/backend/dist/admin/dto/update-admin.dto.js b/backend/dist/admin/dto/update-admin.dto.js new file mode 100644 index 00000000..243f2d70 --- /dev/null +++ b/backend/dist/admin/dto/update-admin.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateAdminDto = void 0; +const mapped_types_1 = require("@nestjs/mapped-types"); +const create_admin_dto_1 = require("./create-admin.dto"); +class UpdateAdminDto extends (0, mapped_types_1.PartialType)(create_admin_dto_1.CreateAdminDto) { +} +exports.UpdateAdminDto = UpdateAdminDto; +//# sourceMappingURL=update-admin.dto.js.map \ No newline at end of file diff --git a/backend/dist/admin/dto/update-admin.dto.js.map b/backend/dist/admin/dto/update-admin.dto.js.map new file mode 100644 index 00000000..33ac60ad --- /dev/null +++ b/backend/dist/admin/dto/update-admin.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-admin.dto.js","sourceRoot":"","sources":["../../../src/admin/dto/update-admin.dto.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AACnD,yDAAoD;AAEpD,MAAa,cAAe,SAAQ,IAAA,0BAAW,EAAC,iCAAc,CAAC;CAAG;AAAlE,wCAAkE"} \ No newline at end of file diff --git a/backend/dist/admin/entities/admin.entity.d.ts b/backend/dist/admin/entities/admin.entity.d.ts new file mode 100644 index 00000000..454f7f19 --- /dev/null +++ b/backend/dist/admin/entities/admin.entity.d.ts @@ -0,0 +1,13 @@ +import { AdminResetCode } from 'src/auth/admin/entitites/admin-reset-code.entity'; +import { UserStatus } from 'src/shared/enum/user-status.enum'; +import { Town } from 'src/town/entities/town.entity'; +export declare class Admin { + email: string; + idTown: Town; + name: string; + lastName: string; + role: string; + password: string; + status: UserStatus; + resetCodes: AdminResetCode[]; +} diff --git a/backend/dist/admin/entities/admin.entity.js b/backend/dist/admin/entities/admin.entity.js new file mode 100644 index 00000000..9e46c5f1 --- /dev/null +++ b/backend/dist/admin/entities/admin.entity.js @@ -0,0 +1,68 @@ +"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.Admin = void 0; +const admin_reset_code_entity_1 = require("../../auth/admin/entitites/admin-reset-code.entity"); +const admin_role_enum_1 = require("../../shared/enum/admin-role.enum"); +const user_status_enum_1 = require("../../shared/enum/user-status.enum"); +const town_entity_1 = require("../../town/entities/town.entity"); +const typeorm_1 = require("typeorm"); +let Admin = class Admin { + constructor() { + this.status = user_status_enum_1.UserStatus.ACTIVE; + } +}; +exports.Admin = Admin; +__decorate([ + (0, typeorm_1.PrimaryColumn)(), + __metadata("design:type", String) +], Admin.prototype, "email", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'idTown' }), + (0, typeorm_1.ManyToOne)(() => town_entity_1.Town, (town) => town.townId, { nullable: true, eager: true }), + __metadata("design:type", town_entity_1.Town) +], Admin.prototype, "idTown", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Admin.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Admin.prototype, "lastName", void 0); +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: admin_role_enum_1.ADMIN_ROLE, + default: admin_role_enum_1.ADMIN_ROLE.ADMIN, + }), + __metadata("design:type", String) +], Admin.prototype, "role", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Admin.prototype, "password", void 0); +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: user_status_enum_1.UserStatus, + default: 'active', + }), + __metadata("design:type", String) +], Admin.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => admin_reset_code_entity_1.AdminResetCode, (resetCode) => resetCode.admin), + __metadata("design:type", Array) +], Admin.prototype, "resetCodes", void 0); +exports.Admin = Admin = __decorate([ + (0, typeorm_1.Entity)() +], Admin); +//# sourceMappingURL=admin.entity.js.map \ No newline at end of file diff --git a/backend/dist/admin/entities/admin.entity.js.map b/backend/dist/admin/entities/admin.entity.js.map new file mode 100644 index 00000000..3f0db000 --- /dev/null +++ b/backend/dist/admin/entities/admin.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.entity.js","sourceRoot":"","sources":["../../../src/admin/entities/admin.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gGAAkF;AAClF,uEAA6D;AAC7D,yEAA8D;AAC9D,iEAAqD;AACrD,qCAA0F;AAGnF,IAAM,KAAK,GAAX,MAAM,KAAK;IAAX;QA6BL,WAAM,GAAe,6BAAU,CAAC,MAAM,CAAC;IAIzC,CAAC;CAAA,CAAA;AAjCY,sBAAK;AAEhB;IADC,IAAA,uBAAa,GAAE;;oCACF;AAId;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;8BACtE,kBAAI;qCAAC;AAGb;IADC,IAAA,gBAAM,GAAE;;mCACI;AAGb;IADC,IAAA,gBAAM,GAAE;;uCACQ;AAOjB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,4BAAU;QAChB,OAAO,EAAE,4BAAU,CAAC,KAAK;KAC1B,CAAC;;mCACW;AAGb;IADC,IAAA,gBAAM,GAAE;;uCACQ;AAOjB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,6BAAU;QAChB,OAAO,EAAE,QAAQ;KAClB,CAAC;;qCACqC;AAGvC;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,wCAAc,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;;yCACnC;gBAhClB,KAAK;IADjB,IAAA,gBAAM,GAAE;GACI,KAAK,CAiCjB"} \ No newline at end of file diff --git a/backend/dist/app.controller.d.ts b/backend/dist/app.controller.d.ts new file mode 100644 index 00000000..abccd016 --- /dev/null +++ b/backend/dist/app.controller.d.ts @@ -0,0 +1,5 @@ +import { AppService } from './app.service'; +export declare class AppController { + private readonly appService; + constructor(appService: AppService); +} diff --git a/backend/dist/app.controller.js b/backend/dist/app.controller.js new file mode 100644 index 00000000..2b082731 --- /dev/null +++ b/backend/dist/app.controller.js @@ -0,0 +1,25 @@ +"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; + } +}; +exports.AppController = AppController; +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/backend/dist/app.controller.js.map b/backend/dist/app.controller.js.map new file mode 100644 index 00000000..7fffcea9 --- /dev/null +++ b/backend/dist/app.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.controller.js","sourceRoot":"","sources":["../src/app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+CAA2C;AAGpC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;CACxD,CAAA;AAFY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE8B,wBAAU;GADxC,aAAa,CAEzB"} \ No newline at end of file diff --git a/backend/dist/app.module.d.ts b/backend/dist/app.module.d.ts new file mode 100644 index 00000000..09cdb35c --- /dev/null +++ b/backend/dist/app.module.d.ts @@ -0,0 +1,2 @@ +export declare class AppModule { +} diff --git a/backend/dist/app.module.js b/backend/dist/app.module.js new file mode 100644 index 00000000..ee3ab909 --- /dev/null +++ b/backend/dist/app.module.js @@ -0,0 +1,120 @@ +"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 typeorm_1 = require("@nestjs/typeorm"); +const app_controller_1 = require("./app.controller"); +const app_service_1 = require("./app.service"); +const admin_module_1 = require("./admin/admin.module"); +const admin_entity_1 = require("./admin/entities/admin.entity"); +const db_constants_1 = require("./constants/db.constants"); +const authAdmin_module_1 = require("./auth/admin/authAdmin.module"); +const user_module_1 = require("./user/user.module"); +const user_entity_1 = require("./user/entities/user.entity"); +const authUser_module_1 = require("./auth/user/authUser.module"); +const state_module_1 = require("./state/state.module"); +const database_seeder_module_1 = require("./database-seeder/database-seeder.module"); +const state_entity_1 = require("./state/entities/state.entity"); +const serve_static_1 = require("@nestjs/serve-static"); +const path_1 = require("path"); +const town_entity_1 = require("./town/entities/town.entity"); +const town_module_1 = require("./town/town.module"); +const town_traduction_entity_1 = require("./town/entities/town-traduction.entity"); +const place_module_1 = require("./place/place.module"); +const place_entity_1 = require("./place/entities/place.entity"); +const PointOfInterest_module_1 = require("./pointOfInterest/PointOfInterest.module"); +const PointOfInterest_entity_1 = require("./pointOfInterest/entities/PointOfInterest.entity"); +const available_date_entity_1 = require("./place/entities/available-date.entity"); +const PointOfInterestTraduction_entity_1 = require("./pointOfInterest/entities/PointOfInterestTraduction.entity"); +const place_traduction_entity_1 = require("./place/entities/place-traduction.entity"); +const category_module_1 = require("./category/category.module"); +const category_entity_1 = require("./category/entities/category.entity"); +const route_module_1 = require("./route/route.module"); +const route_entity_1 = require("./route/entities/route.entity"); +const travel_place_module_1 = require("./travel-place/travel-place.module"); +const travel_place_entity_1 = require("./travel-place/entities/travel-place.entity"); +const visited_module_1 = require("./visited/visited.module"); +const visited_entity_1 = require("./visited/entities/visited.entity"); +const email_service_1 = require("./email/email.service"); +const user_reset_code_entity_1 = require("./auth/user/entities/user-reset-code.entity"); +const mailer_1 = require("@nestjs-modules/mailer"); +const mail_constants_1 = require("./constants/mail.constants"); +const admin_reset_code_entity_1 = require("./auth/admin/entitites/admin-reset-code.entity"); +const user_confirm_code_entity_1 = require("./auth/user/entities/user-confirm-code.entity"); +let AppModule = class AppModule { +}; +exports.AppModule = AppModule; +exports.AppModule = AppModule = __decorate([ + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forRoot({ + type: 'mysql', + host: db_constants_1.DbConstants.DB_HOST, + username: db_constants_1.DbConstants.DB_USER, + password: db_constants_1.DbConstants.DB_PASSWORD, + database: db_constants_1.DbConstants.DB_NAME, + entities: [ + admin_entity_1.Admin, + user_entity_1.User, + state_entity_1.State, + town_entity_1.Town, + town_traduction_entity_1.TownTraduction, + place_entity_1.Place, + PointOfInterest_entity_1.PointOfInterest, + available_date_entity_1.AvailableDate, + PointOfInterestTraduction_entity_1.PointOfInterestTraduction, + place_traduction_entity_1.PlaceTraduction, + category_entity_1.Category, + route_entity_1.Route, + travel_place_entity_1.TravelPlace, + visited_entity_1.Visited, + user_reset_code_entity_1.UserResetCode, + admin_reset_code_entity_1.AdminResetCode, + user_confirm_code_entity_1.UserConfirmCode, + ], + synchronize: db_constants_1.DbConstants.DB_SYNC, + logging: false, + }), + mailer_1.MailerModule.forRoot({ + transport: { + host: mail_constants_1.MailConstants.MAIL_HOST, + port: 587, + secure: false, + auth: { + user: mail_constants_1.MailConstants.MAIL_USER, + pass: mail_constants_1.MailConstants.MAIL_PASSWORD, + }, + }, + defaults: { + from: '"No Reply" ', + }, + }), + authAdmin_module_1.AuthAdminModule, + admin_module_1.AdminModule, + user_module_1.UserModule, + authUser_module_1.AuthUserModule, + state_module_1.StateModule, + database_seeder_module_1.DatabaseSeederModule, + town_module_1.TownModule, + place_module_1.PlaceModule, + serve_static_1.ServeStaticModule.forRoot({ + rootPath: (0, path_1.join)(__dirname, '..', 'static'), + }), + PointOfInterest_module_1.PointOfInterestModule, + category_module_1.CategoryModule, + route_module_1.RouteModule, + travel_place_module_1.TravelPlaceModule, + visited_module_1.VisitedModule, + ], + controllers: [app_controller_1.AppController], + providers: [app_service_1.AppService, database_seeder_module_1.DatabaseSeederModule, email_service_1.EmailService], + exports: [typeorm_1.TypeOrmModule], + }) +], AppModule); +//# sourceMappingURL=app.module.js.map \ No newline at end of file diff --git a/backend/dist/app.module.js.map b/backend/dist/app.module.js.map new file mode 100644 index 00000000..f541ee8c --- /dev/null +++ b/backend/dist/app.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,qDAAiD;AACjD,+CAA2C;AAC3C,uDAAmD;AACnD,gEAAsD;AACtD,2DAAuD;AACvD,oEAAgE;AAChE,oDAAgD;AAChD,6DAAmD;AACnD,iEAA6D;AAC7D,uDAAmD;AACnD,qFAAgF;AAChF,gEAAsD;AACtD,uDAAyD;AACzD,+BAA4B;AAC5B,6DAAmD;AACnD,oDAAgD;AAChD,mFAAwE;AACxE,uDAAmD;AACnD,gEAAsD;AACtD,qFAAiF;AACjF,8FAAoF;AACpF,kFAAuE;AACvE,kHAAwG;AACxG,sFAA2E;AAC3E,gEAA4D;AAC5D,yEAA+D;AAC/D,uDAAmD;AACnD,gEAAsD;AACtD,4EAAuE;AACvE,qFAA0E;AAC1E,6DAAyD;AACzD,sEAA4D;AAC5D,yDAAqD;AACrD,wFAA4E;AAC5E,mDAAsD;AACtD,+DAA2D;AAC3D,4FAAgF;AAChF,4FAAgF;AAmEzE,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAjErB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,OAAO,CAAC;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,0BAAW,CAAC,OAAO;gBACzB,QAAQ,EAAE,0BAAW,CAAC,OAAO;gBAC7B,QAAQ,EAAE,0BAAW,CAAC,WAAW;gBACjC,QAAQ,EAAE,0BAAW,CAAC,OAAO;gBAC7B,QAAQ,EAAE;oBACR,oBAAK;oBACL,kBAAI;oBACJ,oBAAK;oBACL,kBAAI;oBACJ,uCAAc;oBACd,oBAAK;oBACL,wCAAe;oBACf,qCAAa;oBACb,4DAAyB;oBACzB,yCAAe;oBACf,0BAAQ;oBACR,oBAAK;oBACL,iCAAW;oBACX,wBAAO;oBACP,sCAAa;oBACb,wCAAc;oBACd,0CAAe;iBAChB;gBACD,WAAW,EAAE,0BAAW,CAAC,OAAO;gBAChC,OAAO,EAAE,KAAK;aACf,CAAC;YACF,qBAAY,CAAC,OAAO,CAAC;gBACnB,SAAS,EAAE;oBACT,IAAI,EAAE,8BAAa,CAAC,SAAS;oBAC7B,IAAI,EAAE,GAAG;oBACT,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE;wBACJ,IAAI,EAAE,8BAAa,CAAC,SAAS;wBAC7B,IAAI,EAAE,8BAAa,CAAC,aAAa;qBAClC;iBACF;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,kCAAkC;iBACzC;aACF,CAAC;YACF,kCAAe;YACf,0BAAW;YACX,wBAAU;YACV,gCAAc;YACd,0BAAW;YACX,6CAAoB;YACpB,wBAAU;YACV,0BAAW;YACX,gCAAiB,CAAC,OAAO,CAAC;gBACxB,QAAQ,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC;aAC1C,CAAC;YACF,8CAAqB;YACrB,gCAAc;YACd,0BAAW;YACX,uCAAiB;YACjB,8BAAa;SACd;QACD,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE,CAAC,wBAAU,EAAE,6CAAoB,EAAE,4BAAY,CAAC;QAC3D,OAAO,EAAE,CAAC,uBAAa,CAAC;KACzB,CAAC;GACW,SAAS,CAAG"} \ No newline at end of file diff --git a/backend/dist/app.service.d.ts b/backend/dist/app.service.d.ts new file mode 100644 index 00000000..1a0f977f --- /dev/null +++ b/backend/dist/app.service.d.ts @@ -0,0 +1,2 @@ +export declare class AppService { +} diff --git a/backend/dist/app.service.js b/backend/dist/app.service.js new file mode 100644 index 00000000..0c9959f7 --- /dev/null +++ b/backend/dist/app.service.js @@ -0,0 +1,17 @@ +"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 { +}; +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/backend/dist/app.service.js.map b/backend/dist/app.service.js.map new file mode 100644 index 00000000..c90c4998 --- /dev/null +++ b/backend/dist/app.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.service.js","sourceRoot":"","sources":["../src/app.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAGrC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;GACA,UAAU,CAAG"} \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmin.guard.d.ts b/backend/dist/auth/admin/authAdmin.guard.d.ts new file mode 100644 index 00000000..4b2bb43c --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.guard.d.ts @@ -0,0 +1,11 @@ +import { CanActivate, ExecutionContext } from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +import { AuthAdminService } from './authAdmin.service'; +import { AdminService } from 'src/admin/admin.service'; +export declare class AuthAdminGuard implements CanActivate { + private authAdminService; + private adminService; + private reflector; + constructor(authAdminService: AuthAdminService, adminService: AdminService, reflector: Reflector); + canActivate(context: ExecutionContext): Promise; +} diff --git a/backend/dist/auth/admin/authAdmin.guard.js b/backend/dist/auth/admin/authAdmin.guard.js new file mode 100644 index 00000000..f79745de --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.guard.js @@ -0,0 +1,48 @@ +"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.AuthAdminGuard = void 0; +const common_1 = require("@nestjs/common"); +const core_1 = require("@nestjs/core"); +const role_decorator_1 = require("../role.decorator"); +const authAdmin_service_1 = require("./authAdmin.service"); +const admin_service_1 = require("../../admin/admin.service"); +let AuthAdminGuard = class AuthAdminGuard { + constructor(authAdminService, adminService, reflector) { + this.authAdminService = authAdminService; + this.adminService = adminService; + this.reflector = reflector; + } + async canActivate(context) { + const requiredRole = this.reflector.get(role_decorator_1.Roles, context.getHandler()); + if (!requiredRole) + return true; + const request = context.switchToHttp().getRequest(); + let { authorization } = request.headers; + if (!authorization) + throw new common_1.UnauthorizedException('session expired! Please sign In'); + authorization = authorization.split(' ')[1]; + const jwtPayload = await this.authAdminService.validateToken(authorization); + if (!requiredRole.includes(jwtPayload.role)) + throw new common_1.UnauthorizedException('Unauthorized access'); + const admin = await this.adminService.findOne(jwtPayload.email); + request.admin = { ...admin }; + return true; + } +}; +exports.AuthAdminGuard = AuthAdminGuard; +exports.AuthAdminGuard = AuthAdminGuard = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [authAdmin_service_1.AuthAdminService, + admin_service_1.AdminService, + core_1.Reflector]) +], AuthAdminGuard); +//# sourceMappingURL=authAdmin.guard.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmin.guard.js.map b/backend/dist/auth/admin/authAdmin.guard.js.map new file mode 100644 index 00000000..7e6e3ef5 --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.guard.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authAdmin.guard.js","sourceRoot":"","sources":["../../../src/auth/admin/authAdmin.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAkG;AAClG,uCAAyC;AACzC,sDAA0C;AAC1C,2DAAuD;AACvD,6DAAuD;AAGhD,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YACU,gBAAkC,EAClC,YAA0B,EAC1B,SAAoB;QAFpB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,cAAS,GAAT,SAAS,CAAW;IAC3B,CAAC;IACJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAK,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,IAAI,EAAE,aAAa,EAAE,GAAQ,OAAO,CAAC,OAAO,CAAC;QAC7C,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,8BAAqB,CAAC,iCAAiC,CAAC,CAAC;QACvF,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAC5E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QACpG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAnBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAGiB,oCAAgB;QACpB,4BAAY;QACf,gBAAS;GAJnB,cAAc,CAmB1B"} \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmin.module.d.ts b/backend/dist/auth/admin/authAdmin.module.d.ts new file mode 100644 index 00000000..4c7476da --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.module.d.ts @@ -0,0 +1,2 @@ +export declare class AuthAdminModule { +} diff --git a/backend/dist/auth/admin/authAdmin.module.js b/backend/dist/auth/admin/authAdmin.module.js new file mode 100644 index 00000000..612ac9d3 --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.module.js @@ -0,0 +1,33 @@ +"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.AuthAdminModule = void 0; +const common_1 = require("@nestjs/common"); +const authAdmincontroller_1 = require("./authAdmincontroller"); +const encryption_service_1 = require("../encryption/encryption.service"); +const typeorm_1 = require("@nestjs/typeorm"); +const admin_entity_1 = require("../../admin/entities/admin.entity"); +const authAdmin_service_1 = require("./authAdmin.service"); +const admin_service_1 = require("../../admin/admin.service"); +const jwt_1 = require("@nestjs/jwt"); +const authAdmin_guard_1 = require("./authAdmin.guard"); +const town_entity_1 = require("../../town/entities/town.entity"); +const admin_reset_code_entity_1 = require("./entitites/admin-reset-code.entity"); +const email_service_1 = require("../../email/email.service"); +let AuthAdminModule = class AuthAdminModule { +}; +exports.AuthAdminModule = AuthAdminModule; +exports.AuthAdminModule = AuthAdminModule = __decorate([ + (0, common_1.Module)({ + controllers: [authAdmincontroller_1.AuthAdminController], + providers: [authAdmin_service_1.AuthAdminService, admin_service_1.AdminService, jwt_1.JwtService, encryption_service_1.EncryptionService, authAdmin_guard_1.AuthAdminGuard, email_service_1.EmailService], + imports: [typeorm_1.TypeOrmModule.forFeature([admin_entity_1.Admin, town_entity_1.Town, admin_reset_code_entity_1.AdminResetCode])], + exports: [authAdmin_service_1.AuthAdminService], + }) +], AuthAdminModule); +//# sourceMappingURL=authAdmin.module.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmin.module.js.map b/backend/dist/auth/admin/authAdmin.module.js.map new file mode 100644 index 00000000..621cedd7 --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authAdmin.module.js","sourceRoot":"","sources":["../../../src/auth/admin/authAdmin.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+DAA4D;AAC5D,yEAAqE;AACrE,6CAAgD;AAChD,oEAAwD;AACxD,2DAAuD;AACvD,6DAAuD;AACvD,qCAAyC;AACzC,uDAAmD;AACnD,iEAAqD;AACrD,iFAAqE;AACrE,6DAAuD;AAQhD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAN3B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,yCAAmB,CAAC;QAClC,SAAS,EAAE,CAAC,oCAAgB,EAAE,4BAAY,EAAE,gBAAU,EAAE,sCAAiB,EAAE,gCAAc,EAAE,4BAAY,CAAC;QACxG,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,oBAAK,EAAE,kBAAI,EAAE,wCAAc,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC,oCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"} \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmin.service.d.ts b/backend/dist/auth/admin/authAdmin.service.d.ts new file mode 100644 index 00000000..7db2c4d7 --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.service.d.ts @@ -0,0 +1,24 @@ +import { AdminService } from 'src/admin/admin.service'; +import { JwtService } from '@nestjs/jwt'; +import { EncryptionService } from '../encryption/encryption.service'; +import { CreateAdminDto } from 'src/admin/dto/create-admin.dto'; +import { LoginAdminDto } from 'src/auth/admin/dto/login-admin.dto'; +import { AdminSigninResDto } from './dto/admin-signin-res.dto'; +import { PayloadJwtDto } from 'src/shared/dto/payload-jwt.dto'; +import { UpdatePwdDto } from '../user/dto/update-pwd.dto'; +import { AdminResetCode } from './entitites/admin-reset-code.entity'; +import { Repository } from 'typeorm'; +import { AdminResetPasswordDto } from './dto/admin-reset-password.dto'; +export declare class AuthAdminService { + private adminResetCodeRepository; + private adminService; + private jwtService; + private encryptionService; + constructor(adminResetCodeRepository: Repository, adminService: AdminService, jwtService: JwtService, encryptionService: EncryptionService); + signUp(createAdminDto: CreateAdminDto): Promise; + signIn(logInAdmin: LoginAdminDto): Promise; + validateToken(token: string): Promise; + changePassword(email: string, updatePwdDto: UpdatePwdDto): Promise; + getResetPasswordCode(email: string): Promise; + resetPassword(adminResetPasswordDto: AdminResetPasswordDto): Promise; +} diff --git a/backend/dist/auth/admin/authAdmin.service.js b/backend/dist/auth/admin/authAdmin.service.js new file mode 100644 index 00000000..06d68a17 --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.service.js @@ -0,0 +1,122 @@ +"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.AuthAdminService = void 0; +const common_1 = require("@nestjs/common"); +const admin_service_1 = require("../../admin/admin.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../encryption/encryption.service"); +const jwt_constants_1 = require("../../constants/jwt.constants"); +const crypto_1 = require("crypto"); +const typeorm_1 = require("@nestjs/typeorm"); +const admin_reset_code_entity_1 = require("./entitites/admin-reset-code.entity"); +const typeorm_2 = require("typeorm"); +let AuthAdminService = class AuthAdminService { + constructor(adminResetCodeRepository, adminService, jwtService, encryptionService) { + this.adminResetCodeRepository = adminResetCodeRepository; + this.adminService = adminService; + this.jwtService = jwtService; + this.encryptionService = encryptionService; + } + async signUp(createAdminDto) { + const loginAdminDto = { + email: createAdminDto.email, + password: createAdminDto.password, + }; + const hashedPwd = await this.encryptionService.hashPassword(createAdminDto.password); + createAdminDto.password = hashedPwd; + if (await this.adminService.adminExists(createAdminDto.email)) { + throw new common_1.HttpException('Admin already exists', common_1.HttpStatus.UNAUTHORIZED); + } + await this.adminService.create(createAdminDto); + const adminSigninResDto = await this.signIn(loginAdminDto); + return adminSigninResDto.token; + } + async signIn(logInAdmin) { + const admin = await this.adminService.findOne(logInAdmin.email); + const validPwd = await this.encryptionService.comparePassword(logInAdmin.password, admin.password); + if (!validPwd) { + throw new common_1.HttpException('Invalid credentials', common_1.HttpStatus.UNAUTHORIZED); + } + const accessToken = await this.jwtService.sign({ email: admin.email, role: admin.role }, { secret: jwt_constants_1.JwtConstants.SECRET }); + const adminSigninResDto = { + email: admin.email, + name: admin.name, + role: admin.role, + token: accessToken, + }; + return adminSigninResDto; + } + async validateToken(token) { + try { + const payload = await this.jwtService.verify(token, { secret: jwt_constants_1.JwtConstants.SECRET }); + return payload; + } + catch (error) { + throw new common_1.UnauthorizedException('Invalid token'); + } + } + async changePassword(email, updatePwdDto) { + const admin = await this.adminService.findOne(email); + const validPwd = await this.encryptionService.comparePassword(updatePwdDto.prevPassword, admin.password); + if (!validPwd) { + throw new common_1.HttpException('Invalid password', common_1.HttpStatus.UNAUTHORIZED); + } + const hashedPwd = await this.encryptionService.hashPassword(updatePwdDto.newPassword); + await this.adminService.updatePassword(email, hashedPwd); + } + async getResetPasswordCode(email) { + const admin = await this.adminService.findOne(email); + if (!admin) + throw new common_1.UnauthorizedException('Invalid email'); + const resetCode = (0, crypto_1.randomInt)(100000, 999999).toString(); + const expirationDate = new Date(); + expirationDate.setMinutes(expirationDate.getMinutes() + 10); + const existUserCode = await this.adminResetCodeRepository.findBy({ + admin: admin, + code: resetCode, + }); + if (existUserCode.length > 0) { + await this.adminResetCodeRepository.delete(existUserCode[0].id); + } + await this.adminResetCodeRepository.save({ admin, code: resetCode, expirationDate }); + return resetCode; + } + async resetPassword(adminResetPasswordDto) { + const admin = await this.adminService.findOne(adminResetPasswordDto.email); + if (!admin) + throw new common_1.UnauthorizedException('Invalid email'); + const adminResetCode = await this.adminResetCodeRepository.findBy({ + admin: admin, + code: adminResetPasswordDto.resetCode, + }); + if (adminResetCode.length === 0) + throw new common_1.UnauthorizedException('Invalid code'); + if (adminResetCode[0].expirationDate < new Date()) + throw new common_1.UnauthorizedException('Code expired'); + const hashedPwd = await this.encryptionService.hashPassword(adminResetPasswordDto.newPassword); + await this.adminService.updatePassword(adminResetPasswordDto.email, hashedPwd); + await this.adminResetCodeRepository.delete(adminResetCode[0].id); + } +}; +exports.AuthAdminService = AuthAdminService; +exports.AuthAdminService = AuthAdminService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(admin_reset_code_entity_1.AdminResetCode)), + __metadata("design:paramtypes", [typeorm_2.Repository, + admin_service_1.AdminService, + jwt_1.JwtService, + encryption_service_1.EncryptionService]) +], AuthAdminService); +//# sourceMappingURL=authAdmin.service.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmin.service.js.map b/backend/dist/auth/admin/authAdmin.service.js.map new file mode 100644 index 00000000..b6514c4b --- /dev/null +++ b/backend/dist/auth/admin/authAdmin.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authAdmin.service.js","sourceRoot":"","sources":["../../../src/auth/admin/authAdmin.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmincontroller.d.ts b/backend/dist/auth/admin/authAdmincontroller.d.ts new file mode 100644 index 00000000..5dd7966f --- /dev/null +++ b/backend/dist/auth/admin/authAdmincontroller.d.ts @@ -0,0 +1,21 @@ +import { AuthAdminService } from './authAdmin.service'; +import { CreateAdminDto } from 'src/admin/dto/create-admin.dto'; +import { LoginAdminDto } from 'src/auth/admin/dto/login-admin.dto'; +import { AdminSigninResDto } from './dto/admin-signin-res.dto'; +import { UpdatePwdDto } from '../user/dto/update-pwd.dto'; +import { CustomAdminRequest } from './interface/customAdminReq'; +import { AdminResetPasswordBody } from './dto/admin-reset-password.dto'; +import { GetResetCode } from './dto/get-reset-code.dto'; +import { EmailService } from 'src/email/email.service'; +export declare class AuthAdminController { + private readonly authAdminService; + private readonly mailService; + constructor(authAdminService: AuthAdminService, mailService: EmailService); + signUp(createAdminDto: CreateAdminDto): Promise<{ + token: string; + }>; + signIn(loginAdminDto: LoginAdminDto): Promise; + changePassword(req: CustomAdminRequest, updatePwdDto: UpdatePwdDto): Promise; + resetPassword(resetPasswordDto: AdminResetPasswordBody): Promise; + getResetCode(resetPasswordInfo: GetResetCode): Promise; +} diff --git a/backend/dist/auth/admin/authAdmincontroller.js b/backend/dist/auth/admin/authAdmincontroller.js new file mode 100644 index 00000000..0c5a572b --- /dev/null +++ b/backend/dist/auth/admin/authAdmincontroller.js @@ -0,0 +1,136 @@ +"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.AuthAdminController = void 0; +const common_1 = require("@nestjs/common"); +const authAdmin_service_1 = require("./authAdmin.service"); +const create_admin_dto_1 = require("../../admin/dto/create-admin.dto"); +const login_admin_dto_1 = require("./dto/login-admin.dto"); +const swagger_1 = require("@nestjs/swagger"); +const admin_signin_res_dto_1 = require("./dto/admin-signin-res.dto"); +const role_decorator_1 = require("../role.decorator"); +const admin_role_enum_1 = require("../../shared/enum/admin-role.enum"); +const authAdmin_guard_1 = require("./authAdmin.guard"); +const update_pwd_dto_1 = require("../user/dto/update-pwd.dto"); +const admin_reset_password_dto_1 = require("./dto/admin-reset-password.dto"); +const email_service_1 = require("../../email/email.service"); +let AuthAdminController = class AuthAdminController { + constructor(authAdminService, mailService) { + this.authAdminService = authAdminService; + this.mailService = mailService; + } + async signUp(createAdminDto) { + try { + createAdminDto.role = admin_role_enum_1.ADMIN_ROLE.ADMIN; + const accessToken = await this.authAdminService.signUp(createAdminDto); + return { token: accessToken }; + } + catch (e) { + throw e; + } + } + async signIn(loginAdminDto) { + try { + const adminSigninResDto = await this.authAdminService.signIn(loginAdminDto); + return adminSigninResDto; + } + catch (e) { + throw e; + } + } + async changePassword(req, updatePwdDto) { + const email = req.admin.email; + return this.authAdminService.changePassword(email, updatePwdDto); + } + async resetPassword(resetPasswordDto) { + return this.authAdminService.resetPassword(resetPasswordDto); + } + async getResetCode(resetPasswordInfo) { + try { + const code = await this.authAdminService.getResetPasswordCode(resetPasswordInfo.email); + await this.mailService.sendResetPasswordEmail(resetPasswordInfo.email, code); + } + catch (e) { + throw e; + } + } +}; +exports.AuthAdminController = AuthAdminController; +__decorate([ + (0, swagger_1.ApiBody)({ type: create_admin_dto_1.CreateAdminDto }), + (0, swagger_1.ApiCreatedResponse)({ + content: { + 'application/json': { + example: { + token: 'token', + }, + }, + }, + }), + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.SUPERADMIN_ROLES), + (0, common_1.Post)('admin/signup'), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiUnauthorizedResponse)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [create_admin_dto_1.CreateAdminDto]), + __metadata("design:returntype", Promise) +], AuthAdminController.prototype, "signUp", null); +__decorate([ + (0, swagger_1.ApiBody)({ type: login_admin_dto_1.LoginAdminDto }), + (0, swagger_1.ApiCreatedResponse)({ + type: admin_signin_res_dto_1.AdminSigninResDto, + }), + (0, swagger_1.ApiUnauthorizedResponse)(), + (0, common_1.Post)('admin/signin'), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [login_admin_dto_1.LoginAdminDto]), + __metadata("design:returntype", Promise) +], AuthAdminController.prototype, "signIn", null); +__decorate([ + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.ADMIN_ROLES), + (0, common_1.Post)('admin/change-password'), + (0, swagger_1.ApiBearerAuth)('jwt'), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, update_pwd_dto_1.UpdatePwdDto]), + __metadata("design:returntype", Promise) +], AuthAdminController.prototype, "changePassword", null); +__decorate([ + (0, swagger_1.ApiBody)({ type: admin_reset_password_dto_1.AdminResetPasswordBody }), + (0, common_1.Post)('admin/reset-password'), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [admin_reset_password_dto_1.AdminResetPasswordBody]), + __metadata("design:returntype", Promise) +], AuthAdminController.prototype, "resetPassword", null); +__decorate([ + (0, swagger_1.ApiBody)({ type: admin_reset_password_dto_1.AdminRequestCodeBody }), + (0, common_1.Post)('admin/get-reset-code'), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], AuthAdminController.prototype, "getResetCode", null); +exports.AuthAdminController = AuthAdminController = __decorate([ + (0, common_1.Controller)(), + (0, swagger_1.ApiTags)('Create admin account and sign in as admin'), + __metadata("design:paramtypes", [authAdmin_service_1.AuthAdminService, + email_service_1.EmailService]) +], AuthAdminController); +//# sourceMappingURL=authAdmincontroller.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/authAdmincontroller.js.map b/backend/dist/auth/admin/authAdmincontroller.js.map new file mode 100644 index 00000000..79aebbff --- /dev/null +++ b/backend/dist/auth/admin/authAdmincontroller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authAdmincontroller.js","sourceRoot":"","sources":["../../../src/auth/admin/authAdmincontroller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/admin-reset-password.dto.d.ts b/backend/dist/auth/admin/dto/admin-reset-password.dto.d.ts new file mode 100644 index 00000000..6975a82d --- /dev/null +++ b/backend/dist/auth/admin/dto/admin-reset-password.dto.d.ts @@ -0,0 +1,13 @@ +export interface AdminResetPasswordDto { + email: string; + resetCode: string; + newPassword: string; +} +export declare class AdminResetPasswordBody { + email: string; + resetCode: string; + newPassword: string; +} +export declare class AdminRequestCodeBody { + email: string; +} diff --git a/backend/dist/auth/admin/dto/admin-reset-password.dto.js b/backend/dist/auth/admin/dto/admin-reset-password.dto.js new file mode 100644 index 00000000..730458ac --- /dev/null +++ b/backend/dist/auth/admin/dto/admin-reset-password.dto.js @@ -0,0 +1,36 @@ +"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.AdminRequestCodeBody = exports.AdminResetPasswordBody = void 0; +const swagger_1 = require("@nestjs/swagger"); +class AdminResetPasswordBody { +} +exports.AdminResetPasswordBody = AdminResetPasswordBody; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminResetPasswordBody.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminResetPasswordBody.prototype, "resetCode", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminResetPasswordBody.prototype, "newPassword", void 0); +class AdminRequestCodeBody { +} +exports.AdminRequestCodeBody = AdminRequestCodeBody; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminRequestCodeBody.prototype, "email", void 0); +//# sourceMappingURL=admin-reset-password.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/admin-reset-password.dto.js.map b/backend/dist/auth/admin/dto/admin-reset-password.dto.js.map new file mode 100644 index 00000000..bf1f3117 --- /dev/null +++ b/backend/dist/auth/admin/dto/admin-reset-password.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin-reset-password.dto.js","sourceRoot":"","sources":["../../../../src/auth/admin/dto/admin-reset-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAQ9C,MAAa,sBAAsB;CAOlC;AAPD,wDAOC;AALC;IADC,IAAA,qBAAW,GAAE;;qDACA;AAEd;IADC,IAAA,qBAAW,GAAE;;yDACI;AAElB;IADC,IAAA,qBAAW,GAAE;;2DACM;AAGtB,MAAa,oBAAoB;CAGhC;AAHD,oDAGC;AADC;IADC,IAAA,qBAAW,GAAE;;mDACA"} \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/admin-signin-res.dto.d.ts b/backend/dist/auth/admin/dto/admin-signin-res.dto.d.ts new file mode 100644 index 00000000..124a5c00 --- /dev/null +++ b/backend/dist/auth/admin/dto/admin-signin-res.dto.d.ts @@ -0,0 +1,7 @@ +import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum'; +export declare class AdminSigninResDto { + email: string; + name: string; + token: string; + role: ADMIN_ROLE; +} diff --git a/backend/dist/auth/admin/dto/admin-signin-res.dto.js b/backend/dist/auth/admin/dto/admin-signin-res.dto.js new file mode 100644 index 00000000..fef6f0ad --- /dev/null +++ b/backend/dist/auth/admin/dto/admin-signin-res.dto.js @@ -0,0 +1,34 @@ +"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.AdminSigninResDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const admin_role_enum_1 = require("../../../shared/enum/admin-role.enum"); +class AdminSigninResDto { +} +exports.AdminSigninResDto = AdminSigninResDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminSigninResDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminSigninResDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminSigninResDto.prototype, "token", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], AdminSigninResDto.prototype, "role", void 0); +//# sourceMappingURL=admin-signin-res.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/admin-signin-res.dto.js.map b/backend/dist/auth/admin/dto/admin-signin-res.dto.js.map new file mode 100644 index 00000000..2fd596bd --- /dev/null +++ b/backend/dist/auth/admin/dto/admin-signin-res.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin-signin-res.dto.js","sourceRoot":"","sources":["../../../../src/auth/admin/dto/admin-signin-res.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,0EAA6D;AAE7D,MAAa,iBAAiB;CAS7B;AATD,8CASC;AAPC;IADC,IAAA,qBAAW,GAAE;;gDACA;AAEd;IADC,IAAA,qBAAW,GAAE;;+CACD;AAEb;IADC,IAAA,qBAAW,GAAE;;gDACA;AAEd;IADC,IAAA,qBAAW,GAAE;;+CACG"} \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/get-reset-code.dto.d.ts b/backend/dist/auth/admin/dto/get-reset-code.dto.d.ts new file mode 100644 index 00000000..2d24084d --- /dev/null +++ b/backend/dist/auth/admin/dto/get-reset-code.dto.d.ts @@ -0,0 +1,3 @@ +export interface GetResetCode { + email: string; +} diff --git a/backend/dist/auth/admin/dto/get-reset-code.dto.js b/backend/dist/auth/admin/dto/get-reset-code.dto.js new file mode 100644 index 00000000..79d2a749 --- /dev/null +++ b/backend/dist/auth/admin/dto/get-reset-code.dto.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=get-reset-code.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/get-reset-code.dto.js.map b/backend/dist/auth/admin/dto/get-reset-code.dto.js.map new file mode 100644 index 00000000..564a0bce --- /dev/null +++ b/backend/dist/auth/admin/dto/get-reset-code.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"get-reset-code.dto.js","sourceRoot":"","sources":["../../../../src/auth/admin/dto/get-reset-code.dto.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/login-admin.dto.d.ts b/backend/dist/auth/admin/dto/login-admin.dto.d.ts new file mode 100644 index 00000000..f4fd3876 --- /dev/null +++ b/backend/dist/auth/admin/dto/login-admin.dto.d.ts @@ -0,0 +1,4 @@ +export declare class LoginAdminDto { + email: any; + password: any; +} diff --git a/backend/dist/auth/admin/dto/login-admin.dto.js b/backend/dist/auth/admin/dto/login-admin.dto.js new file mode 100644 index 00000000..33eb4fc2 --- /dev/null +++ b/backend/dist/auth/admin/dto/login-admin.dto.js @@ -0,0 +1,25 @@ +"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.LoginAdminDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class LoginAdminDto { +} +exports.LoginAdminDto = LoginAdminDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Object) +], LoginAdminDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Object) +], LoginAdminDto.prototype, "password", void 0); +//# sourceMappingURL=login-admin.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/dto/login-admin.dto.js.map b/backend/dist/auth/admin/dto/login-admin.dto.js.map new file mode 100644 index 00000000..6a4072a2 --- /dev/null +++ b/backend/dist/auth/admin/dto/login-admin.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login-admin.dto.js","sourceRoot":"","sources":["../../../../src/auth/admin/dto/login-admin.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,aAAa;CAKzB;AALD,sCAKC;AAHC;IADC,IAAA,qBAAW,GAAE;;4CACR;AAEN;IADC,IAAA,qBAAW,GAAE;;+CACL"} \ No newline at end of file diff --git a/backend/dist/auth/admin/entitites/admin-reset-code.entity.d.ts b/backend/dist/auth/admin/entitites/admin-reset-code.entity.d.ts new file mode 100644 index 00000000..b5d7d505 --- /dev/null +++ b/backend/dist/auth/admin/entitites/admin-reset-code.entity.d.ts @@ -0,0 +1,7 @@ +import { Admin } from 'src/admin/entities/admin.entity'; +export declare class AdminResetCode { + id: number; + admin: Admin; + code: string; + expirationDate: Date; +} diff --git a/backend/dist/auth/admin/entitites/admin-reset-code.entity.js b/backend/dist/auth/admin/entitites/admin-reset-code.entity.js new file mode 100644 index 00000000..84d0d280 --- /dev/null +++ b/backend/dist/auth/admin/entitites/admin-reset-code.entity.js @@ -0,0 +1,37 @@ +"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.AdminResetCode = void 0; +const admin_entity_1 = require("../../../admin/entities/admin.entity"); +const typeorm_1 = require("typeorm"); +let AdminResetCode = class AdminResetCode { +}; +exports.AdminResetCode = AdminResetCode; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], AdminResetCode.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.ManyToOne)(() => admin_entity_1.Admin, (admin) => admin.resetCodes), + __metadata("design:type", admin_entity_1.Admin) +], AdminResetCode.prototype, "admin", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], AdminResetCode.prototype, "code", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", Date) +], AdminResetCode.prototype, "expirationDate", void 0); +exports.AdminResetCode = AdminResetCode = __decorate([ + (0, typeorm_1.Entity)() +], AdminResetCode); +//# sourceMappingURL=admin-reset-code.entity.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/entitites/admin-reset-code.entity.js.map b/backend/dist/auth/admin/entitites/admin-reset-code.entity.js.map new file mode 100644 index 00000000..43e61367 --- /dev/null +++ b/backend/dist/auth/admin/entitites/admin-reset-code.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin-reset-code.entity.js","sourceRoot":"","sources":["../../../../src/auth/admin/entitites/admin-reset-code.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uEAAwD;AACxD,qCAA4E;AAGrE,IAAM,cAAc,GAApB,MAAM,cAAc;CAY1B,CAAA;AAZY,wCAAc;AAEzB;IADC,IAAA,gCAAsB,GAAE;;0CACd;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;8BAC7C,oBAAK;6CAAC;AAGb;IADC,IAAA,gBAAM,GAAE;;4CACI;AAGb;IADC,IAAA,gBAAM,GAAE;8BACO,IAAI;sDAAC;yBAXV,cAAc;IAD1B,IAAA,gBAAM,GAAE;GACI,cAAc,CAY1B"} \ No newline at end of file diff --git a/backend/dist/auth/admin/interface/customAdminReq.d.ts b/backend/dist/auth/admin/interface/customAdminReq.d.ts new file mode 100644 index 00000000..eca0a695 --- /dev/null +++ b/backend/dist/auth/admin/interface/customAdminReq.d.ts @@ -0,0 +1,5 @@ +import { Request } from 'express'; +import { Admin } from 'src/admin/entities/admin.entity'; +export interface CustomAdminRequest extends Request { + admin?: Admin; +} diff --git a/backend/dist/auth/admin/interface/customAdminReq.js b/backend/dist/auth/admin/interface/customAdminReq.js new file mode 100644 index 00000000..3932f217 --- /dev/null +++ b/backend/dist/auth/admin/interface/customAdminReq.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=customAdminReq.js.map \ No newline at end of file diff --git a/backend/dist/auth/admin/interface/customAdminReq.js.map b/backend/dist/auth/admin/interface/customAdminReq.js.map new file mode 100644 index 00000000..16a9571b --- /dev/null +++ b/backend/dist/auth/admin/interface/customAdminReq.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customAdminReq.js","sourceRoot":"","sources":["../../../../src/auth/admin/interface/customAdminReq.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/backend/dist/auth/encryption/encryption.service.d.ts b/backend/dist/auth/encryption/encryption.service.d.ts new file mode 100644 index 00000000..11b4c8e7 --- /dev/null +++ b/backend/dist/auth/encryption/encryption.service.d.ts @@ -0,0 +1,4 @@ +export declare class EncryptionService { + hashPassword(password: string): Promise; + comparePassword(password: string, hashedPassword: string): Promise; +} diff --git a/backend/dist/auth/encryption/encryption.service.js b/backend/dist/auth/encryption/encryption.service.js new file mode 100644 index 00000000..3271b7b0 --- /dev/null +++ b/backend/dist/auth/encryption/encryption.service.js @@ -0,0 +1,26 @@ +"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.EncryptionService = void 0; +const common_1 = require("@nestjs/common"); +const bcrypt = require("bcrypt"); +let EncryptionService = class EncryptionService { + async hashPassword(password) { + const salt = await bcrypt.genSalt(10); + const hashedPwd = await bcrypt.hash(password, salt); + return hashedPwd; + } + async comparePassword(password, hashedPassword) { + return await bcrypt.compare(password, hashedPassword); + } +}; +exports.EncryptionService = EncryptionService; +exports.EncryptionService = EncryptionService = __decorate([ + (0, common_1.Injectable)() +], EncryptionService); +//# sourceMappingURL=encryption.service.js.map \ No newline at end of file diff --git a/backend/dist/auth/encryption/encryption.service.js.map b/backend/dist/auth/encryption/encryption.service.js.map new file mode 100644 index 00000000..28d0d3ee --- /dev/null +++ b/backend/dist/auth/encryption/encryption.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encryption.service.js","sourceRoot":"","sources":["../../../src/auth/encryption/encryption.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,iCAAiC;AAE1B,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,IAAI,GAAW,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAW,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,cAAsB;QAC5D,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AAVY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAU7B"} \ No newline at end of file diff --git a/backend/dist/auth/role.decorator.d.ts b/backend/dist/auth/role.decorator.d.ts new file mode 100644 index 00000000..cef6031f --- /dev/null +++ b/backend/dist/auth/role.decorator.d.ts @@ -0,0 +1 @@ +export declare const Roles: import("@nestjs/core").ReflectableDecorator; diff --git a/backend/dist/auth/role.decorator.js b/backend/dist/auth/role.decorator.js new file mode 100644 index 00000000..75a4df41 --- /dev/null +++ b/backend/dist/auth/role.decorator.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Roles = void 0; +const core_1 = require("@nestjs/core"); +exports.Roles = core_1.Reflector.createDecorator(); +//# sourceMappingURL=role.decorator.js.map \ No newline at end of file diff --git a/backend/dist/auth/role.decorator.js.map b/backend/dist/auth/role.decorator.js.map new file mode 100644 index 00000000..77adfc52 --- /dev/null +++ b/backend/dist/auth/role.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"role.decorator.js","sourceRoot":"","sources":["../../src/auth/role.decorator.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AAE5B,QAAA,KAAK,GAAG,gBAAS,CAAC,eAAe,EAAY,CAAC"} \ No newline at end of file diff --git a/backend/dist/auth/user/authUser.guard.d.ts b/backend/dist/auth/user/authUser.guard.d.ts new file mode 100644 index 00000000..07f35f28 --- /dev/null +++ b/backend/dist/auth/user/authUser.guard.d.ts @@ -0,0 +1,9 @@ +import { CanActivate, ExecutionContext } from '@nestjs/common'; +import { UserService } from 'src/user/user.service'; +import { AuthUserService } from './authUserservice'; +export declare class AuthUserGuard implements CanActivate { + private authUserService; + private userService; + constructor(authUserService: AuthUserService, userService: UserService); + canActivate(context: ExecutionContext): Promise; +} diff --git a/backend/dist/auth/user/authUser.guard.js b/backend/dist/auth/user/authUser.guard.js new file mode 100644 index 00000000..2bbf6d43 --- /dev/null +++ b/backend/dist/auth/user/authUser.guard.js @@ -0,0 +1,43 @@ +"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.AuthUserGuard = void 0; +const common_1 = require("@nestjs/common"); +const user_service_1 = require("../../user/user.service"); +const authUserservice_1 = require("./authUserservice"); +let AuthUserGuard = class AuthUserGuard { + constructor(authUserService, userService) { + this.authUserService = authUserService; + this.userService = userService; + } + async canActivate(context) { + const request = context.switchToHttp().getRequest(); + let { authorization } = request.headers; + if (!authorization) + throw new common_1.UnauthorizedException('session expired! Please sign In'); + authorization = authorization.split(' ')[1]; + const jwtPayload = await this.authUserService.validateToken(authorization); + if (!jwtPayload) + throw new common_1.UnauthorizedException('session expired! Please sign In'); + const user = await this.userService.findOne(jwtPayload.email); + if (!user) + throw new common_1.UnauthorizedException('session expired! Please sign In'); + request.user = { ...user }; + return true; + } +}; +exports.AuthUserGuard = AuthUserGuard; +exports.AuthUserGuard = AuthUserGuard = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [authUserservice_1.AuthUserService, + user_service_1.UserService]) +], AuthUserGuard); +//# sourceMappingURL=authUser.guard.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/authUser.guard.js.map b/backend/dist/auth/user/authUser.guard.js.map new file mode 100644 index 00000000..4b8ae7c5 --- /dev/null +++ b/backend/dist/auth/user/authUser.guard.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authUser.guard.js","sourceRoot":"","sources":["../../../src/auth/user/authUser.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAkG;AAClG,0DAAoD;AACpD,uDAAoD;AAG7C,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YACU,eAAgC,EAChC,WAAwB;QADxB,oBAAe,GAAf,eAAe,CAAiB;QAChC,gBAAW,GAAX,WAAW,CAAa;IAC/B,CAAC;IACJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,IAAI,EAAE,aAAa,EAAE,GAAQ,OAAO,CAAC,OAAO,CAAC;QAC7C,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,8BAAqB,CAAC,iCAAiC,CAAC,CAAC;QACvF,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,8BAAqB,CAAC,iCAAiC,CAAC,CAAC;QAEpF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,8BAAqB,CAAC,iCAAiC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAlBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAGgB,iCAAe;QACnB,0BAAW;GAHvB,aAAa,CAkBzB"} \ No newline at end of file diff --git a/backend/dist/auth/user/authUser.module.d.ts b/backend/dist/auth/user/authUser.module.d.ts new file mode 100644 index 00000000..6a7168ee --- /dev/null +++ b/backend/dist/auth/user/authUser.module.d.ts @@ -0,0 +1,2 @@ +export declare class AuthUserModule { +} diff --git a/backend/dist/auth/user/authUser.module.js b/backend/dist/auth/user/authUser.module.js new file mode 100644 index 00000000..082387ee --- /dev/null +++ b/backend/dist/auth/user/authUser.module.js @@ -0,0 +1,33 @@ +"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.AuthUserModule = void 0; +const common_1 = require("@nestjs/common"); +const encryption_service_1 = require("../encryption/encryption.service"); +const typeorm_1 = require("@nestjs/typeorm"); +const jwt_1 = require("@nestjs/jwt"); +const authUsercontroller_1 = require("./authUsercontroller"); +const user_service_1 = require("../../user/user.service"); +const user_entity_1 = require("../../user/entities/user.entity"); +const authUserservice_1 = require("./authUserservice"); +const category_entity_1 = require("../../category/entities/category.entity"); +const category_service_1 = require("../../category/category.service"); +const user_reset_code_entity_1 = require("./entities/user-reset-code.entity"); +const email_service_1 = require("../../email/email.service"); +const user_confirm_code_entity_1 = require("./entities/user-confirm-code.entity"); +let AuthUserModule = class AuthUserModule { +}; +exports.AuthUserModule = AuthUserModule; +exports.AuthUserModule = AuthUserModule = __decorate([ + (0, common_1.Module)({ + controllers: [authUsercontroller_1.AuthUserController], + providers: [user_service_1.UserService, jwt_1.JwtService, encryption_service_1.EncryptionService, authUserservice_1.AuthUserService, category_service_1.CategoryService, email_service_1.EmailService], + imports: [typeorm_1.TypeOrmModule.forFeature([user_entity_1.User, category_entity_1.Category, user_reset_code_entity_1.UserResetCode, user_confirm_code_entity_1.UserConfirmCode])], + }) +], AuthUserModule); +//# sourceMappingURL=authUser.module.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/authUser.module.js.map b/backend/dist/auth/user/authUser.module.js.map new file mode 100644 index 00000000..6674af1a --- /dev/null +++ b/backend/dist/auth/user/authUser.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authUser.module.js","sourceRoot":"","sources":["../../../src/auth/user/authUser.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yEAAqE;AACrE,6CAAgD;AAChD,qCAAyC;AACzC,6DAA0D;AAC1D,0DAAoD;AACpD,iEAAqD;AACrD,uDAAoD;AACpD,6EAAiE;AACjE,sEAAgE;AAChE,8EAAkE;AAClE,6DAAuD;AACvD,kFAAsE;AAO/D,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAL1B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,uCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,0BAAW,EAAE,gBAAU,EAAE,sCAAiB,EAAE,iCAAe,EAAE,kCAAe,EAAE,4BAAY,CAAC;QACvG,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,kBAAI,EAAE,0BAAQ,EAAE,sCAAa,EAAE,0CAAe,CAAC,CAAC,CAAC;KACtF,CAAC;GACW,cAAc,CAAG"} \ No newline at end of file diff --git a/backend/dist/auth/user/authUsercontroller.d.ts b/backend/dist/auth/user/authUsercontroller.d.ts new file mode 100644 index 00000000..c50790f9 --- /dev/null +++ b/backend/dist/auth/user/authUsercontroller.d.ts @@ -0,0 +1,29 @@ +import { AuthUserService } from './authUserservice'; +import { CreateUserDto } from 'src/user/dto/create-user.dto'; +import { LoginUserDto } from './dto/login-user.dto'; +import { UserSigninResDto } from './dto/user-signin-res.dto'; +import { CustomUserRequest } from './interface/customUserReq'; +import { UpdatePwdDto } from './dto/update-pwd.dto'; +import { UserResetPasswordDto } from './dto/user-reset-password.dto'; +import { GetResetCode } from './dto/get-reset-code.dto'; +import { EmailService } from 'src/email/email.service'; +export declare class AuthUserController { + private readonly authUserService; + private readonly mailService; + constructor(authUserService: AuthUserService, mailService: EmailService); + signUp(createAdminDto: CreateUserDto): Promise<{ + user: UserSigninResDto; + }>; + signIn(loginAdminDto: LoginUserDto): Promise<{ + user: UserSigninResDto; + }>; + changePassword(req: CustomUserRequest, updatePwdDto: UpdatePwdDto): Promise; + resetPassword(resetPasswordDto: UserResetPasswordDto): Promise; + getResetCode(resetPasswordInfo: GetResetCode): Promise; + resendConfirmationCode(req: CustomUserRequest): Promise<{ + message: string; + }>; + confirmEmail({ code }: { + code: any; + }, req: CustomUserRequest): Promise; +} diff --git a/backend/dist/auth/user/authUsercontroller.js b/backend/dist/auth/user/authUsercontroller.js new file mode 100644 index 00000000..46594e80 --- /dev/null +++ b/backend/dist/auth/user/authUsercontroller.js @@ -0,0 +1,160 @@ +"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.AuthUserController = void 0; +const common_1 = require("@nestjs/common"); +const swagger_1 = require("@nestjs/swagger"); +const authUserservice_1 = require("./authUserservice"); +const create_user_dto_1 = require("../../user/dto/create-user.dto"); +const login_user_dto_1 = require("./dto/login-user.dto"); +const user_signin_res_dto_1 = require("./dto/user-signin-res.dto"); +const authUser_guard_1 = require("./authUser.guard"); +const update_pwd_dto_1 = require("./dto/update-pwd.dto"); +const user_reset_password_dto_1 = require("./dto/user-reset-password.dto"); +const email_service_1 = require("../../email/email.service"); +let AuthUserController = class AuthUserController { + constructor(authUserService, mailService) { + this.authUserService = authUserService; + this.mailService = mailService; + } + async signUp(createAdminDto) { + try { + const adminSigninResDto = await this.authUserService.signUp(createAdminDto); + return { user: adminSigninResDto }; + } + catch (e) { + throw e; + } + } + async signIn(loginAdminDto) { + try { + const userSigninResDto = await this.authUserService.signIn(loginAdminDto); + return { user: userSigninResDto }; + } + catch (e) { + throw e; + } + } + async changePassword(req, updatePwdDto) { + return this.authUserService.changePassword(req.user.email, updatePwdDto); + } + async resetPassword(resetPasswordDto) { + return this.authUserService.resetPassword(resetPasswordDto); + } + async getResetCode(resetPasswordInfo) { + try { + const code = await this.authUserService.getResetPasswordCode(resetPasswordInfo.email); + await this.mailService.sendResetPasswordEmail(resetPasswordInfo.email, code); + } + catch (e) { + throw e; + } + } + async resendConfirmationCode(req) { + try { + const email = req.user.email; + await this.authUserService.sendConfirmationCode(email); + return { message: 'Confirmation code sent' }; + } + catch (e) { + throw e; + } + } + async confirmEmail({ code }, req) { + try { + const email = req.user.email; + return await this.authUserService.confirmEmail(email, { code }); + } + catch (e) { + throw e; + } + } +}; +exports.AuthUserController = AuthUserController; +__decorate([ + (0, swagger_1.ApiBody)({ type: create_user_dto_1.CreateUserDto }), + (0, swagger_1.ApiCreatedResponse)({ + type: user_signin_res_dto_1.UserSigninResDto, + }), + (0, common_1.Post)('user/signup'), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [create_user_dto_1.CreateUserDto]), + __metadata("design:returntype", Promise) +], AuthUserController.prototype, "signUp", null); +__decorate([ + (0, swagger_1.ApiBody)({ type: login_user_dto_1.LoginUserDto }), + (0, swagger_1.ApiCreatedResponse)({ + type: user_signin_res_dto_1.UserSigninResDto, + }), + (0, swagger_1.ApiUnauthorizedResponse)(), + (0, common_1.Post)('user/signin'), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [login_user_dto_1.LoginUserDto]), + __metadata("design:returntype", Promise) +], AuthUserController.prototype, "signIn", null); +__decorate([ + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.Patch)('user/change-password'), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, update_pwd_dto_1.UpdatePwdDto]), + __metadata("design:returntype", Promise) +], AuthUserController.prototype, "changePassword", null); +__decorate([ + (0, swagger_1.ApiBody)({ type: user_reset_password_dto_1.UserResetPasswordBody }), + (0, common_1.Post)('user/reset-password'), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], AuthUserController.prototype, "resetPassword", null); +__decorate([ + (0, swagger_1.ApiBody)({ type: user_reset_password_dto_1.UserRequestCodeBody }), + (0, common_1.Post)('user/get-reset-code'), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], AuthUserController.prototype, "getResetCode", null); +__decorate([ + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + (0, common_1.Post)('user/resend-confirmation-code'), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], AuthUserController.prototype, "resendConfirmationCode", null); +__decorate([ + (0, swagger_1.ApiBody)({ type: user_reset_password_dto_1.UserConfirmEmailBody }), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + (0, common_1.Post)('user/confirm-email'), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object]), + __metadata("design:returntype", Promise) +], AuthUserController.prototype, "confirmEmail", null); +exports.AuthUserController = AuthUserController = __decorate([ + (0, common_1.Controller)(''), + (0, swagger_1.ApiTags)('Create user account and sign in as user'), + __metadata("design:paramtypes", [authUserservice_1.AuthUserService, + email_service_1.EmailService]) +], AuthUserController); +//# sourceMappingURL=authUsercontroller.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/authUsercontroller.js.map b/backend/dist/auth/user/authUsercontroller.js.map new file mode 100644 index 00000000..1a72de4d --- /dev/null +++ b/backend/dist/auth/user/authUsercontroller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authUsercontroller.js","sourceRoot":"","sources":["../../../src/auth/user/authUsercontroller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/auth/user/authUserservice.d.ts b/backend/dist/auth/user/authUserservice.d.ts new file mode 100644 index 00000000..3f570771 --- /dev/null +++ b/backend/dist/auth/user/authUserservice.d.ts @@ -0,0 +1,30 @@ +import { JwtService } from '@nestjs/jwt'; +import { EncryptionService } from '../encryption/encryption.service'; +import { UserSigninResDto } from './dto/user-signin-res.dto'; +import { UserService } from 'src/user/user.service'; +import { CreateUserDto } from 'src/user/dto/create-user.dto'; +import { LoginUserDto } from './dto/login-user.dto'; +import { PayloadJwtDto } from 'src/shared/dto/payload-jwt.dto'; +import { UpdatePwdDto } from './dto/update-pwd.dto'; +import { UserResetCode } from './entities/user-reset-code.entity'; +import { Repository } from 'typeorm'; +import { UserConfirmEmailBody, UserResetPasswordDto } from './dto/user-reset-password.dto'; +import { UserConfirmCode } from './entities/user-confirm-code.entity'; +import { EmailService } from 'src/email/email.service'; +export declare class AuthUserService { + private userResetCodeRepository; + private userConfirmCodeRepository; + private userService; + private jwtService; + private encryptionService; + private readonly mailService; + constructor(userResetCodeRepository: Repository, userConfirmCodeRepository: Repository, userService: UserService, jwtService: JwtService, encryptionService: EncryptionService, mailService: EmailService); + signUp(createAdminDto: CreateUserDto): Promise; + signIn(logInAdmin: LoginUserDto): Promise; + validateToken(token: string): Promise; + changePassword(email: string, updatePwdDto: UpdatePwdDto): Promise; + getResetPasswordCode(email: string): Promise; + resetPassword({ email, resetCode, newPassword }: UserResetPasswordDto): Promise; + sendConfirmationCode(email: string): Promise; + confirmEmail(email: string, { code }: UserConfirmEmailBody): Promise; +} diff --git a/backend/dist/auth/user/authUserservice.js b/backend/dist/auth/user/authUserservice.js new file mode 100644 index 00000000..7e7bb2ee --- /dev/null +++ b/backend/dist/auth/user/authUserservice.js @@ -0,0 +1,157 @@ +"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.AuthUserService = void 0; +const common_1 = require("@nestjs/common"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../encryption/encryption.service"); +const jwt_constants_1 = require("../../constants/jwt.constants"); +const user_service_1 = require("../../user/user.service"); +const admin_role_enum_1 = require("../../shared/enum/admin-role.enum"); +const typeorm_1 = require("@nestjs/typeorm"); +const user_reset_code_entity_1 = require("./entities/user-reset-code.entity"); +const typeorm_2 = require("typeorm"); +const crypto_1 = require("crypto"); +const user_confirm_code_entity_1 = require("./entities/user-confirm-code.entity"); +const email_service_1 = require("../../email/email.service"); +let AuthUserService = class AuthUserService { + constructor(userResetCodeRepository, userConfirmCodeRepository, userService, jwtService, encryptionService, mailService) { + this.userResetCodeRepository = userResetCodeRepository; + this.userConfirmCodeRepository = userConfirmCodeRepository; + this.userService = userService; + this.jwtService = jwtService; + this.encryptionService = encryptionService; + this.mailService = mailService; + } + async signUp(createAdminDto) { + const loginAdminDto = { + email: createAdminDto.email, + password: createAdminDto.password, + }; + const hashedPwd = await this.encryptionService.hashPassword(createAdminDto.password); + createAdminDto.password = hashedPwd; + if (await this.userService.userExists(createAdminDto.email)) { + throw new common_1.BadRequestException('User already exists'); + } + await this.userService.create(createAdminDto); + const adminSigninResDto = await this.signIn(loginAdminDto); + await this.sendConfirmationCode(createAdminDto.email); + return adminSigninResDto; + } + async signIn(logInAdmin) { + const user = await this.userService.findOne(logInAdmin.email); + if (!user) + throw new common_1.UnauthorizedException('Invalid credentials'); + const validPwd = await this.encryptionService.comparePassword(logInAdmin.password, user.password); + if (!validPwd) { + throw new common_1.UnauthorizedException('Invalid credentials'); + } + const accessToken = await this.jwtService.sign({ email: user.email, name: user.name, lastName: user.lastName, role: admin_role_enum_1.ALL_ROLES.USER }, { secret: jwt_constants_1.JwtConstants.SECRET }); + const userSigninResDto = { + email: user.email, + name: user.name, + lastName: user.lastName, + token: accessToken, + role: admin_role_enum_1.ALL_ROLES.USER, + }; + return userSigninResDto; + } + async validateToken(token) { + try { + const payload = await this.jwtService.verify(token, { secret: jwt_constants_1.JwtConstants.SECRET }); + return payload; + } + catch (error) { + throw new common_1.UnauthorizedException('Invalid token'); + } + } + async changePassword(email, updatePwdDto) { + const user = await this.userService.findOne(email); + const prevPwdHashed = user.password; + const validPwd = await this.encryptionService.comparePassword(updatePwdDto.prevPassword, prevPwdHashed); + if (!validPwd) + throw new common_1.UnauthorizedException('Invalid password'); + const newPwdHashed = await this.encryptionService.hashPassword(updatePwdDto.newPassword); + await this.userService.updatePassword(email, newPwdHashed); + } + async getResetPasswordCode(email) { + console.log(`Email: ${email}`); + const user = await this.userService.findOne(email); + if (!user) + throw new common_1.UnauthorizedException('Invalid email'); + const resetCode = (0, crypto_1.randomInt)(100000, 999999).toString(); + const expirationDate = new Date(); + expirationDate.setHours(expirationDate.getHours() + 1); + const existUserCode = await this.userResetCodeRepository.findBy({ user, code: resetCode }); + console.log(existUserCode); + if (existUserCode.length > 0) { + await this.userResetCodeRepository.delete(existUserCode[0].id); + } + await this.userResetCodeRepository.save({ user, code: resetCode, expirationDate }); + return resetCode; + } + async resetPassword({ email, resetCode, newPassword }) { + const user = await this.userService.findOne(email); + if (!user) + throw new common_1.UnauthorizedException('Invalid email'); + const userResetCode = await this.userResetCodeRepository.findBy({ user, code: resetCode }); + if (userResetCode.length === 0) + throw new common_1.UnauthorizedException('Invalid code'); + if (userResetCode[0].expirationDate < new Date()) + throw new common_1.UnauthorizedException('Code expired'); + const newPwdHashed = await this.encryptionService.hashPassword(newPassword); + await this.userService.updatePassword(email, newPwdHashed); + await this.userResetCodeRepository.delete(userResetCode[0].id); + } + async sendConfirmationCode(email) { + const user = await this.userService.findOne(email); + if (!user) + throw new common_1.UnauthorizedException('Invalid email'); + const resetCode = (0, crypto_1.randomInt)(100000, 999999).toString(); + const expirationDate = new Date(); + expirationDate.setHours(expirationDate.getHours() + 1); + const existUserCode = await this.userConfirmCodeRepository.findBy({ user, code: resetCode }); + if (existUserCode.length > 0) { + await this.userConfirmCodeRepository.delete(existUserCode[0].id); + } + await this.userConfirmCodeRepository.save({ user, code: resetCode, expirationDate }); + await this.mailService.sendConfirmationCode(email, resetCode); + return resetCode; + } + async confirmEmail(email, { code }) { + const user = await this.userService.findOne(email); + if (!user) + throw new common_1.UnauthorizedException('Invalid email'); + const userConfirmCode = await this.userConfirmCodeRepository.findBy({ user, code: code }); + if (userConfirmCode.length === 0) + throw new common_1.UnauthorizedException('Invalid code'); + if (userConfirmCode[0].expirationDate < new Date()) + throw new common_1.UnauthorizedException('Code expired'); + await this.userService.confirmEmail(email); + await this.userConfirmCodeRepository.delete(userConfirmCode[0].id); + } +}; +exports.AuthUserService = AuthUserService; +exports.AuthUserService = AuthUserService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(user_reset_code_entity_1.UserResetCode)), + __param(1, (0, typeorm_1.InjectRepository)(user_confirm_code_entity_1.UserConfirmCode)), + __metadata("design:paramtypes", [typeorm_2.Repository, + typeorm_2.Repository, + user_service_1.UserService, + jwt_1.JwtService, + encryption_service_1.EncryptionService, + email_service_1.EmailService]) +], AuthUserService); +//# sourceMappingURL=authUserservice.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/authUserservice.js.map b/backend/dist/auth/user/authUserservice.js.map new file mode 100644 index 00000000..d307708f --- /dev/null +++ b/backend/dist/auth/user/authUserservice.js.map @@ -0,0 +1 @@ +{"version":3,"file":"authUserservice.js","sourceRoot":"","sources":["../../../src/auth/user/authUserservice.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwF;AACxF,qCAAyC;AACzC,yEAAqE;AACrE,iEAA2D;AAG3D,0DAAoD;AAGpD,uEAA4D;AAG5D,6CAAmD;AACnD,8EAAkE;AAClE,qCAAqC;AACrC,mCAAmC;AAEnC,kFAAsE;AACtE,6DAAuD;AAGhD,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAC2C,uBAAkD,EAChD,yBAAsD,EACzF,WAAwB,EACxB,UAAsB,EACtB,iBAAoC,EAC3B,WAAyB;QALD,4BAAuB,GAAvB,uBAAuB,CAA2B;QAChD,8BAAyB,GAAzB,yBAAyB,CAA6B;QACzF,gBAAW,GAAX,WAAW,CAAa;QACxB,eAAU,GAAV,UAAU,CAAY;QACtB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAC3B,gBAAW,GAAX,WAAW,CAAc;IACzC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,cAA6B;QACxC,MAAM,aAAa,GAAiB;YAClC,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,QAAQ,EAAE,cAAc,CAAC,QAAQ;SAClC,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrF,cAAc,CAAC,QAAQ,GAAG,SAAS,CAAC;QACpC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,4BAAmB,CAAC,qBAAqB,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,iBAAiB,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEtD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAwB;QACnC,MAAM,IAAI,GAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3G,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAC5C,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,2BAAS,CAAC,IAAI,EAAE,EACrF,EAAE,MAAM,EAAE,4BAAY,CAAC,MAAM,EAAE,CAChC,CAAC;QACF,MAAM,gBAAgB,GAAqB;YACzC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,2BAAS,CAAC,IAAI;SACrB,CAAC;QACF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,4BAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YACpG,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,YAA0B;QAC5D,MAAM,IAAI,GAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;QACpC,MAAM,QAAQ,GAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAEjH,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,8BAAqB,CAAC,kBAAkB,CAAC,CAAC;QAEnE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACzF,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAa;QACtC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QAClC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE3B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAwB;QACzE,MAAM,IAAI,GAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;QAE5D,MAAM,aAAa,GAAoB,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5G,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,8BAAqB,CAAC,cAAc,CAAC,CAAC;QAChF,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE;YAAE,MAAM,IAAI,8BAAqB,CAAC,cAAc,CAAC,CAAC;QAElG,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5E,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAa;QACtC,MAAM,IAAI,GAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QAClC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;QACrF,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,EAAE,IAAI,EAAwB;QAC9D,MAAM,IAAI,GAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;QAE5D,MAAM,eAAe,GAAoB,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3G,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,8BAAqB,CAAC,cAAc,CAAC,CAAC;QAClF,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE;YAAE,MAAM,IAAI,8BAAqB,CAAC,cAAc,CAAC,CAAC;QAEpG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;CACF,CAAA;AA/HY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,sCAAa,CAAC,CAAA;IAC/B,WAAA,IAAA,0BAAgB,EAAC,0CAAe,CAAC,CAAA;qCADgC,oBAAU;QACN,oBAAU;QAC3D,0BAAW;QACZ,gBAAU;QACH,sCAAiB;QACd,4BAAY;GAPjC,eAAe,CA+H3B"} \ No newline at end of file diff --git a/backend/dist/auth/user/dto/get-reset-code.dto.d.ts b/backend/dist/auth/user/dto/get-reset-code.dto.d.ts new file mode 100644 index 00000000..2d24084d --- /dev/null +++ b/backend/dist/auth/user/dto/get-reset-code.dto.d.ts @@ -0,0 +1,3 @@ +export interface GetResetCode { + email: string; +} diff --git a/backend/dist/auth/user/dto/get-reset-code.dto.js b/backend/dist/auth/user/dto/get-reset-code.dto.js new file mode 100644 index 00000000..79d2a749 --- /dev/null +++ b/backend/dist/auth/user/dto/get-reset-code.dto.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=get-reset-code.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/dto/get-reset-code.dto.js.map b/backend/dist/auth/user/dto/get-reset-code.dto.js.map new file mode 100644 index 00000000..d01b63ac --- /dev/null +++ b/backend/dist/auth/user/dto/get-reset-code.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"get-reset-code.dto.js","sourceRoot":"","sources":["../../../../src/auth/user/dto/get-reset-code.dto.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/backend/dist/auth/user/dto/login-user.dto.d.ts b/backend/dist/auth/user/dto/login-user.dto.d.ts new file mode 100644 index 00000000..6138bc0a --- /dev/null +++ b/backend/dist/auth/user/dto/login-user.dto.d.ts @@ -0,0 +1,4 @@ +export declare class LoginUserDto { + email: string; + password: string; +} diff --git a/backend/dist/auth/user/dto/login-user.dto.js b/backend/dist/auth/user/dto/login-user.dto.js new file mode 100644 index 00000000..8a746646 --- /dev/null +++ b/backend/dist/auth/user/dto/login-user.dto.js @@ -0,0 +1,25 @@ +"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.LoginUserDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class LoginUserDto { +} +exports.LoginUserDto = LoginUserDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], LoginUserDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], LoginUserDto.prototype, "password", void 0); +//# sourceMappingURL=login-user.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/dto/login-user.dto.js.map b/backend/dist/auth/user/dto/login-user.dto.js.map new file mode 100644 index 00000000..54fbe68f --- /dev/null +++ b/backend/dist/auth/user/dto/login-user.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login-user.dto.js","sourceRoot":"","sources":["../../../../src/auth/user/dto/login-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,YAAY;CAKxB;AALD,oCAKC;AAHC;IADC,IAAA,qBAAW,GAAE;;2CACA;AAEd;IADC,IAAA,qBAAW,GAAE;;8CACG"} \ No newline at end of file diff --git a/backend/dist/auth/user/dto/update-pwd.dto.d.ts b/backend/dist/auth/user/dto/update-pwd.dto.d.ts new file mode 100644 index 00000000..232ef4ab --- /dev/null +++ b/backend/dist/auth/user/dto/update-pwd.dto.d.ts @@ -0,0 +1,4 @@ +export declare class UpdatePwdDto { + prevPassword: string; + newPassword: string; +} diff --git a/backend/dist/auth/user/dto/update-pwd.dto.js b/backend/dist/auth/user/dto/update-pwd.dto.js new file mode 100644 index 00000000..bddd0bd2 --- /dev/null +++ b/backend/dist/auth/user/dto/update-pwd.dto.js @@ -0,0 +1,25 @@ +"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.UpdatePwdDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class UpdatePwdDto { +} +exports.UpdatePwdDto = UpdatePwdDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UpdatePwdDto.prototype, "prevPassword", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UpdatePwdDto.prototype, "newPassword", void 0); +//# sourceMappingURL=update-pwd.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/dto/update-pwd.dto.js.map b/backend/dist/auth/user/dto/update-pwd.dto.js.map new file mode 100644 index 00000000..332ca291 --- /dev/null +++ b/backend/dist/auth/user/dto/update-pwd.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-pwd.dto.js","sourceRoot":"","sources":["../../../../src/auth/user/dto/update-pwd.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,YAAY;CAKxB;AALD,oCAKC;AAHC;IADC,IAAA,qBAAW,GAAE;;kDACO;AAErB;IADC,IAAA,qBAAW,GAAE;;iDACM"} \ No newline at end of file diff --git a/backend/dist/auth/user/dto/user-reset-password.dto.d.ts b/backend/dist/auth/user/dto/user-reset-password.dto.d.ts new file mode 100644 index 00000000..796b2801 --- /dev/null +++ b/backend/dist/auth/user/dto/user-reset-password.dto.d.ts @@ -0,0 +1,16 @@ +export interface UserResetPasswordDto { + email: string; + resetCode: string; + newPassword: string; +} +export declare class UserResetPasswordBody { + email: string; + resetCode: string; + newPassword: string; +} +export declare class UserRequestCodeBody { + email: string; +} +export declare class UserConfirmEmailBody { + code: string; +} diff --git a/backend/dist/auth/user/dto/user-reset-password.dto.js b/backend/dist/auth/user/dto/user-reset-password.dto.js new file mode 100644 index 00000000..240bfcb5 --- /dev/null +++ b/backend/dist/auth/user/dto/user-reset-password.dto.js @@ -0,0 +1,43 @@ +"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.UserConfirmEmailBody = exports.UserRequestCodeBody = exports.UserResetPasswordBody = void 0; +const swagger_1 = require("@nestjs/swagger"); +class UserResetPasswordBody { +} +exports.UserResetPasswordBody = UserResetPasswordBody; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserResetPasswordBody.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserResetPasswordBody.prototype, "resetCode", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserResetPasswordBody.prototype, "newPassword", void 0); +class UserRequestCodeBody { +} +exports.UserRequestCodeBody = UserRequestCodeBody; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserRequestCodeBody.prototype, "email", void 0); +class UserConfirmEmailBody { +} +exports.UserConfirmEmailBody = UserConfirmEmailBody; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserConfirmEmailBody.prototype, "code", void 0); +//# sourceMappingURL=user-reset-password.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/dto/user-reset-password.dto.js.map b/backend/dist/auth/user/dto/user-reset-password.dto.js.map new file mode 100644 index 00000000..6e5e6715 --- /dev/null +++ b/backend/dist/auth/user/dto/user-reset-password.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-reset-password.dto.js","sourceRoot":"","sources":["../../../../src/auth/user/dto/user-reset-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAQ9C,MAAa,qBAAqB;CAOjC;AAPD,sDAOC;AALC;IADC,IAAA,qBAAW,GAAE;;oDACA;AAEd;IADC,IAAA,qBAAW,GAAE;;wDACI;AAElB;IADC,IAAA,qBAAW,GAAE;;0DACM;AAGtB,MAAa,mBAAmB;CAG/B;AAHD,kDAGC;AADC;IADC,IAAA,qBAAW,GAAE;;kDACA;AAGhB,MAAa,oBAAoB;CAGhC;AAHD,oDAGC;AADC;IADC,IAAA,qBAAW,GAAE;;kDACD"} \ No newline at end of file diff --git a/backend/dist/auth/user/dto/user-signin-res.dto.d.ts b/backend/dist/auth/user/dto/user-signin-res.dto.d.ts new file mode 100644 index 00000000..79e69502 --- /dev/null +++ b/backend/dist/auth/user/dto/user-signin-res.dto.d.ts @@ -0,0 +1,8 @@ +import { ALL_ROLES } from 'src/shared/enum/admin-role.enum'; +export declare class UserSigninResDto { + email: string; + name: string; + lastName: string; + token: string; + role: ALL_ROLES.USER; +} diff --git a/backend/dist/auth/user/dto/user-signin-res.dto.js b/backend/dist/auth/user/dto/user-signin-res.dto.js new file mode 100644 index 00000000..f9705a7f --- /dev/null +++ b/backend/dist/auth/user/dto/user-signin-res.dto.js @@ -0,0 +1,38 @@ +"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.UserSigninResDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const admin_role_enum_1 = require("../../../shared/enum/admin-role.enum"); +class UserSigninResDto { +} +exports.UserSigninResDto = UserSigninResDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserSigninResDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserSigninResDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserSigninResDto.prototype, "lastName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserSigninResDto.prototype, "token", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserSigninResDto.prototype, "role", void 0); +//# sourceMappingURL=user-signin-res.dto.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/dto/user-signin-res.dto.js.map b/backend/dist/auth/user/dto/user-signin-res.dto.js.map new file mode 100644 index 00000000..396cb835 --- /dev/null +++ b/backend/dist/auth/user/dto/user-signin-res.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-signin-res.dto.js","sourceRoot":"","sources":["../../../../src/auth/user/dto/user-signin-res.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,0EAA4D;AAE5D,MAAa,gBAAgB;CAW5B;AAXD,4CAWC;AATC;IADC,IAAA,qBAAW,GAAE;;+CACA;AAEd;IADC,IAAA,qBAAW,GAAE;;8CACD;AAEb;IADC,IAAA,qBAAW,GAAE;;kDACG;AAEjB;IADC,IAAA,qBAAW,GAAE;;+CACA;AAEd;IADC,IAAA,qBAAW,GAAE;;8CACO"} \ No newline at end of file diff --git a/backend/dist/auth/user/entities/user-confirm-code.entity.d.ts b/backend/dist/auth/user/entities/user-confirm-code.entity.d.ts new file mode 100644 index 00000000..551716c4 --- /dev/null +++ b/backend/dist/auth/user/entities/user-confirm-code.entity.d.ts @@ -0,0 +1,7 @@ +import { User } from 'src/user/entities/user.entity'; +export declare class UserConfirmCode { + id: number; + user: User; + code: string; + expirationDate: Date; +} diff --git a/backend/dist/auth/user/entities/user-confirm-code.entity.js b/backend/dist/auth/user/entities/user-confirm-code.entity.js new file mode 100644 index 00000000..3b669ed3 --- /dev/null +++ b/backend/dist/auth/user/entities/user-confirm-code.entity.js @@ -0,0 +1,37 @@ +"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.UserConfirmCode = void 0; +const user_entity_1 = require("../../../user/entities/user.entity"); +const typeorm_1 = require("typeorm"); +let UserConfirmCode = class UserConfirmCode { +}; +exports.UserConfirmCode = UserConfirmCode; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], UserConfirmCode.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.ManyToOne)(() => user_entity_1.User, (user) => user.resetCodes), + __metadata("design:type", user_entity_1.User) +], UserConfirmCode.prototype, "user", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], UserConfirmCode.prototype, "code", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", Date) +], UserConfirmCode.prototype, "expirationDate", void 0); +exports.UserConfirmCode = UserConfirmCode = __decorate([ + (0, typeorm_1.Entity)() +], UserConfirmCode); +//# sourceMappingURL=user-confirm-code.entity.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/entities/user-confirm-code.entity.js.map b/backend/dist/auth/user/entities/user-confirm-code.entity.js.map new file mode 100644 index 00000000..b86606e5 --- /dev/null +++ b/backend/dist/auth/user/entities/user-confirm-code.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-confirm-code.entity.js","sourceRoot":"","sources":["../../../../src/auth/user/entities/user-confirm-code.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAqD;AACrD,qCAA4E;AAGrE,IAAM,eAAe,GAArB,MAAM,eAAe;CAY3B,CAAA;AAZY,0CAAe;AAE1B;IADC,IAAA,gCAAsB,GAAE;;2CACd;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;8BAC3C,kBAAI;6CAAC;AAGX;IADC,IAAA,gBAAM,GAAE;;6CACI;AAGb;IADC,IAAA,gBAAM,GAAE;8BACO,IAAI;uDAAC;0BAXV,eAAe;IAD3B,IAAA,gBAAM,GAAE;GACI,eAAe,CAY3B"} \ No newline at end of file diff --git a/backend/dist/auth/user/entities/user-reset-code.entity.d.ts b/backend/dist/auth/user/entities/user-reset-code.entity.d.ts new file mode 100644 index 00000000..8097b359 --- /dev/null +++ b/backend/dist/auth/user/entities/user-reset-code.entity.d.ts @@ -0,0 +1,7 @@ +import { User } from 'src/user/entities/user.entity'; +export declare class UserResetCode { + id: number; + user: User; + code: string; + expirationDate: Date; +} diff --git a/backend/dist/auth/user/entities/user-reset-code.entity.js b/backend/dist/auth/user/entities/user-reset-code.entity.js new file mode 100644 index 00000000..05ade924 --- /dev/null +++ b/backend/dist/auth/user/entities/user-reset-code.entity.js @@ -0,0 +1,37 @@ +"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.UserResetCode = void 0; +const user_entity_1 = require("../../../user/entities/user.entity"); +const typeorm_1 = require("typeorm"); +let UserResetCode = class UserResetCode { +}; +exports.UserResetCode = UserResetCode; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], UserResetCode.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.ManyToOne)(() => user_entity_1.User, (user) => user.resetCodes), + __metadata("design:type", user_entity_1.User) +], UserResetCode.prototype, "user", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], UserResetCode.prototype, "code", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", Date) +], UserResetCode.prototype, "expirationDate", void 0); +exports.UserResetCode = UserResetCode = __decorate([ + (0, typeorm_1.Entity)() +], UserResetCode); +//# sourceMappingURL=user-reset-code.entity.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/entities/user-reset-code.entity.js.map b/backend/dist/auth/user/entities/user-reset-code.entity.js.map new file mode 100644 index 00000000..7d09d806 --- /dev/null +++ b/backend/dist/auth/user/entities/user-reset-code.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-reset-code.entity.js","sourceRoot":"","sources":["../../../../src/auth/user/entities/user-reset-code.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAqD;AACrD,qCAA4E;AAGrE,IAAM,aAAa,GAAnB,MAAM,aAAa;CAYzB,CAAA;AAZY,sCAAa;AAExB;IADC,IAAA,gCAAsB,GAAE;;yCACd;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;8BAC3C,kBAAI;2CAAC;AAGX;IADC,IAAA,gBAAM,GAAE;;2CACI;AAGb;IADC,IAAA,gBAAM,GAAE;8BACO,IAAI;qDAAC;wBAXV,aAAa;IADzB,IAAA,gBAAM,GAAE;GACI,aAAa,CAYzB"} \ No newline at end of file diff --git a/backend/dist/auth/user/interface/customUserReq.d.ts b/backend/dist/auth/user/interface/customUserReq.d.ts new file mode 100644 index 00000000..013651e4 --- /dev/null +++ b/backend/dist/auth/user/interface/customUserReq.d.ts @@ -0,0 +1,5 @@ +import { Request } from 'express'; +import { User } from 'src/user/entities/user.entity'; +export interface CustomUserRequest extends Request { + user?: User; +} diff --git a/backend/dist/auth/user/interface/customUserReq.js b/backend/dist/auth/user/interface/customUserReq.js new file mode 100644 index 00000000..8cc2c8bc --- /dev/null +++ b/backend/dist/auth/user/interface/customUserReq.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=customUserReq.js.map \ No newline at end of file diff --git a/backend/dist/auth/user/interface/customUserReq.js.map b/backend/dist/auth/user/interface/customUserReq.js.map new file mode 100644 index 00000000..9639a285 --- /dev/null +++ b/backend/dist/auth/user/interface/customUserReq.js.map @@ -0,0 +1 @@ +{"version":3,"file":"customUserReq.js","sourceRoot":"","sources":["../../../../src/auth/user/interface/customUserReq.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/backend/dist/category/category.controller.d.ts b/backend/dist/category/category.controller.d.ts new file mode 100644 index 00000000..bf3242bc --- /dev/null +++ b/backend/dist/category/category.controller.d.ts @@ -0,0 +1,14 @@ +import { CategoryService } from './category.service'; +import { CreateCategoryReqDto } from './dto/create-category-req.dto'; +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class CategoryController { + private readonly categoryService; + constructor(categoryService: CategoryService); + create(createCategoryDto: CreateCategoryReqDto): { + message: string; + }; + findAll(lang: LANGUAGES): Promise; + remove(id: string): { + message: string; + }; +} diff --git a/backend/dist/category/category.controller.js b/backend/dist/category/category.controller.js new file mode 100644 index 00000000..72c248cd --- /dev/null +++ b/backend/dist/category/category.controller.js @@ -0,0 +1,74 @@ +"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.CategoryController = void 0; +const common_1 = require("@nestjs/common"); +const category_service_1 = require("./category.service"); +const authAdmin_guard_1 = require("../auth/admin/authAdmin.guard"); +const role_decorator_1 = require("../auth/role.decorator"); +const admin_role_enum_1 = require("../shared/enum/admin-role.enum"); +const swagger_1 = require("@nestjs/swagger"); +const create_category_req_dto_1 = require("./dto/create-category-req.dto"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +let CategoryController = class CategoryController { + constructor(categoryService) { + this.categoryService = categoryService; + } + create(createCategoryDto) { + this.categoryService.create(createCategoryDto); + return { message: 'Category created successfully' }; + } + findAll(lang) { + return this.categoryService.findAll(lang); + } + remove(id) { + this.categoryService.remove(+id); + return { message: 'Category deleted successfully' }; + } +}; +exports.CategoryController = CategoryController; +__decorate([ + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.SUPERADMIN_ROLES), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiBody)({ type: create_category_req_dto_1.CreateCategoryReqDto }), + (0, common_1.Post)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [create_category_req_dto_1.CreateCategoryReqDto]), + __metadata("design:returntype", void 0) +], CategoryController.prototype, "create", null); +__decorate([ + (0, common_1.Get)(''), + __param(0, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", void 0) +], CategoryController.prototype, "findAll", null); +__decorate([ + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.SUPERADMIN_ROLES), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.Delete)(':id'), + __param(0, (0, common_1.Param)('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", void 0) +], CategoryController.prototype, "remove", null); +exports.CategoryController = CategoryController = __decorate([ + (0, common_1.Controller)('category'), + (0, swagger_1.ApiTags)('Category'), + __metadata("design:paramtypes", [category_service_1.CategoryService]) +], CategoryController); +//# sourceMappingURL=category.controller.js.map \ No newline at end of file diff --git a/backend/dist/category/category.controller.js.map b/backend/dist/category/category.controller.js.map new file mode 100644 index 00000000..45bb8969 --- /dev/null +++ b/backend/dist/category/category.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"category.controller.js","sourceRoot":"","sources":["../../src/category/category.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8F;AAC9F,yDAAqD;AACrD,mEAAgE;AAChE,2DAAgD;AAChD,oEAAmE;AACnE,6CAAkE;AAClE,2EAAqE;AACrE,kEAA2D;AAIpD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;IAOjE,MAAM,CAAS,iBAAuC;QACpD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;IACtD,CAAC;IAGD,OAAO,CAAgB,IAAe;QACpC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAMD,MAAM,CAAc,EAAU;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;IACtD,CAAC;CACF,CAAA;AA1BY,gDAAkB;AAQ7B;IALC,IAAA,kBAAS,EAAC,gCAAc,CAAC;IACzB,IAAA,sBAAK,EAAC,kCAAgB,CAAC;IACvB,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,iBAAO,EAAC,EAAE,IAAI,EAAE,8CAAoB,EAAE,CAAC;IACvC,IAAA,aAAI,GAAE;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAoB,8CAAoB;;gDAGrD;AAGD;IADC,IAAA,YAAG,EAAC,EAAE,CAAC;IACC,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;;;;iDAErB;AAMD;IAJC,IAAA,kBAAS,EAAC,gCAAc,CAAC;IACzB,IAAA,sBAAK,EAAC,kCAAgB,CAAC;IACvB,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,eAAM,EAAC,KAAK,CAAC;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;gDAGlB;6BAzBU,kBAAkB;IAF9B,IAAA,mBAAU,EAAC,UAAU,CAAC;IACtB,IAAA,iBAAO,EAAC,UAAU,CAAC;qCAE4B,kCAAe;GADlD,kBAAkB,CA0B9B"} \ No newline at end of file diff --git a/backend/dist/category/category.module.d.ts b/backend/dist/category/category.module.d.ts new file mode 100644 index 00000000..c6f6bce1 --- /dev/null +++ b/backend/dist/category/category.module.d.ts @@ -0,0 +1,2 @@ +export declare class CategoryModule { +} diff --git a/backend/dist/category/category.module.js b/backend/dist/category/category.module.js new file mode 100644 index 00000000..e1c6d186 --- /dev/null +++ b/backend/dist/category/category.module.js @@ -0,0 +1,33 @@ +"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.CategoryModule = void 0; +const common_1 = require("@nestjs/common"); +const category_service_1 = require("./category.service"); +const category_controller_1 = require("./category.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const category_entity_1 = require("./entities/category.entity"); +const authAdmin_service_1 = require("../auth/admin/authAdmin.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const admin_service_1 = require("../admin/admin.service"); +const admin_entity_1 = require("../admin/entities/admin.entity"); +const town_entity_1 = require("../town/entities/town.entity"); +const admin_reset_code_entity_1 = require("../auth/admin/entitites/admin-reset-code.entity"); +let CategoryModule = class CategoryModule { +}; +exports.CategoryModule = CategoryModule; +exports.CategoryModule = CategoryModule = __decorate([ + (0, common_1.Module)({ + controllers: [category_controller_1.CategoryController], + providers: [category_service_1.CategoryService, authAdmin_service_1.AuthAdminService, jwt_1.JwtService, encryption_service_1.EncryptionService, admin_service_1.AdminService], + imports: [typeorm_1.TypeOrmModule.forFeature([category_entity_1.Category, admin_entity_1.Admin, town_entity_1.Town, admin_reset_code_entity_1.AdminResetCode])], + exports: [category_service_1.CategoryService], + }) +], CategoryModule); +//# sourceMappingURL=category.module.js.map \ No newline at end of file diff --git a/backend/dist/category/category.module.js.map b/backend/dist/category/category.module.js.map new file mode 100644 index 00000000..e000e931 --- /dev/null +++ b/backend/dist/category/category.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"category.module.js","sourceRoot":"","sources":["../../src/category/category.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yDAAqD;AACrD,+DAA2D;AAC3D,6CAAgD;AAChD,gEAAsD;AACtD,uEAAoE;AACpE,qCAAyC;AACzC,8EAA2E;AAC3E,0DAAuD;AACvD,iEAAwD;AACxD,8DAAqD;AACrD,6FAAkF;AAQ3E,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAN1B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,wCAAkB,CAAC;QACjC,SAAS,EAAE,CAAC,kCAAe,EAAE,oCAAgB,EAAE,gBAAU,EAAE,sCAAiB,EAAE,4BAAY,CAAC;QAC3F,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,0BAAQ,EAAE,oBAAK,EAAE,kBAAI,EAAE,wCAAc,CAAC,CAAC,CAAC;QAC5E,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"} \ No newline at end of file diff --git a/backend/dist/category/category.service.d.ts b/backend/dist/category/category.service.d.ts new file mode 100644 index 00000000..4569a201 --- /dev/null +++ b/backend/dist/category/category.service.d.ts @@ -0,0 +1,10 @@ +import { Category } from './entities/category.entity'; +import { CreateCategoryReqDto } from './dto/create-category-req.dto'; +export declare class CategoryService { + private categoryRepository; + constructor(categoryRepository: any); + create(createCategoryDto: CreateCategoryReqDto): Promise; + findAll(lang: string): Promise; + remove(idCategory: number): Promise; + findOne(idCategory: number): Promise; +} diff --git a/backend/dist/category/category.service.js b/backend/dist/category/category.service.js new file mode 100644 index 00000000..563a2244 --- /dev/null +++ b/backend/dist/category/category.service.js @@ -0,0 +1,52 @@ +"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.CategoryService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const category_entity_1 = require("./entities/category.entity"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +let CategoryService = class CategoryService { + constructor(categoryRepository) { + this.categoryRepository = categoryRepository; + } + async create(createCategoryDto) { + const categoriyEN = { + name: createCategoryDto.nameEN, + language: languages_enum_1.LANGUAGES.EN, + }; + const insertedId = (await this.categoryRepository.insert(categoriyEN)).raw.insertId; + await this.categoryRepository.insert({ + idCategory: insertedId, + name: createCategoryDto.nameES, + language: languages_enum_1.LANGUAGES.ES, + }); + } + async findAll(lang) { + return await this.categoryRepository.find({ where: { language: lang }, select: ['idCategory', 'name'] }); + } + async remove(idCategory) { + await this.categoryRepository.delete({ idCategory }); + } + async findOne(idCategory) { + return await this.categoryRepository.findOne({ where: { idCategory } }); + } +}; +exports.CategoryService = CategoryService; +exports.CategoryService = CategoryService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(category_entity_1.Category)), + __metadata("design:paramtypes", [Object]) +], CategoryService); +//# sourceMappingURL=category.service.js.map \ No newline at end of file diff --git a/backend/dist/category/category.service.js.map b/backend/dist/category/category.service.js.map new file mode 100644 index 00000000..a3ba22f1 --- /dev/null +++ b/backend/dist/category/category.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"category.service.js","sourceRoot":"","sources":["../../src/category/category.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6CAAmD;AACnD,gEAAsD;AACtD,kEAA2D;AAIpD,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAAgD,kBAAkB;QAAlB,uBAAkB,GAAlB,kBAAkB,CAAA;IAAG,CAAC;IAEtE,KAAK,CAAC,MAAM,CAAC,iBAAuC;QAClD,MAAM,WAAW,GAAsB;YACrC,IAAI,EAAE,iBAAiB,CAAC,MAAM;YAC9B,QAAQ,EAAE,0BAAS,CAAC,EAAE;SACvB,CAAC;QAEF,MAAM,UAAU,GAAW,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE5F,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACnC,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,iBAAiB,CAAC,MAAM;YAC9B,QAAQ,EAAE,0BAAS,CAAC,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB;QAC9B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF,CAAA;AA7BY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,0BAAgB,EAAC,0BAAQ,CAAC,CAAA;;GAD5B,eAAe,CA6B3B"} \ No newline at end of file diff --git a/backend/dist/category/dto/create-category-req.dto.d.ts b/backend/dist/category/dto/create-category-req.dto.d.ts new file mode 100644 index 00000000..224647d8 --- /dev/null +++ b/backend/dist/category/dto/create-category-req.dto.d.ts @@ -0,0 +1,4 @@ +export declare class CreateCategoryReqDto { + nameES: string; + nameEN: string; +} diff --git a/backend/dist/category/dto/create-category-req.dto.js b/backend/dist/category/dto/create-category-req.dto.js new file mode 100644 index 00000000..a03c2b2c --- /dev/null +++ b/backend/dist/category/dto/create-category-req.dto.js @@ -0,0 +1,25 @@ +"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.CreateCategoryReqDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class CreateCategoryReqDto { +} +exports.CreateCategoryReqDto = CreateCategoryReqDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateCategoryReqDto.prototype, "nameES", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateCategoryReqDto.prototype, "nameEN", void 0); +//# sourceMappingURL=create-category-req.dto.js.map \ No newline at end of file diff --git a/backend/dist/category/dto/create-category-req.dto.js.map b/backend/dist/category/dto/create-category-req.dto.js.map new file mode 100644 index 00000000..f34de94f --- /dev/null +++ b/backend/dist/category/dto/create-category-req.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-category-req.dto.js","sourceRoot":"","sources":["../../../src/category/dto/create-category-req.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,oBAAoB;CAKhC;AALD,oDAKC;AAHC;IADC,IAAA,qBAAW,GAAE;;oDACC;AAEf;IADC,IAAA,qBAAW,GAAE;;oDACC"} \ No newline at end of file diff --git a/backend/dist/category/dto/create-category.dto.d.ts b/backend/dist/category/dto/create-category.dto.d.ts new file mode 100644 index 00000000..7eea1a31 --- /dev/null +++ b/backend/dist/category/dto/create-category.dto.d.ts @@ -0,0 +1,6 @@ +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class CreateCategoryDto { + idCategory?: number; + language: LANGUAGES; + name: string; +} diff --git a/backend/dist/category/dto/create-category.dto.js b/backend/dist/category/dto/create-category.dto.js new file mode 100644 index 00000000..89c382aa --- /dev/null +++ b/backend/dist/category/dto/create-category.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateCategoryDto = void 0; +class CreateCategoryDto { +} +exports.CreateCategoryDto = CreateCategoryDto; +//# sourceMappingURL=create-category.dto.js.map \ No newline at end of file diff --git a/backend/dist/category/dto/create-category.dto.js.map b/backend/dist/category/dto/create-category.dto.js.map new file mode 100644 index 00000000..728f6a71 --- /dev/null +++ b/backend/dist/category/dto/create-category.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-category.dto.js","sourceRoot":"","sources":["../../../src/category/dto/create-category.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;CAI7B;AAJD,8CAIC"} \ No newline at end of file diff --git a/backend/dist/category/dto/update-category.dto.d.ts b/backend/dist/category/dto/update-category.dto.d.ts new file mode 100644 index 00000000..12f1b18d --- /dev/null +++ b/backend/dist/category/dto/update-category.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateCategoryDto } from './create-category.dto'; +declare const UpdateCategoryDto_base: import("@nestjs/common").Type>; +export declare class UpdateCategoryDto extends UpdateCategoryDto_base { +} +export {}; diff --git a/backend/dist/category/dto/update-category.dto.js b/backend/dist/category/dto/update-category.dto.js new file mode 100644 index 00000000..de6e7775 --- /dev/null +++ b/backend/dist/category/dto/update-category.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateCategoryDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const create_category_dto_1 = require("./create-category.dto"); +class UpdateCategoryDto extends (0, swagger_1.PartialType)(create_category_dto_1.CreateCategoryDto) { +} +exports.UpdateCategoryDto = UpdateCategoryDto; +//# sourceMappingURL=update-category.dto.js.map \ No newline at end of file diff --git a/backend/dist/category/dto/update-category.dto.js.map b/backend/dist/category/dto/update-category.dto.js.map new file mode 100644 index 00000000..eca50820 --- /dev/null +++ b/backend/dist/category/dto/update-category.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-category.dto.js","sourceRoot":"","sources":["../../../src/category/dto/update-category.dto.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,+DAA0D;AAE1D,MAAa,iBAAkB,SAAQ,IAAA,qBAAW,EAAC,uCAAiB,CAAC;CAAG;AAAxE,8CAAwE"} \ No newline at end of file diff --git a/backend/dist/category/entities/category.entity.d.ts b/backend/dist/category/entities/category.entity.d.ts new file mode 100644 index 00000000..29a94e5a --- /dev/null +++ b/backend/dist/category/entities/category.entity.d.ts @@ -0,0 +1,5 @@ +export declare class Category { + idCategory: number; + language: string; + name: string; +} diff --git a/backend/dist/category/entities/category.entity.js b/backend/dist/category/entities/category.entity.js new file mode 100644 index 00000000..6d846b08 --- /dev/null +++ b/backend/dist/category/entities/category.entity.js @@ -0,0 +1,32 @@ +"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.Category = void 0; +const typeorm_1 = require("typeorm"); +let Category = class Category { +}; +exports.Category = Category; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], Category.prototype, "idCategory", void 0); +__decorate([ + (0, typeorm_1.PrimaryColumn)({ nullable: false, primary: true }), + __metadata("design:type", String) +], Category.prototype, "language", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", String) +], Category.prototype, "name", void 0); +exports.Category = Category = __decorate([ + (0, typeorm_1.Entity)() +], Category); +//# sourceMappingURL=category.entity.js.map \ No newline at end of file diff --git a/backend/dist/category/entities/category.entity.js.map b/backend/dist/category/entities/category.entity.js.map new file mode 100644 index 00000000..590c9b3c --- /dev/null +++ b/backend/dist/category/entities/category.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"category.entity.js","sourceRoot":"","sources":["../../../src/category/entities/category.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAgF;AAGzE,IAAM,QAAQ,GAAd,MAAM,QAAQ;CASpB,CAAA;AATY,4BAAQ;AAEnB;IADC,IAAA,gCAAsB,GAAE;;4CACN;AAGnB;IADC,IAAA,uBAAa,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;0CACjC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;sCACf;mBARF,QAAQ;IADpB,IAAA,gBAAM,GAAE;GACI,QAAQ,CASpB"} \ No newline at end of file diff --git a/backend/dist/constants/db.constants.d.ts b/backend/dist/constants/db.constants.d.ts new file mode 100644 index 00000000..c8bd158e --- /dev/null +++ b/backend/dist/constants/db.constants.d.ts @@ -0,0 +1,8 @@ +export declare class DbConstants { + static DB_HOST: string; + static DB_PORT: number; + static DB_USER: string; + static DB_PASSWORD: string; + static DB_NAME: string; + static DB_SYNC: boolean; +} diff --git a/backend/dist/constants/db.constants.js b/backend/dist/constants/db.constants.js new file mode 100644 index 00000000..cf9a14ba --- /dev/null +++ b/backend/dist/constants/db.constants.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DbConstants = void 0; +class DbConstants { +} +exports.DbConstants = DbConstants; +DbConstants.DB_HOST = process.env.DB_HOST || 'localhost'; +DbConstants.DB_PORT = process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 3306; +DbConstants.DB_USER = process.env.DB_USER || 'root'; +DbConstants.DB_PASSWORD = process.env.DB_PASSWORD || 'root'; +DbConstants.DB_NAME = process.env.DB_NAME || 'pueblos'; +DbConstants.DB_SYNC = process.env.DB_SYNC === 'true'; +//# sourceMappingURL=db.constants.js.map \ No newline at end of file diff --git a/backend/dist/constants/db.constants.js.map b/backend/dist/constants/db.constants.js.map new file mode 100644 index 00000000..97da28a5 --- /dev/null +++ b/backend/dist/constants/db.constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"db.constants.js","sourceRoot":"","sources":["../../src/constants/db.constants.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;;AAAxB,kCAOC;AANQ,mBAAO,GAAW,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW,CAAC;AACrD,mBAAO,GAAW,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,mBAAO,GAAW,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC;AAChD,uBAAW,GAAW,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC;AACxD,mBAAO,GAAW,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;AACnD,mBAAO,GAAY,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC"} \ No newline at end of file diff --git a/backend/dist/constants/google.constants.d.ts b/backend/dist/constants/google.constants.d.ts new file mode 100644 index 00000000..ece5a693 --- /dev/null +++ b/backend/dist/constants/google.constants.d.ts @@ -0,0 +1,3 @@ +export declare class GoogleConstants { + static GoogleTextToSpeechKey: string; +} diff --git a/backend/dist/constants/google.constants.js b/backend/dist/constants/google.constants.js new file mode 100644 index 00000000..d8f8303a --- /dev/null +++ b/backend/dist/constants/google.constants.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GoogleConstants = void 0; +const dotenv = require("dotenv"); +dotenv.config(); +class GoogleConstants { +} +exports.GoogleConstants = GoogleConstants; +GoogleConstants.GoogleTextToSpeechKey = process.env.GOOGLE_TEXT_TO_SPEECH_API_KEY; +//# sourceMappingURL=google.constants.js.map \ No newline at end of file diff --git a/backend/dist/constants/google.constants.js.map b/backend/dist/constants/google.constants.js.map new file mode 100644 index 00000000..2f74bdd8 --- /dev/null +++ b/backend/dist/constants/google.constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"google.constants.js","sourceRoot":"","sources":["../../src/constants/google.constants.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAa,eAAe;;AAA5B,0CAEC;AADQ,qCAAqB,GAAW,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC"} \ No newline at end of file diff --git a/backend/dist/constants/jwt.constants.d.ts b/backend/dist/constants/jwt.constants.d.ts new file mode 100644 index 00000000..1ebc3e44 --- /dev/null +++ b/backend/dist/constants/jwt.constants.d.ts @@ -0,0 +1,3 @@ +export declare class JwtConstants { + static SECRET: string; +} diff --git a/backend/dist/constants/jwt.constants.js b/backend/dist/constants/jwt.constants.js new file mode 100644 index 00000000..33c4d864 --- /dev/null +++ b/backend/dist/constants/jwt.constants.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.JwtConstants = void 0; +const dotenv = require("dotenv"); +dotenv.config(); +class JwtConstants { +} +exports.JwtConstants = JwtConstants; +JwtConstants.SECRET = process.env.JWT_SECRET || 'secretKey'; +//# sourceMappingURL=jwt.constants.js.map \ No newline at end of file diff --git a/backend/dist/constants/jwt.constants.js.map b/backend/dist/constants/jwt.constants.js.map new file mode 100644 index 00000000..92959e4e --- /dev/null +++ b/backend/dist/constants/jwt.constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jwt.constants.js","sourceRoot":"","sources":["../../src/constants/jwt.constants.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAa,YAAY;;AAAzB,oCAEC;AADQ,mBAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,CAAC"} \ No newline at end of file diff --git a/backend/dist/constants/mail.constants.d.ts b/backend/dist/constants/mail.constants.d.ts new file mode 100644 index 00000000..ec426621 --- /dev/null +++ b/backend/dist/constants/mail.constants.d.ts @@ -0,0 +1,5 @@ +export declare class MailConstants { + static MAIL_HOST: string; + static MAIL_USER: string; + static MAIL_PASSWORD: string; +} diff --git a/backend/dist/constants/mail.constants.js b/backend/dist/constants/mail.constants.js new file mode 100644 index 00000000..748868d8 --- /dev/null +++ b/backend/dist/constants/mail.constants.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MailConstants = void 0; +class MailConstants { +} +exports.MailConstants = MailConstants; +MailConstants.MAIL_HOST = process.env.MAIL_HOST || 'smtp.gmail.com'; +MailConstants.MAIL_USER = process.env.MAIL_USER || 'nouser'; +MailConstants.MAIL_PASSWORD = process.env.MAIL_PASSWORD || 'nopassword'; +//# sourceMappingURL=mail.constants.js.map \ No newline at end of file diff --git a/backend/dist/constants/mail.constants.js.map b/backend/dist/constants/mail.constants.js.map new file mode 100644 index 00000000..24b28efe --- /dev/null +++ b/backend/dist/constants/mail.constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mail.constants.js","sourceRoot":"","sources":["../../src/constants/mail.constants.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;;AAA1B,sCAIC;AAHU,uBAAS,GAAW,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,gBAAgB,CAAC;AAC9D,uBAAS,GAAW,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC;AACtD,2BAAa,GAAW,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC"} \ No newline at end of file diff --git a/backend/dist/constants/server.contants.d.ts b/backend/dist/constants/server.contants.d.ts new file mode 100644 index 00000000..6e17d527 --- /dev/null +++ b/backend/dist/constants/server.contants.d.ts @@ -0,0 +1,7 @@ +export declare class ServerConstants { + static PORT: number; + static IP: string; + static HOST: string; + static ROOT_PATH: string; + static ROOT_STATIC_PATH: string; +} diff --git a/backend/dist/constants/server.contants.js b/backend/dist/constants/server.contants.js new file mode 100644 index 00000000..ed60e9a6 --- /dev/null +++ b/backend/dist/constants/server.contants.js @@ -0,0 +1,24 @@ +"use strict"; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ServerConstants = void 0; +const dotenv = require("dotenv"); +const network = require("network"); +const path_1 = require("path"); +let publicIp; +dotenv.config(); +class ServerConstants { +} +exports.ServerConstants = ServerConstants; +_a = ServerConstants; +ServerConstants.PORT = process.env.SERVER_PORT ? parseInt(process.env.SERVER_PORT) : 3003; +ServerConstants.IP = publicIp || 'http://localhost'; +ServerConstants.HOST = `http://${publicIp || 'localhost'}:${_a.PORT}`; +ServerConstants.ROOT_PATH = (0, path_1.join)(__dirname, '..', '..'); +ServerConstants.ROOT_STATIC_PATH = (0, path_1.join)(__dirname, '..', '..', 'static'); +network.get_private_ip(function (err, ip) { + publicIp = ip; + ServerConstants.IP = publicIp; + ServerConstants.HOST = `http://${publicIp || 'localhost'}:${ServerConstants.PORT}`; +}); +//# sourceMappingURL=server.contants.js.map \ No newline at end of file diff --git a/backend/dist/constants/server.contants.js.map b/backend/dist/constants/server.contants.js.map new file mode 100644 index 00000000..cda1dadf --- /dev/null +++ b/backend/dist/constants/server.contants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"server.contants.js","sourceRoot":"","sources":["../../src/constants/server.contants.ts"],"names":[],"mappings":";;;;AAAA,iCAAiC;AACjC,mCAAmC;AACnC,+BAA4B;AAE5B,IAAI,QAAgB,CAAC;AAErB,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAa,eAAe;;AAA5B,0CAMC;;AALQ,oBAAI,GAAW,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,AAA7E,CAA8E;AAClF,kBAAE,GAAW,QAAQ,IAAI,kBAAkB,AAAzC,CAA0C;AAC5C,oBAAI,GAAW,UAAU,QAAQ,IAAI,WAAW,IAAI,EAAI,CAAC,IAAI,EAAE,AAA3D,CAA4D;AAChE,yBAAS,GAAW,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,AAAtC,CAAuC;AAChD,gCAAgB,GAAW,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,AAAhD,CAAiD;AAG1E,OAAO,CAAC,cAAc,CAAC,UAAU,GAAG,EAAE,EAAE;IACtC,QAAQ,GAAG,EAAE,CAAC;IACd,eAAe,CAAC,EAAE,GAAG,QAAQ,CAAC;IAC9B,eAAe,CAAC,IAAI,GAAG,UAAU,QAAQ,IAAI,WAAW,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;AACrF,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/backend/dist/database-seeder/database-seeder.module.d.ts b/backend/dist/database-seeder/database-seeder.module.d.ts new file mode 100644 index 00000000..3783e287 --- /dev/null +++ b/backend/dist/database-seeder/database-seeder.module.d.ts @@ -0,0 +1,2 @@ +export declare class DatabaseSeederModule { +} diff --git a/backend/dist/database-seeder/database-seeder.module.js b/backend/dist/database-seeder/database-seeder.module.js new file mode 100644 index 00000000..752a0bbe --- /dev/null +++ b/backend/dist/database-seeder/database-seeder.module.js @@ -0,0 +1,68 @@ +"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.DatabaseSeederModule = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const database_seeder_service_1 = require("./database-seeder.service"); +const state_entity_1 = require("../state/entities/state.entity"); +const state_service_1 = require("../state/state.service"); +const town_entity_1 = require("../town/entities/town.entity"); +const admin_entity_1 = require("../admin/entities/admin.entity"); +const authAdmin_service_1 = require("../auth/admin/authAdmin.service"); +const admin_service_1 = require("../admin/admin.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const town_service_1 = require("../town/town.service"); +const town_traduction_entity_1 = require("../town/entities/town-traduction.entity"); +const PointOfInterest_service_1 = require("../pointOfInterest/PointOfInterest.service"); +const place_service_1 = require("../place/place.service"); +const place_entity_1 = require("../place/entities/place.entity"); +const PointOfInterest_entity_1 = require("../pointOfInterest/entities/PointOfInterest.entity"); +const available_date_entity_1 = require("../place/entities/available-date.entity"); +const place_traduction_entity_1 = require("../place/entities/place-traduction.entity"); +const PointOfInterestTraduction_entity_1 = require("../pointOfInterest/entities/PointOfInterestTraduction.entity"); +const category_service_1 = require("../category/category.service"); +const category_entity_1 = require("../category/entities/category.entity"); +const admin_reset_code_entity_1 = require("../auth/admin/entitites/admin-reset-code.entity"); +let DatabaseSeederModule = class DatabaseSeederModule { +}; +exports.DatabaseSeederModule = DatabaseSeederModule; +exports.DatabaseSeederModule = DatabaseSeederModule = __decorate([ + (0, common_1.Module)({ + providers: [ + database_seeder_service_1.DatabaseSeederService, + state_service_1.StateService, + authAdmin_service_1.AuthAdminService, + admin_service_1.AdminService, + jwt_1.JwtService, + encryption_service_1.EncryptionService, + town_service_1.TownService, + PointOfInterest_service_1.PointOfInterestService, + place_service_1.PlaceService, + category_service_1.CategoryService, + ], + imports: [ + typeorm_1.TypeOrmModule.forFeature([ + state_entity_1.State, + town_entity_1.Town, + admin_entity_1.Admin, + town_entity_1.Town, + town_traduction_entity_1.TownTraduction, + place_entity_1.Place, + PointOfInterest_entity_1.PointOfInterest, + available_date_entity_1.AvailableDate, + place_traduction_entity_1.PlaceTraduction, + PointOfInterestTraduction_entity_1.PointOfInterestTraduction, + category_entity_1.Category, + admin_reset_code_entity_1.AdminResetCode, + ]), + ], + }) +], DatabaseSeederModule); +//# sourceMappingURL=database-seeder.module.js.map \ No newline at end of file diff --git a/backend/dist/database-seeder/database-seeder.module.js.map b/backend/dist/database-seeder/database-seeder.module.js.map new file mode 100644 index 00000000..09380b73 --- /dev/null +++ b/backend/dist/database-seeder/database-seeder.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"database-seeder.module.js","sourceRoot":"","sources":["../../src/database-seeder/database-seeder.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,uEAAkE;AAClE,iEAAwD;AACxD,0DAAuD;AACvD,8DAAqD;AACrD,iEAAwD;AACxD,uEAAoE;AACpE,0DAAuD;AACvD,qCAAyC;AACzC,8EAA2E;AAC3E,uDAAoD;AACpD,oFAA0E;AAC1E,wFAAqF;AACrF,0DAAuD;AACvD,iEAAwD;AACxD,+FAAsF;AACtF,mFAAyE;AACzE,uFAA6E;AAC7E,mHAA0G;AAC1G,mEAAgE;AAChE,0EAAiE;AACjE,6FAAkF;AAgC3E,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oDAAoB;+BAApB,oBAAoB;IA9BhC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,+CAAqB;YACrB,4BAAY;YACZ,oCAAgB;YAChB,4BAAY;YACZ,gBAAU;YACV,sCAAiB;YACjB,0BAAW;YACX,gDAAsB;YACtB,4BAAY;YACZ,kCAAe;SAChB;QACD,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC;gBACvB,oBAAK;gBACL,kBAAI;gBACJ,oBAAK;gBACL,kBAAI;gBACJ,uCAAc;gBACd,oBAAK;gBACL,wCAAe;gBACf,qCAAa;gBACb,yCAAe;gBACf,4DAAyB;gBACzB,0BAAQ;gBACR,wCAAc;aACf,CAAC;SACH;KACF,CAAC;GACW,oBAAoB,CAAG"} \ No newline at end of file diff --git a/backend/dist/database-seeder/database-seeder.service.d.ts b/backend/dist/database-seeder/database-seeder.service.d.ts new file mode 100644 index 00000000..44271539 --- /dev/null +++ b/backend/dist/database-seeder/database-seeder.service.d.ts @@ -0,0 +1,20 @@ +import { OnModuleInit } from '@nestjs/common'; +import { State } from 'src/state/entities/state.entity'; +import { StateService } from 'src/state/state.service'; +import { Repository } from 'typeorm'; +import { AuthAdminService } from 'src/auth/admin/authAdmin.service'; +import { TownService } from 'src/town/town.service'; +import { Category } from 'src/category/entities/category.entity'; +export declare class DatabaseSeederService implements OnModuleInit { + private stateRepo; + private readonly stateService; + private readonly authAdminService; + private readonly townService; + private categoryRepo; + constructor(stateRepo: Repository, stateService: StateService, authAdminService: AuthAdminService, townService: TownService, categoryRepo: Repository); + insertStates(): Promise; + insertSuperAdmin(): Promise; + insertTowns(): Promise; + insertCategories(): Promise; + onModuleInit(): Promise; +} diff --git a/backend/dist/database-seeder/database-seeder.service.js b/backend/dist/database-seeder/database-seeder.service.js new file mode 100644 index 00000000..cb0d7697 --- /dev/null +++ b/backend/dist/database-seeder/database-seeder.service.js @@ -0,0 +1,123 @@ +"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.DatabaseSeederService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const state_entity_1 = require("../state/entities/state.entity"); +const state_service_1 = require("../state/state.service"); +const typeorm_2 = require("typeorm"); +const data = require("./states.json"); +const admin_role_enum_1 = require("../shared/enum/admin-role.enum"); +const user_status_enum_1 = require("../shared/enum/user-status.enum"); +const authAdmin_service_1 = require("../auth/admin/authAdmin.service"); +const town_service_1 = require("../town/town.service"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +const category_entity_1 = require("../category/entities/category.entity"); +let DatabaseSeederService = class DatabaseSeederService { + constructor(stateRepo, stateService, authAdminService, townService, categoryRepo) { + this.stateRepo = stateRepo; + this.stateService = stateService; + this.authAdminService = authAdminService; + this.townService = townService; + this.categoryRepo = categoryRepo; + } + async insertStates() { + const states = data.states; + for (const state of states) { + await this.stateService.create(state); + } + } + async insertSuperAdmin() { + const createSuperAdmin = { + email: 'superadmin@gmail.com', + idTown: null, + password: '123', + name: 'Super Admin', + lastName: 'super', + role: admin_role_enum_1.ADMIN_ROLE.SUPERADMIN, + status: user_status_enum_1.UserStatus.ACTIVE, + }; + const createAdmin = { + email: 'admin@gmail.com', + idTown: 1, + password: '123', + name: 'Admin', + lastName: 'admin', + role: admin_role_enum_1.ADMIN_ROLE.ADMIN, + status: user_status_enum_1.UserStatus.ACTIVE, + }; + let tokenSuper = ''; + let tokenAdmin = ''; + try { + tokenSuper = await this.authAdminService.signUp({ ...createSuperAdmin }); + tokenAdmin = await this.authAdminService.signUp({ ...createAdmin }); + console.log({ tokenAdmin }); + } + catch (error) { + tokenSuper = (await this.authAdminService.signIn({ + email: createSuperAdmin.email, + password: createSuperAdmin.password, + })).token; + } + console.log(`Super Admin created with email: ${createSuperAdmin.email} + , password: ${createSuperAdmin.password}, and token: ${tokenSuper}`); + console.log(`Admin created with email: ${createAdmin.email}, password: ${createAdmin.password} and token: ${tokenAdmin}`); + } + async insertTowns() { + const town = { + state: 1, + name: 'Town', + imageName: 'default.jpg', + descriptionEN: 'Town description', + descriptionES: 'Descripcion del pueblo', + }; + await this.townService.create(town); + } + async insertCategories() { + const categoriesES = [ + { idCategory: 1, language: languages_enum_1.LANGUAGES.ES, name: 'Arquitectura' }, + { idCategory: 2, language: languages_enum_1.LANGUAGES.ES, name: 'Comida' }, + ]; + const categoriesEN = [ + { idCategory: 1, language: languages_enum_1.LANGUAGES.EN, name: 'Architecture' }, + { idCategory: 2, language: languages_enum_1.LANGUAGES.EN, name: 'Food' }, + ]; + for (let i = 0; i < categoriesES.length; i++) { + await this.categoryRepo.upsert([{ idCategory: categoriesES[i].idCategory, language: languages_enum_1.LANGUAGES.ES, name: categoriesES[i].name }], { + conflictPaths: ['idCategory', 'language'], + }); + await this.categoryRepo.upsert([{ idCategory: categoriesES[i].idCategory, language: languages_enum_1.LANGUAGES.EN, name: categoriesEN[i].name }], { + conflictPaths: ['idCategory', 'language'], + }); + } + } + async onModuleInit() { + await this.insertStates(); + await this.insertSuperAdmin(); + await this.insertCategories(); + } +}; +exports.DatabaseSeederService = DatabaseSeederService; +exports.DatabaseSeederService = DatabaseSeederService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(state_entity_1.State)), + __param(4, (0, typeorm_1.InjectRepository)(category_entity_1.Category)), + __metadata("design:paramtypes", [typeorm_2.Repository, + state_service_1.StateService, + authAdmin_service_1.AuthAdminService, + town_service_1.TownService, + typeorm_2.Repository]) +], DatabaseSeederService); +//# sourceMappingURL=database-seeder.service.js.map \ No newline at end of file diff --git a/backend/dist/database-seeder/database-seeder.service.js.map b/backend/dist/database-seeder/database-seeder.service.js.map new file mode 100644 index 00000000..adc46298 --- /dev/null +++ b/backend/dist/database-seeder/database-seeder.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"database-seeder.service.js","sourceRoot":"","sources":["../../src/database-seeder/database-seeder.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/database-seeder/states.json b/backend/dist/database-seeder/states.json new file mode 100644 index 00000000..4d7e08c5 --- /dev/null +++ b/backend/dist/database-seeder/states.json @@ -0,0 +1,9 @@ +{ + "states": [ + { + "stateId": 1, + "name": "Zacatecas", + "imageName": "1.jpg" + } + ] +} diff --git a/backend/dist/email/email.service.d.ts b/backend/dist/email/email.service.d.ts new file mode 100644 index 00000000..3f7ccc1d --- /dev/null +++ b/backend/dist/email/email.service.d.ts @@ -0,0 +1,7 @@ +import { MailerService } from '@nestjs-modules/mailer'; +export declare class EmailService { + private readonly mailerService; + constructor(mailerService: MailerService); + sendResetPasswordEmail(email: string, resetCode: string): Promise; + sendConfirmationCode(email: string, confirmationCode: string): Promise; +} diff --git a/backend/dist/email/email.service.js b/backend/dist/email/email.service.js new file mode 100644 index 00000000..f40c7674 --- /dev/null +++ b/backend/dist/email/email.service.js @@ -0,0 +1,53 @@ +"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.EmailService = void 0; +const mailer_1 = require("@nestjs-modules/mailer"); +const common_1 = require("@nestjs/common"); +let EmailService = class EmailService { + constructor(mailerService) { + this.mailerService = mailerService; + } + async sendResetPasswordEmail(email, resetCode) { + const mailOptions = { + to: email, + subject: 'Reset your password', + html: `

Your reset code is ${resetCode}

`, + }; + try { + await this.mailerService.sendMail(mailOptions); + } + catch (error) { + console.error(error); + throw new Error('Error sending email'); + } + } + async sendConfirmationCode(email, confirmationCode) { + const mailOptions = { + to: email, + subject: 'Confirm your email', + html: `

Your confirmation code is ${confirmationCode}

`, + }; + try { + await this.mailerService.sendMail(mailOptions); + } + catch (error) { + console.error(error); + throw new Error('Error sending email'); + } + } +}; +exports.EmailService = EmailService; +exports.EmailService = EmailService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [mailer_1.MailerService]) +], EmailService); +//# sourceMappingURL=email.service.js.map \ No newline at end of file diff --git a/backend/dist/email/email.service.js.map b/backend/dist/email/email.service.js.map new file mode 100644 index 00000000..f4a512b3 --- /dev/null +++ b/backend/dist/email/email.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"email.service.js","sourceRoot":"","sources":["../../src/email/email.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAuD;AACvD,2CAA4C;AAGrC,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,KAAK,CAAC,sBAAsB,CAAC,KAAa,EAAE,SAAiB;QAC3D,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE,4BAA4B,SAAS,UAAU;SACtD,CAAC;QACF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAa,EAAE,gBAAwB;QAChE,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,oBAAoB;YAC7B,IAAI,EAAE,mCAAmC,gBAAgB,UAAU;SACpE,CAAC;QACF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF,CAAA;AA9BY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAEiC,sBAAa;GAD9C,YAAY,CA8BxB"} \ No newline at end of file diff --git a/backend/dist/main.d.ts b/backend/dist/main.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/backend/dist/main.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/backend/dist/main.js b/backend/dist/main.js new file mode 100644 index 00000000..2468ce3f --- /dev/null +++ b/backend/dist/main.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = require("@nestjs/core"); +const app_module_1 = require("./app.module"); +const swagger_1 = require("@nestjs/swagger"); +const server_contants_1 = require("./constants/server.contants"); +const common_1 = require("@nestjs/common"); +const dotenv = require("dotenv"); +async function bootstrap() { + dotenv.config(); + const app = await core_1.NestFactory.create(app_module_1.AppModule); + app.useGlobalPipes(new common_1.ValidationPipe({ + transform: true, + })); + const config = new swagger_1.DocumentBuilder() + .setTitle('Pueblos Magicos API') + .setVersion('1.0') + .addBearerAuth({ + type: 'http', + scheme: 'bearer', + bearerFormat: 'JWT', + name: 'Authorization', + in: 'header', + }, 'jwt') + .build(); + const document = swagger_1.SwaggerModule.createDocument(app, config); + swagger_1.SwaggerModule.setup('api', app, document); + app.enableCors(); + await app.listen(server_contants_1.ServerConstants.PORT); + console.log(`Application is running on: ${await app.getUrl()}`); + console.log(`API documentation at: ${await app.getUrl()}/api`); +} +bootstrap(); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/backend/dist/main.js.map b/backend/dist/main.js.map new file mode 100644 index 00000000..767e9489 --- /dev/null +++ b/backend/dist/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,6CAAiE;AACjE,iEAA8D;AAC9D,2CAAgD;AAChD,iCAAiC;AAEjC,KAAK,UAAU,SAAS;IACtB,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAChD,GAAG,CAAC,cAAc,CAChB,IAAI,uBAAc,CAAC;QACjB,SAAS,EAAE,IAAI;KAChB,CAAC,CACH,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;SACjC,QAAQ,CAAC,qBAAqB,CAAC;SAC/B,UAAU,CAAC,KAAK,CAAC;SACjB,aAAa,CACZ;QACE,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,KAAK;QACnB,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,QAAQ;KACb,EACD,KAAK,CACN;SACA,KAAK,EAAE,CAAC;IACX,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,uBAAa,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1C,GAAG,CAAC,UAAU,EAAE,CAAC;IACjB,MAAM,GAAG,CAAC,MAAM,CAAC,iCAAe,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AACD,SAAS,EAAE,CAAC"} \ No newline at end of file diff --git a/backend/dist/place/dto/create-date.dto.d.ts b/backend/dist/place/dto/create-date.dto.d.ts new file mode 100644 index 00000000..46553a32 --- /dev/null +++ b/backend/dist/place/dto/create-date.dto.d.ts @@ -0,0 +1,6 @@ +import { Place } from '../entities/place.entity'; +export declare class CreateDateDto { + startDate: Date; + endDate: Date; + idPlace: Place; +} diff --git a/backend/dist/place/dto/create-date.dto.js b/backend/dist/place/dto/create-date.dto.js new file mode 100644 index 00000000..ecbca388 --- /dev/null +++ b/backend/dist/place/dto/create-date.dto.js @@ -0,0 +1,25 @@ +"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.CreateDateDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class CreateDateDto { +} +exports.CreateDateDto = CreateDateDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Date) +], CreateDateDto.prototype, "startDate", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Date) +], CreateDateDto.prototype, "endDate", void 0); +//# sourceMappingURL=create-date.dto.js.map \ No newline at end of file diff --git a/backend/dist/place/dto/create-date.dto.js.map b/backend/dist/place/dto/create-date.dto.js.map new file mode 100644 index 00000000..c14caa63 --- /dev/null +++ b/backend/dist/place/dto/create-date.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-date.dto.js","sourceRoot":"","sources":["../../../src/place/dto/create-date.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAG9C,MAAa,aAAa;CAQzB;AARD,sCAQC;AANC;IADC,IAAA,qBAAW,GAAE;8BACH,IAAI;gDAAC;AAGhB;IADC,IAAA,qBAAW,GAAE;8BACL,IAAI;8CAAC"} \ No newline at end of file diff --git a/backend/dist/place/dto/create-place-date.dto.d.ts b/backend/dist/place/dto/create-place-date.dto.d.ts new file mode 100644 index 00000000..7b4d46f8 --- /dev/null +++ b/backend/dist/place/dto/create-place-date.dto.d.ts @@ -0,0 +1,17 @@ +import { Available } from 'src/pointOfInterest/enum/available.enum'; +export declare class CreatePlaceDateTradDto { + available: Available; + idTown: number; + name: string; + categoriesId: number[]; + descriptionES: string; + descriptionEN: string; + image: any; + latitude: any; + longitude: any; + address: string; + openAt: number; + closeAt: number; + startDate: Date; + endDate: Date; +} diff --git a/backend/dist/place/dto/create-place-date.dto.js b/backend/dist/place/dto/create-place-date.dto.js new file mode 100644 index 00000000..8c793c13 --- /dev/null +++ b/backend/dist/place/dto/create-place-date.dto.js @@ -0,0 +1,78 @@ +"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.CreatePlaceDateTradDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const available_enum_1 = require("../../pointOfInterest/enum/available.enum"); +const class_transformer_1 = require("class-transformer"); +const class_validator_1 = require("class-validator"); +class CreatePlaceDateTradDto { +} +exports.CreatePlaceDateTradDto = CreatePlaceDateTradDto; +__decorate([ + (0, swagger_1.ApiProperty)({ enum: available_enum_1.Available, enumName: 'Available' }), + __metadata("design:type", String) +], CreatePlaceDateTradDto.prototype, "available", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], CreatePlaceDateTradDto.prototype, "idTown", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePlaceDateTradDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ type: String, description: 'Comma-separated list of category IDs', example: '1,2,3' }), + (0, class_validator_1.IsArray)({}), + (0, class_transformer_1.Transform)(({ value }) => value.split(',').map(Number)), + __metadata("design:type", Array) +], CreatePlaceDateTradDto.prototype, "categoriesId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePlaceDateTradDto.prototype, "descriptionES", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePlaceDateTradDto.prototype, "descriptionEN", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ type: 'string', format: 'binary' }), + __metadata("design:type", Object) +], CreatePlaceDateTradDto.prototype, "image", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ type: 'decimal' }), + __metadata("design:type", Object) +], CreatePlaceDateTradDto.prototype, "latitude", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ type: 'decimal' }), + __metadata("design:type", Object) +], CreatePlaceDateTradDto.prototype, "longitude", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePlaceDateTradDto.prototype, "address", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ maximum: 24, minimum: 0 }), + __metadata("design:type", Number) +], CreatePlaceDateTradDto.prototype, "openAt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ maximum: 24, minimum: 0 }), + __metadata("design:type", Number) +], CreatePlaceDateTradDto.prototype, "closeAt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ nullable: true, required: false, description: 'Only required if available is CUSTOM' }), + __metadata("design:type", Date) +], CreatePlaceDateTradDto.prototype, "startDate", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ nullable: true, required: false, description: 'Only required if available is CUSTOM' }), + __metadata("design:type", Date) +], CreatePlaceDateTradDto.prototype, "endDate", void 0); +//# sourceMappingURL=create-place-date.dto.js.map \ No newline at end of file diff --git a/backend/dist/place/dto/create-place-date.dto.js.map b/backend/dist/place/dto/create-place-date.dto.js.map new file mode 100644 index 00000000..b095f612 --- /dev/null +++ b/backend/dist/place/dto/create-place-date.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-place-date.dto.js","sourceRoot":"","sources":["../../../src/place/dto/create-place-date.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,8EAAoE;AACpE,yDAA8C;AAC9C,qDAA0C;AAE1C,MAAa,sBAAsB;CA4ClC;AA5CD,wDA4CC;AA1CC;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,0BAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;yDACnC;AAGrB;IADC,IAAA,qBAAW,GAAE;;sDACC;AAGf;IADC,IAAA,qBAAW,GAAE;;oDACD;AAKb;IAHC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACpG,IAAA,yBAAO,EAAC,EAAE,CAAC;IACX,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;;4DAChC;AAGvB;IADC,IAAA,qBAAW,GAAE;;6DACQ;AAEtB;IADC,IAAA,qBAAW,GAAE;;6DACQ;AAGtB;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;qDAC5C;AAGN;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;wDACxB;AAGT;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;yDACvB;AAGV;IADC,IAAA,qBAAW,GAAE;;uDACE;AAIhB;IADC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;sDAC1B;AAGf;IADC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;uDACzB;AAGhB;IADC,IAAA,qBAAW,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;8BAC3F,IAAI;yDAAC;AAGhB;IADC,IAAA,qBAAW,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;8BAC7F,IAAI;uDAAC"} \ No newline at end of file diff --git a/backend/dist/place/dto/create-place-trad.dto.d.ts b/backend/dist/place/dto/create-place-trad.dto.d.ts new file mode 100644 index 00000000..4d0a8157 --- /dev/null +++ b/backend/dist/place/dto/create-place-trad.dto.d.ts @@ -0,0 +1,6 @@ +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class CreateTraductionPlaceDto { + language: LANGUAGES; + idPlace: number; + description: string; +} diff --git a/backend/dist/place/dto/create-place-trad.dto.js b/backend/dist/place/dto/create-place-trad.dto.js new file mode 100644 index 00000000..f2a28462 --- /dev/null +++ b/backend/dist/place/dto/create-place-trad.dto.js @@ -0,0 +1,33 @@ +"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.CreateTraductionPlaceDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const languages_enum_1 = require("../../shared/enum/languages.enum"); +class CreateTraductionPlaceDto { + constructor() { + this.language = languages_enum_1.LANGUAGES.ES; + } +} +exports.CreateTraductionPlaceDto = CreateTraductionPlaceDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateTraductionPlaceDto.prototype, "language", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], CreateTraductionPlaceDto.prototype, "idPlace", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateTraductionPlaceDto.prototype, "description", void 0); +//# sourceMappingURL=create-place-trad.dto.js.map \ No newline at end of file diff --git a/backend/dist/place/dto/create-place-trad.dto.js.map b/backend/dist/place/dto/create-place-trad.dto.js.map new file mode 100644 index 00000000..8b46b46e --- /dev/null +++ b/backend/dist/place/dto/create-place-trad.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-place-trad.dto.js","sourceRoot":"","sources":["../../../src/place/dto/create-place-trad.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qEAA2D;AAE3D,MAAa,wBAAwB;IAArC;QAEE,aAAQ,GAAc,0BAAS,CAAC,EAAE,CAAC;IAMrC,CAAC;CAAA;AARD,4DAQC;AANC;IADC,IAAA,qBAAW,GAAE;;0DACqB;AAEnC;IADC,IAAA,qBAAW,GAAE;;yDACE;AAGhB;IADC,IAAA,qBAAW,GAAE;;6DACM"} \ No newline at end of file diff --git a/backend/dist/place/dto/create-place.dto.d.ts b/backend/dist/place/dto/create-place.dto.d.ts new file mode 100644 index 00000000..87220e01 --- /dev/null +++ b/backend/dist/place/dto/create-place.dto.d.ts @@ -0,0 +1,15 @@ +import { Category } from 'src/category/entities/category.entity'; +import { Available } from 'src/pointOfInterest/enum/available.enum'; +import { Town } from 'src/town/entities/town.entity'; +export declare class CreatePlaceDto { + available: Available; + name: string; + imageName: string; + town: Town; + latitude: 'decimal'; + longitude: 'decimal'; + address: string; + openAt: number; + closeAt: number; + categories: Category[]; +} diff --git a/backend/dist/place/dto/create-place.dto.js b/backend/dist/place/dto/create-place.dto.js new file mode 100644 index 00000000..fa0cdbe6 --- /dev/null +++ b/backend/dist/place/dto/create-place.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreatePlaceDto = void 0; +class CreatePlaceDto { +} +exports.CreatePlaceDto = CreatePlaceDto; +//# sourceMappingURL=create-place.dto.js.map \ No newline at end of file diff --git a/backend/dist/place/dto/create-place.dto.js.map b/backend/dist/place/dto/create-place.dto.js.map new file mode 100644 index 00000000..3ee158f1 --- /dev/null +++ b/backend/dist/place/dto/create-place.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-place.dto.js","sourceRoot":"","sources":["../../../src/place/dto/create-place.dto.ts"],"names":[],"mappings":";;;AAIA,MAAa,cAAc;CAW1B;AAXD,wCAWC"} \ No newline at end of file diff --git a/backend/dist/place/dto/get-place.dto.d.ts b/backend/dist/place/dto/get-place.dto.d.ts new file mode 100644 index 00000000..1f67aa91 --- /dev/null +++ b/backend/dist/place/dto/get-place.dto.d.ts @@ -0,0 +1,17 @@ +import { Available } from 'src/pointOfInterest/enum/available.enum'; +export declare class GetPlaceDto { + idTown: number; + idPlace: number; + name: string; + description: string; + available: Available; + imageName: string; + latitude: number; + longitude: number; + openAt: number; + closeAt: number; + startDate: Date; + endDate: Date; + categories: any[]; + address: string; +} diff --git a/backend/dist/place/dto/get-place.dto.js b/backend/dist/place/dto/get-place.dto.js new file mode 100644 index 00000000..2cd3d583 --- /dev/null +++ b/backend/dist/place/dto/get-place.dto.js @@ -0,0 +1,74 @@ +"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.GetPlaceDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const available_enum_1 = require("../../pointOfInterest/enum/available.enum"); +class GetPlaceDto { +} +exports.GetPlaceDto = GetPlaceDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], GetPlaceDto.prototype, "idTown", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], GetPlaceDto.prototype, "idPlace", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetPlaceDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetPlaceDto.prototype, "description", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetPlaceDto.prototype, "available", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetPlaceDto.prototype, "imageName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], GetPlaceDto.prototype, "latitude", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], GetPlaceDto.prototype, "longitude", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], GetPlaceDto.prototype, "openAt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], GetPlaceDto.prototype, "closeAt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Date) +], GetPlaceDto.prototype, "startDate", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Date) +], GetPlaceDto.prototype, "endDate", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Array) +], GetPlaceDto.prototype, "categories", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], GetPlaceDto.prototype, "address", void 0); +//# sourceMappingURL=get-place.dto.js.map \ No newline at end of file diff --git a/backend/dist/place/dto/get-place.dto.js.map b/backend/dist/place/dto/get-place.dto.js.map new file mode 100644 index 00000000..e53b4014 --- /dev/null +++ b/backend/dist/place/dto/get-place.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"get-place.dto.js","sourceRoot":"","sources":["../../../src/place/dto/get-place.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,8EAAoE;AAEpE,MAAa,WAAW;CA8BvB;AA9BD,kCA8BC;AA5BC;IADC,IAAA,qBAAW,GAAE;;2CACC;AAEf;IADC,IAAA,qBAAW,GAAE;;4CACE;AAEhB;IADC,IAAA,qBAAW,GAAE;;yCACD;AAEb;IADC,IAAA,qBAAW,GAAE;;gDACM;AAEpB;IADC,IAAA,qBAAW,GAAE;;8CACO;AAErB;IADC,IAAA,qBAAW,GAAE;;8CACI;AAElB;IADC,IAAA,qBAAW,GAAE;;6CACG;AAEjB;IADC,IAAA,qBAAW,GAAE;;8CACI;AAElB;IADC,IAAA,qBAAW,GAAE;;2CACC;AAEf;IADC,IAAA,qBAAW,GAAE;;4CACE;AAEhB;IADC,IAAA,qBAAW,GAAE;8BACH,IAAI;8CAAC;AAEhB;IADC,IAAA,qBAAW,GAAE;8BACL,IAAI;4CAAC;AAEd;IADC,IAAA,qBAAW,GAAE;;+CACI;AAGlB;IADC,IAAA,qBAAW,GAAE;;4CACE"} \ No newline at end of file diff --git a/backend/dist/place/dto/update-place.req.dto.d.ts b/backend/dist/place/dto/update-place.req.dto.d.ts new file mode 100644 index 00000000..81c85589 --- /dev/null +++ b/backend/dist/place/dto/update-place.req.dto.d.ts @@ -0,0 +1,5 @@ +import { CreatePlaceDateTradDto } from './create-place-date.dto'; +declare const UpdatePlaceReqDto_base: import("@nestjs/common").Type>; +export declare class UpdatePlaceReqDto extends UpdatePlaceReqDto_base { +} +export {}; diff --git a/backend/dist/place/dto/update-place.req.dto.js b/backend/dist/place/dto/update-place.req.dto.js new file mode 100644 index 00000000..72dcb19a --- /dev/null +++ b/backend/dist/place/dto/update-place.req.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdatePlaceReqDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const create_place_date_dto_1 = require("./create-place-date.dto"); +class UpdatePlaceReqDto extends (0, swagger_1.PartialType)(create_place_date_dto_1.CreatePlaceDateTradDto) { +} +exports.UpdatePlaceReqDto = UpdatePlaceReqDto; +//# sourceMappingURL=update-place.req.dto.js.map \ No newline at end of file diff --git a/backend/dist/place/dto/update-place.req.dto.js.map b/backend/dist/place/dto/update-place.req.dto.js.map new file mode 100644 index 00000000..936be2bb --- /dev/null +++ b/backend/dist/place/dto/update-place.req.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-place.req.dto.js","sourceRoot":"","sources":["../../../src/place/dto/update-place.req.dto.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,mEAAiE;AAEjE,MAAa,iBAAkB,SAAQ,IAAA,qBAAW,EAAC,8CAAsB,CAAC;CAAG;AAA7E,8CAA6E"} \ No newline at end of file diff --git a/backend/dist/place/entities/available-date.entity.d.ts b/backend/dist/place/entities/available-date.entity.d.ts new file mode 100644 index 00000000..b892300d --- /dev/null +++ b/backend/dist/place/entities/available-date.entity.d.ts @@ -0,0 +1,7 @@ +import { Place } from './place.entity'; +export declare class AvailableDate { + idPlace: number; + place: Place; + startDate: Date; + endDate: Date; +} diff --git a/backend/dist/place/entities/available-date.entity.js b/backend/dist/place/entities/available-date.entity.js new file mode 100644 index 00000000..d5c8f5be --- /dev/null +++ b/backend/dist/place/entities/available-date.entity.js @@ -0,0 +1,38 @@ +"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.AvailableDate = void 0; +const typeorm_1 = require("typeorm"); +const place_entity_1 = require("./place.entity"); +let AvailableDate = class AvailableDate { +}; +exports.AvailableDate = AvailableDate; +__decorate([ + (0, typeorm_1.PrimaryColumn)(), + __metadata("design:type", Number) +], AvailableDate.prototype, "idPlace", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'idPlace' }), + (0, typeorm_1.ManyToOne)(() => place_entity_1.Place, (place) => place.availableDates, { nullable: false }), + __metadata("design:type", place_entity_1.Place) +], AvailableDate.prototype, "place", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", Date) +], AvailableDate.prototype, "startDate", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", Date) +], AvailableDate.prototype, "endDate", void 0); +exports.AvailableDate = AvailableDate = __decorate([ + (0, typeorm_1.Entity)() +], AvailableDate); +//# sourceMappingURL=available-date.entity.js.map \ No newline at end of file diff --git a/backend/dist/place/entities/available-date.entity.js.map b/backend/dist/place/entities/available-date.entity.js.map new file mode 100644 index 00000000..04c2c9d4 --- /dev/null +++ b/backend/dist/place/entities/available-date.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"available-date.entity.js","sourceRoot":"","sources":["../../../src/place/entities/available-date.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA+E;AAC/E,iDAAuC;AAGhC,IAAM,aAAa,GAAnB,MAAM,aAAa;CAYzB,CAAA;AAZY,sCAAa;AAExB;IADC,IAAA,uBAAa,GAAE;;8CACA;AAIhB;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BACtE,oBAAK;4CAAC;AAGb;IADC,IAAA,gBAAM,GAAE;8BACE,IAAI;gDAAC;AAEhB;IADC,IAAA,gBAAM,GAAE;8BACA,IAAI;8CAAC;wBAXH,aAAa;IADzB,IAAA,gBAAM,GAAE;GACI,aAAa,CAYzB"} \ No newline at end of file diff --git a/backend/dist/place/entities/place-traduction.entity.d.ts b/backend/dist/place/entities/place-traduction.entity.d.ts new file mode 100644 index 00000000..ef18bdc6 --- /dev/null +++ b/backend/dist/place/entities/place-traduction.entity.d.ts @@ -0,0 +1,6 @@ +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class PlaceTraduction { + language: LANGUAGES; + idPlace: number; + description: string; +} diff --git a/backend/dist/place/entities/place-traduction.entity.js b/backend/dist/place/entities/place-traduction.entity.js new file mode 100644 index 00000000..b7a50116 --- /dev/null +++ b/backend/dist/place/entities/place-traduction.entity.js @@ -0,0 +1,38 @@ +"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.PlaceTraduction = void 0; +const typeorm_1 = require("typeorm"); +const place_entity_1 = require("./place.entity"); +const languages_enum_1 = require("../../shared/enum/languages.enum"); +let PlaceTraduction = class PlaceTraduction { + constructor() { + this.language = languages_enum_1.LANGUAGES.ES; + } +}; +exports.PlaceTraduction = PlaceTraduction; +__decorate([ + (0, typeorm_1.PrimaryColumn)(), + __metadata("design:type", String) +], PlaceTraduction.prototype, "language", void 0); +__decorate([ + (0, typeorm_1.PrimaryColumn)({ name: 'idPlace', type: Number }), + (0, typeorm_1.ManyToOne)(() => place_entity_1.Place, (place) => place.availableDates, { nullable: false }), + __metadata("design:type", Number) +], PlaceTraduction.prototype, "idPlace", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 1024 }), + __metadata("design:type", String) +], PlaceTraduction.prototype, "description", void 0); +exports.PlaceTraduction = PlaceTraduction = __decorate([ + (0, typeorm_1.Entity)() +], PlaceTraduction); +//# sourceMappingURL=place-traduction.entity.js.map \ No newline at end of file diff --git a/backend/dist/place/entities/place-traduction.entity.js.map b/backend/dist/place/entities/place-traduction.entity.js.map new file mode 100644 index 00000000..1a4c984a --- /dev/null +++ b/backend/dist/place/entities/place-traduction.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"place-traduction.entity.js","sourceRoot":"","sources":["../../../src/place/entities/place-traduction.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAmE;AACnE,iDAAuC;AACvC,qEAA2D;AAGpD,IAAM,eAAe,GAArB,MAAM,eAAe;IAArB;QAEL,aAAQ,GAAc,0BAAS,CAAC,EAAE,CAAC;IAQrC,CAAC;CAAA,CAAA;AAVY,0CAAe;AAE1B;IADC,IAAA,uBAAa,GAAE;;iDACmB;AAInC;IAFC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAChD,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;gDAC7D;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;oDACL;0BATT,eAAe;IAD3B,IAAA,gBAAM,GAAE;GACI,eAAe,CAU3B"} \ No newline at end of file diff --git a/backend/dist/place/entities/place.entity.d.ts b/backend/dist/place/entities/place.entity.d.ts new file mode 100644 index 00000000..9c84d904 --- /dev/null +++ b/backend/dist/place/entities/place.entity.d.ts @@ -0,0 +1,24 @@ +import { PointOfInterest } from 'src/pointOfInterest/entities/PointOfInterest.entity'; +import { Available } from 'src/pointOfInterest/enum/available.enum'; +import { Town } from 'src/town/entities/town.entity'; +import { AvailableDate } from './available-date.entity'; +import { Category } from 'src/category/entities/category.entity'; +import { PlaceTraduction } from './place-traduction.entity'; +import { Visited } from 'src/visited/entities/visited.entity'; +export declare class Place { + idPlace: number; + town: Town; + points: PointOfInterest[]; + availableDates: AvailableDate[]; + categories: Category[]; + placeTraduction: PlaceTraduction[]; + visited: Visited[]; + available: Available; + name: string; + imageName: string; + latitude: any; + longitude: any; + address: string; + openAt: number; + closeAt: number; +} diff --git a/backend/dist/place/entities/place.entity.js b/backend/dist/place/entities/place.entity.js new file mode 100644 index 00000000..6ba6287c --- /dev/null +++ b/backend/dist/place/entities/place.entity.js @@ -0,0 +1,89 @@ +"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.Place = void 0; +const PointOfInterest_entity_1 = require("../../pointOfInterest/entities/PointOfInterest.entity"); +const available_enum_1 = require("../../pointOfInterest/enum/available.enum"); +const town_entity_1 = require("../../town/entities/town.entity"); +const typeorm_1 = require("typeorm"); +const available_date_entity_1 = require("./available-date.entity"); +const category_entity_1 = require("../../category/entities/category.entity"); +const place_traduction_entity_1 = require("./place-traduction.entity"); +const visited_entity_1 = require("../../visited/entities/visited.entity"); +let Place = class Place { +}; +exports.Place = Place; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], Place.prototype, "idPlace", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'idTown' }), + (0, typeorm_1.ManyToOne)(() => town_entity_1.Town, (town) => town.townId, { nullable: false }), + __metadata("design:type", town_entity_1.Town) +], Place.prototype, "town", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => PointOfInterest_entity_1.PointOfInterest, (point) => point.idPoint), + __metadata("design:type", Array) +], Place.prototype, "points", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => available_date_entity_1.AvailableDate, (available) => available.place), + __metadata("design:type", Array) +], Place.prototype, "availableDates", void 0); +__decorate([ + (0, typeorm_1.ManyToMany)(() => category_entity_1.Category, { eager: true }), + (0, typeorm_1.JoinTable)(), + __metadata("design:type", Array) +], Place.prototype, "categories", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => place_traduction_entity_1.PlaceTraduction, (placeTraduction) => placeTraduction.idPlace), + __metadata("design:type", Array) +], Place.prototype, "placeTraduction", void 0); +__decorate([ + (0, typeorm_1.OneToOne)(() => visited_entity_1.Visited, (visited) => visited.place), + __metadata("design:type", Array) +], Place.prototype, "visited", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Place.prototype, "available", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Place.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Place.prototype, "imageName", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false, type: 'decimal', precision: 20, scale: 4 }), + __metadata("design:type", Object) +], Place.prototype, "latitude", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false, type: 'decimal', precision: 20, scale: 4 }), + __metadata("design:type", Object) +], Place.prototype, "longitude", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", String) +], Place.prototype, "address", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Number) +], Place.prototype, "openAt", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Number) +], Place.prototype, "closeAt", void 0); +exports.Place = Place = __decorate([ + (0, typeorm_1.Entity)() +], Place); +//# sourceMappingURL=place.entity.js.map \ No newline at end of file diff --git a/backend/dist/place/entities/place.entity.js.map b/backend/dist/place/entities/place.entity.js.map new file mode 100644 index 00000000..149474ba --- /dev/null +++ b/backend/dist/place/entities/place.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"place.entity.js","sourceRoot":"","sources":["../../../src/place/entities/place.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kGAAsF;AACtF,8EAAoE;AACpE,iEAAqD;AACrD,qCAUiB;AACjB,mEAAwD;AACxD,6EAAiE;AACjE,uEAA4D;AAC5D,0EAA8D;AAGvD,IAAM,KAAK,GAAX,MAAM,KAAK;CA8CjB,CAAA;AA9CY,sBAAK;AAEhB;IADC,IAAA,gCAAsB,GAAE;;sCACT;AAIhB;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BAC5D,kBAAI;mCAAC;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,wCAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;;qCACjC;AAG1B;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,qCAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;;6CAC/B;AAIhC;IAFC,IAAA,oBAAU,EAAC,GAAG,EAAE,CAAC,0BAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,mBAAS,GAAE;;yCACW;AAGvB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,yCAAe,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;;8CAC5C;AAGnC;IADC,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,wBAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;;sCACjC;AAEnB;IADC,IAAA,gBAAM,GAAE;;wCACY;AAGrB;IADC,IAAA,gBAAM,GAAE;;mCACI;AAGb;IADC,IAAA,gBAAM,GAAE;;wCACS;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;uCAC7D;AAGT;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;wCAC5D;AAGV;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;sCACZ;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;qCACb;AAGf;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;sCACZ;gBA7CL,KAAK;IADjB,IAAA,gBAAM,GAAE;GACI,KAAK,CA8CjB"} \ No newline at end of file diff --git a/backend/dist/place/place.controller.d.ts b/backend/dist/place/place.controller.d.ts new file mode 100644 index 00000000..e4a289d2 --- /dev/null +++ b/backend/dist/place/place.controller.d.ts @@ -0,0 +1,19 @@ +import { PlaceService } from './place.service'; +import { CreatePlaceDateTradDto } from './dto/create-place-date.dto'; +import { CustomAdminRequest } from 'src/auth/admin/interface/customAdminReq'; +import { UpdatePlaceReqDto } from './dto/update-place.req.dto'; +import { GetPlaceDto } from './dto/get-place.dto'; +import { CustomUserRequest } from 'src/auth/user/interface/customUserReq'; +export declare class PlaceController { + private readonly placeService; + constructor(placeService: PlaceService); + create(file: any, createPlaceDto: CreatePlaceDateTradDto, req: CustomAdminRequest): Promise<{ + message: string; + }>; + findAll(idTown: number, lang: string): Promise; + findOne(idPlace: number, lang: string): Promise; + update(file: any, updatePlaceReqDto: UpdatePlaceReqDto, idPlace: number, req: CustomAdminRequest): Promise<{ + message: string; + }>; + findOpenPlaces(idTown: number, lang: string, req: CustomUserRequest): Promise; +} diff --git a/backend/dist/place/place.controller.js b/backend/dist/place/place.controller.js new file mode 100644 index 00000000..784c27f0 --- /dev/null +++ b/backend/dist/place/place.controller.js @@ -0,0 +1,143 @@ +"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.PlaceController = void 0; +const common_1 = require("@nestjs/common"); +const place_service_1 = require("./place.service"); +const create_place_date_dto_1 = require("./dto/create-place-date.dto"); +const swagger_1 = require("@nestjs/swagger"); +const role_decorator_1 = require("../auth/role.decorator"); +const admin_role_enum_1 = require("../shared/enum/admin-role.enum"); +const file_save_interceptor_1 = require("../shared/interceptors/file-save.interceptor"); +const file_validation_pipe_1 = require("../shared/pipe/file-validation.pipe"); +const update_place_req_dto_1 = require("./dto/update-place.req.dto"); +const authAdmin_guard_1 = require("../auth/admin/authAdmin.guard"); +const get_place_dto_1 = require("./dto/get-place.dto"); +const authUser_guard_1 = require("../auth/user/authUser.guard"); +let PlaceController = class PlaceController { + constructor(placeService) { + this.placeService = placeService; + } + async create(file, createPlaceDto, req) { + try { + if (req.admin.idTown.townId != createPlaceDto.idTown) { + throw new common_1.UnauthorizedException('This is not your assigned town'); + } + createPlaceDto.image = file; + await this.placeService.create(createPlaceDto); + return { message: 'Place created successfully' }; + } + catch (e) { + throw e; + } + } + async findAll(idTown, lang) { + try { + return this.placeService.findAllByTown(idTown, lang); + } + catch (e) { + throw e; + } + } + findOne(idPlace, lang) { + return this.placeService.findOneAndTradAndAvailable(idPlace, lang); + } + async update(file, updatePlaceReqDto, idPlace, req) { + try { + if (req.admin.idTown.townId != updatePlaceReqDto.idTown) { + throw new common_1.UnauthorizedException('This is not your assigned town'); + } + updatePlaceReqDto.image = file; + await this.placeService.update(idPlace, updatePlaceReqDto); + return { message: 'Place updated successfully' }; + } + catch (e) { + throw e; + } + } + async findOpenPlaces(idTown, lang, req) { + return await this.placeService.findPlacesNotVisitedByUserAndOpenResponse(req.user.email, lang, idTown); + } +}; +exports.PlaceController = PlaceController; +__decorate([ + (0, swagger_1.ApiBody)({ type: create_place_date_dto_1.CreatePlaceDateTradDto }), + (0, swagger_1.ApiConsumes)('multipart/form-data'), + (0, swagger_1.ApiResponse)({ type: get_place_dto_1.GetPlaceDto, status: 201, description: 'Created' }), + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)([admin_role_enum_1.ALL_ROLES.ADMIN]), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.Post)(), + (0, common_1.UseInterceptors)((0, file_save_interceptor_1.fileInterceptor)('image', 'static/places/', ['.jpg', '.jpeg', '.png'])), + __param(0, (0, common_1.UploadedFile)(new file_validation_pipe_1.FileValidationPipe())), + __param(1, (0, common_1.Body)()), + __param(2, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, create_place_date_dto_1.CreatePlaceDateTradDto, Object]), + __metadata("design:returntype", Promise) +], PlaceController.prototype, "create", null); +__decorate([ + (0, swagger_1.ApiQuery)({ name: 'lang', type: String }), + (0, swagger_1.ApiParam)({ name: 'idTown', type: Number }), + (0, common_1.Get)('/town/:idTown/place'), + __param(0, (0, common_1.Param)('idTown')), + __param(1, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String]), + __metadata("design:returntype", Promise) +], PlaceController.prototype, "findAll", null); +__decorate([ + (0, common_1.Get)(':idPlace'), + (0, swagger_1.ApiQuery)({ name: 'lang', type: String }), + __param(0, (0, common_1.Param)('idPlace')), + __param(1, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String]), + __metadata("design:returntype", void 0) +], PlaceController.prototype, "findOne", null); +__decorate([ + (0, common_1.Patch)(':idPlace'), + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)([admin_role_enum_1.ALL_ROLES.ADMIN]), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiConsumes)('multipart/form-data'), + (0, swagger_1.ApiBody)({ type: create_place_date_dto_1.CreatePlaceDateTradDto }), + (0, common_1.UseInterceptors)((0, file_save_interceptor_1.fileInterceptor)('image', 'static/places/', ['.jpg', '.jpeg', '.png'])), + __param(0, (0, common_1.UploadedFile)(new file_validation_pipe_1.FileValidationPipe())), + __param(1, (0, common_1.Body)()), + __param(2, (0, common_1.Param)('idPlace')), + __param(3, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, update_place_req_dto_1.UpdatePlaceReqDto, Number, Object]), + __metadata("design:returntype", Promise) +], PlaceController.prototype, "update", null); +__decorate([ + (0, common_1.Get)('open/:idTown/:lang'), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiConsumes)('json'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + (0, swagger_1.ApiParam)({ name: 'idTown', type: Number }), + __param(0, (0, common_1.Param)('idTown')), + __param(1, (0, common_1.Param)('lang')), + __param(2, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String, Object]), + __metadata("design:returntype", Promise) +], PlaceController.prototype, "findOpenPlaces", null); +exports.PlaceController = PlaceController = __decorate([ + (0, common_1.Controller)('place'), + (0, swagger_1.ApiTags)('Place'), + __metadata("design:paramtypes", [place_service_1.PlaceService]) +], PlaceController); +//# sourceMappingURL=place.controller.js.map \ No newline at end of file diff --git a/backend/dist/place/place.controller.js.map b/backend/dist/place/place.controller.js.map new file mode 100644 index 00000000..e1007c83 --- /dev/null +++ b/backend/dist/place/place.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"place.controller.js","sourceRoot":"","sources":["../../src/place/place.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/place/place.module.d.ts b/backend/dist/place/place.module.d.ts new file mode 100644 index 00000000..bc832766 --- /dev/null +++ b/backend/dist/place/place.module.d.ts @@ -0,0 +1,2 @@ +export declare class PlaceModule { +} diff --git a/backend/dist/place/place.module.js b/backend/dist/place/place.module.js new file mode 100644 index 00000000..ae9acc93 --- /dev/null +++ b/backend/dist/place/place.module.js @@ -0,0 +1,75 @@ +"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.PlaceModule = void 0; +const common_1 = require("@nestjs/common"); +const place_service_1 = require("./place.service"); +const place_controller_1 = require("./place.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const place_entity_1 = require("./entities/place.entity"); +const available_date_entity_1 = require("./entities/available-date.entity"); +const place_traduction_entity_1 = require("./entities/place-traduction.entity"); +const town_entity_1 = require("../town/entities/town.entity"); +const town_service_1 = require("../town/town.service"); +const town_traduction_entity_1 = require("../town/entities/town-traduction.entity"); +const state_service_1 = require("../state/state.service"); +const state_entity_1 = require("../state/entities/state.entity"); +const authAdmin_service_1 = require("../auth/admin/authAdmin.service"); +const admin_service_1 = require("../admin/admin.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const admin_entity_1 = require("../admin/entities/admin.entity"); +const admin_reset_code_entity_1 = require("../auth/admin/entitites/admin-reset-code.entity"); +const authUserservice_1 = require("../auth/user/authUserservice"); +const user_reset_code_entity_1 = require("../auth/user/entities/user-reset-code.entity"); +const user_confirm_code_entity_1 = require("../auth/user/entities/user-confirm-code.entity"); +const user_service_1 = require("../user/user.service"); +const email_service_1 = require("../email/email.service"); +const user_entity_1 = require("../user/entities/user.entity"); +const category_service_1 = require("../category/category.service"); +const category_entity_1 = require("../category/entities/category.entity"); +let PlaceModule = class PlaceModule { +}; +exports.PlaceModule = PlaceModule; +exports.PlaceModule = PlaceModule = __decorate([ + (0, common_1.Module)({ + controllers: [place_controller_1.PlaceController], + providers: [ + place_service_1.PlaceService, + town_service_1.TownService, + state_service_1.StateService, + authAdmin_service_1.AuthAdminService, + admin_service_1.AdminService, + jwt_1.JwtService, + encryption_service_1.EncryptionService, + town_service_1.TownService, + authUserservice_1.AuthUserService, + user_service_1.UserService, + email_service_1.EmailService, + category_service_1.CategoryService, + ], + imports: [ + typeorm_1.TypeOrmModule.forFeature([ + place_entity_1.Place, + available_date_entity_1.AvailableDate, + place_traduction_entity_1.PlaceTraduction, + town_entity_1.Town, + town_traduction_entity_1.TownTraduction, + state_entity_1.State, + admin_entity_1.Admin, + admin_reset_code_entity_1.AdminResetCode, + user_reset_code_entity_1.UserResetCode, + user_confirm_code_entity_1.UserConfirmCode, + user_entity_1.User, + category_entity_1.Category, + ]), + typeorm_1.TypeOrmModule, + ], + }) +], PlaceModule); +//# sourceMappingURL=place.module.js.map \ No newline at end of file diff --git a/backend/dist/place/place.module.js.map b/backend/dist/place/place.module.js.map new file mode 100644 index 00000000..3104fd90 --- /dev/null +++ b/backend/dist/place/place.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"place.module.js","sourceRoot":"","sources":["../../src/place/place.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAC/C,yDAAqD;AACrD,6CAAgD;AAChD,0DAAgD;AAChD,4EAAiE;AACjE,gFAAqE;AACrE,8DAAqD;AACrD,uDAAoD;AACpD,oFAA0E;AAC1E,0DAAuD;AACvD,iEAAwD;AACxD,uEAAoE;AACpE,0DAAuD;AACvD,qCAAyC;AACzC,8EAA2E;AAC3E,iEAAwD;AACxD,6FAAkF;AAClF,kEAAgE;AAChE,yFAA8E;AAC9E,6FAAkF;AAClF,uDAAoD;AACpD,0DAAuD;AACvD,8DAAqD;AACrD,mEAAgE;AAChE,0EAAiE;AAoC1D,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IAlCvB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE;YACT,4BAAY;YACZ,0BAAW;YACX,4BAAY;YACZ,oCAAgB;YAChB,4BAAY;YACZ,gBAAU;YACV,sCAAiB;YACjB,0BAAW;YACX,iCAAe;YACf,0BAAW;YACX,4BAAY;YACZ,kCAAe;SAChB;QACD,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC;gBACvB,oBAAK;gBACL,qCAAa;gBACb,yCAAe;gBACf,kBAAI;gBACJ,uCAAc;gBACd,oBAAK;gBACL,oBAAK;gBACL,wCAAc;gBACd,sCAAa;gBACb,0CAAe;gBACf,kBAAI;gBACJ,0BAAQ;aACT,CAAC;YACF,uBAAa;SACd;KACF,CAAC;GACW,WAAW,CAAG"} \ No newline at end of file diff --git a/backend/dist/place/place.service.d.ts b/backend/dist/place/place.service.d.ts new file mode 100644 index 00000000..1bdeebfa --- /dev/null +++ b/backend/dist/place/place.service.d.ts @@ -0,0 +1,25 @@ +import { CreatePlaceDateTradDto } from './dto/create-place-date.dto'; +import { Place } from './entities/place.entity'; +import { DataSource, Repository } from 'typeorm'; +import { AvailableDate } from './entities/available-date.entity'; +import { PlaceTraduction } from './entities/place-traduction.entity'; +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +import { Town } from 'src/town/entities/town.entity'; +import { GetPlaceDto } from './dto/get-place.dto'; +import { UpdatePlaceReqDto } from './dto/update-place.req.dto'; +export declare class PlaceService { + private placeRepository; + private availableDateRepository; + private placeTraductionRepository; + private townRepository; + private dataSource; + constructor(placeRepository: Repository, availableDateRepository: Repository, placeTraductionRepository: Repository, townRepository: Repository, dataSource: DataSource); + create(createPlaceDto: CreatePlaceDateTradDto): Promise; + findAllByTown(idTown: number, lang: LANGUAGES): Promise; + findOne(id: number): Promise; + findOneAndTradAndAvailable(idPlace: number, lang: LANGUAGES): Promise; + update(idPlace: number, updatePlaceReqDto: UpdatePlaceReqDto): Promise; + findPlacesNotVisitedByUser(email: string, lang: LANGUAGES, idTown: number): Promise; + findPlacesNotVisitedByUserAndOpen(email: string, lang: LANGUAGES, idTown: number): Promise; + findPlacesNotVisitedByUserAndOpenResponse(email: string, lang: LANGUAGES, idTown: number): Promise; +} diff --git a/backend/dist/place/place.service.js b/backend/dist/place/place.service.js new file mode 100644 index 00000000..c8e25ff2 --- /dev/null +++ b/backend/dist/place/place.service.js @@ -0,0 +1,262 @@ +"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.PlaceService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const place_entity_1 = require("./entities/place.entity"); +const typeorm_2 = require("typeorm"); +const available_date_entity_1 = require("./entities/available-date.entity"); +const place_traduction_entity_1 = require("./entities/place-traduction.entity"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +const town_entity_1 = require("../town/entities/town.entity"); +const server_contants_1 = require("../constants/server.contants"); +const available_enum_1 = require("../pointOfInterest/enum/available.enum"); +const category_entity_1 = require("../category/entities/category.entity"); +const visited_entity_1 = require("../visited/entities/visited.entity"); +const isPlaceOpen_1 = require("./utils/isPlaceOpen"); +let PlaceService = class PlaceService { + constructor(placeRepository, availableDateRepository, placeTraductionRepository, townRepository, dataSource) { + this.placeRepository = placeRepository; + this.availableDateRepository = availableDateRepository; + this.placeTraductionRepository = placeTraductionRepository; + this.townRepository = townRepository; + this.dataSource = dataSource; + } + async create(createPlaceDto) { + const town = await this.townRepository.findOneBy({ townId: createPlaceDto.idTown }); + const categories = []; + for (const categoryId of createPlaceDto.categoriesId) { + const categoryEN = await this.dataSource + .getRepository(category_entity_1.Category) + .findOneByOrFail({ idCategory: categoryId }); + categoryEN.language = languages_enum_1.LANGUAGES.EN; + const categoryES = { ...categoryEN, language: languages_enum_1.LANGUAGES.ES }; + categories.push(categoryEN); + categories.push(categoryES); + } + const createPlace = { + available: createPlaceDto.available, + closeAt: createPlaceDto.closeAt, + latitude: createPlaceDto.latitude, + longitude: createPlaceDto.longitude, + town: town, + name: createPlaceDto.name, + openAt: createPlaceDto.openAt, + imageName: createPlaceDto.image.filename, + categories: categories, + address: createPlaceDto.address, + }; + if (!town) { + throw new common_1.BadRequestException('Town not found'); + } + const insertedPlace = await this.placeRepository.save({ ...createPlace }); + const createDate = { + endDate: createPlaceDto.endDate, + startDate: createPlaceDto.startDate, + idPlace: insertedPlace, + }; + const createTradEn = { + language: languages_enum_1.LANGUAGES.EN, + idPlace: insertedPlace.idPlace, + description: createPlaceDto.descriptionEN, + }; + const createTradEs = { + language: languages_enum_1.LANGUAGES.ES, + idPlace: insertedPlace.idPlace, + description: createPlaceDto.descriptionES, + }; + await this.placeTraductionRepository.insert(createTradEs); + await this.placeTraductionRepository.insert(createTradEn); + if (createPlaceDto.available === available_enum_1.Available.CUSTOM) { + await this.availableDateRepository.insert({ + ...createDate, + place: insertedPlace, + idPlace: insertedPlace.idPlace, + }); + } + } + async findAllByTown(idTown, lang) { + const res = await this.dataSource + .getRepository(place_entity_1.Place) + .createQueryBuilder('place') + .leftJoinAndSelect('place.availableDates', 'availableDate') + .leftJoinAndSelect('place.categories', 'category') + .leftJoinAndSelect('place.placeTraduction', 'placeTrad') + .leftJoinAndSelect('place.town', 'town') + .where('place.idTown = :idTown', { idTown: idTown }) + .andWhere('placeTrad.language = :language', { language: lang }) + .andWhere('category.language = :language', { language: lang }) + .getMany(); + const places = res.map((place) => { + return { + idTown: place.town.townId, + idPlace: place.idPlace, + available: place.available, + latitude: place.latitude, + longitude: place.longitude, + imageName: `${server_contants_1.ServerConstants.HOST}/places/${place.imageName}`, + name: place.name, + openAt: place.openAt, + closeAt: place.closeAt, + startDate: place.availableDates[0]?.startDate || null, + endDate: place.availableDates[0]?.endDate || null, + categories: place.categories, + description: place.placeTraduction[0].description, + address: place.address, + }; + }); + return places; + } + async findOne(id) { + return await this.placeRepository.findOneBy({ idPlace: id }); + } + async findOneAndTradAndAvailable(idPlace, lang) { + const place = await this.dataSource + .getRepository(place_entity_1.Place) + .createQueryBuilder('place') + .leftJoinAndSelect('place.availableDates', 'availableDate') + .leftJoinAndSelect('place.categories', 'category') + .leftJoinAndSelect('place.placeTraduction', 'placeTrad') + .leftJoinAndSelect('place.town', 'town') + .where('place.idPlace = :idPlace', { idPlace }) + .andWhere('placeTrad.language = :language', { language: lang }) + .andWhere('category.language = :language', { language: lang }) + .getOne(); + const res = { + idTown: place.town.townId, + idPlace: place.idPlace, + available: place.available, + latitude: place.latitude, + longitude: place.longitude, + imageName: `${server_contants_1.ServerConstants.HOST}/places/${place.imageName}`, + name: place.name, + openAt: place.openAt, + closeAt: place.closeAt, + startDate: place.availableDates[0]?.startDate, + endDate: place.availableDates[0]?.endDate, + categories: place.categories, + description: place.placeTraduction[0].description, + address: place.address, + }; + return res; + } + async update(idPlace, updatePlaceReqDto) { + const place = await this.placeRepository.findOne({ + where: { idPlace }, + relations: ['categories'], + }); + if (!place) { + throw new common_1.NotFoundException('Place not found'); + } + place.available = updatePlaceReqDto.available; + place.closeAt = updatePlaceReqDto.closeAt; + place.latitude = updatePlaceReqDto.latitude; + place.longitude = updatePlaceReqDto.longitude; + place.name = updatePlaceReqDto.name; + place.openAt = updatePlaceReqDto.openAt; + place.imageName = updatePlaceReqDto.image.filename; + place.address = updatePlaceReqDto.address; + const categories = []; + for (const categoryId of updatePlaceReqDto.categoriesId) { + const categoryEN = await this.dataSource + .getRepository(category_entity_1.Category) + .findOneByOrFail({ idCategory: categoryId }); + categoryEN.language = languages_enum_1.LANGUAGES.EN; + const categoryES = { ...categoryEN, language: languages_enum_1.LANGUAGES.ES }; + categories.push(categoryEN); + categories.push(categoryES); + } + place.categories = categories; + await this.placeRepository.save(place); + await this.placeTraductionRepository + .createQueryBuilder() + .update(place_traduction_entity_1.PlaceTraduction) + .set({ description: updatePlaceReqDto.descriptionEN }) + .where('idPlace = :idPlace AND language = :language', { idPlace, language: languages_enum_1.LANGUAGES.EN }) + .execute(); + await this.placeTraductionRepository + .createQueryBuilder() + .update(place_traduction_entity_1.PlaceTraduction) + .set({ description: updatePlaceReqDto.descriptionES }) + .where('idPlace = :idPlace AND language = :language', { idPlace, language: languages_enum_1.LANGUAGES.ES }) + .execute(); + if (updatePlaceReqDto.available === available_enum_1.Available.CUSTOM) { + await this.availableDateRepository.upsert({ + idPlace: place.idPlace, + place: place, + startDate: updatePlaceReqDto.startDate, + endDate: updatePlaceReqDto.endDate, + }, ['idPlace']); + } + } + async findPlacesNotVisitedByUser(email, lang, idTown) { + const places = await this.findAllByTown(idTown, lang); + const visited = await this.dataSource + .getRepository(visited_entity_1.Visited) + .createQueryBuilder('visited') + .leftJoinAndSelect('visited.place', 'place') + .where('visited.user = :email', { email }) + .getMany(); + const visitedIds = visited.map((visit) => visit.place.idPlace); + return places.filter((place) => !visitedIds.includes(place.idPlace)); + } + async findPlacesNotVisitedByUserAndOpen(email, lang, idTown) { + const places = await this.findPlacesNotVisitedByUser(email, lang, idTown); + const placesWithAvailability = await Promise.all(places.map(async (place) => { + if (place.available === available_enum_1.Available.CUSTOM) { + const availableDate = await this.availableDateRepository.findOneBy({ place }); + const isOpen = (0, isPlaceOpen_1.isPlaceOpen)(place.available, availableDate?.startDate, availableDate?.endDate); + return isOpen ? place : null; + } + else { + return (0, isPlaceOpen_1.isPlaceOpen)(place.available, null, null) ? place : null; + } + })); + return placesWithAvailability.filter((place) => place !== null); + } + async findPlacesNotVisitedByUserAndOpenResponse(email, lang, idTown) { + const places = await this.findPlacesNotVisitedByUserAndOpen(email, lang, idTown); + const placesResponse = []; + for (const place of places) { + const visited = await this.dataSource + .getRepository(visited_entity_1.Visited) + .createQueryBuilder('visited') + .leftJoinAndSelect('visited.place', 'place') + .where('visited.user = :email', { email }) + .andWhere('place.idPlace = :idPlace', { idPlace: place.idPlace }) + .getOne(); + placesResponse.push({ + ...place, + visited: visited ? true : false, + }); + } + return placesResponse; + } +}; +exports.PlaceService = PlaceService; +exports.PlaceService = PlaceService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(place_entity_1.Place)), + __param(1, (0, typeorm_1.InjectRepository)(available_date_entity_1.AvailableDate)), + __param(2, (0, typeorm_1.InjectRepository)(place_traduction_entity_1.PlaceTraduction)), + __param(3, (0, typeorm_1.InjectRepository)(town_entity_1.Town)), + __param(4, (0, typeorm_1.InjectDataSource)()), + __metadata("design:paramtypes", [typeorm_2.Repository, + typeorm_2.Repository, + typeorm_2.Repository, + typeorm_2.Repository, + typeorm_2.DataSource]) +], PlaceService); +//# sourceMappingURL=place.service.js.map \ No newline at end of file diff --git a/backend/dist/place/place.service.js.map b/backend/dist/place/place.service.js.map new file mode 100644 index 00000000..77a4f81c --- /dev/null +++ b/backend/dist/place/place.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"place.service.js","sourceRoot":"","sources":["../../src/place/place.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/place/utils/isPlaceOpen.d.ts b/backend/dist/place/utils/isPlaceOpen.d.ts new file mode 100644 index 00000000..43f7a9dc --- /dev/null +++ b/backend/dist/place/utils/isPlaceOpen.d.ts @@ -0,0 +1,2 @@ +import { Available } from 'src/pointOfInterest/enum/available.enum'; +export declare const isPlaceOpen: (available: Available, startDate?: Date, endDate?: Date) => boolean; diff --git a/backend/dist/place/utils/isPlaceOpen.js b/backend/dist/place/utils/isPlaceOpen.js new file mode 100644 index 00000000..67e97850 --- /dev/null +++ b/backend/dist/place/utils/isPlaceOpen.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isPlaceOpen = void 0; +const available_enum_1 = require("../../pointOfInterest/enum/available.enum"); +const isPlaceOpen = (available, startDate, endDate) => { + const curDayName = new Date().toLocaleDateString('en-US', { weekday: 'long' }); + if (available !== available_enum_1.Available.CUSTOM) { + return available_enum_1.availableToDays[available].includes(curDayName); + } + const curDate = new Date(); + return curDate >= startDate && curDate <= endDate; +}; +exports.isPlaceOpen = isPlaceOpen; +//# sourceMappingURL=isPlaceOpen.js.map \ No newline at end of file diff --git a/backend/dist/place/utils/isPlaceOpen.js.map b/backend/dist/place/utils/isPlaceOpen.js.map new file mode 100644 index 00000000..bc89b5c1 --- /dev/null +++ b/backend/dist/place/utils/isPlaceOpen.js.map @@ -0,0 +1 @@ +{"version":3,"file":"isPlaceOpen.js","sourceRoot":"","sources":["../../../src/place/utils/isPlaceOpen.ts"],"names":[],"mappings":";;;AAAA,8EAAqF;AAE9E,MAAM,WAAW,GAAG,CAAC,SAAoB,EAAE,SAAgB,EAAE,OAAc,EAAW,EAAE;IAC7F,MAAM,UAAU,GAAW,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACvF,IAAI,SAAS,KAAK,0BAAS,CAAC,MAAM,EAAE,CAAC;QACnC,OAAO,gCAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,OAAO,GAAS,IAAI,IAAI,EAAE,CAAC;IACjC,OAAO,OAAO,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,CAAC;AACpD,CAAC,CAAC;AAPW,QAAA,WAAW,eAOtB"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/PointOfInterest.controller.d.ts b/backend/dist/pointOfInterest/PointOfInterest.controller.d.ts new file mode 100644 index 00000000..06a4b402 --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.controller.d.ts @@ -0,0 +1,12 @@ +import { StreamableFile } from '@nestjs/common'; +import { PointOfInterestService } from './PointOfInterest.service'; +import { CreatePointAndTradDto } from './dto/create-pointAndTraduction.dto'; +export declare class PointOfInterestController { + private readonly pointService; + constructor(pointService: PointOfInterestService); + create(file: any, createActivityDto: CreatePointAndTradDto): Promise; + findAllByPlace(idPlace: number, lang: string): Promise; + getAudio(idPoint: number, lang: string): Promise; + findOne(idPoint: number, lang: string): Promise; + generatePdf(idPlace: number, pointsIdString: string, res: any): Promise; +} diff --git a/backend/dist/pointOfInterest/PointOfInterest.controller.js b/backend/dist/pointOfInterest/PointOfInterest.controller.js new file mode 100644 index 00000000..3e92cf9b --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.controller.js @@ -0,0 +1,117 @@ +"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.PointOfInterestController = void 0; +const common_1 = require("@nestjs/common"); +const PointOfInterest_service_1 = require("./PointOfInterest.service"); +const create_pointAndTraduction_dto_1 = require("./dto/create-pointAndTraduction.dto"); +const swagger_1 = require("@nestjs/swagger"); +const role_decorator_1 = require("../auth/role.decorator"); +const admin_role_enum_1 = require("../shared/enum/admin-role.enum"); +const file_save_interceptor_1 = require("../shared/interceptors/file-save.interceptor"); +const file_validation_pipe_1 = require("../shared/pipe/file-validation.pipe"); +const authAdmin_guard_1 = require("../auth/admin/authAdmin.guard"); +let PointOfInterestController = class PointOfInterestController { + constructor(pointService) { + this.pointService = pointService; + } + async create(file, createActivityDto) { + try { + createActivityDto.image = file.filename; + return await this.pointService.create(createActivityDto); + } + catch (error) { + throw error; + } + } + async findAllByPlace(idPlace, lang) { + return this.pointService.findAllByPlace(idPlace, lang); + } + async getAudio(idPoint, lang) { + const file = await this.pointService.getAudio(idPoint, lang); + return file; + } + async findOne(idPoint, lang) { + return await this.pointService.findOne(idPoint, lang); + } + async generatePdf(idPlace, pointsIdString, res) { + const pointsId = pointsIdString.split(',').map(Number); + const pdfBuffer = await this.pointService.generatePdf(idPlace, pointsId); + res.set({ + 'Content-Type': 'application/pdf', + 'Content-Disposition': 'attachment; filename=tarjetas.pdf', + 'Content-Length': pdfBuffer.length, + }); + res.send(pdfBuffer); + } +}; +exports.PointOfInterestController = PointOfInterestController; +__decorate([ + (0, swagger_1.ApiConsumes)('multipart/form-data'), + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.ADMIN_ROLES), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.Post)('point'), + (0, common_1.UseInterceptors)((0, file_save_interceptor_1.fileInterceptor)('image', 'static/points/', ['.jpg', '.jpeg', '.png'])), + __param(0, (0, common_1.UploadedFile)(new file_validation_pipe_1.FileValidationPipe())), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, create_pointAndTraduction_dto_1.CreatePointAndTradDto]), + __metadata("design:returntype", Promise) +], PointOfInterestController.prototype, "create", null); +__decorate([ + (0, swagger_1.ApiQuery)({ name: 'lang', type: String }), + (0, swagger_1.ApiParam)({ name: 'idPlace', type: Number }), + (0, common_1.Get)('/place/:idPlace/point'), + __param(0, (0, common_1.Param)('idPlace')), + __param(1, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String]), + __metadata("design:returntype", Promise) +], PointOfInterestController.prototype, "findAllByPlace", null); +__decorate([ + (0, swagger_1.ApiQuery)({ name: 'lang', type: String }), + (0, common_1.Get)('point/:idPoint/audio'), + __param(0, (0, common_1.Param)('idPoint')), + __param(1, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String]), + __metadata("design:returntype", Promise) +], PointOfInterestController.prototype, "getAudio", null); +__decorate([ + (0, common_1.Get)('point/:idPoint'), + (0, swagger_1.ApiQuery)({ name: 'lang', type: String }), + __param(0, (0, common_1.Param)('idPoint')), + __param(1, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String]), + __metadata("design:returntype", Promise) +], PointOfInterestController.prototype, "findOne", null); +__decorate([ + (0, swagger_1.ApiParam)({ name: 'idPlace', type: Number }), + (0, swagger_1.ApiQuery)({ name: 'pointsId', type: String }), + (0, common_1.Get)('/place/:idPlace/point/generate'), + __param(0, (0, common_1.Param)('idPlace')), + __param(1, (0, common_1.Query)('pointsId')), + __param(2, (0, common_1.Res)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String, Object]), + __metadata("design:returntype", Promise) +], PointOfInterestController.prototype, "generatePdf", null); +exports.PointOfInterestController = PointOfInterestController = __decorate([ + (0, common_1.Controller)(''), + (0, swagger_1.ApiTags)('Point of interest'), + __metadata("design:paramtypes", [PointOfInterest_service_1.PointOfInterestService]) +], PointOfInterestController); +//# sourceMappingURL=PointOfInterest.controller.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/PointOfInterest.controller.js.map b/backend/dist/pointOfInterest/PointOfInterest.controller.js.map new file mode 100644 index 00000000..5940423f --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PointOfInterest.controller.js","sourceRoot":"","sources":["../../src/pointOfInterest/PointOfInterest.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/PointOfInterest.module.d.ts b/backend/dist/pointOfInterest/PointOfInterest.module.d.ts new file mode 100644 index 00000000..7dbd068c --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.module.d.ts @@ -0,0 +1,2 @@ +export declare class PointOfInterestModule { +} diff --git a/backend/dist/pointOfInterest/PointOfInterest.module.js b/backend/dist/pointOfInterest/PointOfInterest.module.js new file mode 100644 index 00000000..c52b7cad --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.module.js @@ -0,0 +1,48 @@ +"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.PointOfInterestModule = void 0; +const common_1 = require("@nestjs/common"); +const PointOfInterest_service_1 = require("./PointOfInterest.service"); +const PointOfInterest_controller_1 = require("./PointOfInterest.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const PointOfInterest_entity_1 = require("./entities/PointOfInterest.entity"); +const PointOfInterestTraduction_entity_1 = require("./entities/PointOfInterestTraduction.entity"); +const place_service_1 = require("../place/place.service"); +const place_entity_1 = require("../place/entities/place.entity"); +const available_date_entity_1 = require("../place/entities/available-date.entity"); +const place_traduction_entity_1 = require("../place/entities/place-traduction.entity"); +const town_entity_1 = require("../town/entities/town.entity"); +const authAdmin_service_1 = require("../auth/admin/authAdmin.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const admin_service_1 = require("../admin/admin.service"); +const admin_entity_1 = require("../admin/entities/admin.entity"); +const admin_reset_code_entity_1 = require("../auth/admin/entitites/admin-reset-code.entity"); +let PointOfInterestModule = class PointOfInterestModule { +}; +exports.PointOfInterestModule = PointOfInterestModule; +exports.PointOfInterestModule = PointOfInterestModule = __decorate([ + (0, common_1.Module)({ + controllers: [PointOfInterest_controller_1.PointOfInterestController], + providers: [PointOfInterest_service_1.PointOfInterestService, place_service_1.PlaceService, admin_service_1.AdminService, authAdmin_service_1.AuthAdminService, jwt_1.JwtService, encryption_service_1.EncryptionService], + imports: [ + typeorm_1.TypeOrmModule.forFeature([ + PointOfInterest_entity_1.PointOfInterest, + PointOfInterestTraduction_entity_1.PointOfInterestTraduction, + place_entity_1.Place, + available_date_entity_1.AvailableDate, + place_traduction_entity_1.PlaceTraduction, + town_entity_1.Town, + admin_entity_1.Admin, + admin_reset_code_entity_1.AdminResetCode, + ]), + ], + }) +], PointOfInterestModule); +//# sourceMappingURL=PointOfInterest.module.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/PointOfInterest.module.js.map b/backend/dist/pointOfInterest/PointOfInterest.module.js.map new file mode 100644 index 00000000..ba47ca83 --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PointOfInterest.module.js","sourceRoot":"","sources":["../../src/pointOfInterest/PointOfInterest.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uEAAmE;AACnE,6EAAyE;AACzE,6CAAgD;AAChD,8EAAoE;AACpE,kGAAwF;AACxF,0DAAuD;AACvD,iEAAwD;AACxD,mFAAyE;AACzE,uFAA6E;AAC7E,8DAAqD;AACrD,uEAAoE;AACpE,qCAAyC;AACzC,8EAA2E;AAC3E,0DAAuD;AACvD,iEAAwD;AACxD,6FAAkF;AAkB3E,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAAG,CAAA;AAAxB,sDAAqB;gCAArB,qBAAqB;IAhBjC,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,sDAAyB,CAAC;QACxC,SAAS,EAAE,CAAC,gDAAsB,EAAE,4BAAY,EAAE,4BAAY,EAAE,oCAAgB,EAAE,gBAAU,EAAE,sCAAiB,CAAC;QAChH,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC;gBACvB,wCAAe;gBACf,4DAAyB;gBACzB,oBAAK;gBACL,qCAAa;gBACb,yCAAe;gBACf,kBAAI;gBACJ,oBAAK;gBACL,wCAAc;aACf,CAAC;SACH;KACF,CAAC;GACW,qBAAqB,CAAG"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/PointOfInterest.service.d.ts b/backend/dist/pointOfInterest/PointOfInterest.service.d.ts new file mode 100644 index 00000000..67c09ac3 --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.service.d.ts @@ -0,0 +1,26 @@ +/// +import { StreamableFile } from '@nestjs/common'; +import { CreatePointAndTradDto } from './dto/create-pointAndTraduction.dto'; +import { PointOfInterest } from './entities/PointOfInterest.entity'; +import { DataSource, Repository } from 'typeorm'; +import { PlaceService } from 'src/place/place.service'; +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +import { getPointDto } from './dto/getPoint.dto'; +import { Place } from 'src/place/entities/place.entity'; +import { printPointInfo } from './dto/printPointInfo.dto'; +export declare class PointOfInterestService { + private pointRepository; + private pointTraductionRepository; + private readonly placeService; + private placeRepository; + private dataSource; + constructor(pointRepository: Repository, pointTraductionRepository: any, placeService: PlaceService, placeRepository: Repository, dataSource: DataSource); + create(createPointAndTradDto: CreatePointAndTradDto): Promise; + findAllByPlace(idPlace: number, lang: LANGUAGES): Promise; + getAudio(idPoint: number, lang: LANGUAGES): Promise; + private convertTextToSpeech; + findOne(idPoint: number, lang: LANGUAGES): Promise; + findAllByIds(idPlace: number, pointsId: number[]): Promise; + generatePdf(idPlace: number, pointsId: number[]): Promise; + private generateHtml; +} diff --git a/backend/dist/pointOfInterest/PointOfInterest.service.js b/backend/dist/pointOfInterest/PointOfInterest.service.js new file mode 100644 index 00000000..5a771339 --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.service.js @@ -0,0 +1,301 @@ +"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.PointOfInterestService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const PointOfInterest_entity_1 = require("./entities/PointOfInterest.entity"); +const typeorm_2 = require("typeorm"); +const PointOfInterestTraduction_entity_1 = require("./entities/PointOfInterestTraduction.entity"); +const place_service_1 = require("../place/place.service"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +const server_contants_1 = require("../constants/server.contants"); +const fs_1 = require("fs"); +const path_1 = require("path"); +const qrcode_1 = require("./utils/qrcode"); +const place_entity_1 = require("../place/entities/place.entity"); +const puppeteer_1 = require("puppeteer"); +const fs = require("fs"); +const axios_1 = require("axios"); +const uuid = require("uuid"); +const google_constants_1 = require("../constants/google.constants"); +let PointOfInterestService = class PointOfInterestService { + constructor(pointRepository, pointTraductionRepository, placeService, placeRepository, dataSource) { + this.pointRepository = pointRepository; + this.pointTraductionRepository = pointTraductionRepository; + this.placeService = placeService; + this.placeRepository = placeRepository; + this.dataSource = dataSource; + } + async create(createPointAndTradDto) { + const placeRelation = await this.placeRepository.findOne({ + where: { idPlace: createPointAndTradDto.idPlace }, + relations: ['town'], + }); + const place = await this.placeService.findOne(createPointAndTradDto.idPlace); + if (!place) { + throw new common_1.BadRequestException('Place not found'); + } + const createPointDto = { + name: createPointAndTradDto.name, + imageName: createPointAndTradDto.image, + idPlace: place, + }; + const insertedId = (await this.pointRepository.insert(createPointDto)).raw.insertId; + const spanishAudio = await this.convertTextToSpeech(`${createPointAndTradDto.contentES}\n${createPointAndTradDto.directionsES || ''}`, languages_enum_1.LANGUAGES.ES); + const englishAudio = await this.convertTextToSpeech(`${createPointAndTradDto.contentEN}\n${createPointAndTradDto.directionsEN || ''}`, languages_enum_1.LANGUAGES.EN); + const createTradEn = { + idPoint: insertedId, + language: languages_enum_1.LANGUAGES.EN, + content: createPointAndTradDto.contentEN, + audioName: englishAudio, + directions: createPointAndTradDto.directionsEN, + }; + const createTradEs = { + idPoint: insertedId, + language: languages_enum_1.LANGUAGES.ES, + content: createPointAndTradDto.contentES, + audioName: spanishAudio, + directions: createPointAndTradDto.directionsES, + }; + await this.pointTraductionRepository.insert(createTradEs); + await this.pointTraductionRepository.insert(createTradEn); + (0, qrcode_1.generateQRCode)(placeRelation.town.state.stateId, placeRelation.town.townId, placeRelation.idPlace, insertedId); + } + async findAllByPlace(idPlace, lang) { + const place = await this.placeService.findOne(idPlace); + if (!place) { + throw new common_1.BadRequestException('Place not found'); + } + let points = await this.dataSource + .getRepository(PointOfInterestTraduction_entity_1.PointOfInterestTraduction) + .createQueryBuilder('pointTrad') + .leftJoin('pointTrad.idPoint', 'point') + .select([ + 'point.idPoint as idPoint', + 'point.name as name', + 'point.imageName as imageName', + 'pointTrad.content as content', + 'pointTrad.directions as directions', + 'pointTrad.audioName as audioName', + 'point.idPlace as idPlace', + ]) + .where('point.idPlace = :idPlace', { idPlace }) + .andWhere('pointTrad.language = :lang', { lang }) + .getRawMany(); + points = points.map((point) => { + return { + idPoint: point.idPoint, + idPlace: point.idPlace, + name: point.name, + imageName: `${server_contants_1.ServerConstants.HOST}/points/${point.imageName}`, + content: point.content, + directions: point.directions, + }; + }); + return points; + } + async getAudio(idPoint, lang) { + const pointTrad = await this.pointTraductionRepository.findOneBy({ + idPoint, + language: lang, + }); + if (!pointTrad) { + throw new common_1.NotFoundException('Point not found'); + } + const filePath = (0, path_1.join)(server_contants_1.ServerConstants.ROOT_STATIC_PATH, 'audios', pointTrad.audioName); + const fileStream = (0, fs_1.createReadStream)(filePath); + return new common_1.StreamableFile(fileStream); + } + async convertTextToSpeech(text, lang) { + let languageCode = ''; + if (lang == languages_enum_1.LANGUAGES.EN) { + languageCode = 'en-gb'; + } + else { + languageCode = 'es-es'; + } + console.log(google_constants_1.GoogleConstants.GoogleTextToSpeechKey); + const url = `https://texttospeech.googleapis.com/v1/text:synthesize?key=${google_constants_1.GoogleConstants.GoogleTextToSpeechKey}`; + const requestBody = { + input: { text: text }, + voice: { + languageCode, + ssmlGender: 'NEUTRAL', + }, + audioConfig: { + audioEncoding: 'MP3', + }, + }; + try { + const response = await axios_1.default.post(url, requestBody); + const buffer = Buffer.from(response.data.audioContent, 'base64'); + const id = uuid.v4(); + const filename = `${id}.mp3`; + fs.writeFileSync(`static/audios/` + filename, buffer); + return filename; + } + catch (error) { + console.error('Error during API request:', error.response ? error.response.data : error.message); + } + } + async findOne(idPoint, lang) { + const pointTrad = await this.dataSource + .getRepository(PointOfInterestTraduction_entity_1.PointOfInterestTraduction) + .createQueryBuilder('pointTrad') + .leftJoin('pointTrad.idPoint', 'point') + .select([ + 'point.idPoint as idPoint', + 'point.name as name', + 'point.imageName as imageName', + 'pointTrad.content as content', + 'pointTrad.directions as directions', + 'pointTrad.audioName as audioName', + 'point.idPlace as idPlace', + ]) + .where('point.idPoint = :idPoint', { idPoint }) + .andWhere('pointTrad.language = :lang', { lang }) + .getRawOne(); + if (!pointTrad) { + throw new common_1.NotFoundException('Point not found'); + } + const point = { + idPoint: pointTrad.idPoint, + idPlace: pointTrad.idPlace, + name: pointTrad.name, + imageName: `${server_contants_1.ServerConstants.HOST}/points/${pointTrad.imageName}`, + content: pointTrad.content, + directions: pointTrad.directions, + }; + return point; + } + async findAllByIds(idPlace, pointsId) { + const place = await this.placeService.findOne(idPlace); + if (!place) { + throw new common_1.BadRequestException('Place not found'); + } + const points = await Promise.all(pointsId.map(async (idPoint) => { + const point = await this.dataSource + .getRepository(PointOfInterest_entity_1.PointOfInterest) + .createQueryBuilder('point') + .leftJoin('point.idPlace', 'place') + .select(['point.idPoint as idPoint', 'place.name as namePlace', 'point.name as name']) + .where('place.idPlace = :idPlace', { idPlace }) + .andWhere('point.idPoint = :idPoint', { idPoint }) + .getRawOne(); + return point; + })); + return points; + } + async generatePdf(idPlace, pointsId) { + const points = await this.findAllByIds(idPlace, pointsId); + const htmlContent = this.generateHtml(points); + const browser = await puppeteer_1.default.launch(); + const page = await browser.newPage(); + await page.setContent(htmlContent); + const pdfBuffer = await page.pdf({ + format: 'A4', + margin: { top: '10mm', bottom: '10mm', left: '10mm', right: '10mm' }, + }); + await browser.close(); + return Buffer.from(pdfBuffer); + } + generateHtml(points) { + let cardsHtml = ''; + for (const point of points) { + const filePath = (0, path_1.join)(server_contants_1.ServerConstants.ROOT_STATIC_PATH, 'qr', point.idPoint.toString() + '.png'); + cardsHtml += ` +
+ +
+

${point.namePlace}

+

${point.name}

+
+ +
+ `; + } + return ` + + + + Tarjetas en PDF + + + +
+ ${cardsHtml} +
+ + + `; + } +}; +exports.PointOfInterestService = PointOfInterestService; +exports.PointOfInterestService = PointOfInterestService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(PointOfInterest_entity_1.PointOfInterest)), + __param(1, (0, typeorm_1.InjectRepository)(PointOfInterestTraduction_entity_1.PointOfInterestTraduction)), + __param(3, (0, typeorm_1.InjectRepository)(place_entity_1.Place)), + __param(4, (0, typeorm_1.InjectDataSource)()), + __metadata("design:paramtypes", [typeorm_2.Repository, Object, place_service_1.PlaceService, + typeorm_2.Repository, + typeorm_2.DataSource]) +], PointOfInterestService); +//# sourceMappingURL=PointOfInterest.service.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/PointOfInterest.service.js.map b/backend/dist/pointOfInterest/PointOfInterest.service.js.map new file mode 100644 index 00000000..365859d1 --- /dev/null +++ b/backend/dist/pointOfInterest/PointOfInterest.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PointOfInterest.service.js","sourceRoot":"","sources":["../../src/pointOfInterest/PointOfInterest.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/create-point.dto.d.ts b/backend/dist/pointOfInterest/dto/create-point.dto.d.ts new file mode 100644 index 00000000..2c0895d8 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-point.dto.d.ts @@ -0,0 +1,6 @@ +import { Place } from 'src/place/entities/place.entity'; +export declare class CreatePointDto { + idPlace: Place; + name: string; + imageName: string; +} diff --git a/backend/dist/pointOfInterest/dto/create-point.dto.js b/backend/dist/pointOfInterest/dto/create-point.dto.js new file mode 100644 index 00000000..8bc481bf --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-point.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreatePointDto = void 0; +class CreatePointDto { +} +exports.CreatePointDto = CreatePointDto; +//# sourceMappingURL=create-point.dto.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/create-point.dto.js.map b/backend/dist/pointOfInterest/dto/create-point.dto.js.map new file mode 100644 index 00000000..5bd4f19d --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-point.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-point.dto.js","sourceRoot":"","sources":["../../../src/pointOfInterest/dto/create-point.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;CAI1B;AAJD,wCAIC"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.d.ts b/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.d.ts new file mode 100644 index 00000000..91e16668 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.d.ts @@ -0,0 +1,9 @@ +export declare class CreatePointAndTradDto { + idPlace: number; + name: string; + image: any; + contentEN: string; + contentES: string; + directionsEN: string; + directionsES: string; +} diff --git a/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js b/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js new file mode 100644 index 00000000..87d236df --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js @@ -0,0 +1,45 @@ +"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.CreatePointAndTradDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class CreatePointAndTradDto { +} +exports.CreatePointAndTradDto = CreatePointAndTradDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], CreatePointAndTradDto.prototype, "idPlace", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePointAndTradDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ type: 'string', format: 'binary' }), + __metadata("design:type", Object) +], CreatePointAndTradDto.prototype, "image", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePointAndTradDto.prototype, "contentEN", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePointAndTradDto.prototype, "contentES", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePointAndTradDto.prototype, "directionsEN", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreatePointAndTradDto.prototype, "directionsES", void 0); +//# sourceMappingURL=create-pointAndTraduction.dto.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js.map b/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js.map new file mode 100644 index 00000000..1b1e78d0 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-pointAndTraduction.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-pointAndTraduction.dto.js","sourceRoot":"","sources":["../../../src/pointOfInterest/dto/create-pointAndTraduction.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,qBAAqB;CAejC;AAfD,sDAeC;AAbC;IADC,IAAA,qBAAW,GAAE;;sDACE;AAEhB;IADC,IAAA,qBAAW,GAAE;;mDACD;AAEb;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;oDAC5C;AAEN;IADC,IAAA,qBAAW,GAAE;;wDACI;AAElB;IADC,IAAA,qBAAW,GAAE;;wDACI;AAElB;IADC,IAAA,qBAAW,GAAE;;2DACO;AAErB;IADC,IAAA,qBAAW,GAAE;;2DACO"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/create-pointTrad.dto.d.ts b/backend/dist/pointOfInterest/dto/create-pointTrad.dto.d.ts new file mode 100644 index 00000000..c5cc3441 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-pointTrad.dto.d.ts @@ -0,0 +1,8 @@ +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class CreatePointTradDto { + language: LANGUAGES; + idPoint: number; + content: string; + directions: string; + audioName: string; +} diff --git a/backend/dist/pointOfInterest/dto/create-pointTrad.dto.js b/backend/dist/pointOfInterest/dto/create-pointTrad.dto.js new file mode 100644 index 00000000..693874d7 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-pointTrad.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreatePointTradDto = void 0; +class CreatePointTradDto { +} +exports.CreatePointTradDto = CreatePointTradDto; +//# sourceMappingURL=create-pointTrad.dto.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/create-pointTrad.dto.js.map b/backend/dist/pointOfInterest/dto/create-pointTrad.dto.js.map new file mode 100644 index 00000000..ef626a48 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/create-pointTrad.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-pointTrad.dto.js","sourceRoot":"","sources":["../../../src/pointOfInterest/dto/create-pointTrad.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,kBAAkB;CAM9B;AAND,gDAMC"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/getPoint.dto.d.ts b/backend/dist/pointOfInterest/dto/getPoint.dto.d.ts new file mode 100644 index 00000000..66c34ac6 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/getPoint.dto.d.ts @@ -0,0 +1,8 @@ +export declare class getPointDto { + idPoint: number; + idPlace: number; + name: string; + imageName: string; + content: string; + directions: string; +} diff --git a/backend/dist/pointOfInterest/dto/getPoint.dto.js b/backend/dist/pointOfInterest/dto/getPoint.dto.js new file mode 100644 index 00000000..6935efd5 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/getPoint.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getPointDto = void 0; +class getPointDto { +} +exports.getPointDto = getPointDto; +//# sourceMappingURL=getPoint.dto.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/getPoint.dto.js.map b/backend/dist/pointOfInterest/dto/getPoint.dto.js.map new file mode 100644 index 00000000..9a02551c --- /dev/null +++ b/backend/dist/pointOfInterest/dto/getPoint.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"getPoint.dto.js","sourceRoot":"","sources":["../../../src/pointOfInterest/dto/getPoint.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;CAOvB;AAPD,kCAOC"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/printPointInfo.dto.d.ts b/backend/dist/pointOfInterest/dto/printPointInfo.dto.d.ts new file mode 100644 index 00000000..b3e70e6b --- /dev/null +++ b/backend/dist/pointOfInterest/dto/printPointInfo.dto.d.ts @@ -0,0 +1,5 @@ +export declare class printPointInfo { + idPoint: number; + namePlace: string; + name: string; +} diff --git a/backend/dist/pointOfInterest/dto/printPointInfo.dto.js b/backend/dist/pointOfInterest/dto/printPointInfo.dto.js new file mode 100644 index 00000000..4eaaab68 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/printPointInfo.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.printPointInfo = void 0; +class printPointInfo { +} +exports.printPointInfo = printPointInfo; +//# sourceMappingURL=printPointInfo.dto.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/printPointInfo.dto.js.map b/backend/dist/pointOfInterest/dto/printPointInfo.dto.js.map new file mode 100644 index 00000000..ffdd9d19 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/printPointInfo.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"printPointInfo.dto.js","sourceRoot":"","sources":["../../../src/pointOfInterest/dto/printPointInfo.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;CAI1B;AAJD,wCAIC"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/update-point.dto.d.ts b/backend/dist/pointOfInterest/dto/update-point.dto.d.ts new file mode 100644 index 00000000..09850e70 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/update-point.dto.d.ts @@ -0,0 +1,5 @@ +import { CreatePointAndTradDto } from './create-pointAndTraduction.dto'; +declare const UpdatePointDto_base: import("@nestjs/common").Type>; +export declare class UpdatePointDto extends UpdatePointDto_base { +} +export {}; diff --git a/backend/dist/pointOfInterest/dto/update-point.dto.js b/backend/dist/pointOfInterest/dto/update-point.dto.js new file mode 100644 index 00000000..8fa17b59 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/update-point.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdatePointDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const create_pointAndTraduction_dto_1 = require("./create-pointAndTraduction.dto"); +class UpdatePointDto extends (0, swagger_1.PartialType)(create_pointAndTraduction_dto_1.CreatePointAndTradDto) { +} +exports.UpdatePointDto = UpdatePointDto; +//# sourceMappingURL=update-point.dto.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/dto/update-point.dto.js.map b/backend/dist/pointOfInterest/dto/update-point.dto.js.map new file mode 100644 index 00000000..6a0dd5d8 --- /dev/null +++ b/backend/dist/pointOfInterest/dto/update-point.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-point.dto.js","sourceRoot":"","sources":["../../../src/pointOfInterest/dto/update-point.dto.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,mFAAwE;AAExE,MAAa,cAAe,SAAQ,IAAA,qBAAW,EAAC,qDAAqB,CAAC;CAAG;AAAzE,wCAAyE"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/entities/PointOfInterest.entity.d.ts b/backend/dist/pointOfInterest/entities/PointOfInterest.entity.d.ts new file mode 100644 index 00000000..6c8d0da9 --- /dev/null +++ b/backend/dist/pointOfInterest/entities/PointOfInterest.entity.d.ts @@ -0,0 +1,7 @@ +import { Place } from 'src/place/entities/place.entity'; +export declare class PointOfInterest { + idPoint: number; + name: string; + idPlace: Place; + imageName: string; +} diff --git a/backend/dist/pointOfInterest/entities/PointOfInterest.entity.js b/backend/dist/pointOfInterest/entities/PointOfInterest.entity.js new file mode 100644 index 00000000..c7bb1a68 --- /dev/null +++ b/backend/dist/pointOfInterest/entities/PointOfInterest.entity.js @@ -0,0 +1,38 @@ +"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.PointOfInterest = void 0; +const place_entity_1 = require("../../place/entities/place.entity"); +const typeorm_1 = require("typeorm"); +let PointOfInterest = class PointOfInterest { +}; +exports.PointOfInterest = PointOfInterest; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], PointOfInterest.prototype, "idPoint", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", String) +], PointOfInterest.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'idPlace' }), + (0, typeorm_1.ManyToOne)(() => place_entity_1.Place, (place) => place.points, { nullable: false }), + __metadata("design:type", place_entity_1.Place) +], PointOfInterest.prototype, "idPlace", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", String) +], PointOfInterest.prototype, "imageName", void 0); +exports.PointOfInterest = PointOfInterest = __decorate([ + (0, typeorm_1.Entity)() +], PointOfInterest); +//# sourceMappingURL=PointOfInterest.entity.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/entities/PointOfInterest.entity.js.map b/backend/dist/pointOfInterest/entities/PointOfInterest.entity.js.map new file mode 100644 index 00000000..dc06b695 --- /dev/null +++ b/backend/dist/pointOfInterest/entities/PointOfInterest.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PointOfInterest.entity.js","sourceRoot":"","sources":["../../../src/pointOfInterest/entities/PointOfInterest.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAwD;AACxD,qCAAwF;AAGjF,IAAM,eAAe,GAArB,MAAM,eAAe;CAa3B,CAAA;AAbY,0CAAe;AAE1B;IADC,IAAA,gCAAsB,GAAE;;gDACT;AAGhB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;6CACf;AAIb;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BAC5D,oBAAK;gDAAC;AAGf;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;kDACV;0BAZP,eAAe;IAD3B,IAAA,gBAAM,GAAE;GACI,eAAe,CAa3B"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.d.ts b/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.d.ts new file mode 100644 index 00000000..a7d29794 --- /dev/null +++ b/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.d.ts @@ -0,0 +1,9 @@ +import { PointOfInterest } from './PointOfInterest.entity'; +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class PointOfInterestTraduction { + idPoint: PointOfInterest; + language: LANGUAGES; + content: string; + directions: string; + audioName: string; +} diff --git a/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js b/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js new file mode 100644 index 00000000..75cba011 --- /dev/null +++ b/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js @@ -0,0 +1,43 @@ +"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.PointOfInterestTraduction = void 0; +const typeorm_1 = require("typeorm"); +const PointOfInterest_entity_1 = require("./PointOfInterest.entity"); +const languages_enum_1 = require("../../shared/enum/languages.enum"); +let PointOfInterestTraduction = class PointOfInterestTraduction { +}; +exports.PointOfInterestTraduction = PointOfInterestTraduction; +__decorate([ + (0, typeorm_1.PrimaryColumn)({ name: 'idPoint', type: Number }), + (0, typeorm_1.ManyToOne)(() => PointOfInterest_entity_1.PointOfInterest, (point) => point.idPoint), + __metadata("design:type", PointOfInterest_entity_1.PointOfInterest) +], PointOfInterestTraduction.prototype, "idPoint", void 0); +__decorate([ + (0, typeorm_1.PrimaryColumn)(), + __metadata("design:type", String) +], PointOfInterestTraduction.prototype, "language", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false, length: 1024 }), + __metadata("design:type", String) +], PointOfInterestTraduction.prototype, "content", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true, length: 1024 }), + __metadata("design:type", String) +], PointOfInterestTraduction.prototype, "directions", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], PointOfInterestTraduction.prototype, "audioName", void 0); +exports.PointOfInterestTraduction = PointOfInterestTraduction = __decorate([ + (0, typeorm_1.Entity)() +], PointOfInterestTraduction); +//# sourceMappingURL=PointOfInterestTraduction.entity.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js.map b/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js.map new file mode 100644 index 00000000..e5ad2793 --- /dev/null +++ b/backend/dist/pointOfInterest/entities/PointOfInterestTraduction.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PointOfInterestTraduction.entity.js","sourceRoot":"","sources":["../../../src/pointOfInterest/entities/PointOfInterestTraduction.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAmE;AACnE,qEAA2D;AAC3D,qEAA2D;AAGpD,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAcrC,CAAA;AAdY,8DAAyB;AAGpC;IAFC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAChD,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,wCAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;8BAClD,wCAAe;0DAAC;AAEzB;IADC,IAAA,uBAAa,GAAE;;2DACI;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;0DAC1B;AAEhB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;6DACtB;AAGnB;IADC,IAAA,gBAAM,GAAE;;4DACS;oCAbP,yBAAyB;IADrC,IAAA,gBAAM,GAAE;GACI,yBAAyB,CAcrC"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/enum/available.enum.d.ts b/backend/dist/pointOfInterest/enum/available.enum.d.ts new file mode 100644 index 00000000..8821ef39 --- /dev/null +++ b/backend/dist/pointOfInterest/enum/available.enum.d.ts @@ -0,0 +1,11 @@ +export declare enum Available { + WEEKEND = "weekend", + ALL_DAYS = "all_days", + WEEKDAYS = "weekdays", + CUSTOM = "custom" +} +export declare const availableToDays: { + weekend: string[]; + all_days: string[]; + weekdays: string[]; +}; diff --git a/backend/dist/pointOfInterest/enum/available.enum.js b/backend/dist/pointOfInterest/enum/available.enum.js new file mode 100644 index 00000000..7e2bbec3 --- /dev/null +++ b/backend/dist/pointOfInterest/enum/available.enum.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.availableToDays = exports.Available = void 0; +var Available; +(function (Available) { + Available["WEEKEND"] = "weekend"; + Available["ALL_DAYS"] = "all_days"; + Available["WEEKDAYS"] = "weekdays"; + Available["CUSTOM"] = "custom"; +})(Available || (exports.Available = Available = {})); +exports.availableToDays = { + [Available.WEEKEND]: ['Saturday', 'Sunday'], + [Available.ALL_DAYS]: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], + [Available.WEEKDAYS]: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'], +}; +//# sourceMappingURL=available.enum.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/enum/available.enum.js.map b/backend/dist/pointOfInterest/enum/available.enum.js.map new file mode 100644 index 00000000..625a87ca --- /dev/null +++ b/backend/dist/pointOfInterest/enum/available.enum.js.map @@ -0,0 +1 @@ +{"version":3,"file":"available.enum.js","sourceRoot":"","sources":["../../../src/pointOfInterest/enum/available.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,gCAAmB,CAAA;IACnB,kCAAqB,CAAA;IACrB,kCAAqB,CAAA;IACrB,8BAAiB,CAAA;AACnB,CAAC,EALW,SAAS,yBAAT,SAAS,QAKpB;AAEY,QAAA,eAAe,GAAG;IAC7B,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC3C,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;IACpG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;CAC/E,CAAC"} \ No newline at end of file diff --git a/backend/dist/pointOfInterest/utils/qrcode.d.ts b/backend/dist/pointOfInterest/utils/qrcode.d.ts new file mode 100644 index 00000000..51d1319d --- /dev/null +++ b/backend/dist/pointOfInterest/utils/qrcode.d.ts @@ -0,0 +1 @@ +export declare const generateQRCode: (idState: number, idTown: number, idActivity: number, idPoint: number) => Promise; diff --git a/backend/dist/pointOfInterest/utils/qrcode.js b/backend/dist/pointOfInterest/utils/qrcode.js new file mode 100644 index 00000000..14c87ec5 --- /dev/null +++ b/backend/dist/pointOfInterest/utils/qrcode.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.generateQRCode = void 0; +const qrcode = require("qrcode"); +const fs = require("fs"); +const common_1 = require("@nestjs/common"); +const path = require("path"); +const server_contants_1 = require("../../constants/server.contants"); +const QR_FOLDER = 'qr'; +const generateQRCode = async (idState, idTown, idActivity, idPoint) => { + try { + const url = `/state/${idState}/town/${idTown}/activity/${idActivity}/travel?id=${idPoint}`; + const qrCodeImage = await qrcode.toDataURL(url); + const base64Data = qrCodeImage.replace(/^data:image\/png;base64,/, ''); + const filename = path.join(server_contants_1.ServerConstants.ROOT_STATIC_PATH, QR_FOLDER, `${idPoint}.png`); + fs.writeFile(filename, base64Data, 'base64', (err) => { + if (err) { + console.error(err); + throw new common_1.InternalServerErrorException('Error saving QR code image'); + } + else { + console.log('QR code image saved as qrcode.png'); + } + }); + } + catch (err) { + console.error(err); + throw new common_1.InternalServerErrorException('Error generating QR code'); + } +}; +exports.generateQRCode = generateQRCode; +//# sourceMappingURL=qrcode.js.map \ No newline at end of file diff --git a/backend/dist/pointOfInterest/utils/qrcode.js.map b/backend/dist/pointOfInterest/utils/qrcode.js.map new file mode 100644 index 00000000..c617be49 --- /dev/null +++ b/backend/dist/pointOfInterest/utils/qrcode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../../src/pointOfInterest/utils/qrcode.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,yBAAyB;AACzB,2CAA8D;AAC9D,6BAA6B;AAC7B,qEAAgE;AAEhE,MAAM,SAAS,GAAG,IAAI,CAAC;AAChB,MAAM,cAAc,GAAG,KAAK,EAAE,OAAe,EAAE,MAAc,EAAE,UAAkB,EAAE,OAAe,EAAE,EAAE;IAC3G,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,UAAU,OAAO,SAAS,MAAM,aAAa,UAAU,cAAc,OAAO,EAAE,CAAC;QAC3F,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAGhD,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAGvE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iCAAe,CAAC,gBAAgB,EAAE,SAAS,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC;QAE1F,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YACnD,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,MAAM,IAAI,qCAA4B,CAAC,4BAA4B,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,IAAI,qCAA4B,CAAC,0BAA0B,CAAC,CAAC;IACrE,CAAC;AACH,CAAC,CAAC;AAvBW,QAAA,cAAc,kBAuBzB"} \ No newline at end of file diff --git a/backend/dist/route/dto/create-route-req.d.ts b/backend/dist/route/dto/create-route-req.d.ts new file mode 100644 index 00000000..bc459238 --- /dev/null +++ b/backend/dist/route/dto/create-route-req.d.ts @@ -0,0 +1,9 @@ +export declare class CreateRouteReq { + start: number; + end: number; +} +export declare class CreateCustomRouteReq { + placesIds: number[]; + start: number; + end: number; +} diff --git a/backend/dist/route/dto/create-route-req.js b/backend/dist/route/dto/create-route-req.js new file mode 100644 index 00000000..630d740c --- /dev/null +++ b/backend/dist/route/dto/create-route-req.js @@ -0,0 +1,40 @@ +"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.CreateCustomRouteReq = exports.CreateRouteReq = void 0; +const swagger_1 = require("@nestjs/swagger"); +class CreateRouteReq { +} +exports.CreateRouteReq = CreateRouteReq; +__decorate([ + (0, swagger_1.ApiProperty)({ name: 'start', type: Number }), + __metadata("design:type", Number) +], CreateRouteReq.prototype, "start", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ name: 'end', type: Number }), + __metadata("design:type", Number) +], CreateRouteReq.prototype, "end", void 0); +class CreateCustomRouteReq { +} +exports.CreateCustomRouteReq = CreateCustomRouteReq; +__decorate([ + (0, swagger_1.ApiProperty)({ name: 'placesIds', type: [Number] }), + __metadata("design:type", Array) +], CreateCustomRouteReq.prototype, "placesIds", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ name: 'start', type: Number }), + __metadata("design:type", Number) +], CreateCustomRouteReq.prototype, "start", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ name: 'end', type: Number }), + __metadata("design:type", Number) +], CreateCustomRouteReq.prototype, "end", void 0); +//# sourceMappingURL=create-route-req.js.map \ No newline at end of file diff --git a/backend/dist/route/dto/create-route-req.js.map b/backend/dist/route/dto/create-route-req.js.map new file mode 100644 index 00000000..6d4942ba --- /dev/null +++ b/backend/dist/route/dto/create-route-req.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-route-req.js","sourceRoot":"","sources":["../../../src/route/dto/create-route-req.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,cAAc;CAM1B;AAND,wCAMC;AAJC;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;6CAC/B;AAGd;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2CAC/B;AAGd,MAAa,oBAAoB;CAQhC;AARD,oDAQC;AANC;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;;uDAC/B;AAEpB;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDAC/B;AAGd;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDAC/B"} \ No newline at end of file diff --git a/backend/dist/route/dto/create-route.dto.d.ts b/backend/dist/route/dto/create-route.dto.d.ts new file mode 100644 index 00000000..6c0a5702 --- /dev/null +++ b/backend/dist/route/dto/create-route.dto.d.ts @@ -0,0 +1,8 @@ +import { Town } from 'src/town/entities/town.entity'; +import { User } from 'src/user/entities/user.entity'; +export declare class CreateRouteDto { + user: User; + town: Town; + startDate: Date; + endDate: Date; +} diff --git a/backend/dist/route/dto/create-route.dto.js b/backend/dist/route/dto/create-route.dto.js new file mode 100644 index 00000000..11a9113f --- /dev/null +++ b/backend/dist/route/dto/create-route.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateRouteDto = void 0; +class CreateRouteDto { +} +exports.CreateRouteDto = CreateRouteDto; +//# sourceMappingURL=create-route.dto.js.map \ No newline at end of file diff --git a/backend/dist/route/dto/create-route.dto.js.map b/backend/dist/route/dto/create-route.dto.js.map new file mode 100644 index 00000000..2a91d8b3 --- /dev/null +++ b/backend/dist/route/dto/create-route.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-route.dto.js","sourceRoot":"","sources":["../../../src/route/dto/create-route.dto.ts"],"names":[],"mappings":";;;AAGA,MAAa,cAAc;CAK1B;AALD,wCAKC"} \ No newline at end of file diff --git a/backend/dist/route/dto/recommend-route.dto.d.ts b/backend/dist/route/dto/recommend-route.dto.d.ts new file mode 100644 index 00000000..801279aa --- /dev/null +++ b/backend/dist/route/dto/recommend-route.dto.d.ts @@ -0,0 +1,7 @@ +export interface RecommendPlace { + idPlace: number; + openAt: number; + closeAt: number; + categories: number[]; + rating: number; +} diff --git a/backend/dist/route/dto/recommend-route.dto.js b/backend/dist/route/dto/recommend-route.dto.js new file mode 100644 index 00000000..52a1bb16 --- /dev/null +++ b/backend/dist/route/dto/recommend-route.dto.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=recommend-route.dto.js.map \ No newline at end of file diff --git a/backend/dist/route/dto/recommend-route.dto.js.map b/backend/dist/route/dto/recommend-route.dto.js.map new file mode 100644 index 00000000..f39c2dca --- /dev/null +++ b/backend/dist/route/dto/recommend-route.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"recommend-route.dto.js","sourceRoot":"","sources":["../../../src/route/dto/recommend-route.dto.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/backend/dist/route/dto/update-route.dto.d.ts b/backend/dist/route/dto/update-route.dto.d.ts new file mode 100644 index 00000000..b23dc5d2 --- /dev/null +++ b/backend/dist/route/dto/update-route.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateRouteDto } from './create-route.dto'; +declare const UpdateRouteDto_base: import("@nestjs/common").Type>; +export declare class UpdateRouteDto extends UpdateRouteDto_base { +} +export {}; diff --git a/backend/dist/route/dto/update-route.dto.js b/backend/dist/route/dto/update-route.dto.js new file mode 100644 index 00000000..fcaad0e7 --- /dev/null +++ b/backend/dist/route/dto/update-route.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateRouteDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const create_route_dto_1 = require("./create-route.dto"); +class UpdateRouteDto extends (0, swagger_1.PartialType)(create_route_dto_1.CreateRouteDto) { +} +exports.UpdateRouteDto = UpdateRouteDto; +//# sourceMappingURL=update-route.dto.js.map \ No newline at end of file diff --git a/backend/dist/route/dto/update-route.dto.js.map b/backend/dist/route/dto/update-route.dto.js.map new file mode 100644 index 00000000..7ceaacca --- /dev/null +++ b/backend/dist/route/dto/update-route.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-route.dto.js","sourceRoot":"","sources":["../../../src/route/dto/update-route.dto.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,yDAAoD;AAEpD,MAAa,cAAe,SAAQ,IAAA,qBAAW,EAAC,iCAAc,CAAC;CAAG;AAAlE,wCAAkE"} \ No newline at end of file diff --git a/backend/dist/route/dto/updateRouteStatus.dto.d.ts b/backend/dist/route/dto/updateRouteStatus.dto.d.ts new file mode 100644 index 00000000..447f0b00 --- /dev/null +++ b/backend/dist/route/dto/updateRouteStatus.dto.d.ts @@ -0,0 +1,4 @@ +import { RouteStatus } from '../entities/route.entity'; +export declare class UpdateRouteStatusDto { + status: RouteStatus; +} diff --git a/backend/dist/route/dto/updateRouteStatus.dto.js b/backend/dist/route/dto/updateRouteStatus.dto.js new file mode 100644 index 00000000..e1806b00 --- /dev/null +++ b/backend/dist/route/dto/updateRouteStatus.dto.js @@ -0,0 +1,22 @@ +"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.UpdateRouteStatusDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const route_entity_1 = require("../entities/route.entity"); +class UpdateRouteStatusDto { +} +exports.UpdateRouteStatusDto = UpdateRouteStatusDto; +__decorate([ + (0, swagger_1.ApiProperty)({ enum: route_entity_1.RouteStatus, enumName: 'RouteStatus', description: 'accepted, pending, rejected' }), + __metadata("design:type", String) +], UpdateRouteStatusDto.prototype, "status", void 0); +//# sourceMappingURL=updateRouteStatus.dto.js.map \ No newline at end of file diff --git a/backend/dist/route/dto/updateRouteStatus.dto.js.map b/backend/dist/route/dto/updateRouteStatus.dto.js.map new file mode 100644 index 00000000..be962064 --- /dev/null +++ b/backend/dist/route/dto/updateRouteStatus.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"updateRouteStatus.dto.js","sourceRoot":"","sources":["../../../src/route/dto/updateRouteStatus.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,2DAAuD;AAEvD,MAAa,oBAAoB;CAGhC;AAHD,oDAGC;AADC;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,0BAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;;oDACpF"} \ No newline at end of file diff --git a/backend/dist/route/entities/route.entity.d.ts b/backend/dist/route/entities/route.entity.d.ts new file mode 100644 index 00000000..d6892dd3 --- /dev/null +++ b/backend/dist/route/entities/route.entity.d.ts @@ -0,0 +1,17 @@ +import { Town } from 'src/town/entities/town.entity'; +import { TravelPlace } from 'src/travel-place/entities/travel-place.entity'; +import { User } from 'src/user/entities/user.entity'; +export declare enum RouteStatus { + PENDING = "pending", + ACCEPTED = "accepted", + REJECTED = "rejected" +} +export declare class Route { + idRoute: number; + user: User; + town: Town; + travelPlace: TravelPlace[]; + startDate: Date; + endDate: Date; + status: RouteStatus; +} diff --git a/backend/dist/route/entities/route.entity.js b/backend/dist/route/entities/route.entity.js new file mode 100644 index 00000000..5d2eac04 --- /dev/null +++ b/backend/dist/route/entities/route.entity.js @@ -0,0 +1,59 @@ +"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.Route = exports.RouteStatus = void 0; +const town_entity_1 = require("../../town/entities/town.entity"); +const travel_place_entity_1 = require("../../travel-place/entities/travel-place.entity"); +const user_entity_1 = require("../../user/entities/user.entity"); +const typeorm_1 = require("typeorm"); +var RouteStatus; +(function (RouteStatus) { + RouteStatus["PENDING"] = "pending"; + RouteStatus["ACCEPTED"] = "accepted"; + RouteStatus["REJECTED"] = "rejected"; +})(RouteStatus || (exports.RouteStatus = RouteStatus = {})); +let Route = class Route { +}; +exports.Route = Route; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], Route.prototype, "idRoute", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'user' }), + (0, typeorm_1.ManyToOne)(() => user_entity_1.User, (user) => user.email, { nullable: false }), + __metadata("design:type", user_entity_1.User) +], Route.prototype, "user", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'town' }), + (0, typeorm_1.ManyToOne)(() => town_entity_1.Town, (town) => town.townId, { nullable: false, eager: true }), + __metadata("design:type", town_entity_1.Town) +], Route.prototype, "town", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => travel_place_entity_1.TravelPlace, (travelPlace) => travelPlace.route, { eager: true }), + __metadata("design:type", Array) +], Route.prototype, "travelPlace", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Date) +], Route.prototype, "startDate", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Date) +], Route.prototype, "endDate", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false, default: RouteStatus.PENDING }), + __metadata("design:type", String) +], Route.prototype, "status", void 0); +exports.Route = Route = __decorate([ + (0, typeorm_1.Entity)() +], Route); +//# sourceMappingURL=route.entity.js.map \ No newline at end of file diff --git a/backend/dist/route/entities/route.entity.js.map b/backend/dist/route/entities/route.entity.js.map new file mode 100644 index 00000000..457c420a --- /dev/null +++ b/backend/dist/route/entities/route.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"route.entity.js","sourceRoot":"","sources":["../../../src/route/entities/route.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAAqD;AACrD,yFAA4E;AAC5E,iEAAqD;AACrD,qCAAmG;AACnG,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;IACrB,oCAAqB,CAAA;AACvB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAGM,IAAM,KAAK,GAAX,MAAM,KAAK;CAsBjB,CAAA;AAtBY,sBAAK;AAEhB;IADC,IAAA,gCAAsB,GAAE;;sCACT;AAIhB;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BAC3D,kBAAI;mCAAC;AAIX;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;8BACzE,kBAAI;mCAAC;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,iCAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;0CACvD;AAG3B;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BACjB,IAAI;wCAAC;AAEhB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BACnB,IAAI;sCAAC;AAGd;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;;qCACtC;gBArBT,KAAK;IADjB,IAAA,gBAAM,GAAE;GACI,KAAK,CAsBjB"} \ No newline at end of file diff --git a/backend/dist/route/route.controller.d.ts b/backend/dist/route/route.controller.d.ts new file mode 100644 index 00000000..55358bcb --- /dev/null +++ b/backend/dist/route/route.controller.d.ts @@ -0,0 +1,16 @@ +import { RouteService } from './route.service'; +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +import { CustomUserRequest } from 'src/auth/user/interface/customUserReq'; +import { CreateCustomRouteReq, CreateRouteReq } from './dto/create-route-req'; +import { RouteStatus } from './entities/route.entity'; +import { UpdateRouteStatusDto } from './dto/updateRouteStatus.dto'; +export declare class RouteController { + private readonly routeService; + constructor(routeService: RouteService); + getRouteInfo(idRoute: number): Promise; + recommendRoute(req: CustomUserRequest, lang: string, idTown: number, createRouteReq: CreateRouteReq): Promise; + getRecommendRoute(req: CustomUserRequest, routeStatus: RouteStatus): Promise; + getRoute(idRoute: number, lang: LANGUAGES, req: CustomUserRequest): Promise; + updateRoute(updateRouteStatusDto: UpdateRouteStatusDto, idRoute: number): Promise; + createCustomRoute(req: CustomUserRequest, createRouteReq: CreateCustomRouteReq, lang: LANGUAGES): Promise; +} diff --git a/backend/dist/route/route.controller.js b/backend/dist/route/route.controller.js new file mode 100644 index 00000000..2433044a --- /dev/null +++ b/backend/dist/route/route.controller.js @@ -0,0 +1,148 @@ +"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.RouteController = void 0; +const common_1 = require("@nestjs/common"); +const route_service_1 = require("./route.service"); +const swagger_1 = require("@nestjs/swagger"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +const authUser_guard_1 = require("../auth/user/authUser.guard"); +const create_route_req_1 = require("./dto/create-route-req"); +const route_entity_1 = require("./entities/route.entity"); +const updateRouteStatus_dto_1 = require("./dto/updateRouteStatus.dto"); +let RouteController = class RouteController { + constructor(routeService) { + this.routeService = routeService; + } + async getRouteInfo(idRoute) { + return await this.routeService.getRouteInfoById(idRoute); + } + async recommendRoute(req, lang, idTown, createRouteReq) { + try { + const { email } = req.user; + const res = await this.routeService.recommend(idTown, email, lang, createRouteReq.start, createRouteReq.end); + console.log('HELOOO: ', res); + return res; + } + catch (error) { + console.log(error); + return error; + } + } + async getRecommendRoute(req, routeStatus) { + try { + const { email } = req.user; + return await this.routeService.getRouteAndPlacesByUser(email, routeStatus); + } + catch (error) { + console.log(error); + return error; + } + } + async getRoute(idRoute, lang, req) { + const { email } = req.user; + return await this.routeService.getRouteById(idRoute, email, lang); + } + async updateRoute(updateRouteStatusDto, idRoute) { + return await this.routeService.updateRoute(idRoute, updateRouteStatusDto.status); + } + async createCustomRoute(req, createRouteReq, lang) { + try { + const { email } = req.user; + return await this.routeService.createCustomRoute(email, lang, createRouteReq); + } + catch (error) { + console.log(error); + return error; + } + } +}; +exports.RouteController = RouteController; +__decorate([ + (0, common_1.Get)('/info/:idRoute'), + (0, swagger_1.ApiParam)({ name: 'idRoute', type: Number }), + (0, swagger_1.ApiBearerAuth)('jwt'), + __param(0, (0, common_1.Param)('idRoute')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number]), + __metadata("design:returntype", Promise) +], RouteController.prototype, "getRouteInfo", null); +__decorate([ + (0, common_1.Post)('/:idTown'), + (0, swagger_1.ApiParam)({ name: 'idTown', type: Number }), + (0, swagger_1.ApiBody)({ type: create_route_req_1.CreateRouteReq }), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)('lang')), + __param(2, (0, common_1.Param)('idTown')), + __param(3, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, String, Number, create_route_req_1.CreateRouteReq]), + __metadata("design:returntype", Promise) +], RouteController.prototype, "recommendRoute", null); +__decorate([ + (0, common_1.Get)(''), + (0, swagger_1.ApiQuery)({ name: 'routeStatus', type: String, schema: { enum: Object.values(route_entity_1.RouteStatus) } }), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)('routeStatus')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, String]), + __metadata("design:returntype", Promise) +], RouteController.prototype, "getRecommendRoute", null); +__decorate([ + (0, common_1.Get)('/:idRoute/:lang'), + (0, swagger_1.ApiParam)({ name: 'idRoute', type: Number }), + (0, swagger_1.ApiParam)({ name: 'lang', type: String, enum: Object.values(languages_enum_1.LANGUAGES) }), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Param)('idRoute')), + __param(1, (0, common_1.Param)('lang')), + __param(2, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, String, Object]), + __metadata("design:returntype", Promise) +], RouteController.prototype, "getRoute", null); +__decorate([ + (0, common_1.Patch)('/:idRoute'), + (0, swagger_1.ApiParam)({ name: 'idRoute', type: Number }), + (0, swagger_1.ApiBody)({ type: updateRouteStatus_dto_1.UpdateRouteStatusDto, description: 'accepted, pending' }), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Param)('idRoute')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [updateRouteStatus_dto_1.UpdateRouteStatusDto, Number]), + __metadata("design:returntype", Promise) +], RouteController.prototype, "updateRoute", null); +__decorate([ + (0, common_1.Post)('custom/:idTown/:lang'), + (0, swagger_1.ApiOperation)({ summary: 'Create a custom route' }), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __param(2, (0, common_1.Param)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, create_route_req_1.CreateCustomRouteReq, String]), + __metadata("design:returntype", Promise) +], RouteController.prototype, "createCustomRoute", null); +exports.RouteController = RouteController = __decorate([ + (0, common_1.Controller)('route'), + (0, swagger_1.ApiTags)('route'), + __metadata("design:paramtypes", [route_service_1.RouteService]) +], RouteController); +//# sourceMappingURL=route.controller.js.map \ No newline at end of file diff --git a/backend/dist/route/route.controller.js.map b/backend/dist/route/route.controller.js.map new file mode 100644 index 00000000..7d60c7b8 --- /dev/null +++ b/backend/dist/route/route.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"route.controller.js","sourceRoot":"","sources":["../../src/route/route.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/route/route.module.d.ts b/backend/dist/route/route.module.d.ts new file mode 100644 index 00000000..a864fb3d --- /dev/null +++ b/backend/dist/route/route.module.d.ts @@ -0,0 +1,2 @@ +export declare class RouteModule { +} diff --git a/backend/dist/route/route.module.js b/backend/dist/route/route.module.js new file mode 100644 index 00000000..672c5c4e --- /dev/null +++ b/backend/dist/route/route.module.js @@ -0,0 +1,72 @@ +"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.RouteModule = void 0; +const common_1 = require("@nestjs/common"); +const route_service_1 = require("./route.service"); +const route_controller_1 = require("./route.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const route_entity_1 = require("./entities/route.entity"); +const authUserservice_1 = require("../auth/user/authUserservice"); +const user_service_1 = require("../user/user.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const user_entity_1 = require("../user/entities/user.entity"); +const category_service_1 = require("../category/category.service"); +const category_entity_1 = require("../category/entities/category.entity"); +const town_entity_1 = require("../town/entities/town.entity"); +const travel_place_entity_1 = require("../travel-place/entities/travel-place.entity"); +const travel_place_service_1 = require("../travel-place/travel-place.service"); +const place_entity_1 = require("../place/entities/place.entity"); +const place_service_1 = require("../place/place.service"); +const available_date_entity_1 = require("../place/entities/available-date.entity"); +const place_traduction_entity_1 = require("../place/entities/place-traduction.entity"); +const visited_service_1 = require("../visited/visited.service"); +const visited_entity_1 = require("../visited/entities/visited.entity"); +const user_reset_code_entity_1 = require("../auth/user/entities/user-reset-code.entity"); +const user_confirm_code_entity_1 = require("../auth/user/entities/user-confirm-code.entity"); +const email_service_1 = require("../email/email.service"); +const visited_module_1 = require("../visited/visited.module"); +let RouteModule = class RouteModule { +}; +exports.RouteModule = RouteModule; +exports.RouteModule = RouteModule = __decorate([ + (0, common_1.Module)({ + controllers: [route_controller_1.RouteController], + providers: [ + route_service_1.RouteService, + authUserservice_1.AuthUserService, + user_service_1.UserService, + jwt_1.JwtService, + encryption_service_1.EncryptionService, + category_service_1.CategoryService, + travel_place_service_1.TravelPlaceService, + place_service_1.PlaceService, + visited_service_1.VisitedService, + email_service_1.EmailService, + ], + imports: [ + (0, common_1.forwardRef)(() => visited_module_1.VisitedModule), + typeorm_1.TypeOrmModule.forFeature([ + route_entity_1.Route, + user_entity_1.User, + user_reset_code_entity_1.UserResetCode, + category_entity_1.Category, + town_entity_1.Town, + travel_place_entity_1.TravelPlace, + place_entity_1.Place, + available_date_entity_1.AvailableDate, + place_traduction_entity_1.PlaceTraduction, + visited_entity_1.Visited, + user_confirm_code_entity_1.UserConfirmCode, + ]), + ], + exports: [route_service_1.RouteService], + }) +], RouteModule); +//# sourceMappingURL=route.module.js.map \ No newline at end of file diff --git a/backend/dist/route/route.module.js.map b/backend/dist/route/route.module.js.map new file mode 100644 index 00000000..5a70ad0e --- /dev/null +++ b/backend/dist/route/route.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"route.module.js","sourceRoot":"","sources":["../../src/route/route.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,mDAA+C;AAC/C,yDAAqD;AACrD,6CAAgD;AAChD,0DAAgD;AAChD,kEAAgE;AAChE,uDAAoD;AACpD,qCAAyC;AACzC,8EAA2E;AAC3E,8DAAqD;AACrD,mEAAgE;AAChE,0EAAiE;AACjE,8DAAqD;AACrD,sFAA4E;AAC5E,+EAA2E;AAC3E,iEAAwD;AACxD,0DAAuD;AACvD,mFAAyE;AACzE,uFAA6E;AAC7E,gEAA6D;AAC7D,uEAA8D;AAC9D,yFAA8E;AAC9E,6FAAkF;AAClF,0DAAuD;AACvD,8DAA2D;AAiCpD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IAhCvB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE;YACT,4BAAY;YACZ,iCAAe;YACf,0BAAW;YACX,gBAAU;YACV,sCAAiB;YACjB,kCAAe;YACf,yCAAkB;YAClB,4BAAY;YACZ,gCAAc;YACd,4BAAY;SACb;QACD,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC;YAC/B,uBAAa,CAAC,UAAU,CAAC;gBACvB,oBAAK;gBACL,kBAAI;gBACJ,sCAAa;gBACb,0BAAQ;gBACR,kBAAI;gBACJ,iCAAW;gBACX,oBAAK;gBACL,qCAAa;gBACb,yCAAe;gBACf,wBAAO;gBACP,0CAAe;aAChB,CAAC;SACH;QACD,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"} \ No newline at end of file diff --git a/backend/dist/route/route.service.d.ts b/backend/dist/route/route.service.d.ts new file mode 100644 index 00000000..fc5ed37d --- /dev/null +++ b/backend/dist/route/route.service.d.ts @@ -0,0 +1,27 @@ +import { Route, RouteStatus } from './entities/route.entity'; +import { DataSource, Repository } from 'typeorm'; +import { User } from 'src/user/entities/user.entity'; +import { Town } from 'src/town/entities/town.entity'; +import { TravelPlaceService } from 'src/travel-place/travel-place.service'; +import { PlaceService } from 'src/place/place.service'; +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +import { VisitedService } from 'src/visited/visited.service'; +import { UserService } from 'src/user/user.service'; +import { CreateCustomRouteReq } from './dto/create-route-req'; +export declare class RouteService { + private routeRepository; + private userRepository; + private townRepository; + private readonly travelPlaceService; + private readonly placeService; + private readonly visitedService; + private readonly userService; + private dataSource; + constructor(routeRepository: Repository, userRepository: Repository, townRepository: Repository, travelPlaceService: TravelPlaceService, placeService: PlaceService, visitedService: VisitedService, userService: UserService, dataSource: DataSource); + recommend(idTown: number, email: string, language: LANGUAGES, start: any, end: any): Promise; + getRouteAndPlacesByUser(email: string, routeStatus: RouteStatus): Promise; + updateRoute(idRoute: number, status: RouteStatus): Promise; + getRouteById(idRoute: number, email: string, lang: LANGUAGES): Promise; + getRouteInfoById(idRoute: number): Promise; + createCustomRoute(email: string, lang: LANGUAGES, createRouteReq: CreateCustomRouteReq): Promise; +} diff --git a/backend/dist/route/route.service.js b/backend/dist/route/route.service.js new file mode 100644 index 00000000..6162db6d --- /dev/null +++ b/backend/dist/route/route.service.js @@ -0,0 +1,227 @@ +"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.RouteService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const route_entity_1 = require("./entities/route.entity"); +const typeorm_2 = require("typeorm"); +const user_entity_1 = require("../user/entities/user.entity"); +const town_entity_1 = require("../town/entities/town.entity"); +const travel_place_service_1 = require("../travel-place/travel-place.service"); +const recommendations_1 = require("./utils/recommendations"); +const place_service_1 = require("../place/place.service"); +const visited_service_1 = require("../visited/visited.service"); +const user_service_1 = require("../user/user.service"); +const server_contants_1 = require("../constants/server.contants"); +let RouteService = class RouteService { + constructor(routeRepository, userRepository, townRepository, travelPlaceService, placeService, visitedService, userService, dataSource) { + this.routeRepository = routeRepository; + this.userRepository = userRepository; + this.townRepository = townRepository; + this.travelPlaceService = travelPlaceService; + this.placeService = placeService; + this.visitedService = visitedService; + this.userService = userService; + this.dataSource = dataSource; + } + async recommend(idTown, email, language, start, end) { + const town = await this.townRepository.findOneBy({ townId: idTown }); + const user = await this.userRepository.findOneBy({ email }); + const placesNotVisited = await this.placeService.findPlacesNotVisitedByUserAndOpen(email, language, idTown); + const visited = await this.visitedService.getVisitedByUser(email); + const placesMapped = placesNotVisited.map((place) => { + return { + idPlace: place.idPlace, + openAt: place.openAt, + closeAt: place.closeAt, + categories: place.categories.map((category) => category.idCategory), + rating: 0, + }; + }); + const visitedMapped = visited.map((visit) => ({ + idPlace: visit.place.idPlace, + openAt: visit.place.openAt, + closeAt: visit.place.closeAt, + categories: visit.place.categories.map((category) => category.idCategory), + rating: visit.rating, + })); + const system = new recommendations_1.RecommendationsSystem(visitedMapped, placesMapped, start, end); + const chosen = system.recommend(); + const startDate = new Date(); + startDate.setHours(start); + const endDate = new Date(); + endDate.setHours(end); + const createRouteDto = { startDate, endDate, town, user }; + const idRoute = (await this.routeRepository.save(createRouteDto)).idRoute; + for (const curRecommended of chosen) { + const place = await this.placeService.findOneAndTradAndAvailable(curRecommended.idPlace, language); + const endDate = new Date(); + endDate.setHours(curRecommended.closeAt); + endDate.setMinutes(0); + const startDate = new Date(); + startDate.setHours(curRecommended.openAt); + startDate.setMinutes(0); + const createTravelPlace = { + ...place, + done: false, + idRoute, + endDate, + startDate, + }; + await this.travelPlaceService.create(createTravelPlace); + } + return await this.getRouteById(idRoute, email, language); + } + async getRouteAndPlacesByUser(email, routeStatus) { + const res = await this.routeRepository.find({ + relations: ['travelPlace'], + where: { user: { email }, status: routeStatus }, + order: { endDate: 'DESC' }, + }); + return res; + } + async updateRoute(idRoute, status) { + await this.routeRepository.update({ idRoute }, { status }); + } + async getRouteById(idRoute, email, lang) { + const user = await this.userService.findOne(email); + const res = await this.routeRepository.findOneBy({ idRoute, user }); + if (res && res.travelPlace) { + res.travelPlace = res.travelPlace.map((place) => { + place.place.categories = place.place.categories.filter((category) => category.language === lang); + return place; + }); + res.travelPlace = res.travelPlace.map((travelPlace) => { + return { + travelPlaceId: travelPlace.travelPlaceId, + idPlace: travelPlace.place.idPlace, + available: travelPlace.place.available, + latitude: travelPlace.place.latitude, + longitude: travelPlace.place.longitude, + imageName: `${server_contants_1.ServerConstants.HOST}/places/${travelPlace.place.imageName}`, + name: travelPlace.place.name, + openAt: travelPlace.place.openAt, + closeAt: travelPlace.place.closeAt, + startDate: travelPlace.startDate, + endDate: travelPlace.endDate, + categories: travelPlace.place.categories, + address: travelPlace.place.address, + done: travelPlace.done, + route: travelPlace.route, + place: { ...travelPlace.place, imageName: `${server_contants_1.ServerConstants.HOST}/places/${travelPlace.place.imageName}` }, + }; + }); + } + console.log(res); + return res; + } + async getRouteInfoById(idRoute) { + const res = await this.dataSource + .createQueryBuilder(route_entity_1.Route, 'route') + .leftJoinAndSelect('route.travelPlace', 'travelPlace') + .leftJoinAndSelect('travelPlace.place', 'place') + .leftJoinAndSelect('place.visited', 'visited') + .leftJoinAndSelect('route.town', 'town') + .where('route.idRoute = :idRoute', { idRoute }) + .getOne(); + if (res && res.travelPlace) { + res.travelPlace = res.travelPlace.map((travelPlace) => { + return { + travelPlaceId: travelPlace.travelPlaceId, + idPlace: travelPlace.place.idPlace, + available: travelPlace.place.available, + latitude: travelPlace.place.latitude, + longitude: travelPlace.place.longitude, + imageName: `${server_contants_1.ServerConstants.HOST}/places/${travelPlace.place.imageName}`, + name: travelPlace.place.name, + openAt: travelPlace.place.openAt, + closeAt: travelPlace.place.closeAt, + startDate: travelPlace.startDate, + endDate: travelPlace.endDate, + categories: travelPlace.place.categories, + address: travelPlace.place.address, + done: travelPlace.done, + route: travelPlace.route, + place: { ...travelPlace.place, imageName: `${server_contants_1.ServerConstants.HOST}/places/${travelPlace.place.imageName}` }, + }; + }); + } + return res; + } + async createCustomRoute(email, lang, createRouteReq) { + const { start, end, placesIds } = createRouteReq; + if (placesIds.length === 0) + return []; + const place = await this.placeService.findOneAndTradAndAvailable(placesIds[0], lang); + const user = await this.userService.findOne(email); + const town = await this.townRepository.findOneBy({ townId: place.idTown }); + const places = []; + for (const idPlace of placesIds) { + const place = await this.placeService.findOneAndTradAndAvailable(idPlace, lang); + places.push(place); + } + const placesNotVisited = places.map((place) => { + return { + idPlace: place.idPlace, + openAt: place.openAt, + closeAt: place.closeAt, + categories: place.categories.map((category) => category.idCategory), + rating: 0, + }; + }); + const system = new recommendations_1.RecommendationsSystem([], placesNotVisited, start, end); + const chosen = system.recommend(); + const startDate = new Date(); + startDate.setHours(start); + const endDate = new Date(); + endDate.setHours(end); + const createRouteDto = { startDate, endDate, town, user }; + const idRoute = (await this.routeRepository.save(createRouteDto)).idRoute; + for (const curRecommended of chosen) { + const place = await this.placeService.findOneAndTradAndAvailable(curRecommended.idPlace, lang); + const endDate = new Date(); + endDate.setHours(curRecommended.closeAt); + endDate.setMinutes(0); + const startDate = new Date(); + startDate.setHours(curRecommended.openAt); + startDate.setMinutes(0); + const createTravelPlace = { + ...place, + done: false, + idRoute, + endDate, + startDate, + }; + await this.travelPlaceService.create(createTravelPlace); + } + return await this.getRouteById(idRoute, email, lang); + } +}; +exports.RouteService = RouteService; +exports.RouteService = RouteService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(route_entity_1.Route)), + __param(1, (0, typeorm_1.InjectRepository)(user_entity_1.User)), + __param(2, (0, typeorm_1.InjectRepository)(town_entity_1.Town)), + __metadata("design:paramtypes", [typeorm_2.Repository, + typeorm_2.Repository, + typeorm_2.Repository, + travel_place_service_1.TravelPlaceService, + place_service_1.PlaceService, + visited_service_1.VisitedService, + user_service_1.UserService, + typeorm_2.DataSource]) +], RouteService); +//# sourceMappingURL=route.service.js.map \ No newline at end of file diff --git a/backend/dist/route/route.service.js.map b/backend/dist/route/route.service.js.map new file mode 100644 index 00000000..4e48f1d2 --- /dev/null +++ b/backend/dist/route/route.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"route.service.js","sourceRoot":"","sources":["../../src/route/route.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/route/utils/math.d.ts b/backend/dist/route/utils/math.d.ts new file mode 100644 index 00000000..b462854a --- /dev/null +++ b/backend/dist/route/utils/math.d.ts @@ -0,0 +1,6 @@ +export interface DataFrame { + [key: number]: number[]; +} +export interface Series { + [index: number]: number; +} diff --git a/backend/dist/route/utils/math.js b/backend/dist/route/utils/math.js new file mode 100644 index 00000000..4edf4623 --- /dev/null +++ b/backend/dist/route/utils/math.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=math.js.map \ No newline at end of file diff --git a/backend/dist/route/utils/math.js.map b/backend/dist/route/utils/math.js.map new file mode 100644 index 00000000..ad6c45d7 --- /dev/null +++ b/backend/dist/route/utils/math.js.map @@ -0,0 +1 @@ +{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../src/route/utils/math.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/backend/dist/route/utils/recommendations.d.ts b/backend/dist/route/utils/recommendations.d.ts new file mode 100644 index 00000000..887c3c78 --- /dev/null +++ b/backend/dist/route/utils/recommendations.d.ts @@ -0,0 +1,14 @@ +import { RecommendPlace } from '../dto/recommend-route.dto'; +export declare class RecommendationsSystem { + private visited; + private candidates; + private start; + private end; + constructor(visited: RecommendPlace[], candidates: RecommendPlace[], start: number, end: number); + private getCategories; + private oneHotEncode; + private rankVisited; + private rankCandidates; + takeTopNValid(recommendations: [number, number][]): RecommendPlace[]; + recommend(): RecommendPlace[]; +} diff --git a/backend/dist/route/utils/recommendations.js b/backend/dist/route/utils/recommendations.js new file mode 100644 index 00000000..638dcc6f --- /dev/null +++ b/backend/dist/route/utils/recommendations.js @@ -0,0 +1,99 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RecommendationsSystem = void 0; +const sort_1 = require("./sort"); +class RecommendationsSystem { + constructor(visited, candidates, start, end) { + this.visited = []; + this.candidates = []; + this.start = 0; + this.end = 0; + this.visited = visited; + this.candidates = candidates; + this.start = start; + this.end = end; + } + getCategories(places) { + const categories = new Set(); + for (const place of places) { + for (const category of place.categories) { + categories.add(category); + } + } + return Array.from(categories); + } + oneHotEncode(categories, placesToEncode) { + const data = {}; + for (const category of categories) { + data[category] = []; + for (const place of placesToEncode) { + data[category].push(place.categories.includes(category) ? 1 : 0); + } + } + return data; + } + rankVisited(visited) { + const visitedCategories = this.getCategories(visited); + const visitedEncoded = this.oneHotEncode(visitedCategories, visited); + const grades = visited.map((place) => place.rating); + const dataframe = visitedEncoded; + const result = {}; + for (const category in dataframe) { + result[category] = dataframe[category].reduce((sum, value, index) => sum + value * grades[index], 0); + } + const sumResult = Object.values(result).reduce((a, b) => a + b, 0); + for (const category in result) { + result[category] /= sumResult; + } + return result; + } + rankCandidates(candidates, visited) { + const visitedCategories = Object.keys(visited).map(Number); + const candidatesEncoded = this.oneHotEncode(visitedCategories, candidates); + const dataframe = candidatesEncoded; + const result = candidates.map((_, i) => { + return visitedCategories.reduce((sum, category) => { + return sum + dataframe[category][i] * visited[category]; + }, 0); + }); + const ranked = candidates.map((place, i) => [place.idPlace, result[i]]); + ranked.sort(sort_1.customSort); + return ranked; + } + takeTopNValid(recommendations) { + const validRecommendations = []; + for (const [id] of recommendations) { + const place = this.candidates.find((candidate) => candidate.idPlace === id); + if (place) { + validRecommendations.push(place); + } + } + validRecommendations.sort(sort_1.sortByClose); + const chosen = []; + let currentTime = this.start; + for (const place of validRecommendations) { + const maxStart = Math.max(currentTime, place.openAt); + const minEnd = Math.min(this.end, place.closeAt); + if (minEnd - 2 >= maxStart) { + if ((currentTime + 2) % 24 <= this.end) { + place.openAt = Math.max(currentTime, place.openAt); + place.closeAt = (place.openAt + 2) % 24; + chosen.push(place); + currentTime = (currentTime + 2) % 24; + } + else { + break; + } + } + } + return chosen; + } + recommend() { + const visitedRanking = this.rankVisited(this.visited); + const candidatesRanked = this.rankCandidates(this.candidates, visitedRanking); + const chosen = this.takeTopNValid(candidatesRanked); + return chosen; + } +} +exports.RecommendationsSystem = RecommendationsSystem; +//# sourceMappingURL=recommendations.js.map \ No newline at end of file diff --git a/backend/dist/route/utils/recommendations.js.map b/backend/dist/route/utils/recommendations.js.map new file mode 100644 index 00000000..c2eede64 --- /dev/null +++ b/backend/dist/route/utils/recommendations.js.map @@ -0,0 +1 @@ +{"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../../src/route/utils/recommendations.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/route/utils/sort.d.ts b/backend/dist/route/utils/sort.d.ts new file mode 100644 index 00000000..cfb5428f --- /dev/null +++ b/backend/dist/route/utils/sort.d.ts @@ -0,0 +1,3 @@ +import { RecommendPlace } from '../dto/recommend-route.dto'; +export declare function customSort(a: [number, number], b: [number, number]): number; +export declare const sortByClose: (a: RecommendPlace, b: RecommendPlace) => number; diff --git a/backend/dist/route/utils/sort.js b/backend/dist/route/utils/sort.js new file mode 100644 index 00000000..ea52c918 --- /dev/null +++ b/backend/dist/route/utils/sort.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.sortByClose = exports.customSort = void 0; +function customSort(a, b) { + return b[1] - a[1]; +} +exports.customSort = customSort; +const sortByClose = (a, b) => { + return a.closeAt - b.closeAt; +}; +exports.sortByClose = sortByClose; +//# sourceMappingURL=sort.js.map \ No newline at end of file diff --git a/backend/dist/route/utils/sort.js.map b/backend/dist/route/utils/sort.js.map new file mode 100644 index 00000000..6fa03ea9 --- /dev/null +++ b/backend/dist/route/utils/sort.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../src/route/utils/sort.ts"],"names":[],"mappings":";;;AAEA,SAAgB,UAAU,CAAC,CAAmB,EAAE,CAAmB;IACjE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAFD,gCAEC;AAEM,MAAM,WAAW,GAAG,CAAC,CAAiB,EAAE,CAAiB,EAAE,EAAE;IAClE,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AAC/B,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB"} \ No newline at end of file diff --git a/backend/dist/shared/dto/payload-jwt.dto.d.ts b/backend/dist/shared/dto/payload-jwt.dto.d.ts new file mode 100644 index 00000000..cdf10ead --- /dev/null +++ b/backend/dist/shared/dto/payload-jwt.dto.d.ts @@ -0,0 +1,4 @@ +export declare class PayloadJwtDto { + email: string; + role: string; +} diff --git a/backend/dist/shared/dto/payload-jwt.dto.js b/backend/dist/shared/dto/payload-jwt.dto.js new file mode 100644 index 00000000..3e6c6e43 --- /dev/null +++ b/backend/dist/shared/dto/payload-jwt.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PayloadJwtDto = void 0; +class PayloadJwtDto { +} +exports.PayloadJwtDto = PayloadJwtDto; +//# sourceMappingURL=payload-jwt.dto.js.map \ No newline at end of file diff --git a/backend/dist/shared/dto/payload-jwt.dto.js.map b/backend/dist/shared/dto/payload-jwt.dto.js.map new file mode 100644 index 00000000..4de40b47 --- /dev/null +++ b/backend/dist/shared/dto/payload-jwt.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"payload-jwt.dto.js","sourceRoot":"","sources":["../../../src/shared/dto/payload-jwt.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;CAGzB;AAHD,sCAGC"} \ No newline at end of file diff --git a/backend/dist/shared/enum/admin-role.enum.d.ts b/backend/dist/shared/enum/admin-role.enum.d.ts new file mode 100644 index 00000000..f021686e --- /dev/null +++ b/backend/dist/shared/enum/admin-role.enum.d.ts @@ -0,0 +1,12 @@ +export declare enum ADMIN_ROLE { + ADMIN = "admin", + SUPERADMIN = "superadmin" +} +export declare const USER_ROLE = "user"; +export declare enum ALL_ROLES { + SUPER_ADMIN = "superadmin", + ADMIN = "admin", + USER = "user" +} +export declare const ADMIN_ROLES: ADMIN_ROLE[]; +export declare const SUPERADMIN_ROLES: ADMIN_ROLE[]; diff --git a/backend/dist/shared/enum/admin-role.enum.js b/backend/dist/shared/enum/admin-role.enum.js new file mode 100644 index 00000000..cbe10919 --- /dev/null +++ b/backend/dist/shared/enum/admin-role.enum.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SUPERADMIN_ROLES = exports.ADMIN_ROLES = exports.ALL_ROLES = exports.USER_ROLE = exports.ADMIN_ROLE = void 0; +var ADMIN_ROLE; +(function (ADMIN_ROLE) { + ADMIN_ROLE["ADMIN"] = "admin"; + ADMIN_ROLE["SUPERADMIN"] = "superadmin"; +})(ADMIN_ROLE || (exports.ADMIN_ROLE = ADMIN_ROLE = {})); +exports.USER_ROLE = 'user'; +var ALL_ROLES; +(function (ALL_ROLES) { + ALL_ROLES["SUPER_ADMIN"] = "superadmin"; + ALL_ROLES["ADMIN"] = "admin"; + ALL_ROLES["USER"] = "user"; +})(ALL_ROLES || (exports.ALL_ROLES = ALL_ROLES = {})); +exports.ADMIN_ROLES = [ADMIN_ROLE.ADMIN, ADMIN_ROLE.SUPERADMIN]; +exports.SUPERADMIN_ROLES = [ADMIN_ROLE.SUPERADMIN]; +//# sourceMappingURL=admin-role.enum.js.map \ No newline at end of file diff --git a/backend/dist/shared/enum/admin-role.enum.js.map b/backend/dist/shared/enum/admin-role.enum.js.map new file mode 100644 index 00000000..a22e33cd --- /dev/null +++ b/backend/dist/shared/enum/admin-role.enum.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin-role.enum.js","sourceRoot":"","sources":["../../../src/shared/enum/admin-role.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,uCAAyB,CAAA;AAC3B,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAEY,QAAA,SAAS,GAAG,MAAM,CAAC;AAEhC,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,uCAAmC,CAAA;IACnC,4BAAwB,CAAA;IACxB,0BAAgB,CAAA;AAClB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAEY,QAAA,WAAW,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AACxD,QAAA,gBAAgB,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC"} \ No newline at end of file diff --git a/backend/dist/shared/enum/languages.enum.d.ts b/backend/dist/shared/enum/languages.enum.d.ts new file mode 100644 index 00000000..fbb0e7d3 --- /dev/null +++ b/backend/dist/shared/enum/languages.enum.d.ts @@ -0,0 +1,4 @@ +export declare enum LANGUAGES { + EN = "en", + ES = "es" +} diff --git a/backend/dist/shared/enum/languages.enum.js b/backend/dist/shared/enum/languages.enum.js new file mode 100644 index 00000000..7bb15cb2 --- /dev/null +++ b/backend/dist/shared/enum/languages.enum.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LANGUAGES = void 0; +var LANGUAGES; +(function (LANGUAGES) { + LANGUAGES["EN"] = "en"; + LANGUAGES["ES"] = "es"; +})(LANGUAGES || (exports.LANGUAGES = LANGUAGES = {})); +//# sourceMappingURL=languages.enum.js.map \ No newline at end of file diff --git a/backend/dist/shared/enum/languages.enum.js.map b/backend/dist/shared/enum/languages.enum.js.map new file mode 100644 index 00000000..2eef8ef5 --- /dev/null +++ b/backend/dist/shared/enum/languages.enum.js.map @@ -0,0 +1 @@ +{"version":3,"file":"languages.enum.js","sourceRoot":"","sources":["../../../src/shared/enum/languages.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,sBAAS,CAAA;IACT,sBAAS,CAAA;AACX,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB"} \ No newline at end of file diff --git a/backend/dist/shared/enum/user-status.enum.d.ts b/backend/dist/shared/enum/user-status.enum.d.ts new file mode 100644 index 00000000..cf51a0b9 --- /dev/null +++ b/backend/dist/shared/enum/user-status.enum.d.ts @@ -0,0 +1,4 @@ +export declare enum UserStatus { + ACTIVE = "active", + INACTIVE = "inactive" +} diff --git a/backend/dist/shared/enum/user-status.enum.js b/backend/dist/shared/enum/user-status.enum.js new file mode 100644 index 00000000..3f3cf072 --- /dev/null +++ b/backend/dist/shared/enum/user-status.enum.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserStatus = void 0; +var UserStatus; +(function (UserStatus) { + UserStatus["ACTIVE"] = "active"; + UserStatus["INACTIVE"] = "inactive"; +})(UserStatus || (exports.UserStatus = UserStatus = {})); +//# sourceMappingURL=user-status.enum.js.map \ No newline at end of file diff --git a/backend/dist/shared/enum/user-status.enum.js.map b/backend/dist/shared/enum/user-status.enum.js.map new file mode 100644 index 00000000..335f43a4 --- /dev/null +++ b/backend/dist/shared/enum/user-status.enum.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-status.enum.js","sourceRoot":"","sources":["../../../src/shared/enum/user-status.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,mCAAqB,CAAA;AACvB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB"} \ No newline at end of file diff --git a/backend/dist/shared/interceptors/file-save.interceptor.d.ts b/backend/dist/shared/interceptors/file-save.interceptor.d.ts new file mode 100644 index 00000000..d3a33963 --- /dev/null +++ b/backend/dist/shared/interceptors/file-save.interceptor.d.ts @@ -0,0 +1 @@ +export declare const fileInterceptor: (fieldName: string, dest: string, validExt: string[]) => import("@nestjs/common").Type>; diff --git a/backend/dist/shared/interceptors/file-save.interceptor.js b/backend/dist/shared/interceptors/file-save.interceptor.js new file mode 100644 index 00000000..d48bc67f --- /dev/null +++ b/backend/dist/shared/interceptors/file-save.interceptor.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fileInterceptor = void 0; +const common_1 = require("@nestjs/common"); +const platform_express_1 = require("@nestjs/platform-express"); +const multer_1 = require("multer"); +const path_1 = require("path"); +const uuid_1 = require("uuid"); +const fileInterceptor = (fieldName, dest, validExt) => (0, platform_express_1.FileInterceptor)(fieldName, { + storage: (0, multer_1.diskStorage)({ + destination: (req, file, callback) => { + callback(null, dest); + }, + filename: (req, file, callback) => { + const extension = (0, path_1.extname)(file.originalname); + if (!validExt.includes(extension)) { + return callback(new common_1.BadRequestException('Only image files are allowed!'), ''); + } + const uniqueFilename = `${(0, uuid_1.v4)()}${extension}`; + callback(null, uniqueFilename); + }, + }), +}); +exports.fileInterceptor = fileInterceptor; +//# sourceMappingURL=file-save.interceptor.js.map \ No newline at end of file diff --git a/backend/dist/shared/interceptors/file-save.interceptor.js.map b/backend/dist/shared/interceptors/file-save.interceptor.js.map new file mode 100644 index 00000000..8c1a4f99 --- /dev/null +++ b/backend/dist/shared/interceptors/file-save.interceptor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-save.interceptor.js","sourceRoot":"","sources":["../../../src/shared/interceptors/file-save.interceptor.ts"],"names":[],"mappings":";;;AACA,2CAAqD;AACrD,+DAA2D;AAC3D,mCAAqC;AACrC,+BAA+B;AAC/B,+BAAoC;AAE7B,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAE,QAAkB,EAAE,EAAE,CACrF,IAAA,kCAAe,EAAC,SAAS,EAAE;IACzB,OAAO,EAAE,IAAA,oBAAW,EAAC;QACnB,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACnC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAChC,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,OAAO,QAAQ,CAAC,IAAI,4BAAmB,CAAC,+BAA+B,CAAC,EAAE,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,cAAc,GAAG,GAAG,IAAA,SAAM,GAAE,GAAG,SAAS,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;CACH,CAAC,CAAC;AAfQ,QAAA,eAAe,mBAevB"} \ No newline at end of file diff --git a/backend/dist/shared/pipe/file-validation.pipe.d.ts b/backend/dist/shared/pipe/file-validation.pipe.d.ts new file mode 100644 index 00000000..8ef575ef --- /dev/null +++ b/backend/dist/shared/pipe/file-validation.pipe.d.ts @@ -0,0 +1,4 @@ +import { PipeTransform } from '@nestjs/common'; +export declare class FileValidationPipe implements PipeTransform { + transform(value: any): any; +} diff --git a/backend/dist/shared/pipe/file-validation.pipe.js b/backend/dist/shared/pipe/file-validation.pipe.js new file mode 100644 index 00000000..2c375a8f --- /dev/null +++ b/backend/dist/shared/pipe/file-validation.pipe.js @@ -0,0 +1,24 @@ +"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.FileValidationPipe = void 0; +const common_1 = require("@nestjs/common"); +let FileValidationPipe = class FileValidationPipe { + transform(value) { + const size = value.size; + if (size > 1000000) { + throw new common_1.BadRequestException('File is too large'); + } + return value; + } +}; +exports.FileValidationPipe = FileValidationPipe; +exports.FileValidationPipe = FileValidationPipe = __decorate([ + (0, common_1.Injectable)() +], FileValidationPipe); +//# sourceMappingURL=file-validation.pipe.js.map \ No newline at end of file diff --git a/backend/dist/shared/pipe/file-validation.pipe.js.map b/backend/dist/shared/pipe/file-validation.pipe.js.map new file mode 100644 index 00000000..4b175e51 --- /dev/null +++ b/backend/dist/shared/pipe/file-validation.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-validation.pipe.js","sourceRoot":"","sources":["../../../src/shared/pipe/file-validation.pipe.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgF;AAGzE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,SAAS,CAAC,KAAU;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,4BAAmB,CAAC,mBAAmB,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AARY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;GACA,kBAAkB,CAQ9B"} \ No newline at end of file diff --git a/backend/dist/state/dto/create-state.dto.d.ts b/backend/dist/state/dto/create-state.dto.d.ts new file mode 100644 index 00000000..930fa167 --- /dev/null +++ b/backend/dist/state/dto/create-state.dto.d.ts @@ -0,0 +1,4 @@ +export declare class CreateStateDto { + name: string; + imageName: string; +} diff --git a/backend/dist/state/dto/create-state.dto.js b/backend/dist/state/dto/create-state.dto.js new file mode 100644 index 00000000..2faa0530 --- /dev/null +++ b/backend/dist/state/dto/create-state.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateStateDto = void 0; +class CreateStateDto { +} +exports.CreateStateDto = CreateStateDto; +//# sourceMappingURL=create-state.dto.js.map \ No newline at end of file diff --git a/backend/dist/state/dto/create-state.dto.js.map b/backend/dist/state/dto/create-state.dto.js.map new file mode 100644 index 00000000..b0b6070a --- /dev/null +++ b/backend/dist/state/dto/create-state.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-state.dto.js","sourceRoot":"","sources":["../../../src/state/dto/create-state.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;CAG1B;AAHD,wCAGC"} \ No newline at end of file diff --git a/backend/dist/state/dto/state-res.dto.d.ts b/backend/dist/state/dto/state-res.dto.d.ts new file mode 100644 index 00000000..3d616611 --- /dev/null +++ b/backend/dist/state/dto/state-res.dto.d.ts @@ -0,0 +1,5 @@ +export declare class StateResponseDto { + stateId: number; + name: string; + imageURL: string; +} diff --git a/backend/dist/state/dto/state-res.dto.js b/backend/dist/state/dto/state-res.dto.js new file mode 100644 index 00000000..62fe67f4 --- /dev/null +++ b/backend/dist/state/dto/state-res.dto.js @@ -0,0 +1,29 @@ +"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.StateResponseDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class StateResponseDto { +} +exports.StateResponseDto = StateResponseDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], StateResponseDto.prototype, "stateId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], StateResponseDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], StateResponseDto.prototype, "imageURL", void 0); +//# sourceMappingURL=state-res.dto.js.map \ No newline at end of file diff --git a/backend/dist/state/dto/state-res.dto.js.map b/backend/dist/state/dto/state-res.dto.js.map new file mode 100644 index 00000000..cef0f34a --- /dev/null +++ b/backend/dist/state/dto/state-res.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"state-res.dto.js","sourceRoot":"","sources":["../../../src/state/dto/state-res.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,gBAAgB;CAO5B;AAPD,4CAOC;AALC;IADC,IAAA,qBAAW,GAAE;;iDACE;AAEhB;IADC,IAAA,qBAAW,GAAE;;8CACD;AAEb;IADC,IAAA,qBAAW,GAAE;;kDACG"} \ No newline at end of file diff --git a/backend/dist/state/entities/state.entity.d.ts b/backend/dist/state/entities/state.entity.d.ts new file mode 100644 index 00000000..ff61c75b --- /dev/null +++ b/backend/dist/state/entities/state.entity.d.ts @@ -0,0 +1,7 @@ +import { Town } from 'src/town/entities/town.entity'; +export declare class State { + stateId: number; + towns: Town[]; + name: string; + imageName: string; +} diff --git a/backend/dist/state/entities/state.entity.js b/backend/dist/state/entities/state.entity.js new file mode 100644 index 00000000..99c4fb71 --- /dev/null +++ b/backend/dist/state/entities/state.entity.js @@ -0,0 +1,37 @@ +"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.State = void 0; +const town_entity_1 = require("../../town/entities/town.entity"); +const typeorm_1 = require("typeorm"); +let State = class State { +}; +exports.State = State; +__decorate([ + (0, typeorm_1.PrimaryColumn)(), + __metadata("design:type", Number) +], State.prototype, "stateId", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => town_entity_1.Town, (town) => town.townId), + __metadata("design:type", Array) +], State.prototype, "towns", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], State.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], State.prototype, "imageName", void 0); +exports.State = State = __decorate([ + (0, typeorm_1.Entity)() +], State); +//# sourceMappingURL=state.entity.js.map \ No newline at end of file diff --git a/backend/dist/state/entities/state.entity.js.map b/backend/dist/state/entities/state.entity.js.map new file mode 100644 index 00000000..11039ff0 --- /dev/null +++ b/backend/dist/state/entities/state.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"state.entity.js","sourceRoot":"","sources":["../../../src/state/entities/state.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAAqD;AACrD,qCAAmE;AAG5D,IAAM,KAAK,GAAX,MAAM,KAAK;CAYjB,CAAA;AAZY,sBAAK;AAEhB;IADC,IAAA,uBAAa,GAAE;;sCACA;AAGhB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;;oCAC/B;AAGd;IADC,IAAA,gBAAM,GAAE;;mCACI;AAGb;IADC,IAAA,gBAAM,GAAE;;wCACS;gBAXP,KAAK;IADjB,IAAA,gBAAM,GAAE;GACI,KAAK,CAYjB"} \ No newline at end of file diff --git a/backend/dist/state/state.controller.d.ts b/backend/dist/state/state.controller.d.ts new file mode 100644 index 00000000..0792eb3d --- /dev/null +++ b/backend/dist/state/state.controller.d.ts @@ -0,0 +1,7 @@ +import { StateService } from './state.service'; +import { StateResponseDto } from './dto/state-res.dto'; +export declare class StateController { + private readonly stateService; + constructor(stateService: StateService); + findAll(): Promise; +} diff --git a/backend/dist/state/state.controller.js b/backend/dist/state/state.controller.js new file mode 100644 index 00000000..c1705513 --- /dev/null +++ b/backend/dist/state/state.controller.js @@ -0,0 +1,42 @@ +"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.StateController = void 0; +const common_1 = require("@nestjs/common"); +const state_service_1 = require("./state.service"); +const swagger_1 = require("@nestjs/swagger"); +const state_res_dto_1 = require("./dto/state-res.dto"); +let StateController = class StateController { + constructor(stateService) { + this.stateService = stateService; + } + async findAll() { + const states = await this.stateService.findAll(); + return states; + } +}; +exports.StateController = StateController; +__decorate([ + (0, swagger_1.ApiCreatedResponse)({ + isArray: true, + type: state_res_dto_1.StateResponseDto, + }), + (0, common_1.Get)(), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], StateController.prototype, "findAll", null); +exports.StateController = StateController = __decorate([ + (0, common_1.Controller)('state'), + (0, swagger_1.ApiTags)('State'), + __metadata("design:paramtypes", [state_service_1.StateService]) +], StateController); +//# sourceMappingURL=state.controller.js.map \ No newline at end of file diff --git a/backend/dist/state/state.controller.js.map b/backend/dist/state/state.controller.js.map new file mode 100644 index 00000000..162fd633 --- /dev/null +++ b/backend/dist/state/state.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"state.controller.js","sourceRoot":"","sources":["../../src/state/state.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,mDAA+C;AAC/C,6CAA8D;AAC9D,uDAAuD;AAIhD,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAMrD,AAAN,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAuB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAXY,0CAAe;AAOpB;IALL,IAAA,4BAAkB,EAAC;QAClB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,gCAAgB;KACvB,CAAC;IACD,IAAA,YAAG,GAAE;;;;8CAIL;0BAVU,eAAe;IAF3B,IAAA,mBAAU,EAAC,OAAO,CAAC;IACnB,IAAA,iBAAO,EAAC,OAAO,CAAC;qCAE4B,4BAAY;GAD5C,eAAe,CAW3B"} \ No newline at end of file diff --git a/backend/dist/state/state.module.d.ts b/backend/dist/state/state.module.d.ts new file mode 100644 index 00000000..e5350807 --- /dev/null +++ b/backend/dist/state/state.module.d.ts @@ -0,0 +1,2 @@ +export declare class StateModule { +} diff --git a/backend/dist/state/state.module.js b/backend/dist/state/state.module.js new file mode 100644 index 00000000..74fad832 --- /dev/null +++ b/backend/dist/state/state.module.js @@ -0,0 +1,26 @@ +"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.StateModule = void 0; +const common_1 = require("@nestjs/common"); +const state_service_1 = require("./state.service"); +const state_entity_1 = require("./entities/state.entity"); +const typeorm_1 = require("@nestjs/typeorm"); +const state_controller_1 = require("./state.controller"); +let StateModule = class StateModule { +}; +exports.StateModule = StateModule; +exports.StateModule = StateModule = __decorate([ + (0, common_1.Module)({ + controllers: [state_controller_1.StateController], + providers: [state_service_1.StateService], + imports: [typeorm_1.TypeOrmModule.forFeature([state_entity_1.State])], + exports: [state_service_1.StateService], + }) +], StateModule); +//# sourceMappingURL=state.module.js.map \ No newline at end of file diff --git a/backend/dist/state/state.module.js.map b/backend/dist/state/state.module.js.map new file mode 100644 index 00000000..58f0138d --- /dev/null +++ b/backend/dist/state/state.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"state.module.js","sourceRoot":"","sources":["../../src/state/state.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAC/C,0DAAgD;AAChD,6CAAgD;AAChD,yDAAqD;AAQ9C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IANvB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,oBAAK,CAAC,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"} \ No newline at end of file diff --git a/backend/dist/state/state.service.d.ts b/backend/dist/state/state.service.d.ts new file mode 100644 index 00000000..63eb550d --- /dev/null +++ b/backend/dist/state/state.service.d.ts @@ -0,0 +1,15 @@ +import { CreateStateDto } from './dto/create-state.dto'; +import { State } from './entities/state.entity'; +import { Repository } from 'typeorm'; +import { StateResponseDto } from './dto/state-res.dto'; +export declare class StateService { + private stateRepository; + constructor(stateRepository: Repository); + create(createStateDto: CreateStateDto): Promise; + findAll(): Promise>; + findOne(id: number): Promise<{ + stateId: number; + name: string; + imageURL: string; + }>; +} diff --git a/backend/dist/state/state.service.js b/backend/dist/state/state.service.js new file mode 100644 index 00000000..fc71c4cd --- /dev/null +++ b/backend/dist/state/state.service.js @@ -0,0 +1,56 @@ +"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.StateService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const state_entity_1 = require("./entities/state.entity"); +const typeorm_2 = require("typeorm"); +const server_contants_1 = require("../constants/server.contants"); +let StateService = class StateService { + constructor(stateRepository) { + this.stateRepository = stateRepository; + } + async create(createStateDto) { + await this.stateRepository.save(createStateDto); + } + async findAll() { + const states = await this.stateRepository.find(); + const statesResponse = states.map(({ imageName, name, stateId }) => { + return { + stateId, + name, + imageURL: `${server_contants_1.ServerConstants.HOST}/states/${imageName}`, + }; + }); + return statesResponse; + } + async findOne(id) { + const state = await this.stateRepository.findOneBy({ stateId: id }); + if (!state) + return null; + return { + stateId: state.stateId, + name: state.name, + imageURL: `${server_contants_1.ServerConstants.HOST}/states/${state.imageName}`, + }; + } +}; +exports.StateService = StateService; +exports.StateService = StateService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(state_entity_1.State)), + __metadata("design:paramtypes", [typeorm_2.Repository]) +], StateService); +//# sourceMappingURL=state.service.js.map \ No newline at end of file diff --git a/backend/dist/state/state.service.js.map b/backend/dist/state/state.service.js.map new file mode 100644 index 00000000..5a903158 --- /dev/null +++ b/backend/dist/state/state.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"state.service.js","sourceRoot":"","sources":["../../src/state/state.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6CAAmD;AACnD,0DAAgD;AAChD,qCAAqC;AACrC,kEAAgE;AAIzD,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YAA6C,eAAkC;QAAlC,oBAAe,GAAf,eAAe,CAAmB;IAAG,CAAC;IAEnF,KAAK,CAAC,MAAM,CAAC,cAA8B;QACzC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,cAAc,GAA4B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC1F,OAAO;gBACL,OAAO;gBACP,IAAI;gBACJ,QAAQ,EAAE,GAAG,iCAAe,CAAC,IAAI,WAAW,SAAS,EAAE;aACxD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,GAAG,iCAAe,CAAC,IAAI,WAAW,KAAK,CAAC,SAAS,EAAE;SAC9D,CAAC;IACJ,CAAC;CACF,CAAA;AA7BY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,0BAAgB,EAAC,oBAAK,CAAC,CAAA;qCAA0B,oBAAU;GAD7D,YAAY,CA6BxB"} \ No newline at end of file diff --git a/backend/dist/town/dto/create-town-trad.dto.d.ts b/backend/dist/town/dto/create-town-trad.dto.d.ts new file mode 100644 index 00000000..edbe3f1d --- /dev/null +++ b/backend/dist/town/dto/create-town-trad.dto.d.ts @@ -0,0 +1,6 @@ +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class CreateTownTraductionDto { + townId: number; + language: LANGUAGES; + description: string; +} diff --git a/backend/dist/town/dto/create-town-trad.dto.js b/backend/dist/town/dto/create-town-trad.dto.js new file mode 100644 index 00000000..2494969f --- /dev/null +++ b/backend/dist/town/dto/create-town-trad.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateTownTraductionDto = void 0; +class CreateTownTraductionDto { +} +exports.CreateTownTraductionDto = CreateTownTraductionDto; +//# sourceMappingURL=create-town-trad.dto.js.map \ No newline at end of file diff --git a/backend/dist/town/dto/create-town-trad.dto.js.map b/backend/dist/town/dto/create-town-trad.dto.js.map new file mode 100644 index 00000000..146b339f --- /dev/null +++ b/backend/dist/town/dto/create-town-trad.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-town-trad.dto.js","sourceRoot":"","sources":["../../../src/town/dto/create-town-trad.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,uBAAuB;CAInC;AAJD,0DAIC"} \ No newline at end of file diff --git a/backend/dist/town/dto/create-town.dto.d.ts b/backend/dist/town/dto/create-town.dto.d.ts new file mode 100644 index 00000000..709e5d03 --- /dev/null +++ b/backend/dist/town/dto/create-town.dto.d.ts @@ -0,0 +1,7 @@ +export declare class CreateTownDto { + name: string; + descriptionES: string; + descriptionEN: string; + imageName: string; + state: number; +} diff --git a/backend/dist/town/dto/create-town.dto.js b/backend/dist/town/dto/create-town.dto.js new file mode 100644 index 00000000..d20ebce4 --- /dev/null +++ b/backend/dist/town/dto/create-town.dto.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateTownDto = void 0; +class CreateTownDto { + constructor() { + this.imageName = 'default.jpg'; + } +} +exports.CreateTownDto = CreateTownDto; +//# sourceMappingURL=create-town.dto.js.map \ No newline at end of file diff --git a/backend/dist/town/dto/create-town.dto.js.map b/backend/dist/town/dto/create-town.dto.js.map new file mode 100644 index 00000000..61d7d45a --- /dev/null +++ b/backend/dist/town/dto/create-town.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-town.dto.js","sourceRoot":"","sources":["../../../src/town/dto/create-town.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IAA1B;QAIE,cAAS,GAAW,aAAa,CAAC;IAEpC,CAAC;CAAA;AAND,sCAMC"} \ No newline at end of file diff --git a/backend/dist/town/dto/createTownReq.dto.d.ts b/backend/dist/town/dto/createTownReq.dto.d.ts new file mode 100644 index 00000000..53d681cf --- /dev/null +++ b/backend/dist/town/dto/createTownReq.dto.d.ts @@ -0,0 +1,8 @@ +import { Binary } from 'typeorm'; +export declare class CreateTownReqDto { + name: string; + descriptionES: string; + descriptionEN: string; + image: Binary; + state: number; +} diff --git a/backend/dist/town/dto/createTownReq.dto.js b/backend/dist/town/dto/createTownReq.dto.js new file mode 100644 index 00000000..fe75f071 --- /dev/null +++ b/backend/dist/town/dto/createTownReq.dto.js @@ -0,0 +1,44 @@ +"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.CreateTownReqDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const typeorm_1 = require("typeorm"); +class CreateTownReqDto { +} +exports.CreateTownReqDto = CreateTownReqDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateTownReqDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + type: String, + description: 'Language content for Spanish (es)', + }), + __metadata("design:type", String) +], CreateTownReqDto.prototype, "descriptionES", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + type: String, + description: 'Language content for English (en)', + }), + __metadata("design:type", String) +], CreateTownReqDto.prototype, "descriptionEN", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ type: 'string', format: 'binary' }), + __metadata("design:type", typeorm_1.Binary) +], CreateTownReqDto.prototype, "image", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], CreateTownReqDto.prototype, "state", void 0); +//# sourceMappingURL=createTownReq.dto.js.map \ No newline at end of file diff --git a/backend/dist/town/dto/createTownReq.dto.js.map b/backend/dist/town/dto/createTownReq.dto.js.map new file mode 100644 index 00000000..b90e6350 --- /dev/null +++ b/backend/dist/town/dto/createTownReq.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createTownReq.dto.js","sourceRoot":"","sources":["../../../src/town/dto/createTownReq.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qCAAiC;AAEjC,MAAa,gBAAgB;CAoB5B;AApBD,4CAoBC;AAlBC;IADC,IAAA,qBAAW,GAAE;;8CACD;AAMb;IAJC,IAAA,qBAAW,EAAC;QACX,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,mCAAmC;KACjD,CAAC;;uDACoB;AAMtB;IAJC,IAAA,qBAAW,EAAC;QACX,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,mCAAmC;KACjD,CAAC;;uDACoB;AAGtB;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;8BAC3C,gBAAM;+CAAC;AAEd;IADC,IAAA,qBAAW,GAAE;;+CACA"} \ No newline at end of file diff --git a/backend/dist/town/dto/town-res.dto.d.ts b/backend/dist/town/dto/town-res.dto.d.ts new file mode 100644 index 00000000..0e4c15bc --- /dev/null +++ b/backend/dist/town/dto/town-res.dto.d.ts @@ -0,0 +1,7 @@ +export declare class TownResDto { + townId: number; + name: string; + description: string; + imageName: string; + stateId: number; +} diff --git a/backend/dist/town/dto/town-res.dto.js b/backend/dist/town/dto/town-res.dto.js new file mode 100644 index 00000000..fc426c69 --- /dev/null +++ b/backend/dist/town/dto/town-res.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TownResDto = void 0; +class TownResDto { +} +exports.TownResDto = TownResDto; +//# sourceMappingURL=town-res.dto.js.map \ No newline at end of file diff --git a/backend/dist/town/dto/town-res.dto.js.map b/backend/dist/town/dto/town-res.dto.js.map new file mode 100644 index 00000000..886190e3 --- /dev/null +++ b/backend/dist/town/dto/town-res.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"town-res.dto.js","sourceRoot":"","sources":["../../../src/town/dto/town-res.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;CAMtB;AAND,gCAMC"} \ No newline at end of file diff --git a/backend/dist/town/dto/update-town.dto.d.ts b/backend/dist/town/dto/update-town.dto.d.ts new file mode 100644 index 00000000..27ba5872 --- /dev/null +++ b/backend/dist/town/dto/update-town.dto.d.ts @@ -0,0 +1,5 @@ +export declare class UpdateTownDto { + name: string; + imageName: string; + state: number; +} diff --git a/backend/dist/town/dto/update-town.dto.js b/backend/dist/town/dto/update-town.dto.js new file mode 100644 index 00000000..8e56d62e --- /dev/null +++ b/backend/dist/town/dto/update-town.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateTownDto = void 0; +class UpdateTownDto { +} +exports.UpdateTownDto = UpdateTownDto; +//# sourceMappingURL=update-town.dto.js.map \ No newline at end of file diff --git a/backend/dist/town/dto/update-town.dto.js.map b/backend/dist/town/dto/update-town.dto.js.map new file mode 100644 index 00000000..6ee7fd81 --- /dev/null +++ b/backend/dist/town/dto/update-town.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-town.dto.js","sourceRoot":"","sources":["../../../src/town/dto/update-town.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;CAIzB;AAJD,sCAIC"} \ No newline at end of file diff --git a/backend/dist/town/entities/town-traduction.entity.d.ts b/backend/dist/town/entities/town-traduction.entity.d.ts new file mode 100644 index 00000000..3a2b3cea --- /dev/null +++ b/backend/dist/town/entities/town-traduction.entity.d.ts @@ -0,0 +1,6 @@ +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +export declare class TownTraduction { + townId: number; + language: LANGUAGES; + description: string; +} diff --git a/backend/dist/town/entities/town-traduction.entity.js b/backend/dist/town/entities/town-traduction.entity.js new file mode 100644 index 00000000..4c0056a0 --- /dev/null +++ b/backend/dist/town/entities/town-traduction.entity.js @@ -0,0 +1,35 @@ +"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.TownTraduction = void 0; +const typeorm_1 = require("typeorm"); +const town_entity_1 = require("./town.entity"); +const languages_enum_1 = require("../../shared/enum/languages.enum"); +let TownTraduction = class TownTraduction { +}; +exports.TownTraduction = TownTraduction; +__decorate([ + (0, typeorm_1.PrimaryColumn)({ name: 'townId' }), + (0, typeorm_1.ManyToOne)(() => town_entity_1.Town, (town) => town.townId), + __metadata("design:type", Number) +], TownTraduction.prototype, "townId", void 0); +__decorate([ + (0, typeorm_1.PrimaryColumn)(), + __metadata("design:type", String) +], TownTraduction.prototype, "language", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 1024 }), + __metadata("design:type", String) +], TownTraduction.prototype, "description", void 0); +exports.TownTraduction = TownTraduction = __decorate([ + (0, typeorm_1.Entity)() +], TownTraduction); +//# sourceMappingURL=town-traduction.entity.js.map \ No newline at end of file diff --git a/backend/dist/town/entities/town-traduction.entity.js.map b/backend/dist/town/entities/town-traduction.entity.js.map new file mode 100644 index 00000000..318afc79 --- /dev/null +++ b/backend/dist/town/entities/town-traduction.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"town-traduction.entity.js","sourceRoot":"","sources":["../../../src/town/entities/town-traduction.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAmE;AACnE,+CAAqC;AACrC,qEAA2D;AAEpD,IAAM,cAAc,GAApB,MAAM,cAAc;CAS1B,CAAA;AATY,wCAAc;AAGzB;IAFC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;;8CAC9B;AAEf;IADC,IAAA,uBAAa,GAAE;;gDACI;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;mDACL;yBART,cAAc;IAD1B,IAAA,gBAAM,GAAE;GACI,cAAc,CAS1B"} \ No newline at end of file diff --git a/backend/dist/town/entities/town.entity.d.ts b/backend/dist/town/entities/town.entity.d.ts new file mode 100644 index 00000000..686c90e8 --- /dev/null +++ b/backend/dist/town/entities/town.entity.d.ts @@ -0,0 +1,10 @@ +import { Place } from 'src/place/entities/place.entity'; +import { State } from 'src/state/entities/state.entity'; +export declare class Town { + townId: number; + state: State; + places: Place[]; + name: string; + imageName: string; + active: boolean; +} diff --git a/backend/dist/town/entities/town.entity.js b/backend/dist/town/entities/town.entity.js new file mode 100644 index 00000000..d9aacb09 --- /dev/null +++ b/backend/dist/town/entities/town.entity.js @@ -0,0 +1,49 @@ +"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.Town = void 0; +const place_entity_1 = require("../../place/entities/place.entity"); +const state_entity_1 = require("../../state/entities/state.entity"); +const typeorm_1 = require("typeorm"); +let Town = class Town { + constructor() { + this.active = true; + } +}; +exports.Town = Town; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], Town.prototype, "townId", void 0); +__decorate([ + (0, typeorm_1.ManyToOne)(() => state_entity_1.State, (state) => state.stateId, { nullable: false, eager: true }), + __metadata("design:type", state_entity_1.State) +], Town.prototype, "state", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => place_entity_1.Place, (place) => place.town), + __metadata("design:type", Array) +], Town.prototype, "places", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Town.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Town.prototype, "imageName", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: true }), + __metadata("design:type", Boolean) +], Town.prototype, "active", void 0); +exports.Town = Town = __decorate([ + (0, typeorm_1.Entity)() +], Town); +//# sourceMappingURL=town.entity.js.map \ No newline at end of file diff --git a/backend/dist/town/entities/town.entity.js.map b/backend/dist/town/entities/town.entity.js.map new file mode 100644 index 00000000..12669090 --- /dev/null +++ b/backend/dist/town/entities/town.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"town.entity.js","sourceRoot":"","sources":["../../../src/town/entities/town.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAwD;AACxD,oEAAwD;AACxD,qCAAuF;AAEhF,IAAM,IAAI,GAAV,MAAM,IAAI;IAAV;QAiBL,WAAM,GAAY,IAAI,CAAC;IACzB,CAAC;CAAA,CAAA;AAlBY,oBAAI;AAEf;IADC,IAAA,gCAAsB,GAAE;;oCACV;AAGf;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;8BAC5E,oBAAK;mCAAC;AAGb;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;;oCAC9B;AAGhB;IADC,IAAA,gBAAM,GAAE;;kCACI;AAGb;IADC,IAAA,gBAAM,GAAE;;uCACS;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;oCACH;eAjBZ,IAAI;IADhB,IAAA,gBAAM,GAAE;GACI,IAAI,CAkBhB"} \ No newline at end of file diff --git a/backend/dist/town/town.controller.d.ts b/backend/dist/town/town.controller.d.ts new file mode 100644 index 00000000..f5824667 --- /dev/null +++ b/backend/dist/town/town.controller.d.ts @@ -0,0 +1,22 @@ +import { TownService } from './town.service'; +import { CreateTownReqDto } from './dto/createTownReq.dto'; +import { CustomAdminRequest } from 'src/auth/admin/interface/customAdminReq'; +export declare class TownController { + private readonly townService; + constructor(townService: TownService); + create(file: any, createTownReqDto: CreateTownReqDto): Promise<{ + message: string; + }>; + findTownsByState(stateId: number, lang: any): Promise; + update(idTown: number, file: any, createTownReqDto: CreateTownReqDto, req: CustomAdminRequest): Promise<{ + message: string; + }>; + findOne(idTown: number): Promise<{ + townId: number; + name: string; + descriptionEN: string; + descriptionES: string; + imageName: string; + stateId: number; + }>; +} diff --git a/backend/dist/town/town.controller.js b/backend/dist/town/town.controller.js new file mode 100644 index 00000000..02c3bf06 --- /dev/null +++ b/backend/dist/town/town.controller.js @@ -0,0 +1,135 @@ +"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.TownController = void 0; +const common_1 = require("@nestjs/common"); +const town_service_1 = require("./town.service"); +const swagger_1 = require("@nestjs/swagger"); +const file_validation_pipe_1 = require("../shared/pipe/file-validation.pipe"); +const file_save_interceptor_1 = require("../shared/interceptors/file-save.interceptor"); +const role_decorator_1 = require("../auth/role.decorator"); +const admin_role_enum_1 = require("../shared/enum/admin-role.enum"); +const createTownReq_dto_1 = require("./dto/createTownReq.dto"); +const authAdmin_guard_1 = require("../auth/admin/authAdmin.guard"); +let TownController = class TownController { + constructor(townService) { + this.townService = townService; + } + async create(file, createTownReqDto) { + try { + const createTownDto = { + name: createTownReqDto.name, + imageName: file.filename, + descriptionEN: createTownReqDto.descriptionEN, + descriptionES: createTownReqDto.descriptionES, + state: createTownReqDto.state, + }; + await this.townService.create(createTownDto); + return { message: 'Town created successfully' }; + } + catch (error) { + throw error; + } + } + async findTownsByState(stateId, lang) { + try { + stateId = parseInt(stateId.toString()); + return await this.townService.findTownsByState(stateId, lang); + } + catch (error) { + throw error; + } + } + async update(idTown, file, createTownReqDto, req) { + try { + if (req.admin.idTown.townId != idTown) { + throw new common_1.UnauthorizedException('This is not your assigned town'); + } + const updateTownDto = { + name: createTownReqDto.name, + imageName: file.filename, + descriptionEN: createTownReqDto.descriptionEN, + descriptionES: createTownReqDto.descriptionES, + state: createTownReqDto.state, + }; + await this.townService.update(idTown, updateTownDto); + return { message: 'Town updated successfully' }; + } + catch (error) { + throw error; + } + } + async findOne(idTown) { + try { + return await this.townService.findOne(idTown); + } + catch (error) { + throw error; + } + } +}; +exports.TownController = TownController; +__decorate([ + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)(admin_role_enum_1.SUPERADMIN_ROLES), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiBody)({ type: createTownReq_dto_1.CreateTownReqDto }), + (0, swagger_1.ApiConsumes)('multipart/form-data'), + (0, common_1.Post)('town'), + (0, common_1.UseInterceptors)((0, file_save_interceptor_1.fileInterceptor)('image', 'static/towns/', ['.jpg', '.jpeg', '.png'])), + __param(0, (0, common_1.UploadedFile)(new file_validation_pipe_1.FileValidationPipe())), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, createTownReq_dto_1.CreateTownReqDto]), + __metadata("design:returntype", Promise) +], TownController.prototype, "create", null); +__decorate([ + (0, swagger_1.ApiParam)({ name: 'stateId', type: Number }), + (0, swagger_1.ApiQuery)({ name: 'lang', type: String }), + (0, common_1.Get)('state/:stateId/town'), + __param(0, (0, common_1.Param)('stateId')), + __param(1, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, Object]), + __metadata("design:returntype", Promise) +], TownController.prototype, "findTownsByState", null); +__decorate([ + (0, common_1.UseGuards)(authAdmin_guard_1.AuthAdminGuard), + (0, role_decorator_1.Roles)([admin_role_enum_1.ALL_ROLES.ADMIN]), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiBody)({ type: createTownReq_dto_1.CreateTownReqDto }), + (0, swagger_1.ApiConsumes)('multipart/form-data'), + (0, common_1.Patch)('town/:idTown'), + (0, common_1.UseInterceptors)((0, file_save_interceptor_1.fileInterceptor)('image', 'static/towns/', ['.jpg', '.jpeg', '.png'])), + __param(0, (0, common_1.Param)('idTown')), + __param(1, (0, common_1.UploadedFile)(new file_validation_pipe_1.FileValidationPipe())), + __param(2, (0, common_1.Body)()), + __param(3, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number, Object, createTownReq_dto_1.CreateTownReqDto, Object]), + __metadata("design:returntype", Promise) +], TownController.prototype, "update", null); +__decorate([ + (0, common_1.Get)('town/:idTown'), + __param(0, (0, common_1.Param)('idTown')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number]), + __metadata("design:returntype", Promise) +], TownController.prototype, "findOne", null); +exports.TownController = TownController = __decorate([ + (0, common_1.Controller)(), + (0, swagger_1.ApiTags)('Pueblos'), + __metadata("design:paramtypes", [town_service_1.TownService]) +], TownController); +//# sourceMappingURL=town.controller.js.map \ No newline at end of file diff --git a/backend/dist/town/town.controller.js.map b/backend/dist/town/town.controller.js.map new file mode 100644 index 00000000..c3b1b39e --- /dev/null +++ b/backend/dist/town/town.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"town.controller.js","sourceRoot":"","sources":["../../src/town/town.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/town/town.module.d.ts b/backend/dist/town/town.module.d.ts new file mode 100644 index 00000000..c79dca7f --- /dev/null +++ b/backend/dist/town/town.module.d.ts @@ -0,0 +1,2 @@ +export declare class TownModule { +} diff --git a/backend/dist/town/town.module.js b/backend/dist/town/town.module.js new file mode 100644 index 00000000..1b5dd64e --- /dev/null +++ b/backend/dist/town/town.module.js @@ -0,0 +1,35 @@ +"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.TownModule = void 0; +const common_1 = require("@nestjs/common"); +const town_service_1 = require("./town.service"); +const town_controller_1 = require("./town.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const town_entity_1 = require("./entities/town.entity"); +const state_service_1 = require("../state/state.service"); +const state_entity_1 = require("../state/entities/state.entity"); +const town_traduction_entity_1 = require("./entities/town-traduction.entity"); +const authAdmin_service_1 = require("../auth/admin/authAdmin.service"); +const admin_service_1 = require("../admin/admin.service"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const admin_entity_1 = require("../admin/entities/admin.entity"); +const admin_reset_code_entity_1 = require("../auth/admin/entitites/admin-reset-code.entity"); +let TownModule = class TownModule { +}; +exports.TownModule = TownModule; +exports.TownModule = TownModule = __decorate([ + (0, common_1.Module)({ + controllers: [town_controller_1.TownController], + providers: [town_service_1.TownService, state_service_1.StateService, typeorm_1.TypeOrmModule, authAdmin_service_1.AuthAdminService, admin_service_1.AdminService, jwt_1.JwtService, encryption_service_1.EncryptionService], + imports: [typeorm_1.TypeOrmModule.forFeature([town_entity_1.Town, state_entity_1.State, town_traduction_entity_1.TownTraduction, admin_entity_1.Admin, admin_reset_code_entity_1.AdminResetCode]), typeorm_1.TypeOrmModule], + exports: [town_service_1.TownService], + }) +], TownModule); +//# sourceMappingURL=town.module.js.map \ No newline at end of file diff --git a/backend/dist/town/town.module.js.map b/backend/dist/town/town.module.js.map new file mode 100644 index 00000000..9deeafb2 --- /dev/null +++ b/backend/dist/town/town.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"town.module.js","sourceRoot":"","sources":["../../src/town/town.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,iDAA6C;AAC7C,uDAAmD;AACnD,6CAAgD;AAChD,wDAA8C;AAC9C,0DAAuD;AACvD,iEAAwD;AACxD,8EAAmE;AACnE,uEAAoE;AACpE,0DAAuD;AACvD,qCAAyC;AACzC,8EAA2E;AAC3E,iEAAwD;AACxD,6FAAkF;AAQ3E,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IANtB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,gCAAc,CAAC;QAC7B,SAAS,EAAE,CAAC,0BAAW,EAAE,4BAAY,EAAE,uBAAa,EAAE,oCAAgB,EAAE,4BAAY,EAAE,gBAAU,EAAE,sCAAiB,CAAC;QACpH,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,kBAAI,EAAE,oBAAK,EAAE,uCAAc,EAAE,oBAAK,EAAE,wCAAc,CAAC,CAAC,EAAE,uBAAa,CAAC;QACxG,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,UAAU,CAAG"} \ No newline at end of file diff --git a/backend/dist/town/town.service.d.ts b/backend/dist/town/town.service.d.ts new file mode 100644 index 00000000..109293fb --- /dev/null +++ b/backend/dist/town/town.service.d.ts @@ -0,0 +1,25 @@ +import { CreateTownDto } from './dto/create-town.dto'; +import { Repository } from 'typeorm'; +import { Town } from './entities/town.entity'; +import { StateService } from 'src/state/state.service'; +import { TownTraduction } from './entities/town-traduction.entity'; +import { DataSource } from 'typeorm'; +import { TownResDto } from './dto/town-res.dto'; +export declare class TownService { + private townRepository; + private townTradRepository; + private dataSource; + private state; + constructor(townRepository: Repository, townTradRepository: Repository, dataSource: DataSource, state: StateService); + create(createTownDto: CreateTownDto): Promise; + findTownsByState(stateId: number, lang: string): Promise; + update(townId: number, updateTownDto: CreateTownDto): Promise; + findOne(idTown: number): Promise<{ + townId: number; + name: string; + descriptionEN: string; + descriptionES: string; + imageName: string; + stateId: number; + }>; +} diff --git a/backend/dist/town/town.service.js b/backend/dist/town/town.service.js new file mode 100644 index 00000000..d1da2cd5 --- /dev/null +++ b/backend/dist/town/town.service.js @@ -0,0 +1,124 @@ +"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.TownService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("typeorm"); +const town_entity_1 = require("./entities/town.entity"); +const typeorm_2 = require("@nestjs/typeorm"); +const state_service_1 = require("../state/state.service"); +const town_traduction_entity_1 = require("./entities/town-traduction.entity"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +const typeorm_3 = require("typeorm"); +const server_contants_1 = require("../constants/server.contants"); +let TownService = class TownService { + constructor(townRepository, townTradRepository, dataSource, state) { + this.townRepository = townRepository; + this.townTradRepository = townTradRepository; + this.dataSource = dataSource; + this.state = state; + } + async create(createTownDto) { + const state = await this.state.findOne(createTownDto.state); + if (!state) + throw new common_1.BadRequestException('State does not exist'); + const town = await this.townRepository.save({ ...createTownDto, state }); + const createTownTradDtoEN = { + townId: town.townId, + language: languages_enum_1.LANGUAGES.EN, + description: createTownDto.descriptionEN, + }; + const createTownTradDtoES = { + townId: town.townId, + language: languages_enum_1.LANGUAGES.ES, + description: createTownDto.descriptionES, + }; + await this.townTradRepository.save(createTownTradDtoES); + await this.townTradRepository.save(createTownTradDtoEN); + } + async findTownsByState(stateId, lang) { + const ans = await this.dataSource + .getRepository(town_traduction_entity_1.TownTraduction) + .createQueryBuilder('townTrad') + .leftJoin('townTrad.townId', 'town') + .select([ + 'town.townId AS townId', + 'town.name AS name', + 'town.imageName AS imageName', + 'townTrad.language AS language', + 'townTrad.description AS description', + 'town.state AS stateId', + ]) + .where('town.state = :stateId', { stateId }) + .andWhere('townTrad.language = :language', { language: lang }) + .andWhere('town.active = true') + .getRawMany(); + return ans.map((item) => ({ + townId: item.townId, + name: item.name, + imageName: `${server_contants_1.ServerConstants.HOST}/towns/${item.imageName}`, + description: item.description, + stateId: item.stateId, + })); + } + async update(townId, updateTownDto) { + const state = await this.state.findOne(updateTownDto.state); + if (!state) + throw new common_1.BadRequestException('State does not exist'); + const updateTown = { + name: updateTownDto.name, + imageName: updateTownDto.imageName, + state: state.stateId, + }; + await this.townRepository.update({ townId }, { ...updateTown, state: state }); + const createTownTradDtoEN = { + townId: townId, + language: languages_enum_1.LANGUAGES.EN, + description: updateTownDto.descriptionEN, + }; + const createTownTradDtoES = { + townId: townId, + language: languages_enum_1.LANGUAGES.ES, + description: updateTownDto.descriptionES, + }; + await this.townTradRepository.update({ townId, language: languages_enum_1.LANGUAGES.ES }, createTownTradDtoES); + await this.townTradRepository.update({ townId, language: languages_enum_1.LANGUAGES.EN }, createTownTradDtoEN); + } + async findOne(idTown) { + const town = await this.townRepository.findOneByOrFail({ townId: idTown }); + const tradEN = await this.townTradRepository.findOneByOrFail({ townId: idTown, language: languages_enum_1.LANGUAGES.EN }); + const tradES = await this.townTradRepository.findOneByOrFail({ townId: idTown, language: languages_enum_1.LANGUAGES.ES }); + console.log(town); + return { + townId: town.townId, + name: town.name, + descriptionEN: tradEN.description, + descriptionES: tradES.description, + imageName: `${server_contants_1.ServerConstants.HOST}/towns/${town.imageName}`, + stateId: town.state.stateId, + }; + } +}; +exports.TownService = TownService; +exports.TownService = TownService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_2.InjectRepository)(town_entity_1.Town)), + __param(1, (0, typeorm_2.InjectRepository)(town_traduction_entity_1.TownTraduction)), + __param(2, (0, typeorm_2.InjectDataSource)()), + __metadata("design:paramtypes", [typeorm_1.Repository, + typeorm_1.Repository, + typeorm_3.DataSource, + state_service_1.StateService]) +], TownService); +//# sourceMappingURL=town.service.js.map \ No newline at end of file diff --git a/backend/dist/town/town.service.js.map b/backend/dist/town/town.service.js.map new file mode 100644 index 00000000..f8d5e3e9 --- /dev/null +++ b/backend/dist/town/town.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"town.service.js","sourceRoot":"","sources":["../../src/town/town.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/travel-place/dto/create-travel-place.dto.d.ts b/backend/dist/travel-place/dto/create-travel-place.dto.d.ts new file mode 100644 index 00000000..7fa0d710 --- /dev/null +++ b/backend/dist/travel-place/dto/create-travel-place.dto.d.ts @@ -0,0 +1,7 @@ +export declare class CreateTravelPlaceDto { + idRoute: number; + idPlace: number; + startDate: Date; + endDate: Date; + done: boolean; +} diff --git a/backend/dist/travel-place/dto/create-travel-place.dto.js b/backend/dist/travel-place/dto/create-travel-place.dto.js new file mode 100644 index 00000000..98604450 --- /dev/null +++ b/backend/dist/travel-place/dto/create-travel-place.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateTravelPlaceDto = void 0; +class CreateTravelPlaceDto { +} +exports.CreateTravelPlaceDto = CreateTravelPlaceDto; +//# sourceMappingURL=create-travel-place.dto.js.map \ No newline at end of file diff --git a/backend/dist/travel-place/dto/create-travel-place.dto.js.map b/backend/dist/travel-place/dto/create-travel-place.dto.js.map new file mode 100644 index 00000000..c3705942 --- /dev/null +++ b/backend/dist/travel-place/dto/create-travel-place.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-travel-place.dto.js","sourceRoot":"","sources":["../../../src/travel-place/dto/create-travel-place.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAoB;CAMhC;AAND,oDAMC"} \ No newline at end of file diff --git a/backend/dist/travel-place/dto/update-travel-place.dto.d.ts b/backend/dist/travel-place/dto/update-travel-place.dto.d.ts new file mode 100644 index 00000000..d6e9fa94 --- /dev/null +++ b/backend/dist/travel-place/dto/update-travel-place.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateTravelPlaceDto } from './create-travel-place.dto'; +declare const UpdateTravelPlaceDto_base: import("@nestjs/common").Type>; +export declare class UpdateTravelPlaceDto extends UpdateTravelPlaceDto_base { +} +export {}; diff --git a/backend/dist/travel-place/dto/update-travel-place.dto.js b/backend/dist/travel-place/dto/update-travel-place.dto.js new file mode 100644 index 00000000..e5e887ed --- /dev/null +++ b/backend/dist/travel-place/dto/update-travel-place.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateTravelPlaceDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const create_travel_place_dto_1 = require("./create-travel-place.dto"); +class UpdateTravelPlaceDto extends (0, swagger_1.PartialType)(create_travel_place_dto_1.CreateTravelPlaceDto) { +} +exports.UpdateTravelPlaceDto = UpdateTravelPlaceDto; +//# sourceMappingURL=update-travel-place.dto.js.map \ No newline at end of file diff --git a/backend/dist/travel-place/dto/update-travel-place.dto.js.map b/backend/dist/travel-place/dto/update-travel-place.dto.js.map new file mode 100644 index 00000000..81151062 --- /dev/null +++ b/backend/dist/travel-place/dto/update-travel-place.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-travel-place.dto.js","sourceRoot":"","sources":["../../../src/travel-place/dto/update-travel-place.dto.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,uEAAiE;AAEjE,MAAa,oBAAqB,SAAQ,IAAA,qBAAW,EAAC,8CAAoB,CAAC;CAAG;AAA9E,oDAA8E"} \ No newline at end of file diff --git a/backend/dist/travel-place/entities/travel-place.entity.d.ts b/backend/dist/travel-place/entities/travel-place.entity.d.ts new file mode 100644 index 00000000..e093dff3 --- /dev/null +++ b/backend/dist/travel-place/entities/travel-place.entity.d.ts @@ -0,0 +1,10 @@ +import { Place } from 'src/place/entities/place.entity'; +import { Route } from 'src/route/entities/route.entity'; +export declare class TravelPlace { + travelPlaceId: number; + route: Route; + place: Place; + startDate: Date; + endDate: Date; + done: boolean; +} diff --git a/backend/dist/travel-place/entities/travel-place.entity.js b/backend/dist/travel-place/entities/travel-place.entity.js new file mode 100644 index 00000000..c1e4dfa0 --- /dev/null +++ b/backend/dist/travel-place/entities/travel-place.entity.js @@ -0,0 +1,48 @@ +"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.TravelPlace = void 0; +const place_entity_1 = require("../../place/entities/place.entity"); +const route_entity_1 = require("../../route/entities/route.entity"); +const typeorm_1 = require("typeorm"); +let TravelPlace = class TravelPlace { +}; +exports.TravelPlace = TravelPlace; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], TravelPlace.prototype, "travelPlaceId", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'route' }), + (0, typeorm_1.ManyToOne)(() => route_entity_1.Route, (route) => route.idRoute), + __metadata("design:type", route_entity_1.Route) +], TravelPlace.prototype, "route", void 0); +__decorate([ + (0, typeorm_1.JoinColumn)({ name: 'place' }), + (0, typeorm_1.ManyToOne)(() => place_entity_1.Place, (place) => place.idPlace, { eager: true }), + __metadata("design:type", place_entity_1.Place) +], TravelPlace.prototype, "place", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Date) +], TravelPlace.prototype, "startDate", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Date) +], TravelPlace.prototype, "endDate", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Boolean) +], TravelPlace.prototype, "done", void 0); +exports.TravelPlace = TravelPlace = __decorate([ + (0, typeorm_1.Entity)() +], TravelPlace); +//# sourceMappingURL=travel-place.entity.js.map \ No newline at end of file diff --git a/backend/dist/travel-place/entities/travel-place.entity.js.map b/backend/dist/travel-place/entities/travel-place.entity.js.map new file mode 100644 index 00000000..a443f3f3 --- /dev/null +++ b/backend/dist/travel-place/entities/travel-place.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"travel-place.entity.js","sourceRoot":"","sources":["../../../src/travel-place/entities/travel-place.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAwD;AACxD,oEAAwD;AACxD,qCAAwF;AAGjF,IAAM,WAAW,GAAjB,MAAM,WAAW;CAmBvB,CAAA;AAnBY,kCAAW;AAEtB;IADC,IAAA,gCAAsB,GAAE;;kDACH;AAItB;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC7B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;8BAC1C,oBAAK;0CAAC;AAIb;IAFC,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC7B,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;8BAC3D,oBAAK;0CAAC;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BACjB,IAAI;8CAAC;AAEhB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BACnB,IAAI;4CAAC;AAGd;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;yCACd;sBAlBH,WAAW;IADvB,IAAA,gBAAM,GAAE;GACI,WAAW,CAmBvB"} \ No newline at end of file diff --git a/backend/dist/travel-place/travel-place.controller.d.ts b/backend/dist/travel-place/travel-place.controller.d.ts new file mode 100644 index 00000000..29a65863 --- /dev/null +++ b/backend/dist/travel-place/travel-place.controller.d.ts @@ -0,0 +1,7 @@ +import { TravelPlaceService } from './travel-place.service'; +import { CreateTravelPlaceDto } from './dto/create-travel-place.dto'; +export declare class TravelPlaceController { + private readonly travelPlaceService; + constructor(travelPlaceService: TravelPlaceService); + create(createTravelPlaceDto: CreateTravelPlaceDto): Promise; +} diff --git a/backend/dist/travel-place/travel-place.controller.js b/backend/dist/travel-place/travel-place.controller.js new file mode 100644 index 00000000..8c9aa15b --- /dev/null +++ b/backend/dist/travel-place/travel-place.controller.js @@ -0,0 +1,39 @@ +"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.TravelPlaceController = void 0; +const common_1 = require("@nestjs/common"); +const travel_place_service_1 = require("./travel-place.service"); +const create_travel_place_dto_1 = require("./dto/create-travel-place.dto"); +let TravelPlaceController = class TravelPlaceController { + constructor(travelPlaceService) { + this.travelPlaceService = travelPlaceService; + } + create(createTravelPlaceDto) { + return this.travelPlaceService.create(createTravelPlaceDto); + } +}; +exports.TravelPlaceController = TravelPlaceController; +__decorate([ + (0, common_1.Post)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [create_travel_place_dto_1.CreateTravelPlaceDto]), + __metadata("design:returntype", void 0) +], TravelPlaceController.prototype, "create", null); +exports.TravelPlaceController = TravelPlaceController = __decorate([ + (0, common_1.Controller)('travel-place'), + __metadata("design:paramtypes", [travel_place_service_1.TravelPlaceService]) +], TravelPlaceController); +//# sourceMappingURL=travel-place.controller.js.map \ No newline at end of file diff --git a/backend/dist/travel-place/travel-place.controller.js.map b/backend/dist/travel-place/travel-place.controller.js.map new file mode 100644 index 00000000..b8e8c8b2 --- /dev/null +++ b/backend/dist/travel-place/travel-place.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"travel-place.controller.js","sourceRoot":"","sources":["../../src/travel-place/travel-place.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;AACxD,iEAA4D;AAC5D,2EAAqE;AAG9D,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAAG,CAAC;IAGvE,MAAM,CAAS,oBAA0C;QACvD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AAPY,sDAAqB;AAIhC;IADC,IAAA,aAAI,GAAE;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAuB,8CAAoB;;mDAExD;gCANU,qBAAqB;IADjC,IAAA,mBAAU,EAAC,cAAc,CAAC;qCAEwB,yCAAkB;GADxD,qBAAqB,CAOjC"} \ No newline at end of file diff --git a/backend/dist/travel-place/travel-place.module.d.ts b/backend/dist/travel-place/travel-place.module.d.ts new file mode 100644 index 00000000..70bd60db --- /dev/null +++ b/backend/dist/travel-place/travel-place.module.d.ts @@ -0,0 +1,2 @@ +export declare class TravelPlaceModule { +} diff --git a/backend/dist/travel-place/travel-place.module.js b/backend/dist/travel-place/travel-place.module.js new file mode 100644 index 00000000..1b69f5a8 --- /dev/null +++ b/backend/dist/travel-place/travel-place.module.js @@ -0,0 +1,27 @@ +"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.TravelPlaceModule = void 0; +const common_1 = require("@nestjs/common"); +const travel_place_service_1 = require("./travel-place.service"); +const travel_place_controller_1 = require("./travel-place.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const travel_place_entity_1 = require("./entities/travel-place.entity"); +const place_entity_1 = require("../place/entities/place.entity"); +const route_entity_1 = require("../route/entities/route.entity"); +let TravelPlaceModule = class TravelPlaceModule { +}; +exports.TravelPlaceModule = TravelPlaceModule; +exports.TravelPlaceModule = TravelPlaceModule = __decorate([ + (0, common_1.Module)({ + controllers: [travel_place_controller_1.TravelPlaceController], + providers: [travel_place_service_1.TravelPlaceService], + imports: [typeorm_1.TypeOrmModule.forFeature([travel_place_entity_1.TravelPlace, place_entity_1.Place, route_entity_1.Route])], + }) +], TravelPlaceModule); +//# sourceMappingURL=travel-place.module.js.map \ No newline at end of file diff --git a/backend/dist/travel-place/travel-place.module.js.map b/backend/dist/travel-place/travel-place.module.js.map new file mode 100644 index 00000000..fe57cc86 --- /dev/null +++ b/backend/dist/travel-place/travel-place.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"travel-place.module.js","sourceRoot":"","sources":["../../src/travel-place/travel-place.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,iEAA4D;AAC5D,uEAAkE;AAClE,6CAAgD;AAChD,wEAA6D;AAC7D,iEAAwD;AACxD,iEAAwD;AAOjD,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,uBAAa,CAAC,UAAU,CAAC,CAAC,iCAAW,EAAE,oBAAK,EAAE,oBAAK,CAAC,CAAC,CAAC;KACjE,CAAC;GACW,iBAAiB,CAAG"} \ No newline at end of file diff --git a/backend/dist/travel-place/travel-place.service.d.ts b/backend/dist/travel-place/travel-place.service.d.ts new file mode 100644 index 00000000..e8b33ce8 --- /dev/null +++ b/backend/dist/travel-place/travel-place.service.d.ts @@ -0,0 +1,12 @@ +import { CreateTravelPlaceDto } from './dto/create-travel-place.dto'; +import { TravelPlace } from './entities/travel-place.entity'; +import { Repository } from 'typeorm'; +import { Place } from 'src/place/entities/place.entity'; +import { Route } from 'src/route/entities/route.entity'; +export declare class TravelPlaceService { + private travelPlaceRepository; + private placeRepository; + private routeRepository; + constructor(travelPlaceRepository: Repository, placeRepository: Repository, routeRepository: Repository); + create(createTravelPlaceDto: CreateTravelPlaceDto): Promise; +} diff --git a/backend/dist/travel-place/travel-place.service.js b/backend/dist/travel-place/travel-place.service.js new file mode 100644 index 00000000..1bdb85f2 --- /dev/null +++ b/backend/dist/travel-place/travel-place.service.js @@ -0,0 +1,50 @@ +"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.TravelPlaceService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const travel_place_entity_1 = require("./entities/travel-place.entity"); +const typeorm_2 = require("typeorm"); +const place_entity_1 = require("../place/entities/place.entity"); +const route_entity_1 = require("../route/entities/route.entity"); +let TravelPlaceService = class TravelPlaceService { + constructor(travelPlaceRepository, placeRepository, routeRepository) { + this.travelPlaceRepository = travelPlaceRepository; + this.placeRepository = placeRepository; + this.routeRepository = routeRepository; + } + async create(createTravelPlaceDto) { + const route = await this.routeRepository.findOneBy({ idRoute: createTravelPlaceDto.idRoute }); + const place = await this.placeRepository.findOneBy({ idPlace: createTravelPlaceDto.idPlace }); + await this.travelPlaceRepository.save({ + route, + place, + startDate: createTravelPlaceDto.startDate, + endDate: createTravelPlaceDto.endDate, + done: createTravelPlaceDto.done, + }); + } +}; +exports.TravelPlaceService = TravelPlaceService; +exports.TravelPlaceService = TravelPlaceService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(travel_place_entity_1.TravelPlace)), + __param(1, (0, typeorm_1.InjectRepository)(place_entity_1.Place)), + __param(2, (0, typeorm_1.InjectRepository)(route_entity_1.Route)), + __metadata("design:paramtypes", [typeorm_2.Repository, + typeorm_2.Repository, + typeorm_2.Repository]) +], TravelPlaceService); +//# sourceMappingURL=travel-place.service.js.map \ No newline at end of file diff --git a/backend/dist/travel-place/travel-place.service.js.map b/backend/dist/travel-place/travel-place.service.js.map new file mode 100644 index 00000000..73630bb1 --- /dev/null +++ b/backend/dist/travel-place/travel-place.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"travel-place.service.js","sourceRoot":"","sources":["../../src/travel-place/travel-place.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6CAAmD;AACnD,wEAA6D;AAC7D,qCAAqC;AACrC,iEAAwD;AACxD,iEAAwD;AAGjD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACyC,qBAA8C,EACpD,eAAkC,EAClC,eAAkC;QAF5B,0BAAqB,GAArB,qBAAqB,CAAyB;QACpD,oBAAe,GAAf,eAAe,CAAmB;QAClC,oBAAe,GAAf,eAAe,CAAmB;IAClE,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,oBAA0C;QACrD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YACpC,KAAK;YACL,KAAK;YACL,SAAS,EAAE,oBAAoB,CAAC,SAAS;YACzC,OAAO,EAAE,oBAAoB,CAAC,OAAO;YACrC,IAAI,EAAE,oBAAoB,CAAC,IAAI;SAChC,CAAC,CAAC;IACL,CAAC;CAiBF,CAAA;AAlCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,iCAAW,CAAC,CAAA;IAC7B,WAAA,IAAA,0BAAgB,EAAC,oBAAK,CAAC,CAAA;IACvB,WAAA,IAAA,0BAAgB,EAAC,oBAAK,CAAC,CAAA;qCAFsC,oBAAU;QACtB,oBAAU;QACV,oBAAU;GAJnD,kBAAkB,CAkC9B"} \ No newline at end of file diff --git a/backend/dist/tsconfig.build.tsbuildinfo b/backend/dist/tsconfig.build.tsbuildinfo new file mode 100644 index 00000000..e735f5a3 --- /dev/null +++ b/backend/dist/tsconfig.build.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2021.full.d.ts","../node_modules/reflect-metadata/index.d.ts","../node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../node_modules/rxjs/dist/types/internal/subscription.d.ts","../node_modules/rxjs/dist/types/internal/subscriber.d.ts","../node_modules/rxjs/dist/types/internal/operator.d.ts","../node_modules/rxjs/dist/types/internal/observable.d.ts","../node_modules/rxjs/dist/types/internal/types.d.ts","../node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../node_modules/rxjs/dist/types/internal/operators/count.d.ts","../node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/every.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../node_modules/rxjs/dist/types/internal/operators/find.d.ts","../node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../node_modules/rxjs/dist/types/internal/operators/first.d.ts","../node_modules/rxjs/dist/types/internal/subject.d.ts","../node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/last.d.ts","../node_modules/rxjs/dist/types/internal/operators/map.d.ts","../node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../node_modules/rxjs/dist/types/internal/notification.d.ts","../node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/max.d.ts","../node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/min.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/race.d.ts","../node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../node_modules/rxjs/dist/types/internal/operators/share.d.ts","../node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/single.d.ts","../node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../node_modules/rxjs/dist/types/internal/operators/take.d.ts","../node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../node_modules/rxjs/dist/types/internal/operators/window.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../node_modules/rxjs/dist/types/operators/index.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../node_modules/rxjs/dist/types/internal/scheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../node_modules/rxjs/dist/types/testing/index.d.ts","../node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../node_modules/rxjs/dist/types/internal/util/identity.d.ts","../node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../node_modules/rxjs/dist/types/internal/util/noop.d.ts","../node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../node_modules/rxjs/dist/types/internal/observable/from.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../node_modules/rxjs/dist/types/internal/observable/never.d.ts","../node_modules/rxjs/dist/types/internal/observable/of.d.ts","../node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../node_modules/rxjs/dist/types/internal/observable/race.d.ts","../node_modules/rxjs/dist/types/internal/observable/range.d.ts","../node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../node_modules/rxjs/dist/types/internal/observable/using.d.ts","../node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../node_modules/rxjs/dist/types/internal/config.d.ts","../node_modules/rxjs/dist/types/index.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../node_modules/@nestjs/common/interfaces/type.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../node_modules/@nestjs/common/enums/request-method.enum.d.ts","../node_modules/@nestjs/common/enums/http-status.enum.d.ts","../node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../node_modules/@nestjs/common/enums/version-type.enum.d.ts","../node_modules/@nestjs/common/enums/index.d.ts","../node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../node_modules/@nestjs/common/services/logger.service.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/index.d.ts","../node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/index.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../node_modules/@nestjs/common/interfaces/index.d.ts","../node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/index.d.ts","../node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/index.d.ts","../node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/index.d.ts","../node_modules/@nestjs/common/decorators/index.d.ts","../node_modules/@nestjs/common/exceptions/http.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../node_modules/@nestjs/common/exceptions/index.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","../node_modules/@nestjs/common/services/console-logger.service.d.ts","../node_modules/@nestjs/common/services/index.d.ts","../node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../node_modules/@nestjs/common/file-stream/index.d.ts","../node_modules/@nestjs/common/module-utils/constants.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","../node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","../node_modules/@nestjs/common/module-utils/index.d.ts","../node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","../node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","../node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","../node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","../node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","../node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","../node_modules/@nestjs/common/pipes/file/index.d.ts","../node_modules/@nestjs/common/pipes/index.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../node_modules/@nestjs/common/serializer/decorators/index.d.ts","../node_modules/@nestjs/common/serializer/index.d.ts","../node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../node_modules/@nestjs/common/utils/index.d.ts","../node_modules/@nestjs/common/index.d.ts","../src/app.service.ts","../src/app.controller.ts","../node_modules/typeorm/metadata/types/relationtypes.d.ts","../node_modules/typeorm/metadata/types/deferrabletype.d.ts","../node_modules/typeorm/metadata/types/ondeletetype.d.ts","../node_modules/typeorm/metadata/types/onupdatetype.d.ts","../node_modules/typeorm/decorator/options/relationoptions.d.ts","../node_modules/typeorm/metadata/types/propertytypeinfunction.d.ts","../node_modules/typeorm/common/objecttype.d.ts","../node_modules/typeorm/common/entitytarget.d.ts","../node_modules/typeorm/metadata/types/relationtypeinfunction.d.ts","../node_modules/typeorm/metadata-args/relationmetadataargs.d.ts","../node_modules/typeorm/driver/types/columntypes.d.ts","../node_modules/typeorm/decorator/options/valuetransformer.d.ts","../node_modules/typeorm/decorator/options/columncommonoptions.d.ts","../node_modules/typeorm/decorator/options/columnoptions.d.ts","../node_modules/typeorm/metadata-args/types/columnmode.d.ts","../node_modules/typeorm/metadata-args/columnmetadataargs.d.ts","../node_modules/typeorm/common/objectliteral.d.ts","../node_modules/typeorm/schema-builder/options/tablecolumnoptions.d.ts","../node_modules/typeorm/schema-builder/table/tablecolumn.d.ts","../node_modules/typeorm/schema-builder/options/viewoptions.d.ts","../node_modules/typeorm/schema-builder/view/view.d.ts","../node_modules/typeorm/naming-strategy/namingstrategyinterface.d.ts","../node_modules/typeorm/metadata/foreignkeymetadata.d.ts","../node_modules/typeorm/metadata/relationmetadata.d.ts","../node_modules/typeorm/metadata-args/embeddedmetadataargs.d.ts","../node_modules/typeorm/metadata-args/relationidmetadataargs.d.ts","../node_modules/typeorm/metadata/relationidmetadata.d.ts","../node_modules/typeorm/metadata/relationcountmetadata.d.ts","../node_modules/typeorm/metadata/types/eventlistenertypes.d.ts","../node_modules/typeorm/metadata-args/entitylistenermetadataargs.d.ts","../node_modules/typeorm/metadata/entitylistenermetadata.d.ts","../node_modules/typeorm/metadata-args/uniquemetadataargs.d.ts","../node_modules/typeorm/metadata/uniquemetadata.d.ts","../node_modules/typeorm/metadata/embeddedmetadata.d.ts","../node_modules/typeorm/metadata/columnmetadata.d.ts","../node_modules/typeorm/driver/types/ctecapabilities.d.ts","../node_modules/typeorm/driver/types/mappedcolumntypes.d.ts","../node_modules/typeorm/driver/query.d.ts","../node_modules/typeorm/driver/sqlinmemory.d.ts","../node_modules/typeorm/schema-builder/schemabuilder.d.ts","../node_modules/typeorm/driver/types/datatypedefaults.d.ts","../node_modules/typeorm/entity-schema/entityschemaindexoptions.d.ts","../node_modules/typeorm/driver/types/geojsontypes.d.ts","../node_modules/typeorm/decorator/options/spatialcolumnoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacolumnoptions.d.ts","../node_modules/typeorm/decorator/options/joincolumnoptions.d.ts","../node_modules/typeorm/decorator/options/jointablemultiplecolumnsoptions.d.ts","../node_modules/typeorm/decorator/options/jointableoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemarelationoptions.d.ts","../node_modules/typeorm/find-options/orderbycondition.d.ts","../node_modules/typeorm/metadata/types/tabletypes.d.ts","../node_modules/typeorm/entity-schema/entityschemauniqueoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacheckoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaexclusionoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemainheritanceoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemarelationidoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaoptions.d.ts","../node_modules/typeorm/entity-schema/entityschema.d.ts","../node_modules/typeorm/logger/logger.d.ts","../node_modules/typeorm/logger/loggeroptions.d.ts","../node_modules/typeorm/driver/types/databasetype.d.ts","../node_modules/typeorm/cache/queryresultcacheoptions.d.ts","../node_modules/typeorm/cache/queryresultcache.d.ts","../node_modules/typeorm/common/mixedlist.d.ts","../node_modules/typeorm/data-source/basedatasourceoptions.d.ts","../node_modules/typeorm/driver/types/replicationmode.d.ts","../node_modules/typeorm/schema-builder/options/tableforeignkeyoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableforeignkey.d.ts","../node_modules/typeorm/driver/types/upserttype.d.ts","../node_modules/typeorm/driver/driver.d.ts","../node_modules/typeorm/find-options/joinoptions.d.ts","../node_modules/typeorm/find-options/findoperatortype.d.ts","../node_modules/typeorm/find-options/findoperator.d.ts","../node_modules/typeorm/driver/mongodb/bson.typings.d.ts","../node_modules/typeorm/platform/platformtools.d.ts","../node_modules/typeorm/driver/mongodb/typings.d.ts","../node_modules/typeorm/find-options/equaloperator.d.ts","../node_modules/typeorm/find-options/findoptionswhere.d.ts","../node_modules/typeorm/find-options/findoptionsselect.d.ts","../node_modules/typeorm/find-options/findoptionsrelations.d.ts","../node_modules/typeorm/find-options/findoptionsorder.d.ts","../node_modules/typeorm/find-options/findoneoptions.d.ts","../node_modules/typeorm/find-options/findmanyoptions.d.ts","../node_modules/typeorm/common/deeppartial.d.ts","../node_modules/typeorm/repository/saveoptions.d.ts","../node_modules/typeorm/repository/removeoptions.d.ts","../node_modules/typeorm/find-options/mongodb/mongofindoneoptions.d.ts","../node_modules/typeorm/find-options/mongodb/mongofindmanyoptions.d.ts","../node_modules/typeorm/schema-builder/options/tableuniqueoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableunique.d.ts","../node_modules/typeorm/subscriber/event/transactioncommitevent.d.ts","../node_modules/typeorm/subscriber/event/transactionrollbackevent.d.ts","../node_modules/typeorm/subscriber/event/transactionstartevent.d.ts","../node_modules/typeorm/subscriber/event/updateevent.d.ts","../node_modules/typeorm/subscriber/event/removeevent.d.ts","../node_modules/typeorm/subscriber/event/insertevent.d.ts","../node_modules/typeorm/subscriber/event/loadevent.d.ts","../node_modules/typeorm/subscriber/event/softremoveevent.d.ts","../node_modules/typeorm/subscriber/event/recoverevent.d.ts","../node_modules/typeorm/subscriber/event/queryevent.d.ts","../node_modules/typeorm/subscriber/entitysubscriberinterface.d.ts","../node_modules/typeorm/subscriber/broadcasterresult.d.ts","../node_modules/typeorm/subscriber/broadcaster.d.ts","../node_modules/typeorm/schema-builder/options/tablecheckoptions.d.ts","../node_modules/typeorm/metadata-args/checkmetadataargs.d.ts","../node_modules/typeorm/metadata/checkmetadata.d.ts","../node_modules/typeorm/schema-builder/table/tablecheck.d.ts","../node_modules/typeorm/schema-builder/options/tableexclusionoptions.d.ts","../node_modules/typeorm/metadata-args/exclusionmetadataargs.d.ts","../node_modules/typeorm/metadata/exclusionmetadata.d.ts","../node_modules/typeorm/schema-builder/table/tableexclusion.d.ts","../node_modules/typeorm/driver/mongodb/mongoqueryrunner.d.ts","../node_modules/typeorm/query-builder/querypartialentity.d.ts","../node_modules/typeorm/query-runner/queryresult.d.ts","../node_modules/typeorm/query-builder/result/insertresult.d.ts","../node_modules/typeorm/query-builder/result/updateresult.d.ts","../node_modules/typeorm/query-builder/result/deleteresult.d.ts","../node_modules/typeorm/entity-manager/mongoentitymanager.d.ts","../node_modules/typeorm/repository/mongorepository.d.ts","../node_modules/typeorm/find-options/findtreeoptions.d.ts","../node_modules/typeorm/repository/treerepository.d.ts","../node_modules/typeorm/query-builder/transformer/plainobjecttonewentitytransformer.d.ts","../node_modules/typeorm/driver/types/isolationlevel.d.ts","../node_modules/typeorm/query-builder/insertorupdateoptions.d.ts","../node_modules/typeorm/repository/upsertoptions.d.ts","../node_modules/typeorm/common/pickkeysbytype.d.ts","../node_modules/typeorm/entity-manager/entitymanager.d.ts","../node_modules/typeorm/repository/repository.d.ts","../node_modules/typeorm/migration/migrationinterface.d.ts","../node_modules/typeorm/migration/migration.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectionoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectionoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlite/sqliteconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/defaultauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryaccesstokenauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorydefaultauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsiappserviceauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsivmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorypasswordauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryserviceprincipalsecret.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/ntlmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectionoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectionoptions.d.ts","../node_modules/typeorm/driver/mongodb/mongoconnectionoptions.d.ts","../node_modules/typeorm/driver/cordova/cordovaconnectionoptions.d.ts","../node_modules/typeorm/driver/sqljs/sqljsconnectionoptions.d.ts","../node_modules/typeorm/driver/react-native/reactnativeconnectionoptions.d.ts","../node_modules/typeorm/driver/nativescript/nativescriptconnectionoptions.d.ts","../node_modules/typeorm/driver/expo/expoconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-mysql/auroramysqlconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/aurora-mysql/auroramysqlconnectionoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-postgres/aurorapostgresconnectionoptions.d.ts","../node_modules/typeorm/driver/better-sqlite3/bettersqlite3connectionoptions.d.ts","../node_modules/typeorm/driver/capacitor/capacitorconnectionoptions.d.ts","../node_modules/typeorm/connection/baseconnectionoptions.d.ts","../node_modules/typeorm/driver/spanner/spannerconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/spanner/spannerconnectionoptions.d.ts","../node_modules/typeorm/data-source/datasourceoptions.d.ts","../node_modules/typeorm/entity-manager/sqljsentitymanager.d.ts","../node_modules/typeorm/query-builder/relationloader.d.ts","../node_modules/typeorm/query-builder/relationidloader.d.ts","../node_modules/typeorm/data-source/datasource.d.ts","../node_modules/typeorm/metadata-args/tablemetadataargs.d.ts","../node_modules/typeorm/metadata/types/treetypes.d.ts","../node_modules/typeorm/metadata/types/closuretreeoptions.d.ts","../node_modules/typeorm/metadata-args/treemetadataargs.d.ts","../node_modules/typeorm/metadata/entitymetadata.d.ts","../node_modules/typeorm/metadata-args/indexmetadataargs.d.ts","../node_modules/typeorm/metadata/indexmetadata.d.ts","../node_modules/typeorm/schema-builder/options/tableindexoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableindex.d.ts","../node_modules/typeorm/schema-builder/options/tableoptions.d.ts","../node_modules/typeorm/schema-builder/table/table.d.ts","../node_modules/typeorm/query-runner/queryrunner.d.ts","../node_modules/typeorm/query-builder/querybuildercte.d.ts","../node_modules/typeorm/query-builder/alias.d.ts","../node_modules/typeorm/query-builder/joinattribute.d.ts","../node_modules/typeorm/query-builder/relation-id/relationidattribute.d.ts","../node_modules/typeorm/query-builder/relation-count/relationcountattribute.d.ts","../node_modules/typeorm/query-builder/selectquery.d.ts","../node_modules/typeorm/query-builder/selectquerybuilderoption.d.ts","../node_modules/typeorm/query-builder/whereclause.d.ts","../node_modules/typeorm/query-builder/queryexpressionmap.d.ts","../node_modules/typeorm/query-builder/brackets.d.ts","../node_modules/typeorm/query-builder/whereexpressionbuilder.d.ts","../node_modules/typeorm/query-builder/updatequerybuilder.d.ts","../node_modules/typeorm/query-builder/deletequerybuilder.d.ts","../node_modules/typeorm/query-builder/softdeletequerybuilder.d.ts","../node_modules/typeorm/query-builder/insertquerybuilder.d.ts","../node_modules/typeorm/query-builder/relationquerybuilder.d.ts","../node_modules/typeorm/query-builder/notbrackets.d.ts","../node_modules/typeorm/query-builder/querybuilder.d.ts","../node_modules/typeorm/query-builder/selectquerybuilder.d.ts","../node_modules/typeorm/metadata-args/relationcountmetadataargs.d.ts","../node_modules/typeorm/metadata-args/namingstrategymetadataargs.d.ts","../node_modules/typeorm/metadata-args/joincolumnmetadataargs.d.ts","../node_modules/typeorm/metadata-args/jointablemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entitysubscribermetadataargs.d.ts","../node_modules/typeorm/metadata-args/inheritancemetadataargs.d.ts","../node_modules/typeorm/metadata-args/discriminatorvaluemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entityrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionentitymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/generatedmetadataargs.d.ts","../node_modules/typeorm/metadata-args/metadataargsstorage.d.ts","../node_modules/typeorm/connection/connectionmanager.d.ts","../node_modules/typeorm/globals.d.ts","../node_modules/typeorm/container.d.ts","../node_modules/typeorm/common/relationtype.d.ts","../node_modules/typeorm/error/typeormerror.d.ts","../node_modules/typeorm/error/cannotreflectmethodparametertypeerror.d.ts","../node_modules/typeorm/error/alreadyhasactiveconnectionerror.d.ts","../node_modules/typeorm/persistence/subjectchangemap.d.ts","../node_modules/typeorm/persistence/subject.d.ts","../node_modules/typeorm/error/subjectwithoutidentifiererror.d.ts","../node_modules/typeorm/error/cannotconnectalreadyconnectederror.d.ts","../node_modules/typeorm/error/locknotsupportedongivendrivererror.d.ts","../node_modules/typeorm/error/connectionisnotseterror.d.ts","../node_modules/typeorm/error/cannotcreateentityidmaperror.d.ts","../node_modules/typeorm/error/metadataalreadyexistserror.d.ts","../node_modules/typeorm/error/cannotdetermineentityerror.d.ts","../node_modules/typeorm/error/updatevaluesmissingerror.d.ts","../node_modules/typeorm/error/treerepositorynotsupportederror.d.ts","../node_modules/typeorm/error/customrepositorynotfounderror.d.ts","../node_modules/typeorm/error/transactionnotstartederror.d.ts","../node_modules/typeorm/error/transactionalreadystartederror.d.ts","../node_modules/typeorm/error/entitynotfounderror.d.ts","../node_modules/typeorm/error/entitymetadatanotfounderror.d.ts","../node_modules/typeorm/error/mustbeentityerror.d.ts","../node_modules/typeorm/error/optimisticlockversionmismatcherror.d.ts","../node_modules/typeorm/error/limitonupdatenotsupportederror.d.ts","../node_modules/typeorm/error/primarycolumncannotbenullableerror.d.ts","../node_modules/typeorm/error/customrepositorycannotinheritrepositoryerror.d.ts","../node_modules/typeorm/error/queryrunnerprovideralreadyreleasederror.d.ts","../node_modules/typeorm/error/cannotattachtreechildrenentityerror.d.ts","../node_modules/typeorm/error/customrepositorydoesnothaveentityerror.d.ts","../node_modules/typeorm/error/missingdeletedatecolumnerror.d.ts","../node_modules/typeorm/error/noconnectionforrepositoryerror.d.ts","../node_modules/typeorm/error/circularrelationserror.d.ts","../node_modules/typeorm/error/returningstatementnotsupportederror.d.ts","../node_modules/typeorm/error/usingjointableisnotallowederror.d.ts","../node_modules/typeorm/error/missingjoincolumnerror.d.ts","../node_modules/typeorm/error/missingprimarycolumnerror.d.ts","../node_modules/typeorm/error/entitypropertynotfounderror.d.ts","../node_modules/typeorm/error/missingdrivererror.d.ts","../node_modules/typeorm/error/driverpackagenotinstallederror.d.ts","../node_modules/typeorm/error/cannotgetentitymanagernotconnectederror.d.ts","../node_modules/typeorm/error/connectionnotfounderror.d.ts","../node_modules/typeorm/error/noversionorupdatedatecolumnerror.d.ts","../node_modules/typeorm/error/insertvaluesmissingerror.d.ts","../node_modules/typeorm/error/optimisticlockcannotbeusederror.d.ts","../node_modules/typeorm/error/metadatawithsuchnamealreadyexistserror.d.ts","../node_modules/typeorm/error/driveroptionnotseterror.d.ts","../node_modules/typeorm/error/findrelationsnotfounderror.d.ts","../node_modules/typeorm/error/namingstrategynotfounderror.d.ts","../node_modules/typeorm/error/pessimisticlocktransactionrequirederror.d.ts","../node_modules/typeorm/error/repositorynottreeerror.d.ts","../node_modules/typeorm/error/datatypenotsupportederror.d.ts","../node_modules/typeorm/error/initializedrelationerror.d.ts","../node_modules/typeorm/error/missingjointableerror.d.ts","../node_modules/typeorm/error/queryfailederror.d.ts","../node_modules/typeorm/error/noneedtoreleaseentitymanagererror.d.ts","../node_modules/typeorm/error/usingjoincolumnonlyononesideallowederror.d.ts","../node_modules/typeorm/error/usingjointableonlyononesideallowederror.d.ts","../node_modules/typeorm/error/subjectremovedandupdatederror.d.ts","../node_modules/typeorm/error/persistedentitynotfounderror.d.ts","../node_modules/typeorm/error/usingjoincolumnisnotallowederror.d.ts","../node_modules/typeorm/error/columntypeundefinederror.d.ts","../node_modules/typeorm/error/queryrunneralreadyreleasederror.d.ts","../node_modules/typeorm/error/offsetwithoutlimitnotsupportederror.d.ts","../node_modules/typeorm/error/cannotexecutenotconnectederror.d.ts","../node_modules/typeorm/error/noconnectionoptionerror.d.ts","../node_modules/typeorm/error/forbiddentransactionmodeoverrideerror.d.ts","../node_modules/typeorm/error/index.d.ts","../node_modules/typeorm/decorator/options/columnwithlengthoptions.d.ts","../node_modules/typeorm/decorator/options/columnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/columnenumoptions.d.ts","../node_modules/typeorm/decorator/options/columnembeddedoptions.d.ts","../node_modules/typeorm/decorator/options/columnhstoreoptions.d.ts","../node_modules/typeorm/decorator/options/columnwithwidthoptions.d.ts","../node_modules/typeorm/decorator/columns/column.d.ts","../node_modules/typeorm/decorator/columns/createdatecolumn.d.ts","../node_modules/typeorm/decorator/columns/deletedatecolumn.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnuuidoptions.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnidentityoptions.d.ts","../node_modules/typeorm/decorator/columns/primarygeneratedcolumn.d.ts","../node_modules/typeorm/decorator/columns/primarycolumn.d.ts","../node_modules/typeorm/decorator/columns/updatedatecolumn.d.ts","../node_modules/typeorm/decorator/columns/versioncolumn.d.ts","../node_modules/typeorm/decorator/options/virtualcolumnoptions.d.ts","../node_modules/typeorm/decorator/columns/virtualcolumn.d.ts","../node_modules/typeorm/decorator/options/viewcolumnoptions.d.ts","../node_modules/typeorm/decorator/columns/viewcolumn.d.ts","../node_modules/typeorm/decorator/columns/objectidcolumn.d.ts","../node_modules/typeorm/decorator/listeners/afterinsert.d.ts","../node_modules/typeorm/decorator/listeners/afterload.d.ts","../node_modules/typeorm/decorator/listeners/afterremove.d.ts","../node_modules/typeorm/decorator/listeners/aftersoftremove.d.ts","../node_modules/typeorm/decorator/listeners/afterrecover.d.ts","../node_modules/typeorm/decorator/listeners/afterupdate.d.ts","../node_modules/typeorm/decorator/listeners/beforeinsert.d.ts","../node_modules/typeorm/decorator/listeners/beforeremove.d.ts","../node_modules/typeorm/decorator/listeners/beforesoftremove.d.ts","../node_modules/typeorm/decorator/listeners/beforerecover.d.ts","../node_modules/typeorm/decorator/listeners/beforeupdate.d.ts","../node_modules/typeorm/decorator/listeners/eventsubscriber.d.ts","../node_modules/typeorm/decorator/options/indexoptions.d.ts","../node_modules/typeorm/decorator/options/entityoptions.d.ts","../node_modules/typeorm/decorator/relations/joincolumn.d.ts","../node_modules/typeorm/decorator/relations/jointable.d.ts","../node_modules/typeorm/decorator/relations/manytomany.d.ts","../node_modules/typeorm/decorator/relations/manytoone.d.ts","../node_modules/typeorm/decorator/relations/onetomany.d.ts","../node_modules/typeorm/decorator/relations/onetoone.d.ts","../node_modules/typeorm/decorator/relations/relationcount.d.ts","../node_modules/typeorm/decorator/relations/relationid.d.ts","../node_modules/typeorm/decorator/entity/entity.d.ts","../node_modules/typeorm/decorator/entity/childentity.d.ts","../node_modules/typeorm/decorator/entity/tableinheritance.d.ts","../node_modules/typeorm/decorator/options/viewentityoptions.d.ts","../node_modules/typeorm/decorator/entity-view/viewentity.d.ts","../node_modules/typeorm/decorator/tree/treelevelcolumn.d.ts","../node_modules/typeorm/decorator/tree/treeparent.d.ts","../node_modules/typeorm/decorator/tree/treechildren.d.ts","../node_modules/typeorm/decorator/tree/tree.d.ts","../node_modules/typeorm/decorator/index.d.ts","../node_modules/typeorm/decorator/options/uniqueoptions.d.ts","../node_modules/typeorm/decorator/unique.d.ts","../node_modules/typeorm/decorator/check.d.ts","../node_modules/typeorm/decorator/exclusion.d.ts","../node_modules/typeorm/decorator/generated.d.ts","../node_modules/typeorm/decorator/entityrepository.d.ts","../node_modules/typeorm/find-options/operator/and.d.ts","../node_modules/typeorm/find-options/operator/or.d.ts","../node_modules/typeorm/find-options/operator/any.d.ts","../node_modules/typeorm/find-options/operator/arraycontainedby.d.ts","../node_modules/typeorm/find-options/operator/arraycontains.d.ts","../node_modules/typeorm/find-options/operator/arrayoverlap.d.ts","../node_modules/typeorm/find-options/operator/between.d.ts","../node_modules/typeorm/find-options/operator/equal.d.ts","../node_modules/typeorm/find-options/operator/in.d.ts","../node_modules/typeorm/find-options/operator/isnull.d.ts","../node_modules/typeorm/find-options/operator/lessthan.d.ts","../node_modules/typeorm/find-options/operator/lessthanorequal.d.ts","../node_modules/typeorm/find-options/operator/ilike.d.ts","../node_modules/typeorm/find-options/operator/like.d.ts","../node_modules/typeorm/find-options/operator/morethan.d.ts","../node_modules/typeorm/find-options/operator/morethanorequal.d.ts","../node_modules/typeorm/find-options/operator/not.d.ts","../node_modules/typeorm/find-options/operator/raw.d.ts","../node_modules/typeorm/find-options/operator/jsoncontains.d.ts","../node_modules/typeorm/find-options/findoptionsutils.d.ts","../node_modules/typeorm/logger/abstractlogger.d.ts","../node_modules/typeorm/logger/advancedconsolelogger.d.ts","../node_modules/typeorm/logger/simpleconsolelogger.d.ts","../node_modules/typeorm/logger/filelogger.d.ts","../node_modules/typeorm/repository/abstractrepository.d.ts","../node_modules/typeorm/data-source/index.d.ts","../node_modules/typeorm/repository/baseentity.d.ts","../node_modules/typeorm/driver/sqlserver/mssqlparameter.d.ts","../node_modules/typeorm/connection/connectionoptionsreader.d.ts","../node_modules/typeorm/connection/connectionoptions.d.ts","../node_modules/typeorm/connection/connection.d.ts","../node_modules/typeorm/migration/migrationexecutor.d.ts","../node_modules/typeorm/naming-strategy/defaultnamingstrategy.d.ts","../node_modules/typeorm/naming-strategy/legacyoraclenamingstrategy.d.ts","../node_modules/typeorm/entity-schema/entityschemaembeddedcolumnoptions.d.ts","../node_modules/typeorm/schema-builder/rdbmsschemabuilder.d.ts","../node_modules/typeorm/util/instancechecker.d.ts","../node_modules/typeorm/repository/findtreesoptions.d.ts","../node_modules/typeorm/util/treerepositoryutils.d.ts","../node_modules/typeorm/index.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/entity-class-or-schema.type.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.decorators.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.utils.d.ts","../node_modules/@nestjs/typeorm/dist/common/index.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/typeorm-options.interface.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/index.d.ts","../node_modules/@nestjs/typeorm/dist/typeorm.module.d.ts","../node_modules/@nestjs/typeorm/dist/index.d.ts","../node_modules/@nestjs/typeorm/index.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-basic.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-bearer.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/open-api-spec.interface.d.ts","../node_modules/@nestjs/swagger/dist/types/swagger-enum.type.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-body.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-consumes.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-cookie.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-exclude-endpoint.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-exclude-controller.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-extra-models.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-header.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-hide-property.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-oauth2.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-operation.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-param.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-produces.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/schema-object-metadata.interface.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-property.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-query.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-response.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-security.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-use-tags.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-extension.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/index.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-ui-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-custom-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-document-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/index.d.ts","../node_modules/@nestjs/swagger/dist/document-builder.d.ts","../node_modules/@nestjs/swagger/dist/swagger-module.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/intersection-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/omit-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/partial-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/pick-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/index.d.ts","../node_modules/@nestjs/swagger/dist/utils/get-schema-path.util.d.ts","../node_modules/@nestjs/swagger/dist/utils/index.d.ts","../node_modules/@nestjs/swagger/dist/index.d.ts","../node_modules/@nestjs/swagger/index.d.ts","../src/shared/enum/admin-role.enum.ts","../src/shared/enum/user-status.enum.ts","../src/admin/dto/create-admin.dto.ts","../src/auth/admin/entitites/admin-reset-code.entity.ts","../src/pointofinterest/entities/pointofinterest.entity.ts","../src/pointofinterest/enum/available.enum.ts","../src/place/entities/available-date.entity.ts","../src/category/entities/category.entity.ts","../src/shared/enum/languages.enum.ts","../src/place/entities/place-traduction.entity.ts","../src/auth/user/entities/user-confirm-code.entity.ts","../src/auth/user/entities/user-reset-code.entity.ts","../src/user/entities/user.entity.ts","../src/visited/entities/visited.entity.ts","../src/place/entities/place.entity.ts","../src/state/entities/state.entity.ts","../src/town/entities/town.entity.ts","../src/admin/entities/admin.entity.ts","../src/admin/dto/get-admin.dto.ts","../src/admin/admin.service.ts","../node_modules/@nestjs/core/adapters/http-adapter.d.ts","../node_modules/@nestjs/core/adapters/index.d.ts","../node_modules/@nestjs/common/constants.d.ts","../node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","../node_modules/@nestjs/core/injector/settlement-signal.d.ts","../node_modules/@nestjs/core/injector/injector.d.ts","../node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","../node_modules/@nestjs/core/inspector/serialized-graph.d.ts","../node_modules/@nestjs/core/injector/module-token-factory.d.ts","../node_modules/@nestjs/core/injector/compiler.d.ts","../node_modules/@nestjs/core/injector/modules-container.d.ts","../node_modules/@nestjs/core/injector/container.d.ts","../node_modules/@nestjs/core/injector/instance-links-host.d.ts","../node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","../node_modules/@nestjs/core/injector/module-ref.d.ts","../node_modules/@nestjs/core/injector/module.d.ts","../node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../node_modules/@nestjs/core/application-config.d.ts","../node_modules/@nestjs/core/constants.d.ts","../node_modules/@nestjs/core/discovery/discovery-module.d.ts","../node_modules/@nestjs/core/discovery/discovery-service.d.ts","../node_modules/@nestjs/core/discovery/index.d.ts","../node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/index.d.ts","../node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","../node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","../node_modules/@nestjs/core/router/router-proxy.d.ts","../node_modules/@nestjs/core/helpers/context-creator.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","../node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","../node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","../node_modules/@nestjs/core/guards/constants.d.ts","../node_modules/@nestjs/core/helpers/execution-context-host.d.ts","../node_modules/@nestjs/core/guards/guards-consumer.d.ts","../node_modules/@nestjs/core/guards/guards-context-creator.d.ts","../node_modules/@nestjs/core/guards/index.d.ts","../node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","../node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","../node_modules/@nestjs/core/interceptors/index.d.ts","../node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","../node_modules/@nestjs/core/pipes/params-token-factory.d.ts","../node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","../node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","../node_modules/@nestjs/core/pipes/index.d.ts","../node_modules/@nestjs/core/helpers/context-utils.d.ts","../node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../node_modules/@nestjs/core/injector/inquirer/index.d.ts","../node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","../node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","../node_modules/@nestjs/core/inspector/graph-inspector.d.ts","../node_modules/@nestjs/core/metadata-scanner.d.ts","../node_modules/@nestjs/core/scanner.d.ts","../node_modules/@nestjs/core/injector/instance-loader.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","../node_modules/@nestjs/core/injector/index.d.ts","../node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","../node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","../node_modules/@nestjs/core/helpers/external-context-creator.d.ts","../node_modules/@nestjs/core/helpers/index.d.ts","../node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","../node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","../node_modules/@nestjs/core/inspector/index.d.ts","../node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","../node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../node_modules/@nestjs/core/middleware/builder.d.ts","../node_modules/@nestjs/core/middleware/index.d.ts","../node_modules/@nestjs/core/nest-application-context.d.ts","../node_modules/@nestjs/core/nest-application.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../node_modules/@nestjs/core/nest-factory.d.ts","../node_modules/@nestjs/core/repl/repl.d.ts","../node_modules/@nestjs/core/repl/index.d.ts","../node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../node_modules/@nestjs/core/router/interfaces/index.d.ts","../node_modules/@nestjs/core/router/request/request-constants.d.ts","../node_modules/@nestjs/core/router/request/index.d.ts","../node_modules/@nestjs/core/router/router-module.d.ts","../node_modules/@nestjs/core/router/index.d.ts","../node_modules/@nestjs/core/services/reflector.service.d.ts","../node_modules/@nestjs/core/services/index.d.ts","../node_modules/@nestjs/core/index.d.ts","../src/auth/role.decorator.ts","../node_modules/@types/mime/index.d.ts","../node_modules/@types/send/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/@types/http-errors/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/express/index.d.ts","../src/auth/admin/interface/customadminreq.ts","../node_modules/@types/jsonwebtoken/index.d.ts","../node_modules/@nestjs/jwt/dist/interfaces/jwt-module-options.interface.d.ts","../node_modules/@nestjs/jwt/dist/interfaces/index.d.ts","../node_modules/@nestjs/jwt/dist/jwt.errors.d.ts","../node_modules/@nestjs/jwt/dist/jwt.module.d.ts","../node_modules/@nestjs/jwt/dist/jwt.service.d.ts","../node_modules/@nestjs/jwt/dist/index.d.ts","../node_modules/@nestjs/jwt/index.d.ts","../node_modules/@types/bcrypt/index.d.ts","../src/auth/encryption/encryption.service.ts","../src/auth/admin/dto/login-admin.dto.ts","../node_modules/dotenv/lib/main.d.ts","../src/constants/jwt.constants.ts","../src/auth/admin/dto/admin-signin-res.dto.ts","../src/shared/dto/payload-jwt.dto.ts","../src/auth/user/dto/update-pwd.dto.ts","../src/auth/admin/dto/admin-reset-password.dto.ts","../src/auth/admin/authadmin.service.ts","../src/auth/admin/authadmin.guard.ts","../src/admin/admin.controller.ts","../src/admin/admin.module.ts","../src/constants/db.constants.ts","../src/auth/admin/dto/get-reset-code.dto.ts","../node_modules/@nestjs-modules/mailer/dist/interfaces/template-adapter.interface.d.ts","../node_modules/@nestjs-modules/mailer/dist/interfaces/mailer-options.interface.d.ts","../node_modules/@nestjs-modules/mailer/dist/interfaces/mailer-options-factory.interface.d.ts","../node_modules/@nestjs-modules/mailer/dist/interfaces/mailer-async-options.interface.d.ts","../node_modules/@nestjs-modules/mailer/dist/mailer.module.d.ts","../node_modules/@nestjs-modules/mailer/dist/constants/mailer.constant.d.ts","../node_modules/@nestjs-modules/mailer/dist/interfaces/send-mail-options.interface.d.ts","../node_modules/@nestjs-modules/mailer/dist/interfaces/mailer-transport-factory.interface.d.ts","../node_modules/@nestjs-modules/mailer/dist/mailer.service.d.ts","../node_modules/@nestjs-modules/mailer/dist/index.d.ts","../node_modules/@nestjs-modules/mailer/index.d.ts","../src/email/email.service.ts","../src/auth/admin/authadmincontroller.ts","../src/auth/admin/authadmin.module.ts","../src/user/dto/create-user.dto.ts","../src/category/dto/create-category.dto.ts","../src/category/dto/create-category-req.dto.ts","../src/category/category.service.ts","../src/user/dto/update-user.dto.ts","../src/user/dto/user-response.ts","../src/constants/server.contants.ts","../src/user/user.service.ts","../src/user/dto/update-preferedcategories.dto.ts","../src/auth/user/interface/customuserreq.ts","../src/auth/user/dto/user-signin-res.dto.ts","../src/auth/user/dto/login-user.dto.ts","../src/auth/user/dto/user-reset-password.dto.ts","../src/auth/user/authuserservice.ts","../src/auth/user/authuser.guard.ts","../node_modules/@nestjs/platform-express/interfaces/nest-express-body-parser-options.interface.d.ts","../node_modules/@nestjs/platform-express/interfaces/nest-express-body-parser.interface.d.ts","../node_modules/@nestjs/platform-express/interfaces/serve-static-options.interface.d.ts","../node_modules/@nestjs/platform-express/adapters/express-adapter.d.ts","../node_modules/@nestjs/platform-express/adapters/index.d.ts","../node_modules/@nestjs/platform-express/interfaces/nest-express-application.interface.d.ts","../node_modules/@nestjs/platform-express/interfaces/index.d.ts","../node_modules/@nestjs/platform-express/multer/interfaces/multer-options.interface.d.ts","../node_modules/@nestjs/platform-express/multer/interceptors/any-files.interceptor.d.ts","../node_modules/@nestjs/platform-express/multer/interceptors/file-fields.interceptor.d.ts","../node_modules/@nestjs/platform-express/multer/interceptors/file.interceptor.d.ts","../node_modules/@nestjs/platform-express/multer/interceptors/files.interceptor.d.ts","../node_modules/@nestjs/platform-express/multer/interceptors/no-files.interceptor.d.ts","../node_modules/@nestjs/platform-express/multer/interceptors/index.d.ts","../node_modules/@nestjs/platform-express/multer/interfaces/files-upload-module.interface.d.ts","../node_modules/@nestjs/platform-express/multer/interfaces/index.d.ts","../node_modules/@nestjs/platform-express/multer/multer.module.d.ts","../node_modules/@nestjs/platform-express/multer/index.d.ts","../node_modules/@nestjs/platform-express/index.d.ts","../node_modules/@types/multer/index.d.ts","../node_modules/uuid/dist/cjs/max.d.ts","../node_modules/uuid/dist/cjs/nil.d.ts","../node_modules/uuid/dist/cjs/parse.d.ts","../node_modules/uuid/dist/cjs/stringify.d.ts","../node_modules/uuid/dist/cjs/_types.d.ts","../node_modules/uuid/dist/cjs/v1.d.ts","../node_modules/uuid/dist/cjs/v1tov6.d.ts","../node_modules/uuid/dist/cjs/v35.d.ts","../node_modules/uuid/dist/cjs/v3.d.ts","../node_modules/uuid/dist/cjs/v4.d.ts","../node_modules/uuid/dist/cjs/v5.d.ts","../node_modules/uuid/dist/cjs/v6.d.ts","../node_modules/uuid/dist/cjs/v6tov1.d.ts","../node_modules/uuid/dist/cjs/v7.d.ts","../node_modules/uuid/dist/cjs/validate.d.ts","../node_modules/uuid/dist/cjs/version.d.ts","../node_modules/uuid/dist/cjs/index.d.ts","../src/shared/interceptors/file-save.interceptor.ts","../src/user/user.controller.ts","../src/user/user.module.ts","../src/auth/user/dto/get-reset-code.dto.ts","../src/auth/user/authusercontroller.ts","../src/auth/user/authuser.module.ts","../src/state/dto/create-state.dto.ts","../src/state/dto/state-res.dto.ts","../src/state/state.service.ts","../src/state/state.controller.ts","../src/state/state.module.ts","../src/database-seeder/states.json","../src/town/dto/create-town.dto.ts","../src/town/entities/town-traduction.entity.ts","../src/town/dto/create-town-trad.dto.ts","../src/town/dto/town-res.dto.ts","../src/town/dto/update-town.dto.ts","../src/town/town.service.ts","../src/database-seeder/database-seeder.service.ts","../src/pointofinterest/dto/create-pointandtraduction.dto.ts","../src/pointofinterest/entities/pointofinteresttraduction.entity.ts","../src/pointofinterest/dto/create-point.dto.ts","../node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../node_modules/class-transformer/types/enums/index.d.ts","../node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/index.d.ts","../node_modules/class-transformer/types/classtransformer.d.ts","../node_modules/class-transformer/types/decorators/exclude.decorator.d.ts","../node_modules/class-transformer/types/decorators/expose.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-instance-to-instance.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-instance-to-plain.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-plain-to-instance.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform.decorator.d.ts","../node_modules/class-transformer/types/decorators/type.decorator.d.ts","../node_modules/class-transformer/types/decorators/index.d.ts","../node_modules/class-transformer/types/index.d.ts","../node_modules/class-validator/types/validation/validationerror.d.ts","../node_modules/class-validator/types/validation/validatoroptions.d.ts","../node_modules/class-validator/types/validation-schema/validationschema.d.ts","../node_modules/class-validator/types/container.d.ts","../node_modules/class-validator/types/validation/validationarguments.d.ts","../node_modules/class-validator/types/decorator/validationoptions.d.ts","../node_modules/class-validator/types/decorator/common/allow.d.ts","../node_modules/class-validator/types/decorator/common/isdefined.d.ts","../node_modules/class-validator/types/decorator/common/isoptional.d.ts","../node_modules/class-validator/types/decorator/common/validate.d.ts","../node_modules/class-validator/types/validation/validatorconstraintinterface.d.ts","../node_modules/class-validator/types/decorator/common/validateby.d.ts","../node_modules/class-validator/types/decorator/common/validateif.d.ts","../node_modules/class-validator/types/decorator/common/validatenested.d.ts","../node_modules/class-validator/types/decorator/common/validatepromise.d.ts","../node_modules/class-validator/types/decorator/common/islatlong.d.ts","../node_modules/class-validator/types/decorator/common/islatitude.d.ts","../node_modules/class-validator/types/decorator/common/islongitude.d.ts","../node_modules/class-validator/types/decorator/common/equals.d.ts","../node_modules/class-validator/types/decorator/common/notequals.d.ts","../node_modules/class-validator/types/decorator/common/isempty.d.ts","../node_modules/class-validator/types/decorator/common/isnotempty.d.ts","../node_modules/class-validator/types/decorator/common/isin.d.ts","../node_modules/class-validator/types/decorator/common/isnotin.d.ts","../node_modules/class-validator/types/decorator/number/isdivisibleby.d.ts","../node_modules/class-validator/types/decorator/number/ispositive.d.ts","../node_modules/class-validator/types/decorator/number/isnegative.d.ts","../node_modules/class-validator/types/decorator/number/max.d.ts","../node_modules/class-validator/types/decorator/number/min.d.ts","../node_modules/class-validator/types/decorator/date/mindate.d.ts","../node_modules/class-validator/types/decorator/date/maxdate.d.ts","../node_modules/class-validator/types/decorator/string/contains.d.ts","../node_modules/class-validator/types/decorator/string/notcontains.d.ts","../node_modules/@types/validator/lib/isboolean.d.ts","../node_modules/@types/validator/lib/isemail.d.ts","../node_modules/@types/validator/lib/isfqdn.d.ts","../node_modules/@types/validator/lib/isiban.d.ts","../node_modules/@types/validator/lib/isiso31661alpha2.d.ts","../node_modules/@types/validator/lib/isiso4217.d.ts","../node_modules/@types/validator/lib/isiso6391.d.ts","../node_modules/@types/validator/lib/istaxid.d.ts","../node_modules/@types/validator/lib/isurl.d.ts","../node_modules/@types/validator/index.d.ts","../node_modules/class-validator/types/decorator/string/isalpha.d.ts","../node_modules/class-validator/types/decorator/string/isalphanumeric.d.ts","../node_modules/class-validator/types/decorator/string/isdecimal.d.ts","../node_modules/class-validator/types/decorator/string/isascii.d.ts","../node_modules/class-validator/types/decorator/string/isbase64.d.ts","../node_modules/class-validator/types/decorator/string/isbytelength.d.ts","../node_modules/class-validator/types/decorator/string/iscreditcard.d.ts","../node_modules/class-validator/types/decorator/string/iscurrency.d.ts","../node_modules/class-validator/types/decorator/string/isemail.d.ts","../node_modules/class-validator/types/decorator/string/isfqdn.d.ts","../node_modules/class-validator/types/decorator/string/isfullwidth.d.ts","../node_modules/class-validator/types/decorator/string/ishalfwidth.d.ts","../node_modules/class-validator/types/decorator/string/isvariablewidth.d.ts","../node_modules/class-validator/types/decorator/string/ishexcolor.d.ts","../node_modules/class-validator/types/decorator/string/ishexadecimal.d.ts","../node_modules/class-validator/types/decorator/string/ismacaddress.d.ts","../node_modules/class-validator/types/decorator/string/isip.d.ts","../node_modules/class-validator/types/decorator/string/isport.d.ts","../node_modules/class-validator/types/decorator/string/isisbn.d.ts","../node_modules/class-validator/types/decorator/string/isisin.d.ts","../node_modules/class-validator/types/decorator/string/isiso8601.d.ts","../node_modules/class-validator/types/decorator/string/isjson.d.ts","../node_modules/class-validator/types/decorator/string/isjwt.d.ts","../node_modules/class-validator/types/decorator/string/islowercase.d.ts","../node_modules/class-validator/types/decorator/string/ismobilephone.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha2.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha3.d.ts","../node_modules/class-validator/types/decorator/string/ismongoid.d.ts","../node_modules/class-validator/types/decorator/string/ismultibyte.d.ts","../node_modules/class-validator/types/decorator/string/issurrogatepair.d.ts","../node_modules/class-validator/types/decorator/string/isurl.d.ts","../node_modules/class-validator/types/decorator/string/isuuid.d.ts","../node_modules/class-validator/types/decorator/string/isfirebasepushid.d.ts","../node_modules/class-validator/types/decorator/string/isuppercase.d.ts","../node_modules/class-validator/types/decorator/string/length.d.ts","../node_modules/class-validator/types/decorator/string/maxlength.d.ts","../node_modules/class-validator/types/decorator/string/minlength.d.ts","../node_modules/class-validator/types/decorator/string/matches.d.ts","../node_modules/libphonenumber-js/types.d.cts","../node_modules/libphonenumber-js/max/index.d.cts","../node_modules/class-validator/types/decorator/string/isphonenumber.d.ts","../node_modules/class-validator/types/decorator/string/ismilitarytime.d.ts","../node_modules/class-validator/types/decorator/string/ishash.d.ts","../node_modules/class-validator/types/decorator/string/isissn.d.ts","../node_modules/class-validator/types/decorator/string/isdatestring.d.ts","../node_modules/class-validator/types/decorator/string/isbooleanstring.d.ts","../node_modules/class-validator/types/decorator/string/isnumberstring.d.ts","../node_modules/class-validator/types/decorator/string/isbase32.d.ts","../node_modules/class-validator/types/decorator/string/isbic.d.ts","../node_modules/class-validator/types/decorator/string/isbtcaddress.d.ts","../node_modules/class-validator/types/decorator/string/isdatauri.d.ts","../node_modules/class-validator/types/decorator/string/isean.d.ts","../node_modules/class-validator/types/decorator/string/isethereumaddress.d.ts","../node_modules/class-validator/types/decorator/string/ishsl.d.ts","../node_modules/class-validator/types/decorator/string/isiban.d.ts","../node_modules/class-validator/types/decorator/string/isidentitycard.d.ts","../node_modules/class-validator/types/decorator/string/isisrc.d.ts","../node_modules/class-validator/types/decorator/string/islocale.d.ts","../node_modules/class-validator/types/decorator/string/ismagneturi.d.ts","../node_modules/class-validator/types/decorator/string/ismimetype.d.ts","../node_modules/class-validator/types/decorator/string/isoctal.d.ts","../node_modules/class-validator/types/decorator/string/ispassportnumber.d.ts","../node_modules/class-validator/types/decorator/string/ispostalcode.d.ts","../node_modules/class-validator/types/decorator/string/isrfc3339.d.ts","../node_modules/class-validator/types/decorator/string/isrgbcolor.d.ts","../node_modules/class-validator/types/decorator/string/issemver.d.ts","../node_modules/class-validator/types/decorator/string/isstrongpassword.d.ts","../node_modules/class-validator/types/decorator/string/istimezone.d.ts","../node_modules/class-validator/types/decorator/string/isbase58.d.ts","../node_modules/class-validator/types/decorator/string/is-tax-id.d.ts","../node_modules/class-validator/types/decorator/string/is-iso4217-currency-code.d.ts","../node_modules/class-validator/types/decorator/typechecker/isboolean.d.ts","../node_modules/class-validator/types/decorator/typechecker/isdate.d.ts","../node_modules/class-validator/types/decorator/typechecker/isnumber.d.ts","../node_modules/class-validator/types/decorator/typechecker/isenum.d.ts","../node_modules/class-validator/types/decorator/typechecker/isint.d.ts","../node_modules/class-validator/types/decorator/typechecker/isstring.d.ts","../node_modules/class-validator/types/decorator/typechecker/isarray.d.ts","../node_modules/class-validator/types/decorator/typechecker/isobject.d.ts","../node_modules/class-validator/types/decorator/array/arraycontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotcontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotempty.d.ts","../node_modules/class-validator/types/decorator/array/arrayminsize.d.ts","../node_modules/class-validator/types/decorator/array/arraymaxsize.d.ts","../node_modules/class-validator/types/decorator/array/arrayunique.d.ts","../node_modules/class-validator/types/decorator/object/isnotemptyobject.d.ts","../node_modules/class-validator/types/decorator/object/isinstance.d.ts","../node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/class-validator/types/validation/validationtypes.d.ts","../node_modules/class-validator/types/validation/validator.d.ts","../node_modules/class-validator/types/register-decorator.d.ts","../node_modules/class-validator/types/metadata/validationmetadataargs.d.ts","../node_modules/class-validator/types/metadata/validationmetadata.d.ts","../node_modules/class-validator/types/metadata/constraintmetadata.d.ts","../node_modules/class-validator/types/metadata/metadatastorage.d.ts","../node_modules/class-validator/types/index.d.ts","../src/place/dto/create-place-date.dto.ts","../src/place/dto/create-place.dto.ts","../src/place/dto/create-date.dto.ts","../src/place/dto/get-place.dto.ts","../src/place/dto/update-place.req.dto.ts","../src/place/utils/isplaceopen.ts","../src/place/place.service.ts","../src/pointofinterest/dto/create-pointtrad.dto.ts","../src/pointofinterest/dto/getpoint.dto.ts","../node_modules/@types/qrcode/index.d.ts","../src/pointofinterest/utils/qrcode.ts","../node_modules/typed-query-selector/parser.d.ts","../node_modules/devtools-protocol/types/protocol.d.ts","../node_modules/devtools-protocol/types/protocol-mapping.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/generated/webdriver-bidi.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/cdp.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/generated/webdriver-bidi-permissions.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/chromium-bidi.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/errorresponse.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/protocol.d.ts","../node_modules/puppeteer/lib/types.d.ts","../src/pointofinterest/dto/printpointinfo.dto.ts","../node_modules/axios/index.d.ts","../src/constants/google.constants.ts","../src/pointofinterest/pointofinterest.service.ts","../src/database-seeder/database-seeder.module.ts","../node_modules/@nestjs/serve-static/dist/interfaces/serve-static-options.interface.d.ts","../node_modules/@nestjs/serve-static/dist/loaders/abstract.loader.d.ts","../node_modules/@nestjs/serve-static/dist/loaders/express.loader.d.ts","../node_modules/@nestjs/serve-static/dist/loaders/fastify.loader.d.ts","../node_modules/@nestjs/serve-static/dist/loaders/noop.loader.d.ts","../node_modules/@nestjs/serve-static/dist/serve-static.constants.d.ts","../node_modules/@nestjs/serve-static/dist/serve-static.module.d.ts","../node_modules/@nestjs/serve-static/dist/serve-static.providers.d.ts","../node_modules/@nestjs/serve-static/dist/index.d.ts","../node_modules/@nestjs/serve-static/index.d.ts","../src/shared/pipe/file-validation.pipe.ts","../src/town/dto/createtownreq.dto.ts","../src/town/town.controller.ts","../src/town/town.module.ts","../src/place/place.controller.ts","../src/place/place.module.ts","../src/pointofinterest/pointofinterest.controller.ts","../src/pointofinterest/pointofinterest.module.ts","../src/category/category.controller.ts","../src/category/category.module.ts","../src/travel-place/entities/travel-place.entity.ts","../src/route/entities/route.entity.ts","../src/travel-place/dto/create-travel-place.dto.ts","../src/travel-place/travel-place.service.ts","../src/route/dto/recommend-route.dto.ts","../src/route/utils/math.ts","../src/route/utils/sort.ts","../src/route/utils/recommendations.ts","../src/visited/dto/create-visited.dto.ts","../node_modules/@types/ejs/index.d.ts","../src/visited/templates/visit_template.ts","../src/visited/utils/visited_places_image_creator.ts","../src/visited/visited.service.ts","../src/route/dto/create-route.dto.ts","../src/route/dto/create-route-req.ts","../src/route/route.service.ts","../src/route/dto/updateroutestatus.dto.ts","../src/route/route.controller.ts","../src/visited/visited.controller.ts","../src/visited/visited.module.ts","../src/route/route.module.ts","../src/travel-place/travel-place.controller.ts","../src/travel-place/travel-place.module.ts","../src/constants/mail.constants.ts","../src/app.module.ts","../src/main.ts","../node_modules/@nestjs/mapped-types/dist/mapped-type.interface.d.ts","../node_modules/@nestjs/mapped-types/dist/types/remove-fields-with-type.type.d.ts","../node_modules/@nestjs/mapped-types/dist/intersection-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/omit-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/partial-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/pick-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/type-helpers.utils.d.ts","../node_modules/@nestjs/mapped-types/dist/index.d.ts","../node_modules/@nestjs/mapped-types/index.d.ts","../src/admin/dto/update-admin.dto.ts","../src/category/dto/update-category.dto.ts","../src/place/dto/create-place-trad.dto.ts","../src/pointofinterest/dto/update-point.dto.ts","../src/route/dto/update-route.dto.ts","../src/travel-place/dto/update-travel-place.dto.ts","../src/visited/dto/update-visited.dto.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/caseless/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/eslint/helpers.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@types/eslint-scope/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/expect/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/long/index.d.ts","../node_modules/@types/methods/index.d.ts","../node_modules/@types/mjml-core/index.d.ts","../node_modules/@types/mjml/index.d.ts","../node_modules/@types/pug/index.d.ts","../node_modules/@types/request/node_modules/form-data/index.d.ts","../node_modules/@types/tough-cookie/index.d.ts","../node_modules/@types/request/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/superagent/lib/agent-base.d.ts","../node_modules/@types/superagent/lib/node/response.d.ts","../node_modules/@types/superagent/types.d.ts","../node_modules/@types/superagent/lib/node/agent.d.ts","../node_modules/@types/superagent/lib/request-base.d.ts","../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../node_modules/@types/superagent/lib/node/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/types.d.ts","../node_modules/@types/supertest/lib/agent.d.ts","../node_modules/@types/supertest/lib/test.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts","../node_modules/@types/yauzl/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"76f838d5d49b65de83bc345c04aa54c62a3cfdb72a477dc0c0fce89a30596c30","affectsGlobalScope":true},{"version":"73e370058f82add1fdbc78ef3d1aab110108f2d5d9c857cb55d3361982347ace","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":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","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":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","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":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"4a66df3ab5de5cfcda11538cffddd67ff6a174e003788e270914c1e0248483cf",{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true},"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","ecf5cb089ea438f2545e04b6c52828c68d0b0f4bfaa661986faf36da273e9892","95444fb6292d5e2f7050d7021383b719c0252bf5f88854973977db9e3e3d8006","241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","06540a9f3f2f88375ada0b89712de1c4310f7398d821c4c10ab5c6477dafb4bc",{"version":"de2d3120ed0989dbc776de71e6c0e8a6b4bf1935760cf468ff9d0e9986ef4c09","affectsGlobalScope":true},"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","97bdf234f5db52085d99c6842db560bca133f8a0413ff76bf830f5f38f088ce3","a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","b493ff8a5175cbbb4e6e8bcfa9506c08f5a7318b2278365cfca3b397c9710ebc","e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","303ee143a869e8f605e7b1d12be6c7269d4cab90d230caba792495be595d4f56","89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","a5eb4835ab561c140ffc4634bb039387d5d0cceebb86918f1696c7ac156d26fd","c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","4252b852dd791305da39f6e1242694c2e560d5e46f9bb26e2aca77252057c026","0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","ba13c7d46a560f3d4df8ffb1110e2bbec5801449af3b1240a718514b5576156e","6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","05c4e2a992bb83066a3a648bad1c310cecd4d0628d7e19545bb107ac9596103a","b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","dd6c3362aaaec60be028b4ba292806da8e7020eef7255c7414ce4a5c3a7138ef","8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","3114b315cd0687aad8b57cff36f9c8c51f5b1bc6254f1b1e8446ae583d8e2474","0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","af733cb878419f3012f0d4df36f918a69ba38d73f3232ba1ab46ef9ede6cb29c","cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","0a01b0b5a9e87d04737084731212106add30f63ec640169f1462ba2e44b6b3a8","06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","e07d62a8a9a3bb65433a62e9bbf400c6bfd2df4de60652af4d738303ee3670a1","bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","851e8d57d6dd17c71e9fa0319abd20ab2feb3fb674d0801611a09b7a25fd281c","c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","748e79252a7f476f8f28923612d7696b214e270cc909bc685afefaac8f052af0","9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","c3f32a185cd27ac232d3428a8d9b362c3f7b4892a58adaaa022828a7dcd13eed","3139c3e5e09251feec7a87f457084bee383717f3626a7f1459d053db2f34eb76","4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","3be870c8e17ec14f1c18fc248f5d2c4669e576404744ff5c63e6dafcf05b97ea","56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","6ab380571d87bd1d6f644fb6ab7837239d54b59f07dc84347b1341f866194214","547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","7c9ed7ffdc6f843ab69e5b2a3e7f667b050dd8d24d0052db81e35480f6d4e15d","7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","3656f0584d5a7ee0d0f2cc2b9cffbb43af92e80186b2ce160ebd4421d1506655","a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","90f690a1c5fcb4c2d19c80fea05c8ab590d8f6534c4c296d70af6293ede67366","be95e987818530082c43909be722a838315a0fc5deb6043de0a76f5221cbad24","9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","1f6058d60eaa8825f59d4b76bbf6cc0e6ad9770948be58de68587b0931da00cc","5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","50100b1a91f61d81ca3329a98e64b7f05cddc5e3cb26b3411adc137c9c631aca","11aceaee5663b4ed597544567d6e6a5a94b66857d7ebd62a9875ea061018cd2c","6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","669b754ec246dd7471e19b655b73bda6c2ca5bb7ccb1a4dff44a9ae45b6a716a","4bb6035e906946163ecfaec982389d0247ceeac6bdee7f1d07c03d9c224db3aa","8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","c82857a876075e665bbcc78213abfe9e9b0206d502379576d7abd481ade3a569","4f71d883ed6f398ba8fe11fcd003b44bb5f220f840b3eac3c395ad91304e4620","5229c3934f58413f34f1b26c01323c93a5a65a2d9f2a565f216590dfbed1fe32","9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","4c754b03f36ff35fc539f9ebb5f024adbb73ec2d3e4bfb35b385a05abb36a50e","59507446213e73654d6979f3b82dadc4efb0ed177425ae052d96a3f5a5be0d35","a914be97ca7a5be670d1545fc0691ac3fbabd023d7d084b338f6934349798a1f","8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","87437ca9dabab3a41d483441696ff9220a19e713f58e0b6a99f1731af10776d7","26c5dfa9aa4e6428f4bb7d14cbf72917ace69f738fa92480b9749eebce933370","8e94328e7ca1a7a517d1aa3c569eac0f6a44f67473f6e22c2c4aff5f9f4a9b38","d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","299f0af797897d77685d606502be72846b3d1f0dc6a2d8c964e9ea3ccbacf5bc","12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","3c97b5ea66276cf463525a6aa9d5bb086bf5e05beac70a0597cda2575503b57b","b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","a31383256374723b47d8b5497a9558bbbcf95bcecfb586a36caf7bfd3693eb0e","06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","64aa66c7458cbfd0f48f88070b08c2f66ae94aba099dac981f17c2322d147c06","11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","9814545517193cf51127d7fbdc3b7335688206ec04ee3a46bba2ee036bd0dcac","0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","c91d3f9753a311284e76cdcb348cbb50bca98733336ec726b54d77b7361b34de","cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","cf25d45c02d5fd5d7adb16230a0e1d6715441eef5c0a79a21bfeaa9bbc058939","54c3822eaf6436f2eddc92dd6e410750465aba218adbf8ce5d488d773919ec01","99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","b5ef97d6974dc1246197361e661027adb2625a8544bb406d5ad1daae0fe47a22","8b8b92781a6bf150f9ee83f3d8ee278b6cdb98b8308c7ab3413684fc5d9078ef","7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","689390db63cb282e6d0e5ce9b8f1ec2ec0912d0e2e6dac7235699a15ad17d339","f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","d928324d17146fce30b99a28d1d6b48648feac72bbd23641d3ce5ac34aefdfee","142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","c33a88f2578e8df2fdf36c6a0482bbee615eb3234c8f084ba31a9a96bd306b7f","22cca068109eb0e6b4f8acc3fe638d1e6ac277e2044246438763319792b546a1","8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","66cd33c4151ea27f6e17c6071652eadde9da1b3637dae65fd060212211c695ce","5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"7fd7fcbf021a5845bdd9397d4649fcf2fe17152d2098140fc723099a215d19ad","affectsGlobalScope":true},"df3389f71a71a38bc931aaf1ef97a65fada98f0a27f19dd12f8b8de2b0f4e461","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"a1d2988ad9d2aef7b9915a22b5e52c165c83a878f2851c35621409046bbe3c05","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"674168aa3db414ea0a19b2a31d901b2d49705c7a495e43ffdc96928543010f8c","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","afb1701fd4be413a8a5a88df6befdd4510c30a31372c07a4138facf61594c66d","87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"0666f4c99b8688c7be5956df8fecf5d1779d3b22f8f2a88258ae7072c7b6026f","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7424817d5eb498771e6d1808d726ec38f75d2eaf3fa359edd5c0c540c52725c1","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","37dc027f781c75f0f546e329cfac7cf92a6b289f42458f47a9adc25e516b6839",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","b1879b3db28afe9ba769e84058e7d544c55322e69f34b928df96ec50f17a051d","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","e7f68ad89f943f167d40e045423f035beed4f91d4ceeec02381289211af1c644","72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","52ff5e1ea35c54428b46c75fd14f87b7a7158a8f4a1ecfc4a9b996a03185c738","605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","2b82adc9eead34b824a3f4dad315203fbfa56bee0061ccf9b485820606564f70","79cfed5eb33a189e2a590d4b4bb53ec0edd0624779d51126caae6395620a717d","d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","a1ca31e02359442c3e254204445cded3a4712e8830663a0fe06f894b8982ab7c","3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","2828dabf17a6507d39ebcc58fef847e111dcf2d51b8e4ff0d32732c72be032b3","c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","33395c26f51d1663fda112972df743324d1054fe2a932c85a8bd59d1c771c33e","6305acbe492b9882ec940f8f0c8e5d1e1395258852f99328efcb1cf1683ca817","7619b1f6087a4e9336b2c42bd784b05aa4a2204a364b60171e5a628f817a381e","15be9120572c9fbcd3c267bd93b4140354514c9e70734e6fcca65ff4a246f83a","412482ab85893cec1d6f26231359474d1f59f6339e2743c08da1b05fc1d12767","858e2315e58af0d28fcd7f141a2505aba6a76fd10378ba0ad169b0336fee33fc","02da6c1b34f4ae2120d70cf5f9268bf1aedf62e55529d34f5974f5a93655ce38","3ecf179ef1cc28f7f9b46c8d2e496d50b542c176e94ed0147bab147b4a961cd6","b145da03ce7e174af5ced2cbbd16e96d3d5c2212f9a90d3657b63a5650a73b7f","c7aadab66a2bc90eeb0ab145ca4daebcbc038e24359263de3b40e7b1c7affba6","99518dc06286877a7b716e0f22c1a72d3c62be42701324b49f27bcc03573efff","f4575fd196a7e33c7be9773a71bcc5fbe7182a2152be909f6b8e8e7ba2438f06","05cba5acd77a4384389b9c62739104b5a1693efd66e6abac6c5ffc53280ae777","acacda82ebd929fe2fe9e31a37f193fc8498a7393a1c31dc5ceb656e2b45b708","1b13e7c5c58ab894fe65b099b6d19bb8afae6d04252db1bf55fe6ba95a0af954","4355d326c3129e5853b56267903f294ad03e34cc28b75f96b80734882dedac80","37139a8d45342c05b6a5aa1698a2e8e882d6dca5fb9a77aa91f05ac04e92e70b","e37191297f1234d3ae54edbf174489f9a3091a05fe959724db36f8e58d21fb17","3fca8fb3aab1bc7abb9b1420f517e9012fdddcbe18803bea2dd48fad6c45e92e","d0b0779e0cac4809a9a3c764ba3bd68314de758765a8e3b9291fe1671bfeb8a1","d2116b5f989aa68e585ae261b9d6d836be6ed1be0b55b47336d9f3db34674e86","d79a227dd654be16d8006eac8b67212679d1df494dfe6da22ea0bd34a13e010c","b9c89b4a2435c171e0a9a56668f510a376cb7991eaecef08b619e6d484841735","e2efbe9ad735950e0536a93120106219a25f45ba0ab7984d58497b5c9d19330e","6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","00b9ff040025f6b00e0f4ac8305fea1809975b325af31541bd9d69fa3b5e57b1","9f96b9fd0362a7bfe6a3aa70baa883c47ae167469c904782c99ccc942f62f0dc","27dad95a76606bfd8f5c36b7c05bf49dd2e66bdbe03dba745426734f82346ae6","89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","55ae9554811525f24818e19bdc8779fa99df434be7c03e5fc47fa441315f0226","24abac81e9c60089a126704e936192b2309413b40a53d9da68dadd1dd107684e","f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","4e49cb98e2c4e546dd90fb6a867ef88978dea05502df92cb252078cdd407cd1d","e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","ac10457b51ee4a3173b7165c87c795eadd094e024f1d9f0b6f0c131126e3d903","468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","3e1e58eff1981ef808ead362d1586c132b309247cd14e3929fbd36d9ca80d3fe","cc32874a27100c32e3706d347eb4f435d6dd5c0d83e547c157352f977bbc6385","e45b069d58c9ac341d371b8bc3db4fa7351b9eee1731bffd651cfc1eb622f844","7f3c74caad25bfb6dfbf78c6fe194efcf8f79d1703d785fc05cd606fe0270525","54f3f7ff36384ca5c9e1627118b43df3014b7e0f62c9722619d19cdb7e43d608","2f346f1233bae487f1f9a11025fc73a1bf9093ee47980a9f4a75b84ea0bb7021","e04c5673b82d68376f57dea0e4a4fbacf6f1692c9382fb12b5fb2e93ce174c12","2350e4399e456a61e4340254b71fba87b02b76a403a502c649912865a249f14d","2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","d60d0eeebe3a5a7489e57b9d00d43868281014b0d8b180e29e2f664f1bfe873b","22a35275abc67f8aba44efc52b2f4b1abc2c94e183d36647fdab5a5e7c1bdf23","99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","32f19b665839b1382b21afc41917cda47a56e744cd3df9986b13a72746d1c522","8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","5421e0a46677dc1341e18fc803e2a7a16263edb5cd884f80dd252a541880a78c","3e5acc690e0232bb0a4ef8eb45faee0570151710a4354b4918b0c4f735f47402","2e2bc02af7b535d267be8cecbc5831466dd71c5af294401821791b26cb363c47","986affe0f60331f20df7d708ee097056b0973d85422ec2ce754af19c1fa4e4b1","8f06c2807459f1958b297f4ad09c6612d7dbd7997c9ccfc6ea384f7538e0cea8","a7de30cd043d7299bfe9daaca3732b086e734341587c3e923b01f3fd74d31126","78f7fad319e4ac305ffe8e03027423279b53a8af4db305096aa75d446b1ec7af","3bf58923a1d27819745bdad52bca1bdced9fef12cc0c7f8a3fd5f4e0206b684a","8fc11f102df58f03d36fcbf0da3efa37c177f5f18f534c76179ceef0c3a672cd","e6935ab0f64a886e778c12a54ed6e9075ce7e7f44723ff0d52020a654b025a09","9829af7653a29f1b85d3dd688a6c6256087c0b737b85d84b630e7f93fd420faf","3d9d985d41e536fcf79fc95082925c2f1ae5ade75814ad2bd70c0944747f7ac4","1ca20b41e94ad03bb6f8f83df06e48163596341bff5f00af561057ca1f940557","b0e6f1b1569779cf567317c2265d67460d1d3b4de4e79126533109d87dc16d50","18cb8be1326ffa4158abd8d84c9b0a189c0f52201f12f7af2d2af830c077f2bf","b08fc2b6ccd4d3db42af01b3c6390fc1e30dc1d95496d9a8ee5f9319c2e4883f","0de68916e23c1e3df800f9f61cdd7c506ceb0656fcbc245ee9974aad26786781","80c538ee6a62249e77ba3de07efb23d4a7ca8946499c065261bf5079f1cd3cf0","ad4277862bdcbe1cf5c1e0d43b39770e1ccc033da92f5b9ff75ca8c3a03a569b","46a86c47400a564df04a1604fcac41cb599ebbada392527a1462c9dfe4713d78","f342dcb96ad26855757929a9f6632704b7013f65786573d4fdcd4da09f475923","dcd467dc444953a537502d9e140d4f2dc13010664d4216cc8e6977b3c5c3efa3","ca476924dfa6120b807a14e0a8aea7b061b8bdaa7eecdb303d7957c769102e96","848fe622fac070f8af9255e5d63fe829e3da079cae30be48fb6deb5dbf2c27c6","f3bb275073b5db8931c042d347fdce888775436a4774836221af57fdccec32ff","03cb8cb2f8ef002a5cac9b8c9a0c02e5fd09de128b9769c5b920a6cbfc080087","3e5ebc3a6a938a03a361f4cdb9a26c9f5a1bac82b46273e11d5d37cd8eccc918","a0a7800e71c504c21f3051a29f0f6f948f0b8296c9ebffeb67033822aabf92e0","6a219f12b3e853398d51192736707e320699a355052687bad4729784649ff519","4294a84634c56529e67301a3258448019e41c101de6b9646ea41c0ecdc70df92","80fc027e10234b809a9a40086114a8154657dcb8478d58c85ef850592d352870","27f24ba43083d406b372e9eff72dbc378afa0503dac1c1dd32499cc92fc9cb22","12594611a054ca7fe69962f690a4e79922d563b4b434716eb855d63a9d11a78f","1440eca2d8bc47ebdbc5a901b369de1b7b39c3297e5b4ac9631899f49ea9740b","fc9897fbada879bda954603ea204c6e5df913262a90ad848b5efaab182b58033","93443b2da120bea58eb48bd7da86559d4cf868dc2d581eebf9b48b51ba1e8894","182f9553b74cf62425ef64d82075bf16452cc7096450aca1aa6a1e863594a45d","c2956026078814be6dc01515213aeb1eb816e81715085952bbc97b7c81fe3f6d","ac3a69c529ab256532825b08902aec65d0d88c66963e39ae19a3d214953aedc5","fe29108f3ddf7030c3d573c5226ebe03213170b3beca5200ca7cb33755184017","04d5bfb0a0eecd66c0b3f522477bf69065a9703be8300fbea5566a0fc4a97b9d","d5e3e13faca961679bed01d80bc38b3336e7de598ebf9b03ec7d31081af735ad","de05a488fb501de32c1ec0af2a6ddfe0fdef46935b9f4ffb3922d355b15da674","9f00f2bc49f0c10275a52cb4f9e2991860d8b7b0922bfab6eafe14178377aa72","af1e2889c68a697192a0ecbda332193f022032018158f890ad403b6513e9ec17","0e7c3660d1df392b6f6ae7fa697f0629ae4404e5b7bac05dd81136247aff32d5","d110a9869e09144198be68ed9224e3f509d8409a01d578ff1c471f92b0b4c58c","c6688fd4c2a8a24c9b80da3660a7a06b93ed37d12d84f3ba4aa071ffc125e75f","20efc25890a0b2f09e4d224afaaf84917baa77b1aee60d9dfd11ff8078d73f93","d00b48096854d711cee688e7ff1ca796c1bf0d27ca509633c2a98b85cc23d47d","30f116226d0e53c6cbbdbc967479d5c8036935f771b2af51987c2e8d4cc7fc6a","8be98ffc3c54fb40b220796b796388f8ade50c8ba813a811bffccf98006566d5","4e82eed3c1b5084132708ce030f8ec90b69e4b7bb844dcaacd808045ae24c0e2","eae8c7cbcb175b997ce8e76cd6e770eca5dba07228f6cb4a44e1b0a11eb87685","b3ded8e50b3cdf548d7c8d3b3b5b2105932b04a2f08b392564f4bc499407e4e5","4ed2d8fb4c598719985b8fbef65f7de9c3f5ae6a233fc0fe20bd00193c490908","6da51da9b74383988b89e17298ceca510357f63830f78b40f72afe4d5a9cee3e","512a079a1a3de2492c80aa599e173b2ea8cc6afb2800e3e99f14330b34155fe1","d311d4b15960a105004ffa532ef3efe0e76cda1b10a041e700c13d2bc6670a3e","8e3842ba15690ab4b340893a4552a8c3670b8f347fbb835afe14be98891eef10","9e7817283b8b1ca62652bbc10475e2e89df05b8ddc6ff4a8e32d65d9f68622e7","15911b87a2ad4b65b30c445802d55fa6186c66068603113042e8c3dfa4a35e2a","a9dc7b8d06b1f69d219f61fa3f7ac621e6e3a8d5a430e800cd7d1a755cc058c3","f8c496656cb5fd737931b4d6c60bd72a97c48f37c07dcb74a593dd24ac3f684a","abcb5db28886eec7437cb341a42fec07580fb1fbc927d1bd4f0f22b558a7aa9a","0fa43815d4b05eafe97c056dae73c313f23a9f00b559f1e942d042c7a04db93c","35ce79d85f0b4acf5aaf28d3d6441f62d28a0a759f367ff037cd4982d419627a","a02db6aabaa291a85cf52b0c3f02a75301b80be856db63d44af4feea2179f37b","e1e94e41f47a4496566a9f40e815687a2eca1e7b7910b67704813cf61248b869","557ba6713b2a6fefd943399d5fb6c64e315dc461e9e05eaa6300fdbeeda5d0a1","94d594a0f3ce879202ea19c736e1da53b60d14bf6affac40c72c783afdd8d350","c1b5c480e4d38377c82f9f517c12014d3d4475c0e607c4845e0836e0e89bbf7d","1a014a8365354f37ea245349a4361d3b46589be7921fe7f1dbf408cc0f084bab","87fc4a324b9fa5c9b93a13b5ae1b55ea390929ec1b0450afebff9620921a9cc1","73c0b8df0e282e26a53820f53502847a043bd77a9cda78782207d5349842fba2","5bae6e8aeb6486bc8503767978e4960e25ce1ea16b7e89c1ea4eed1c3ab62788","9f6ae8334c1667b7b6423dd61305df8625a801b557c592a6d5edd928b4cfdd67","128ac72686b702c32c7383bff9fe49bbf605ab2efb5ddec4f0cf0d63db2ba1f1","d6db974317fd9ff66a923555464850dcf87976054a7adacf09d53323f64686d1","bc5b413c85caaefb4e449a131ce3941e966e059361e936fb5611dddaaeb3e244","7df6dfe294fd23c1ab8482ba7957cad3cf3419df2c64dda1f258ec87f80aea5a","9af4db510139f651fd9262340e29bc1bbd5441fc1f5518af82f3277804913402","9fb5226917009e53461dd0211acc975c720e45d9d610629efda0c1c0162501c4","a9417a980a4300048d179d0295e5b7dd76e4db7b566344779ee576cbd084b3c4","b96760c030c41fa078b35ea05fc3e7e4d2a81710a8329271d42b6abc110d5dbe","ef8ff23609cec5eb95e2beb98132ad90c0c5075415b50228b12f89ffaf981a4a","1154ed167b954ffb24a95ec3b11b1519a597024e7fda1df63c144962bc523aaf","174a3381f98fc78c451528cb1aa1baaa37a51852ec6fa90d42efd876301537c1","2c0de27d99a9331cfac8bc5c6bbd174e0593628bf3df268faa6c4188962a9549","1a17bcbc124a098987f7b1adbbcd412f8372ecb37e352b1c50165dac439eee5e","0ef49170735d9e5902f55b72465accadd0db93cae52544e3c469cbc8fbdbf654","f68a30e88dfa7d12d8dd4609bc9d5226a31d260bf3526de5554feed3f0bf0cb6","1fffef141820a0556f60aa6050eccb17dbcdc29ecd8a17ee4366573fd9c96ce3","d2598c755c11170e3b5f85cd0c237033e783fd4896070c06c35b2246879612b8","8d2044a28963c6c85a2cf4e334eb49bb6f3dd0c0dfe316233148a9be74510a0e","4c1f2da4e18122d57a16e4c6ea4b6fe60ea4f65b14e77cb20339f9158b27ca12","54a4f21be5428d7bff9240efb4e8cae3cb771cad37f46911978e013ff7289238","10837df0382365c2544fb75cb9a8f6e481e68c64915362941b4ea4468fd0ef61","cc4483c79688bd3f69c11cb3299a07d5dcf87646c35b869c77cde553c42893cf","faf76eeb5dd5d4d1e37c6eb875d114fa97297c2b50b10e25066fed09e325a77a","b741703daf465b44177ef31cc637bde5cd5345e6c048d5807108e6e868182b01","44a4a02bd0a615d155878467c802be82fff67d57aac1cb194fd961917f3f3dce","393446ab3f0dd3449ad6fd4c8abd0c82b711c514b9e8dfbf75222bbc48eb0cb6","d8acc6f92c85e784acbbc72036156a4c1168a18cba5390c7d363040479c39396","c9485b531de1df38a9b2bd3a7377230d2c9f3390a9fc4fd1d20ec8aab34cca49","5eb09226bfa1928721a438e37c004647fc19d8d1f4817bddcc350e57fb32935f","5994ed389d7fc28c03dad647ecb62e5349160bde443b0c7a54e0e10d6368bcbd","e1ff7df643e1aa1dbf1863113a913358844ed66f1af452e774834b0008e578b2","c5114285d0283d05e09cd959e605a4f76e5816c2fbe712241993fd66496083e5","2752e949c871f2cbd146efa21ebc34e4693c0ac8020401f90a45d4e150682181","c349cea980e28566998972522156daac849af8a9e4a9d59074845e319b975f5d","0370682454d1d243b75a7c7031bc8589531a472e927b67854c1b53b55ee496ea","cf6b4dbb5a1ac9ece24761c3a08682029851b292b67113a93b5e2bfd2e64e49d","e8d703a520b11601c65524eeb17e59af832d33e0fba582509b7e3fa8f249e58f","cb2fea712720bb7951d7e5d63db8670bf4a400d3e0fb197bceb6ef44efe36ec3","d1b5663356da50b06bf7a8c547dd30161d6435f8061678437c06efe2d1c3f66c","ef19d5fe42541f8b529bccd10f488d12caefa3b57a0deb1ed6143219cba716b4","84b5e6269d7cf53008a479eeb533ef09d025eafb4febe3729301b8d4daf37ff2","04196b5d9edd60b9648daa329c3355d7c95f33b7e520e7835eb21002174a8b8c","f9f6a3cd16546a9c55e6a1b225a85099a08bc402c6ce6b1aad1a317b49efef24","47475a87d513df64e050c93405a9687befa68b5c8a4b43edd52b6cebdc749a8b","c8eeffebe6c2c6800f73aa59d1436d4dadbad7f3ddda02a831ffa66114c3122d","caf3f141f93cbf527ad18ecce326311d70342fe1e16ce93e5ce8d6bcdf02bd48","4283d88023e6e9645626475e392565464eae99068f17e324cfc40a27d10fe94f","51e3b73dea24e2a9638345fb7a2a7ef5d3aa2e7a285ad6bd446b45fab826def1","546157e2534fc81242dab0ed3d69f77c82a18442a2bf0899bdafb328cc9ccd8c","c78bb1275f640e4902ad5c3383ab4f54f73322a59c95924ab671125ba9546294","1cb0838371e8213ce116a1497bb86bcf01a11a755b77587980ee7cfb2d625ece","34e1b459752a9fcf8f339bbf9bc2f082dacdfa675d89a9ce72fd6eb617268a51","aaa9ceabf257eac2fe5c67b6d32e677fba8a61ca48d1486166f5ab156b37a8b3","10b322f5bc001bec9bf08513c978c120adb0abe3c82793b11bdaf75873426c05","51b4efdc8dc92bc6ae2c44d4edad265decad70e8577d5653fc7f85200cbf6c6e","ab159dda8873292919fb0d498cafd4c922c2969928eced2b834062b4ffc2d7c7","b66b28291dac0aff981ddb40d3f25140a45f013ecc16cdec6ee78f90819868ee","3e855437e99a09e54d2813e8e0ddcc78caf14dc9709c35ac93cdc35f2b581abd","ba6ca3e14b2aca78e2de7de8465b09169a5508e102affc883b3e310f5aa917c3","76af77ac761b423dea92681a31eae768aafa5082e009c1fe62657db763d3419b","f5a59c67869cfd6c042667544be36997d9a4c4979754291e8a1b4f8b9ad0437a","6df6afb0424a7c7581ee98a9333d30e893b943d0a4709b88f18c252ddc3101b4","59c2cbf84c22fae87f4f506f36a7258a72b931b602115067dfd6008ee526f8c0","1e09cd1bc6b6baa0733e1e799c4533105ea79cbb109937c71e8c870e14693216","0b60cfcd94fa9bd9fa58176650c7e4c72f99b9d30a50d0b55aa08b510276af96","ba25681012e5117866a2456dd3557e24aa5a946ed641126aa4469880db526883","2b1e058a8c3944890c7ce7c712ecfd0f2645420ee67537ac031d7afe6feda6e0","175dbcd1f226eebd93fd9628e9180fb537bb1171489b33db7b388ef0f4e73b37","69ec6331ee3a7cd6bade5d5f683f1705c1041ff77432aa18c50d2097e61f93db","06f34a0f2151b619314fc8a54e4352a40fd5606bda50623c326c3be365cc1ef9","43daa6baa2e6d2ccc7872f315d2ae15fb2cf936cf4d1a1d351254e7a33e3a4cc","8be65adcb2bf744b5714dd7a5d1b90ca16959448a1f227a8ebb7c7b52046b214","6c3d3586d8fff56a9763c47133b4a9230480534471b38c7a2f688eac5d819164","3eb8198bb1b66458644e4537a14012d9361ba3eb1de4b7604cf5f25299f64b08","42852f35ebc5733c0f09eb4cb495ed78a1a12f9664eb7cf7ae877acd999d885c","70a3659d557bb683091f9d318762a330a3acb3954f5e89e5134d24c9272192f1","d9fe2c804f7db2f19e4323601278b748dc2984798f265c37cd37bb84e6c88ab8","3525647a73ae2124fa8f353f0a078b44ff1ee6f82958c2bb507de61575f12fff","d7238315cbd18ebeed93f41ad756a0ed9759824b9b158c3d7a1e0b71682d8966","eeba7376ce9721610d3282a4159f3c60154b7b3877fb251f7b3211b085cfdc18","54b0cc65b2e86cc59adf157b32b4fde2143ac2ed733f91a26f06c90d93ed9fe6","788c870cac6b39980a5cc41bf610b1873952ecdd339b781f0687d42682ffc5dc","d51a2e050c8a131b13ec9330a0869e5ac75b9ac4ebde52d5f474e819510b5263","3544b854dccadff219b992b2e5dadfbd7a8e0b9815d6d56006775a17e6500568","6c034655fa83236bd779cacfc1d5b469d6e2150a1993e66ecca92376a8b2c6a7","6bd6933efe9d6263d9f1a534a28a8f88b1e4c331b95d85d39350cf02eca8dce0","658cf468a05b2b591fcd5455a76d9927face59ac4a21b4965982b3c234f5d289","6bf893d1b824bde22ee5880c0c760c1dd0a5163c38d22311441a3341b6965d2d","18006f71012652a98486900031259844ab599473acd3ea89052d9276f27e7c0f","91ace195acdd088787d4a6275977bb4f134d62d4871ba8416e260919894823c5","28b415e70f9da0346545b7d2bcf361844a8e5778bd6b45bc1a2859f99700ff5b","a905f2f6785e3971bd97c42191394209d97f2aefb11841f7353dd9789821fa8c","e099c5ebddf80ae7285d380c7dd3b5d49c1347346ced51ae121b846833a8d102","aec91730b9f4d83758b4a45596317d34d6ecdbe9330a44629f53af47641b96ee","99e1bf731cce29cd110adc28a624392fa79abffbcda9a1917fa9b4bd3660f061","18a3be03c31356b60ea1090bcc905d99e4983ca911cc70b34ad0b9b4d4e050c3","738ddac5ab5b61d70d3466f3906d6b3c83c8786e922c6e726a6597296181ae87","90d202ace592f7b51b131a5890ec93e4df774c8677a485391c280cef0ea53f48","b34e1861949a545916696ef40f4a7fe71793661e72dd4db5e04cacc60ef23f7a","9833a67663f960dc2d1908a19365ddde55c0651235596ac60d7078a9be6f6e56","2bcb8920601b80911430979b6db4a58a7908a31334e74e4e22b75c65edce3587","c3186dc74d62d0fb6fba29841ccbf995614992526c37fac5c082d0f28b351e54","2306daed18f7f59542a99857a678ef818058eefa30c2a556af123a1cf53889cd","b41ed9285a09710807ce2c423e038dfe538e46e9183c0c05aadc27bfb9ae256a","56b9f9de03f28eb5922750a213d3f47b21a4f00a48c7c9b89bf1733623873d3a","2bdd736078e445858cb1d9df809ff3a2f00445d78664dd70b6794fb2156bdd53","ee95a2f43a60f3ea554792d507fa3c23351ab81e1abb081a88e7beb44ae6cbad","74ffa4541a56571f379060acaf9ab86da6c889dfe1f588425807e0117e62bba5","cf4dc15ca9dc6c0995dd2a9264e5ec37d09d9d551c85f395034e812abdf60a99","73e8b003f39c7ce46d2811749dab1dd1b309235fd5c277bd672c30a98b5cf90f","4cb49e79595c6413fcb01af55a8a574705bf385bd2ec5cf8b777778952e2914a","d6b44382b2670f38c8473e7c16b6e8a9bfa546b396b920afc4c53410eeb22abf","3b5c6f451b7ad87e3fcd2008d3a6cb69bd33803e541e9c0fe35754201389158f","8329556a2e85e3c3ff3dff43141790ff624b0f5138cedec5bb793164cf8b088f","4c889ce7e61ca7f3b7733e0d2be80b3af373e080c922e04639aa25f22963ae63","bf993f38479da270c1b2acdeb1a7903a9e88a190813c961a4d76186a344efaea","7232467057ec57666b884924f84fd21cd3a79cc826430c312e61a5bc5758f879","77c4c9f71f3736ed179043a72c4fad9832023855804fbe5261a956428b26a7a6","f5aa57712223d7438799be67b0c4a0e5ac3841f6397b5e692673944374f58a83","774c37f8faed74c238915868ccc36d0afedfbafb1d2329d6a230966457f57cbd","bc41b711477270e8d6f1110d57863284d084b089a22592c7c09df8d4cc3d1d20","ff405ec0cc453987823304b18b82dbe3e68e6f8bd2e56f5041c41effcc4ce717","228ed3721f42cc25bfebceef33754ce4766414d975ff71d012f01f141dbe3549","08985cdb65bbfe3c70d0037794a3d0f0a5613f55c278c77277a7acc17205db57","22bdefb6b2107006ab203073218566443a52ab65eb5e4e8e86c3d38efe776588","8041e2d425e0fcfd4af90fc1718bc4f2f9ac438000c0ecb1ec493844dec33c19","c86fea295c21ea01c93410eba2ec6e4f918b97d0c3bf9f1bb1960eabe417e7eb","05d41b3e7789381ff4d7f06d8739bf54cc8e75b835cb28f22e59c1d212e48ff3","6fbcfc270125b77808679b682663c7c6ad36518f5a528c5f7258bcd635096770","9d3bd4ee558de42e9d8434f7293b404c4b7a09b344e77c36bbe959696328d594","f63be9b46a22ee5894316cf71a4ba7581809dd98cf046109060a1214ee9e2977","dd3cc41b5764c9435b7cae3cc830be4ee6071f41a607188e43aa1edeba4fbb3e","b2dbb9485701a1d8250d9a35b74afd41b9a403c32484ed40ed195e8aa369ae70","5aa7565991c306061181bd0148c458bcce3472d912e2af6a98a0a54904cd84fc","9629e70ae80485928a562adb978890c53c7be47c3b3624dbb82641e1da48fd2f","c33d86e1d4753d035c4ea8d0fdb2377043bc894e4227be3ceabc8e6a5411ab2e","f9ec74382c95cbc85804daf0e9dabed56511a6dfb72f8a2868aa46a0b9b5eafc","be32c0a0576265a4dee467f328c5945805a832e6268d312ed768cae1f2666fa6","af9692ce3b9db8b94dcfbaa672cb6a87472f8c909b83b5aeea043d6e53e8b107","782f2628a998fd03f4ccbe9884da532b8c9be645077556e235149ca9e6bd8c7d","269b7db8b769d5677f8d5d219e74ea2390b72ea2c65676b307e172e8f605a74a","ae731d469fae328ba73d6928e4466b72e3966f92f14cd1a711f9a489c6f93839","90878ed33999d4ff8da72bd2ca3efb1cde76d81940767adc8c229a70eb9332b2","d7236656e70e3a7005dba52aa27b2c989ba676aff1cab0863795ac6185f8d54f","e327901e9f31d1ad13928a95d95604ee4917d72ad96092da65612879d89aba42","868914e3630910e58d4ad917f44b045d05303adc113931e4b197357f59c3e93e","7d59adb080be18e595f1ce421fc50facd0073672b8e67abac5665ba7376b29b9","275344839c4df9f991bcf5d99c98d61ef3ce3425421e63eeb4641f544cb76e25","c4f1cc0bd56665694e010a6096a1d31b689fa33a4dd2e3aa591c4e343dd5181c","81c3d9b4d90902aa6b3cbd22e4d956b6eb5c46c4ea2d42c8ff63201c3e9676da","5bfc3a4bd84a6f4b992b3d285193a8140c80bbb49d50a98c4f28ad14d10e0acc","a7cf6a2391061ca613649bc3497596f96c1e933f7b166fa9b6856022b68783ab","864c844c424536df0f6f745101d90d69dd14b36aa8bd6dde11268bb91e7de88e","c74a70a215bbd8b763610f195459193ab05c877b3654e74f6c8881848b9ddb7f","3fa94513af13055cd79ea0b70078521e4484e576f8973e0712db9aab2f5dd436","48ffc1a6b67d61110c44d786d520a0cba81bb89667c7cdc35d4157263bfb7175","7cb4007e1e7b6192af196dc1dacd29a0c3adc44df23190752bef6cbbc94b5e0b","3d409649b4e73004b7561219ce791874818239913cac47accc083fad58f4f985","051908114dee3ca6d0250aacb0a4a201e60f458085177d5eda1fc3cde2e570f3","3e8240b75f97eb4495679f6031fb02ad889a43017cae4b17d572324513559372","d82609394127fb33eed0b58e33f8a0f55b62b21c2b6c10f1d7348b4781e392cb","b0f8a6436fbaf3fb7b707e2551b3029650bfaeb51d4b98e089e9a104d5b559b5","eae0ac4f87d56dcf9fbcf9314540cc1447e7a206eee8371b44afa3e2911e520c","b585e7131070c77b28cc682f9b1be6710e5506c196a4b6b94c3028eb865de4a7","b92ac4cc40d551450a87f9154a8d088e31cff02c36e81db2976d9ff070ba9929","6f99b4a552fbdc6afd36d695201712901d9b3f009e340db8b8d1d3415f2776f5","43700e8832b12f82e6f519b56fae2695e93bb18dddb485ddea6583a0d1482992","e8165ea64af5de7f400d851aeea5703a3b8ac021c08bebc958859d341fa53387","6db546ea3ced87efda943e6016c2a748e150941a0704af013dfe535936e820e1","f521c4293b6d8f097e885be50c2fef97de3dd512ad26f978360bb70c766e7eae","a0666dfd499f319cc51a1e6d9722ed9c830b040801427bbdd2984b73f98d292a","a7d86611d7882643dd8c529d56d2e2b698afd3a13a5adc2d9e8157b57927c0da","7e4615c366c93399f288c7bfbaa00a1dc123578be9d8ac96b15d489efc3f4851","f2e6c87a2c322ee1473cb0bd776eb20ee7bff041bc56619e5d245134ab73e83d","ee89bc94431b2dfaf6a7e690f8d9a5473b9d61de4ddcb637217d11229fe5b69f","a19c1014936f60281156dd4798395ad4ab26b7578b5a6a062b344a3e924a4333","5608be84dd2ca55fc6d9b6da43f67194182f40af00291198b6487229403a98fe","4a800f1d740379122c473c18343058f4bd63c3dffdef4d0edba668caa9c75f54","8e6868a58ca21e92e09017440fdb42ebfe78361803be2c1e7f49883b7113fdc2","2fbb72a22faefa3c9ae0dfb2a7e83d7b3d82ec625a74a8800a9da973511b0672","3e8c1a811bad9e5cd313c3d90c39a99867befa746098cdad81a9578ac3392541","d88f78b4e272864f414d98e5ed0996cd09f7a3bb01c5b7528320386f7383153d","0b9c34da2c6f0170e6a357112b91f2351712c5a537b76e42adfee9a91308b122","47adac87ec85a52ed2562cb4a3b441383551727ed802e471aa05c12e7cc7e27e","d1cacf181763c5d0960986f6d0abd1a36fc58fc06a707c9f5060b6b5526179ca","92610d503212366ff87801c2b9dc2d1bccfa427f175261a5c11331bc3588bb3f","805e2737ce5d94d7da549ed51dfa2e27c2f06114b19573687e9bde355a20f0ff","77fece0e88132fb5383810d303de6152ea8f2ff1ed2cd4ac1abd69a7fc570cc5","a37b576e17cf09938090a0e7feaec52d5091a1d2bbd73d7335d350e5f0e8be95","98971aa63683469692fef990fcba8b7ba3bae3077de26ac4be3e1545d09874b8","c6d36fa611917b6177e9c103a2719a61421044fb81cdd0accd19eba08d1b54de","77081112c1ca3ad1670df79cdfd28a1f2fd6334a593623aaf7268c353798e5c3","5eb39c56462b29c90cb373676a9a9a179f348a8684b85990367b3bbc6be5a6e9","52252b11bcbfaeb4c04dc9ec92ea3f1481684eee62c0c913e8ff1421dc0807e5","731d07940d9b4313122e6cc58829ea57dcc5748003df9a0cad7eb444b0644685","b3ead4874138ce39966238b97f758fdb06f56a14df3f5e538d77596195ece0b5","032b40b5529f2ecce0524974dbec04e9c674278ae39760b2ee0d7fce1bb0b165","c25736b0cb086cd2afa4206c11959cb8141cea9700f95a766ad37c2712b7772b","033c269cd9631b3f56bb69a9f912c1f0d6f83cf2cff4d436ee1c98f6e655e3b5","bd6d692a4a950abbfabe29131420abe804e7f3cc187c3c451f9811e9cf4408ce","a9b6411417d4bffd9a89c41dc9dedda7d39fb4fa378eaa0ab55ec9ea1a94eb6a","1329e7cd7aca4d223ef5a088d82bc3f6f302ce70581c8d3823a050ea155eec3b","09248c76437c5b1efce189b4050c398f76a9385135af75c5fb46308b0d1432e0","b8df115bf7b30cceeb4550c0be507082b9930ee6268539a1a1aaffb0791cc299","dde00f41a2d2b1e70df6df8ac33de7cb3a658956212c7bee326245cc01c990c2","115d092e2748990ff0f67f376f47e9a45a2f21f7c7784102419c14b32c4362d1","bad694fd79dc34f31d401f890c05f5423232bff88f2c3aa8b14eb6c809d7eeda","5cd5a999e218c635ea6c3e0d64da34a0f112757e793f29bc097fd18b5267f427","cc14b99b4e1bbedab2e3fbf058ed95231d8ced691f0645f2a206c32464f1bd7b","e6db934da4b03c1f4f1da6f4165a981ec004e9e7d956c585775326b392d4d886","53e65282ab040a9f535f4ad2e3c8d8346034d8d69941370886d17055874b348d","6ecb85c8cbb289fe72e1d302684e659cc01ef76ae8e0ad01e8b2203706af1d56","35ab64ba795a16668247552da22f2efe1c5fbc5bc775392c534747be7f91df04","34283015304de5df8d6e3740b9bca58e40513ec6333b3fb0a3fa3aa4c43b856b","4a397c8a3d1cccf28751bcca469d57faeb637e76b74f6826e76ad66a3c57c7b8","34c1bb0d4cf216f2acb3d013ad2c79f906fe89ce829e23a899029dfa738f97e0","b70b5b3d14d125d6dcc16a9ac43cafe8801f644954ac36cb2918723f9cbbd4fe","b50f05738b1e82cbb7318eb35a7aaf25036f5585b75bbf4377cfa2bad15c40bf","c682cb23f38a786bb37901b3f64727bd3c6210292f5bb36f3b11b63fbe2b23ee","d6592cf10dc7797d138af32800d53ff4707fdcd6e053812ce701404f5f533351","997f6604cd3d35281083706aa2862e8181ed1929a6cbb004c087557d6c7f23c4","9584dd669a3bf285e079502ebbb683e7da0bf7f7c1eb3d63f6ef929350667541","41a10e2db052a8bf53ed4d933d9b4f5caa30bdaee5a9d978af95f6641ce44860","1dd236a02d5974092780f456750107a3158124002de00ca17342f3a4819e297b","652e51858bafd77e1abcc4d4e9d5e48cc4426c3dd2910021abd8cc664961e135","8c5c602045ffdfebeffc7a71cd2bf201fe147a371274b5fcbded765a92f2af78","6392ce794eef6f9b57818264bb0eeb24a46cf923f7695a957c15d3d087fbb6cc","b10f123e8100aa98723c133af16f1226a6360ec5b6990a0fe82b165d289549db","93d20368cdb5fff7f7398bfc9b2b474b2a2d5867277a0631a33b7db7fd53d5b4","b1e69b9834104482fabf7fba40e86a282ee10e0600ffd75123622f4610b0ef9e","ad5bb6c450cb574289db945ff82be103ed5d0ad8ee8c76164cee7999c695ae01","217761e8a5482b3ad20588a801521c2f5f9f7fb2fbb416d4eff3aff9b57f8471","7ad780687331f05998c62277d73b6f15ee3e8045b0187a515ffc49c0ad993606","e9aa5ccb42e118f5418721d2ac8c0ebdebeb9502007db9b4c1b7c9b8d493013e","d300868212b3cc4d13228f5dc2e9880d5959dc742c0c55be2fc43bcda8504c8f","0c55daad827669843bd2401f1ddd163b74d9f922680b08ae6e162ceb6c11b078","fe45a9bc654dfd1550c9466c0dad9c8017f2626476ed9d25c65ddfc1943f6b74","03abcbc7b5b68887525be71a194dd7f9f68276b5fb5b8989abae9a91585ddc33","5055e86e689cfe39104ab71298757e5aac839c2ea9d1f12299e76fa79303d47d","42266c387025558423c19d624f671352aac3e449c23906cb636f9ae317b72d7e","e578a36b3683d233e045a85c9adb0f10e83d2b48f777b9c05fbc363ccc6bdd34","0235d0ba0c7b64244d4703b7d6cabd88ba809abeb01da0c13e9ed111bf5e7059","9b21e8a79f4213c1cf29f3c408f85a622f9eb6f4902549ccb9a2c00717a0b220","d556e498591413e254793f9d64d3108b369a97bd50f9dd4015b5552888e975ef","e2c652c7a45072e408c1749908ca39528d3a9a0eb6634a8999b8cf0e35ef20c8","ec08224b320739d26aaf61cead7f1e0f82e6581df0216f6fe048aa6f5042cb8c","4eadaa271acca9bd20fc6ac1ea5e4bf9ab6698b8ccf3ec07c33df4970f8130f1","3a0a397189726902c046697f7bf38fecb557a79d5a644aac9ec983024b4c3d17","46f1df33bc635aa84313579ff51a7269707b58a8a32728e4e5fc7ab47816b44a","5ecd8fdeb6c87db9c320eefbfa9ea27efccbdce853ed38d5ba58e2da482edf1f","19a4d116285e7d77e91411966930761a2204ce2d20915afdb12652681a4a88d7","c30ca82112586c5dae7477d7e82cc91a7e0d1e658c581f9ec3df07c4485bba84","68fca1813d17ee736f41124ccc958d0364cdef79ad1222951bfacc36b2630a58","7813329e568df1d42e5a6c52312b1a7c69700e35a561cf085158c345be155b22","561067dc7b6b7635277d3cad0a0e11f698d377063dd2c15dfac43ef78847eef4","438247e782a8a9b9abdce618e963667cf95157cc6d3f5194a452d3c7d9e9655c","253f79802f33f405c1807f33efa7d78e0a26143ee694297d4f8e1477c7ed5e28","f1e8eca509487806fdf979349cfcdb6ffdeb20f11b7e95666c4309d12dcd9ba6","83724b26b711d85d6cfc9dd92fd5d666ffaae27fcfb1a0110401b98814ea26c0","869a27c929366c3c864013a991fd4c4c86af73eba25513e8ae915f814d3d349c","756e3f41a7f2501a34e1a070283c7f5550e200eeb43fed3c806e3f2edd924a75","59935cc13dcb7c3c7825e770a61e6696bfd11b65e3e47c28acc410dbdf8461c0","85e2808cc73ab3ac07774802b34a6ff0d7e1e46c26de7bc2dbe08e04b3340edb","f766e5cdea938e0c9d214533fd4501ab0ee23ab4efca9edba334fa02d2869f11","eb380820a3a1feda3a182a3d078da18e0d5b7da08ae531ce11133a84b479678c","7fba5cc3088ad9acada3daeff52dae0f2cac8d84d19508abd78af5924dc96bea","14176cfdbc3d1d633ad9b5daf044ab4c7d0d73be61ca2f14388800e21f0989cd","a24f510afe4d938d625a4b5a5374ac0478e56305e8743dd7d37d86d709754286","648acdbcbcd01b1a91e8b0ad390ed59fada685977f44b90e148b65bd8159dfe8","8309898ba0ac6f2856a94a11723d499091253a6d5df34ddebc6149d43480bfd2","a317ae0eb092da3fd799d1717a2da319a74abebe85e2914cb259222969f95705","36d76e2dbd5f5243bd566b018c589e2ba707e34b24ec7d285feb11ba6bf23fbe","f780879a2ca63dbb59b36f772bc28dccd2840f1377d8d632e8c978b99c26a45f","335c2e013b572967a9a282a70f9dded38631189b992381f1df50e966c7f315d6","8b7a519edbd0b7654491300d8e3cbd2cb3ef921003569ca39ebd33e77479bb99","c90f8038c75600e55db93d97bab73c0ab8fb618d75392d1d1ad32e2f6e9c7908","ca083f3bf68e813b5bded56ecbf177636aa75833eb86c7b40e3d75b8ce4c2f78","3c8bf00283ef468da8389119d3f5662c81106e302c8810f40ea86b1018df647e","67b248e4bac845c5139898b44cbd3e1213674bcc9831039701b5f0f957243a24","63d49516f359186f7b3e3115f2c829ed75c319b34022c97b56beead032a073b7","9f5f256c7b5cc4a98ef557ea9720f81e96319d569f731c897ddb4514936242b4","a20ded6c920f6e566537e93d69cbad79bc57d7e3ce85686003078cf88c1c9cfc","40b2d781df7b4a76d33454cb917c3883655ec1d8d05424b7a80d01610ad5082f","703ea2acd8b4741248897a5709cd46e22fcd9d13f01ff3481322a86505f0b77c","e09c56f8c446225e061b53cb2f95fcbbc8555483ab29165f6b0f39bc82c8d773","51ebaff0cba6b3adf43f13b57bb731d56946cabd06d14cf9dfc7c5eaa8f95770","d5cb1de6b2e971bd60a936d95a0e0f99803b248c7dde1091cd9d21f992931543","6e2533e27eba5ff02d6eed37e0a7eb69ae7982e0f72fd8f74c90ab201f061867","58c62e415bf74b1423bf443587e33d7951a8bf19d7b03073f26e86d9b43ba9ea","dd6ec67ad168e92b8bf79ba975c6e0be8c60e403ba704d1c1b31a6059c12f967","bcaf468eea143f8e68ca40e5da58d640656b4f36697170c339042500be78ac5d","92de961d1db5fe075db8c0b6414a6eec430adaf9022465fe9d0a23f437aafcb3","7610ecdae59cea1a8db7580941ebc24d522d8ac1751ce718a6af22d41e1a1279","7355edff7686f91edbca25e0fe9d6c3359df2520d48d3dc6d857aa47047f8ddf","9a4e56ec89f4716609ca2cb5b92798adbdbabd7167e2738f85597685d8211964","b25556c4111afad4cb174aa4674db2e5b23a6b191dc6a3e42c7c3417ea446a68","f9568a3a6c74013aee8b09d73ef04175596b51ce6f5d9dcd4885418170fe9306","bd3910ccd4fcd05ebd83fbfeb62f5a82a6674c85c6c0e4755c16298df7abe4d7","7c0541d0addc3007e5f5776023d5e6e44f96eae0684cdabe59ef04f2a294b116","70137204b720e4dd1b81260a70578f0f4f417c53837f8a13859b2f58e20d7150","b28b6875a761fd153ebf120fecb359660de80fd36e90c9b3d72a12318bd5d789","56d092bd6225f6e67d9acab3fd65ce0a4edb36cadba2f0370e67322e2f6f1bc8","a4709d5d466ad8dcf4ddccb905ad95348131df1616f964185be9739f96526bde","73b0fd6255f24e82be861f800a264f0175984062b6ccca3052578b03ed6f397b","4a3f7c6f02cb01eb7a9800548b41cfa03a57e476fc92a72869983f37efa8067a","3193a439d80d6c4fb7916d5305305fa72836fdd65a67b56064abf1b02161014d","bc0b17d3fd0e34083fbc886367ed53563b569d1d05214f60b21117e2dbfb7fdd","c1cc2a1ac9ae043fd05e07193d408c0f0bf4628e54c19871621ce1049d4c200e","d005c21b9c42bd1ccde99f183dc2d3c992be407aa63c4ba3371e4f81cf36b2aa","9a7638d62db8cfa1466093d7d413fdf85c5e4a7c663ed76f2bfc8739c8e01505","e1659c8e9213467be39c6c6c6961b26fb6d88d401a077fdb4b1f02af3a35270d","c338859b98f8a11f80e3e47e33767299e7a4facdf0870c01c8694fa8fa048d16","4f64016165565f743356812e33ac22f5ef91891738927e413121f502b186210c","b113e9770d5be136c5e2add9e6cdf40d85051762ff2391f71d552975e66b1500","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","6ecc423e71318bafbd230e6059e082c377170dfc7e02fccfa600586f8604d452","772f9bdd2bf50c9c01b0506001545e9b878faa7394ad6e7d90b49b179a024584","f204b03cb07517d71715ac8bc7552542bfab395adb53e31c07fbc67de6856de1","7467736a77548887faa90a7d0e074459810a5db4bbc6de302a2be6c05287ccae","39504a2c1278ee4d0dc1a34e27c80e58b4c53c08c87e3a7fc924f18c936bebb5","cd1ccdd9fd7980d43dfede5d42ee3d18064baed98b136089cf7c8221d562f058","d60f9a4fd1e734e7b79517f02622426ea1000deb7d6549dfdece043353691a4e","403d28b5e5f8fcff795ac038902033ec5890143e950af45bd91a3ed231e8b59c","c73b59f91088c00886d44ca296d53a75c263c3bda31e3b2f37ceb137382282be","e7aa2c584edb0970cb4bb01eb10344200286055f9a22bc3dadcc5a1f9199af3e","bfeb476eb0049185cb94c2bfcadb3ce1190554bbcf170d2bf7c68ed9bb00458e","ae23a65a2b664ffe979b0a2a98842e10bdf3af67a356f14bbc9d77eb3ab13585","eccf6ad2a8624329653896e8dbd03f30756cbd902a81b5d3942d6cf0e1a21575","1930c964051c04b4b5475702613cd5a27fcc2d33057aa946ff52bfca990dbc84","2793d525d79404df346e4ef58a82f9b6d28a7650beeb17378cd121c45ba03f02","62463aa3d299ae0cdc5473d2ac32213a05753c3adce87a8801c6d2b114a64116","c9c2eabaad71c534d7de16385977f95184fdf3ddd0339dadbd5d599488d94f90","bdf0a372e233a8f5ab5daba2763ab8897e1044d735c1698a261b8e2ab08d8d13","8f4469dd750d15f72ba66876c8bc429d3c9ce49599a13f868a427d6681d45351","9026f7ee47fa7dc96ad6e527dd65fb975951ce2dcb8bf4c3206f9886c2d341dc","f689c0633e8c95f550d36af943d775f3fae3dac81a28714b45c7af0bbb76a980","fef736cfb404b4db9aa942f377dbbac6edb76d18aabd3b647713fa75da8939e9","45659c92e49dfca4601acc7e57fbb03a71513c69768984baf86ead8d20387a01","0239d8f6a3f51b26cbdbb9362f4fde35651c6bd0ff3d9fc09ee4a2da6065cb4e","6e5ab399ec7bd61d4f86421cc6074fd904379c3923706c899d15146e4f9a08c8","fa38b6d647d2cd53ed708b8f573692463e54cd65a5d5cb6890312d369925f32d","df343f5de08f5b607a3c7954ff1b512b7fa983d561e136cce0b6dc6849602a15","8fc97ef271771dc6f81a9c846d007ac4f0cb5779e3f441c1de54dfda5046fe7b","b5a060e2a4c54695076f871ddc0c91a0ff8eea1262177c4ede5593acbf1ca3bb","e711a3bd7ca41fb29b7a5c3f96373839d867578859e64c3688cfad603dc6c879","1c225a18846203fafc4334658715b0d3fd3ee842c4cfd42e628a535eda17730d","7ce93da38595d1caf57452d57e0733474564c2b290459d34f6e9dcf66e2d8beb","b251114717c08c462c1a8388155ded58cbdfbadc13488b775a4eaaa59863dc46","f3a2902e84ebdef6525ed6bf116387a1256ea9ae8eeb36c22f070b7c9ea4cf09","33bb0d96cea9782d701332e6b7390f8efae3af92fd3e2aa2ac45e4a610e705d6","ae3e98448468e46474d817b5ebe74db11ab22c2feb60e292d96ce1a4ee963623","f0a2fdee9e801ac9320a8660dd6b8a930bf8c5b658d390ae0feafdba8b633688","7beb7f04f6186bdac5e622d44e4cac38d9f2b9fcad984b10d3762e369524dd77","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","cd8d08a3cae3dc5a373579c1aecac0c4a7d46125e6733e5b3a92174ee46d89ca","9c513c2c14ea3263fed2d556ea7aa50b48cf2a544e6a0757ed2e73fd4bfdf40d","3a409bb108ae071dacff42b554da073f06e76c960c590bf009be78ed7162e0ae","5f4c73beb19428abd42ab1059c0236b0587b04e7113a88290aa6b4cf971aad35","fc8ff6ea835e078664778781c7a59335dac3ceeb05676ac7b934afe98ed9cbad","08d35f7559e341980db1b189b795b8642c51256ea38b3b32cb591c21a797ab04","aa4a392782038dcfbc9c29a737aaafd53d8a088f006863b01ff727fe78026dc6","faa456c0a246dff581f1a1a91376ac2177f90218b8a869ee09ca01a70c5624c6","ab6e3a48430aede233c1377677f126168554a28109b7f15a8028454e64d99603","f4a896e6eba41dfc447bb3dda91867aa13acd27ec642d2a6bbd3e1d06cb1c467","94de0d54839ef77a2575690a9f6b1997fd382e81d5acb45252b7740d4c494f55","fc38e7081801b120cc8b9174e830a18742a648c4c5e2f1e1205ce2c703943050","ab8a129f69a3584e80a909cd2d067f0ef39f140d758f74256ca45a01e70eeba8","688b5016530c3b1d369b2850b8271cba85117c966d894598be6d2af39788860c","f5845a29a9bcddb41842bb9b8a5c05641609997bd3b1c9bf3584428a14fcfd73","2f31f8f7fea8969b12d8112e3b9daaf4fe2aa0b8ba510e9b83cea2f120854767","8a39cc95abe8e1944e2542bf6e5e5a358d40a04fe8a1de5937f0cc8f16555a44","1f68bb63e802ba99c445e1fc2ca4a6484ef8130a65cb45abb3ec4871063ed31a","04af48d8e537f4d5a1d73b972dcd24aaddf41a492c8095c7d6210bf5e4c2f670","0b5350188d15f0430ec2fa2c7636ea179decbaee96eb2fc9dc61085a06ae5650","b8ad793dc17938bc462812e3522bbd3d62519d91d9b4a6422bed1383c2d3eb42","8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","6c6bd91368169cfa94b4f8cc64ebca2b050685ec76bc4082c44ce125b5530cca","f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","a74519588a22a1c254c2853ba4dc82d0dfc1da22ad7ac7fd6feb6a91236ef5d1","1803e48a3ec919ccafbcafeef5e410776ca0644ae8c6c87beca4c92d8a964434","875c43c5409e197e72ee517cb1f8fd358406b4adf058dbdc1e50c8db93d68f26","8854713984b9588eac1cab69c9e2a6e1a33760d9a2d182169059991914dd8577","e333d487ca89f26eafb95ea4b59bea8ba26b357e9f2fd3728be81d999f9e8cf6","2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","30676a61ef0eca261117e20257cd3ac49803301afc9a29c543abf34930202933","981379335e8bb8e39196931acc39ff446922c964ac0998b61caac8e242068d31","8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","d2d58166965f631fa203f405f3713b0f86f1f8b80755e9daea43057a25311e16","ce7dbf31739cc7bca35ca50e4f0cbd75cd31fd6c05c66841f8748e225dc73aaf","942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","6f6bdb523e5162216efc36ebba4f1ef8e845f1a9e55f15387df8e85206448aee","aa2d6531a04d6379318d29891de396f61ccc171bfd2f8448cc1649c184becdf2","d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","ab710f1ee2866e473454a348cffd8d5486e3c07c255f214e19e59a4f17eece4d","db7ff3459e80382c61441ea9171f183252b6acc82957ecb6285fff4dca55c585","4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","2a899aef0c6c94cc3537fe93ec8047647e77a3f52ee7cacda95a8c956d3623fb","ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","6a52170a5e4600bbb47a94a1dd9522dca7348ce591d8cdbb7d4fe3e23bbea461","6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","16c144a21cd99926eeba1605aec9984439e91aa864d1c210e176ca668f5f586a","af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","ef1aa3da0d6bc679154169c3830ab65441b615641a6e982410ee3cbdc66fa290","deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","aa4e4a68ce82cb642b78a1efa5768fb717ba3a019641d161c803a09c748813d1","77165b117f552be305d3bc2ef83424ff1e67afb22bfabd14ebebb3468c21fcaa","128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","d8ec19be7d6d3950992c3418f3a4aa2bcad144252bd7c0891462b5879f436e4e","f0a6974a1b5d0ceb79f5a589373cc2a291bd80a765eb2d799db6d8d51f2c2462","d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","2daf06d8e15cbca27baa6c106253b92dad96afd87af9996cf49a47103b97dc95","1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","8109e0580fc71dbefd6091b8825acf83209b6c07d3f54c33afeafab5e1f88844","d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","df29ade4994de2d9327a5f44a706bbe6103022a8f40316839afa38d3e078ee06","82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","f06737e21dd482dc9ea719299a665460aaa9d0f185c7302703468f46002cc16e","4c30a5cb3097befb9704d16aa4670e64e39ea69c5964a1433b9ffd32e1a5a3a1","1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","7b3a5e25bf3c51af55cb2986b89949317aa0f6cbfb5317edd7d4037fa52219a9","501ec1552723a1a93b1ac96ff78de1004e9df703bc17ce84acb1924db0b310a6","9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","dadfa5fd3d5c511ca6bfe240243b5cf2e0f87e44ea63e23c4b2fce253c0d4601","2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","784d7c4886d9943e3f8ac68e7a892a1eda70250ece611063cb1a5ad7b2a6e63b","d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","b94dbee2ff37d83eb578d3154289afa878f749101bd124172beece3d80a68178","2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed",{"version":"a5562ab0448c81180ef220ff104441a4d67187a2259e6008397e7531a821f0e7","affectsGlobalScope":true},"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","34118be360cdd3381bbebbfd4b093c394460c8fc5df40688d58f45d86ab1448b","104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","3c36c02fabbf2ccea547da6620dd278ee11c3ce4e9e75f208d1f7fbf15258964","0bf811dcbddc95e2551f704cfd2afc267bf619f8b8f2b7bdbb94df96ec3cbfe3","243e3c271aff347e8461255546750cf7d413585016c510e33907e42a754d6937","7c14e702387296711c1a829bc95052ff02f533d4aa27d53cc0186c795094a3a9","4c72d080623b3dcd8ebd41f38f7ac7804475510449d074ca9044a1cbe95517ae","579f8828da42ae02db6915a0223d23b0da07157ff484fecdbf8a96fffa0fa4df","3f17ea1a2d703cfe38e9fecf8d8606717128454d2889cef4458a175788ad1b60","3ae3b86c48ae3b092e5d5548acbf4416b427fed498730c227180b5b1a8aa86e3","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","160b24efb5a868df9c54f337656b4ef55fcbe0548fe15408e1c0630ec559c559","ae3b732d8838dc320007466f1bd4b3c6daa5e14a7a3f2fbe3f9945f3e70b9791","e104292a4f22b8d756c3bd37b166b84398045ec0d3bf45da259cdddcae6c4552","f634e4c7d5cdba8e092d98098033b311c8ef304038d815c63ffdb9f78f3f7bb7","1fd2fc553e46df652a76b7ba2d612f37c696a1a1c703b4880cb9ab1da5987a16","a7024dca5ee3c01125a2a1cde6c4487b6d1d7c51fe8ffffd23b08f3f46ea0538","23e8e8eea7056913d05eb76aaaacab7aad4fb97fb3937de8b0fc690867f4b14f","9d588a90031d6d3b90e2827e24d570a70b452d12e85e787625d9268ddd4df02d","60ec903590aa71c4f855f5a36c82c740220843d0ec7cd64a9fc52ff7aa17fd63","e324e0d81b457538fec39b1a331e72bfcc329dc14710b58df92f0ea42f4a939b","8e450ef4b030df046f366578f073bffd93a4c0f28c191fc30871261a52fbcb29","8d780892b30a63b7e699ab3dea7fe14c9b0e2d691a32de96e6f235259dd7754e","95477cb788104e300860db6970e102c1edd72af03b2438c0e703e0131a778af5","7fe2cd24fcfdf35c8c1265827152db78129146261c94b6b7e4d1f3276b0dfe1d","4271866b2e14336af4230ebaab52fcf6c216761513a297ca28a6a63e5f33c93d","f41f85cdb87d7d8e4280f54a6ee77808c1286ac2e232d0ac8d09d1e9aa20db50","63b9ad75c538210ed1b664ba9002775295c9e3706aad9dd7c95cb550e880a46b","877d1b2cdaf5e8575320eec44d1c5e14128dbca15e2e28dbb9378e064a9c3212","d4956b30435c1ffdda9db71d5e2187ecff3da720a2d10cfc856d071ddfa987e0","8a15db8a6f77abf5d6acbfcc7bdb09cd725776aaee3fa033ace7e223be38cb50","7c5cddaa1cc232f33f6bf7d0a96aeacaab7d7858ecb61ae25136624c6c1c758d","7cdeabe4ecfbd65ec72c85dd87398be467f50299e7498f0ac9d1d3e6756a53d0","04b524e5f3959484ef978e13978743fffbca584ee7bb67963290a0130c63dc44","f99f11ba2087ed27fdbc0d3fa981ae00c6f7945ace35800fcea67db207059d9d","4616ea42e34b609d6a26a6ce3c998caed06fa2b17529a147760482f45d462b92","35d886b8d896fe37b23c6baf6558f01f98fae7eb8e04ab72fda918d0281a5309","c93f9f4c623534e8802261fcbf980014e9f626f7af56f1586152e1b084d1a951","22754b781f18cf48d7c7588f8fe6b41cc4b8f2f0c77d4598859e720fb031713c","04a1ab8d5341b82713f930aef2da67efe859a2b851a6b2dcbe6a08ae4d1de7d2","3fd246dfb3ae59cf5244b7eedaea7dba7abf80ba51d129fd53e4cc17679660f7","abc76ababd66a4657600c3a4353853537b0920d75e72535acc0c806665546eff","c062e4d79dbfa3054bcefd7797d9d2697d85e416468ef31be8b682abac150637","e4d6a6442c5a8aadfbbb37b36d10c1a2c9b4325bb6bc354986b5ece0f48f4c74","e299a603707f9baae484e209e9e0ac1c5d65c095faaaabf168c60a7e91a4e960","35f9d0fb4b041db801997d4b8f6ac6a972e6f9d6726e5978405331344599a7ab","ff812d151cf8c94a33f931266ce101393f8d15eff91cbee83049f528b8cd39d0","44a936ef43580337d38d13b62305252dc7878eec9c4bf06e429fc0a698cf2802","1ce06e3279b666f27ac6e5534703396ca5ed706fc28dff249ace55cd84263d96","c67a67549a02d57c0c34292e9d63825031d46ec46aa570ff663d0d54bea8c2cf","768757fbef399c6f053d7f8f88a90e439fab50eeb21c04270a62e0f6b76cb9f3","b0d44de5a266a790b6ff19346bb06c01967cd070cc69de1c0b7e649cfedf1cae","79ba2d2fdf415255a4b4033f0da0a633efd3f5e1adb8af4176901b9a44d4d363","884dae99ce06dde2330d3ceb4e476786208930b0018ff6acd3de720b6b44928a","0e91e02f62e83dbe6b9b890bb67a4d6aacaa16502153d0b12af46b4e25e25c98","f6b2a8923f81819e59ce427da0087b5645b1a2784de013e44e8cde317e0c7f51","5bf595f68b7c1d46ae8385e3363c6e0d4695b6da58a84c6340489fc07ffc73f8","b87682ddc9e2c3714ca66991cdd86ff7e18cae6fd010742a93bd612a07d19697","e1c0bd0b35d258fcab7176fdfe9d2fe0b6c0a8c493a015a7fcbf5c93c83658b3","86bf2bfe29d0bc3fbc68e64c25ea6eab9bcb3c518ae941012ed75b1e87d391ae","b02fa868c4daa82af061f4c97c81e38dc95a3cac5a65f793d8504fbf3df7bd72","00b4f8b82e78f658b7e269c95d07e55d391235ce34d432764687441177ae7f64","c6e10ed499e3ecb1139928b1cf6ef86bde084551faafb03c079939a3668cf8aa","10ac50eaf9eb62c048efe576592b14830a757f7ea7ed28ee8deafc19c9845297","e75af112e5487476f7c427945fbd76ca46b28285586ad349a25731d196222d56","e91adad3da69c366d57067fcf234030b8a05bcf98c25a759a7a5cd22398ac201","d7d6e1974124a2dad1a1b816ba2436a95f44feeda0573d6c9fb355f590cf9086","464413fcd7e7a3e1d3f2676dc5ef4ebe211c10e3107e126d4516d79439e4e808","18f912e4672327b3dd17d70e91da6fcd79d497ba01dde9053a23e7691f56908c","2974e2f06de97e1d6e61d1462b54d7da2c03b3e8458ee4b3dc36273bc6dda990","d8c1697db4bb3234ff3f8481545284992f1516bc712421b81ee3ef3f226ae112","59b6cce93747f7eb2c0405d9f32b77874e059d9881ec8f1b65ff6c068fcce6f2","e2c3c3ca3818d610599392a9431e60ec021c5d59262ecd616538484990f6e331","e3cd60be3c4f95c43420be67eaa21637585b7c1a8129f9b39983bbd294f9513c",{"version":"d57be402cf1a3f1bd1852fc71b31ff54da497f64dcdcf8af9ad32435e3f32c1f","affectsGlobalScope":true},"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","5ce74f1b14102399a01b155faba8106a0e14e08bec55cfca7655fe9bece0ff4d","31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","3650e93e85cae11f25349c6a522fca35baf60cffaceb91e2b013601f72de0f63","67e755a9e49ab3ebbddf60a17643be554598d8ad59edeb0c28fdd87e41fc62b9","21351f2b5f9145dc08c8b4c73f32e1363ac5f1eedc58d9ab17b5b47e7ccb525c","28d89a74b9593fd98894d81c3ddf7e47603ce046dae71c98b830f6ee6e307c3f","50d2ecfdc270e2307cf57c2008043723a336e7f8d97d1d565dc0f0cdfa5b56b1","d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","0ec4c2ef46373bfbc46c2aac90c70a735d9caa7c209230478ad87d4421969538","04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","65e9fae8f22278e6c9ac5b016dbe1ead01b8014f66ce08a807741885d4bf01f1","8120d991ec4ded00b221e6d3b45bb6652b75baf03100522ea1602cd4f854e273","c9782043e87ef29513deeb64ddb512864e0675fcc3ba93156cb2951a93e1d649","ef768c6ebe9ed0a5dee843b5d18ffb3cf008fba32e50c4dd5533a297928adfd2","590425fe71d02a3315980abd12b982850a8dcd46c749140480a1ca1e59455abd","648de183e96896be0569460117d9c548897489be44245bdce9f1e423fe68ae1e","88e197b87e733de95cc36a3fb96ad9d735a68a0f43ffda13bf2ff9513b0b8cc6","1f81e01c7962d37428e30bda0165cf5343d5f4b5b2b97f98659fd628385a761c","dd056b2d5b2db1215e76f81557fb0a0db285b9c4b2c6c6c62c5462ba46e1dfe7","6b459544c41b22b83daf36ea2ac6c72373dceeabf47e1053c0aa2e9df029caf1","4c78b250316690a4a19ab37098cb56948a2f101c7fd19a718b5a9794e3feb74b","94bb42c47a0adbd0ae795822ac8c9ddd5b62383fa389ba90f72f2d7ed23e76e0","846d24c27e275ec10c0614b8284fcca0bb411a3a4ee2ff51ce56b225b3052c76","f56e8a39af19d3215849d21fa76b3d729ab6e718e1adcdfb16fcc51daffe1b8c","0e1b513397eb60607ddb7b361fac71d8131a5fe41d3ac04fb8a05b7bf1decdd2","6c86fc19d315a102361513883db87fadaeae81d018ec7543f2cd482ac03ffc1f","cce634c34b6c7f65dee69198088da7d36a5a09d22890acd7b2d9951d5af654b0","f41e9a271d7f7098b2b45e5d8ee68b0d29c3e1da157c318ea9e39824c9847ea1","41f3d052b10787c2d12f490f3a03bc2f972653a71115bf8dc53eef78c9a54d9d","7b757271238b87c47a67ba17d879b9478980c3a686007e427e0f8cd9817b72d1","9677844594ffecdfbcfe6fec864857ec64c46c46e16f905ac744dbb565c48cbc","7ca0b83a880190f3c453347a3b1048c60b6ba1360e7d93082ad9e59d6f1b383b","80db0ac764bdce7d177d3061c959537866571a87711a6747cdef01a94e55e306","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","cb5eaaa2a079305b1c5344af739b29c479746f7a7aefffc7175d23d8b7c8dbb0","0d72f576807bb4f6f682bc705e06eb3e730139b018e8c026e3187f3f389ce2e9","56749bf8b557c4c76181b2fd87e41bde2b67843303ae2eabb299623897d704d6","5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","6fc56a681a637069675b2e11b4aa105efe146f7a88876f23537e9ea139297cf9","33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","176d6f604b228f727afb8e96fd6ff78c7ca38102e07acfb86a0034d8f8a2064a","c5079a23a0200a682ec3db25bc789d6cee4275b676a86ec1a3964d919b977e6a","8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","2426ed0e9982c3d734a6896b697adf5ae93d634b73eb15b48da8106634f6d911","057431f69d565fb44c246f9f64eac09cf309a9af7afb97e588ebef19cc33c779","960d026ca8bf27a8f7a3920ee50438b50ec913d635aa92542ca07558f9c59eca","14aaa5b8938496377d38e90d2b6f8cb1eabf8fe1ffb86e29233ab14977afd178","252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","2f4f96af192dc44a12bf238bcc08ebac498c9073f459740f6497fe0f8e1a432c","c5b3da7e2ecd5968f723282aba49d8d1a2e178d0afe48998dad93f81e2724091","efd2860dc74358ffa01d3de4c8fa2f966ae52c13c12b41ad931c078151b36601","09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","72154a9d896b0a0aed69fd2a58aa5aa8ab526078a65ff92f0d3c2237e9992610","99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","b027979b9e4e83be23db2d81e01d973b91fefe677feb93823486a83762f65012","6a0e86cffd870740e729a9ad97ce2501c6f67b48d5bd4d23e27b3a5a890355bc","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","a5d065581406bf8a699e4980e7cccb5ae1bbb9623f6737ec7e96beaa3d5684e7","a8aa39794fafe452870fad67667a073125440adc0ea0aad2fd202fd497f730f8","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","d3a03891967c080808215fb3edc6b6805bcb081205c3f55dbfd4a57e0f0a6550","18a47c8cddfd26a1e3c0662218fa40efe75be3e30eab2e39acc62b9fe04010f5","24d2452994c2b68738dd1f1695f5d2941d73854818704c451e6f5dad844ba2ce","e90081ae563c179c1f056813854070af982fe56f7b6dcfd3ac19f56a898e18e1","68d30ebcf6349e03e0c313f9354eb2b7b671d63a535580083997efd31e677ac1","ededdfd7c0e420fc2d25564e279305e391db3aa15b8300ccfbd68b0db955274e","2af2718485abb45bc27c3277d66e74d5b3d43fe543017d712961593b724143d6","7cce94f88c6011382bbc3c5411a70e0ba9ce683d2782dafa92e8e033e2afe8cc","eb7207317db335f4ad5661269f296ab5a14d75e3f9085c8e49d7502fb45e97bf","cf67e3ab470da6609f0ad9d6cf944bf85f8f0437ca8abacd2b91539df4d7a4f2","ee5a917c9906cd8ea9cb2a3a32a0ac211065c29f75d30e6479a37e8bf7da156a","f21ce049835dad382b22691fb6b34076d0717307d46d92320893765be010cd56","f9dde32db91333410f58a2126eb93daa02fdca048ab624c8689020e9c10315f4","285f91445a192dbcb3af20f095f61ea7090c4c4ba078db3bf7cbaadb9cd36e58","d8f75036a2a39d10dc4c4e1546e5df4fed0110f86e3634594881cc0b0b5f85b7","1da2c4e9e5b0ef664830fc51e7f528782c00adf719e6bc3b46b7ab9b0907a996","665f83fc3e9992c7a5e15a470e4b9e10e8b588c35593b0058c8d1a9eca487c56","4720e2e9ab8fddcb4d7e01834e1f5f87dc4a6f0dde2433c47ccbb1a49b0a8db4","da362b7f98497abb765d4ce3970ba009dd8dc1911de9e448cd1c2b3b45d1d320","9d81c9fd8a675398f8d54dede89a02babeadcd3c35ed8e2d5d9d861efc62dfc1","5cdf4811047cfbe9d0a919569ba2019c2f8853713ee7c3da5ccde558b0975bd3","34543784d3993269d167c3661201103c1bbc345c967838e61b842c30996da4e0","01ba761ce6d75a4142858a053f45d64d255e057049ab1cc4d9a93e76b8b5c444","4eb8d24407a258900df22b345b9aa14887a4eda2a499b07aeff6a847e39a83da","610850279849d1c9e0f7de92d9241319a24cb7502d91659482fe5af9f1386b12","8dfafd9767f1fc617271455ab47658d386cce945de776de3612a91e43fec33cf","c857b5f94427f9d663a4d92e2f792c7b6363e41b41c5ebd32d231f01550b386d","4b9c93a83255d603fa4d857aac95257462cde204c7266b552650a18e700c1d46","06d8af96b18c5ee90ba066e5d6814a1af3cfa7667986fdecd520599c5b2ed030","2e522780639e1a181adf94d3596a6669570c36fd635563753f05853da790dc46","c6e3bad7e7eb479c2b3862dd998ba288a97ffda44cb3797bc20d3eb5bc0a6cad","b32ded887b679b39ffc83b0e8ff0c1f6722d7e847234a18b2c2158129c58aeb3","67b3ddf3a4ceddeeeb59a1c6d0003220a6d5d24a118a91046108e1d60b424e12","e5d2f32f61581a9e54404f1918c9a9f6911f89a6efd535bf3c4d41f3f84d8802","fea13cbc4da2a22aad4d71b15c73854a6a801fa8038293eb7f4783884ff5af70","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","a2e465615a48b402ecff48f71054408cc86fefc452626c3cf1aa1044ca4fa92d","08e0b0ca079e4dc00bd45aab20e50eba0013987fb2c6bc2571dc38780a2a536b","db03aaad464753ce21050e929bea736c8830e15ac30f02f23b9f01e68df34d20","c197ed35ed2bf95e3ee4458d738f24e99957d34ec6fb1bba11d59772ddd237e4","6e731f8fb0015089cf01a4a97c7707a27045687bdbb8b06dbcc08dae3305f79b","73b71285cff838d4a07d0ba67b9eb4327bd6ef1a9ae7b6b79aa86bdabadef1ba","ed1ee94c938a8d786d45933c1eff63bbbeb923bb2f5b1718a55e7c62a141ef1d","1284f840074c71def94d2ce8a7a2e2faeb1e1494d231edc7153f2a6efcc24d6a","2f23087f619d91c16063056c9d09bdcb1f206e14afde991d9aa9cbf080c21724","128d5e5125034157c26a798ad29434a36520d6033abcfdcd958805fa84ed18b6","5c922bf5e9eec69b48354c2f72e0000143f81279bcd5f7e9dc06bfc4ef032527","a790fb91cb2979a7ff9bd05ca512b0aab013b38fa7ac12067ec2af2fa17fbe97","0b9278a12cbbdcc296673563a49617bdcff8879062beb5b4d5b5492f7ad54e27","27db6aeeff19165938807247884add9777f4a5fcfde4f6394b92dd55041239a1","bf32a34d5d46b2218b942bef018d6b750fcddbea5d5d3c1c086a55cf47d3a06f","3c2afe60dd761d9c7aef1df5bceb027d31f7e7a7513829e0c7349fabb2e04b76","a5f9daf39ff39877abe976455cf969f307560fb25db5da3c2aa5f275720b2d64","52398edef08fb26610f558031c037514ea55372d2f58df3135540d42eb49df01","77fda1a0cf76895ef5929b2be1ec911957f774ccb55cc176f981b23cc171fb1e","f2a60d253f7206372203b736144906bf135762100a2b3d1b415776ebf6575d07","21fa352a9251cb31f5b0733843c6dae3b01702f169089157966f7e6c4794e820","62c8d20ac6bfe92ce45d517161d099bec34eb2ccb9dc1e58ee8c4c969acf6889","69000035da9de1725651c045dff517cd86cec3540f1e92d92eab540ac111227d","ae27bfe178a142809dcf21004f6279088e61dfaa63e3f21bf3aa88e1b3c7e2de","2bff984ef483f1ecf96a7c521dbd001948604c08b3eb032bc35d5d8a06e49755","602e3212a54b44aff9e8fb900f84a1aa1009559fa9d345012ba7b4fd4ae36055","a3584d3d2e6c3dd952e49f9925c25b2e31e54dd04eed99a18a4a4197c0adef42","453d1b48d23683541430903678d179e5742b762b25f45e50d213c20f077963da","4ced413f256fa571a90261e4c4250a09ff3ec8d239c125b926ed29277a7a4da6","03b2199018d5989cfb2e06082e82a7717bfa033165311e07e3823fb05e21cbe5","1b23c775f8337e49b4de051623d64da9320328bd8edfc1d84ba1ce36466484f5","cde878c0c7c0543fe857683c5a50133d2629d4dd55d95e52dea56a2deb6f9589","a180c42899d7e7f90a7e96c7fdd257bfc308d842afbe880092f23d778c81af93","3470e7a0574be17eb0e65de65c154544cbfc5da67440182898d7607e8238baa0","8bfaba6bbbcdc58edbda06d2337b099357ecc26c139209187f278ce99ce0c9ee","06b03300e2dc3b7570a5756d237c2f645a31b1f6087dfe18eaeb0d923d6bb719","2bad09c4dc0810666ef5b6150aa910dd711051ce5f2184050c9859c708092a36","eece99a6cf69ff45c5d4f9e0bfb6450f5c57878d048ff01a6a6343cf87e98230","f7ab1fe738bbe7fdd1e9bc9887f55ac0d7eda0d234a7eb35c77304430f7d6715","1f763e81e71ac8ce0dd1b82e67cd9d1d2e56e77c844b46349e1623c82df9b130","1a9c0db9d65449e9dbcbf23baa3b8bfa48806cddb2adc5e172eb8eff5afbb702","4dffcfc24d378d52ade01a1ae0c5baf6dc7a50c35f8302be34f06b9eaa5798ce","90011389e92f8b8f8f6a10b03e4c9f2b966d248538a0258d03239127a01e24ab","3f2b3c5d3f5fd9e254046b9bf83da37babd1935776c97a5ffc1acfce0da0081e","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","1eaf4347cc8fc9c18d0c40b6b0973d5aad411ef9a0380a98ca37bd5fca375284","229c0b8724ccf6f1bab1503ea7a4f49cc14ff299338783afe3f8f1a2a2034c4b","1a2de388e81c4119cb30109fa3676dd451e4789ed2dce83aaa37446cae6384d0","2579b4c930b51e90de62f9f8673064147d3db2a7453042a00b8114b3e97b7d41","5d90e24e5c4c0f6e2350b6ddd85111cdc9dcecd49a0431b2ce2524026eba1a3e","61c7eefbcf2d4700630f2ea2cc6dc8732c4595165af11108638443d5ef93c062","51c5a7ba3aa334ef86e870ec1ce042343cecbdf410c9707cd12a5088984aade2","4489c6a9fde8934733aa7df6f7911461ee6e9e4ad092736bd416f6b2cc20b2c6","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9d38964b57191567a14b396422c87488cecd48f405c642daa734159875ee81d9","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","2174e20517788d2a1379fc0aaacd87899a70f9e0197b4295edabfe75c4db03d8","0dc6940ff35d845686a118ee7384713a84024d60ef26f25a2f87992ec7ddbd64",{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","044851e9685b94a0c56bfd7f499b8be4c281e7dc024d1a715a5f9a4598bbf337","1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"5ab630d466ac55baa6d32820378098404fc18ba9da6f7bc5df30c5dbb1cffae8","affectsGlobalScope":true},"0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","b0f9ef6423d6b29dde29fd60d83d215796b2c1b76bfca28ac374ae18702cfb8e","125f8b85a7606a76f7f239e192d0c5951ec0805b03814271c0ffedae9524d75e","e3c0abd559a23148319fdff7c4baa4c294ddfb7bd1435442926a170794fc8d4e","37da3671586f0270f6b0772348f39a6e637a0ca9faf2a5dba0791df74ae8de6b","e91ad231af87f864b3f07cd0e39b1cf6c133988156f087c1c3ccb0a5491c9115","03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","319c37263037e8d9481a3dc7eadf6afa6a5f5c002189ebe28776ac1a62a38e15","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","6dd20f5b39d29f0dabf7798cdbf772c03c5d6721e60a09e7706afddf5599fad9","2f0bdc82a81caabe88fb5d1f450c2999d29314faa0cb451d10db47cf15a8ef69","da318e126ac39362c899829547cc8ee24fa3e8328b52cdd27e34173cf19c7941","24bd01a91f187b22456c7171c07dbf44f3ad57ebd50735aab5c13fa23d7114b4","4738eefeaaba4d4288a08c1c226a76086095a4d5bcc7826d2564e7c29da47671","dbec715e9e82df297e49e3ed0029f6151aa40517ebfd6fcdba277a8a2e1d3a1b","b41acc03ca470ecdedc6bf211bc8fdc6cafe2f6ab68b75949aad8eaf9df71912","8f75e211a2e83ff216eb66330790fb6412dcda2feb60c4f165c903cf375633ee","5adcc724bcfdac3c86ace088e93e1ee605cbe986be5e63ddf04d05b4afdeee71","a9155c6deffc2f6a69e69dc12f0950ba1b4db03b3d26ab7a523efc89149ce979","c99faf0d7cb755b0424a743ea0cbf195606bf6cd023b5d10082dba8d3714673c","21942c5a654cc18ffc2e1e063c8328aca3b127bbf259c4e97906d4696e3fa915","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e","74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185"],"root":[491,492,[922,941],1035,1046,1056,1057,[1059,1069],[1081,1098],[1136,1146],[1148,1157],[1324,1332],1334,1345,[1347,1349],[1360,1378],[1380,1395],[1405,1411]],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"experimentalDecorators":true,"module":1,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strictBindCallApply":false,"strictNullChecks":false,"target":8},"fileIdsList":[[1412],[1431],[1070,1071,1072,1074,1075,1076,1077,1078],[395,490,1071,1072],[1071],[1070],[376],[490,1071,1073],[1071,1076,1077],[1079],[395],[490],[58,396,397,398,399,400,401,402,403,404,405,406,407,408],[261,382],[268],[258,395,490],[413,414,415,416,417,418,419,420],[263],[395,490],[409,412,421],[410,411],[386],[263,264,265,266],[423],[281],[423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444],[451],[446,447],[357,376,448,450],[57,267,395,422,445,450,452,459,482,487,489],[63,261],[62],[63,253,254,973,978],[253,261],[62,252],[261,461],[255,463],[252,256],[62,395],[260,261],[273],[275,276,277,278,279],[267],[267,268,283,287],[281,282,288,289,377],[59,60,61,62,63,253,254,255,256,257,258,259,260,261,262,268,273,274,280,287,378,379,380,382,390,391,392,393,394],[286],[269,270,271,272],[261,269,270],[261,267,268],[261,271],[261,386],[381,383,384,385,386,387,388,389],[59,261],[382],[59,261,381,385,387],[270],[383],[261,382,383,384],[285],[261,265,285,390],[283,284,286],[257,259,268,274,283,288,391,392,395],[63,257,259,262,391,392],[266],[252],[285,395,453,457],[457,458],[395,453],[395,453,454],[454,455],[454,455,456],[262],[474,475],[474],[475,476,477,478,479,480],[473],[465,475],[475,476,477,478,479],[262,474,475,478],[460,466,467,468,469,470,471,472,481],[262,395,466],[262,465],[262,465,490],[255,261,262,461,462,463,464,465],[252,395,461,462,483],[395,461],[485],[422,483],[483,484,486],[285,449],[381],[267,395],[488],[283,287,395,490],[942],[395,490,962,963],[944],[490,956,961,962],[966,967],[63,395,957,962,976],[490,943,969],[62,490,970,973],[395,957,962,964,975,977,981],[62,979,980],[970],[252,395,490,984],[395,490,957,962,964,976],[983,985,986],[395,962],[962],[395,490,984],[62,395,490],[395,490,956,957,962,982,984,987,990,995,996,1009,1010],[969,972,1011],[996,1008],[57,943,964,965,968,971,1003,1008,1012,1015,1019,1020,1021,1023,1025,1031,1033],[395,490,950,958,961,962],[395,954],[395,490,944,953,954,955,956,961,962,964,1034],[956,957,960,962,998,1007],[395,490,949,961,962],[997],[490,957,962],[490,950,957,961,1002],[395,490,944,949,961],[490,955,956,960,1000,1004,1005,1006],[490,950,957,958,959,961,962],[261,490],[395,944,957,960,962],[961],[946,947,948,957,961,962,1001],[953,1002,1013,1014],[490,944,962],[490,944],[945,946,947,948,951,953],[950],[952,953],[490,945,946,947,948,951,952],[988,989],[395,957,962,964,976],[999],[379],[273,395,1016,1017],[1018],[395,964],[395,957,964],[286,395,490,950,957,958,959,961,962],[283,285,395,490,943,957,964,1002,1020],[286,287,490,942,1022],[992,993,994],[490,991],[1024],[356,376,490],[1027,1029,1030],[1026],[1028],[490,956,961,1027],[974],[395,490,944,957,961,962,964,999,1000,1002,1003],[1032],[1047,1049,1050,1051,1052],[1048],[376,490,1047],[490,1048],[376,1047,1049],[1053],[1396,1398,1399,1400,1401,1402],[490,1396,1397],[1403],[283,287,342,344,376,395,490,942,1099,1100,1101],[1102],[1103,1105,1116],[1099,1100,1104],[342,344,376,490,1040,1045,1099,1100,1101],[342,376],[1112,1114,1115],[490,1106],[1107,1108,1109,1110,1111],[395,1106],[1113],[490,1113],[1350,1351,1352,1353,1354,1355,1356,1357],[1034,1350],[1034,1350,1351],[490,1034,1350,1351],[1358],[490,885,886],[885,886],[885],[899],[490,885],[883,884,887,888,889,890,891,892,893,894,895,896,897,898,900,901,902,903,904,905],[885,910],[57,906,910,911,912,917,919],[885,908,909],[885,907],[490,910],[913,914,915,916],[918],[920],[875,876],[490,873,874],[252,490,873,874],[877,879,880],[873],[878],[490,873],[490,873,874,878],[881],[1412,1413,1414,1415,1416],[1412,1414],[342,376,1043],[1421,1423],[1420,1421,1422],[339,342,376,1037,1038,1039],[1038,1040,1042,1044],[340,376],[1426],[1427],[1433,1436],[332,376],[1440],[357,1045],[290],[326],[327,332,360],[328,339,340,347,357,368],[328,329,339,347],[330,369],[331,332,340,348],[332,357,365],[333,335,339,347],[326,334],[335,336],[339],[337,339],[326,339],[339,340,341,357,368],[339,340,341,354,357,360],[324,327,373],[335,339,342,347,357,368],[339,340,342,343,347,357,365,368],[342,344,357,365,368],[290,291,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375],[339,345],[346,368,373],[335,339,347,357],[348],[349],[326,350],[351,367,373],[352],[353],[339,354,355],[354,356,369,371],[327,339,357,358,359,360],[327,357,359],[357,358],[360],[361],[326,357],[339,363,364],[363,364],[332,347,357,365],[366],[347,367],[327,342,353,368],[332,369],[357,370],[346,371],[372],[327,332,339,341,350,357,368,371,373],[357,374],[357,376],[340,342,344,347,357,368,376,1418,1443,1444],[342,357,376],[1446,1485],[1446,1470,1485],[1485],[1446],[1446,1471,1485],[1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484],[1471,1485],[340,357,376,1036],[342,376,1036,1041],[1493],[1419,1439,1487,1489,1494],[343,347,357,365,376],[327,340,342,343,344,347,357,1439,1488,1489,1490,1491,1492],[342,357,1493],[327,340,1488,1489],[368,1488],[1494,1495,1496,1497],[1494,1495,1498],[1494,1495],[342,343,347,1439,1494],[1218,1219,1220,1221,1222,1223,1224,1225,1226],[1499],[339,357,376],[1336,1337,1338],[1338,1339,1340],[1338],[1338,1339,1340,1341,1342],[1174],[1176,1177,1178,1179,1180,1181,1182],[1165],[1166,1174,1175,1183],[1167],[1161],[1158,1159,1160,1161,1162,1163,1164,1167,1168,1169,1170,1171,1172,1173],[1166,1168],[1169,1174],[1190],[1189,1190,1195],[1191,1192,1193,1194,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314],[1190,1227],[1190,1267],[1189],[1185,1186,1187,1188,1189,1190,1195,1315,1316,1317,1318,1322],[1195],[1187,1320,1321],[1189,1319],[1190,1195],[1185,1186],[1336],[368,376],[1429,1435],[1433],[1430,1434],[1266],[1432],[328,357,376,1335,1336,1337,1343],[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,80,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,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,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,183,184,185,187,196,198,199,200,201,202,203,205,206,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251],[109],[65,68],[67],[67,68],[64,65,66,68],[65,67,68,225],[68],[64,67,109],[67,68,225],[67,233],[65,67,68],[77],[100],[121],[67,68,109],[68,116],[67,68,109,127],[67,68,127],[68,168],[68,109],[64,68,186],[64,68,187],[209],[193,195],[204],[193],[64,68,186,193,194],[186,187,195],[207],[64,68,193,194,195],[66,67,68],[64,68],[65,67,187,188,189,190],[109,187,188,189,190],[187,189],[67,188,189,191,192,196],[64,67],[68,211],[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,106,107,108,110,111,112,113,114,115,117,118,119,120,121,122,123,124,125,126,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,182,183,184],[197],[554,674],[499,873],[557],[662],[658,662],[658],[514,550,551,552,553,555,556,662],[499,500,509,514,551,555,558,562,593,610,611,613,615,619,620,621,622,658,659,660,661,667,674,693],[624,626,628,629,639,641,642,643,644,645,646,647,649,651,652,653,654,657],[503,505,506,536,775,776,777,778,779,780],[506],[503,506],[784,785,786],[793],[503,791],[821],[809],[550],[808],[504],[503,504,505],[542],[538],[503],[494,495,496],[535],[494],[503,504],[539,540],[497,499],[693],[664,665],[495],[828],[557,648],[365],[557,558,623],[495,496,503,509,511,513,527,528,529,532,533,557,558,560,561,667,673,674],[557,568],[511,513,531,558,560,567,568,582,595,599,603,610,662,671,673,674],[335,347,365,566,567],[557,558,625],[557,640],[557,558,627],[557,650],[558,655,656],[530],[630,631,632,633,634,635,636,637],[557,558,638],[499,500,509,568,570,574,575,576,577,578,605,607,608,609,611,613,614,615,617,618,620,662,674,693],[500,509,527,568,571,575,579,580,604,605,607,608,609,619,662,667],[619,662,674],[549],[503,504,536],[534,537,541,542,543,544,545,546,547,548,873],[493,494,495,496,500,538,539,540],[710],[667,710],[503,527,553,710],[500,710],[622,710],[710,711,712,715,716,717,718,719,720,721,722,723,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],[516,710],[516,667,710],[710,714],[562,710],[565],[574],[563,570,571,572,573],[504,509,564],[568],[509,574,575,612,667,693],[565,568,569],[579],[509,574],[565,569],[509,565],[499,500,509,610,611,613,619,620,658,659,662,693,705,706],[57,497,499,500,503,504,506,509,510,511,512,513,514,534,535,537,538,540,541,542,549,550,551,552,553,556,558,559,560,562,563,564,565,568,569,570,571,572,573,574,575,576,577,578,581,582,583,584,585,586,587,588,589,590,591,593,596,599,600,603,606,607,608,609,610,611,612,613,619,620,621,622,658,662,667,670,671,672,673,674,684,685,686,687,689,690,691,692,693,706,707,708,709,774,781,782,783,787,788,789,790,792,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,822,823,824,825,826,827,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,860,861,862,863,864,865,866,867,868,870,872],[551,552,674],[551,674,854],[551,552,674,854],[674],[551],[506,507],[521],[500],[696],[502,508,517,518,522,524,597,601,663,666,668,694,695,696,697,698,699,700,701,702,703,704],[493,497,498,501],[542,543,873],[514,597,667],[503,504,508,509,516,526,662,667],[516,517,519,520,523,525,527,662,667,669],[509,521,522,526,667],[509,515,516,519,520,523,525,526,527,542,543,598,602,662,663,664,665,666,669,873],[514,601,667],[494,495,496,514,527,667],[514,526,527,667,668],[516,667,693,694],[509,516,518,667,693],[493,494,495,496,498,502,509,515,526,527,667],[527],[494,514,524,526,527,667],[621],[622,662,674],[514,673],[514,866],[513,673],[509,516,527,667,713],[516,527,714],[339,340,357],[667],[685],[500,509,609,662,674,684,685,692],[561],[500,509,527,605,607,616,692],[516,662,667,676,683],[684],[500,509,527,562,605,662,667,674,675,676,682,683,684,686,687,688,689,690,691,693],[509,516,527,542,561,662,667,675,676,677,678,679,680,681,682,692],[509],[516,667,683,693],[509,516,662,674,693],[509,692],[606],[509,606],[500,509,516,542,567,570,571,572,573,575,667,674,680,681,683,684,685,692],[500,509,542,608,662,674,684,685,692],[509,667],[509,542,605,608,662,674,684,685,692],[509,684],[509,511,513,531,558,560,567,582,595,599,603,606,615,619,662,671,673],[499,509,613,619,620,693],[500,568,570,574,575,576,577,578,605,607,608,609,617,618,620,693,859],[509,568,574,575,579,580,610,620,674,693],[500,509,568,570,574,575,576,577,578,605,607,608,609,617,618,619,674,693,873],[509,612,620,693],[561,616],[510,559,581,596,600,670],[510,527,531,532,662,667,674],[531],[511,560,562,582,599,603,667,671,672],[596,598],[510],[600,602],[515,559,562],[669,670],[525,581],[512,873],[509,516,527,593,594,667,674],[583,584,585,586,587,588,589,590,591,592],[509,619,662,667,674],[619,662,667,674],[587],[509,516,527,619,662,667,674],[511,513,527,530,550,560,565,569,582,599,603,610,659,667,671,673,684,686,687,688,689,690,691,693,714,859,860,861,869],[619,667,871],[301,305,368],[301,357,368],[296],[298,301,365,368],[347,365],[296,376],[298,301,347,368],[293,294,297,300,327,339,357,368],[293,299],[297,301,327,360,368,376],[327,376],[317,327,376],[295,296,376],[301],[295,296,297,298,299,300,301,302,303,305,306,307,308,309,310,311,312,313,314,315,316,318,319,320,321,322,323],[301,308,309],[299,301,309,310],[300],[293,296,301],[301,305,309,310],[305],[299,301,304,368],[293,298,299,301,305,308],[327,357],[296,301,317,327,373,376],[1119,1120,1121,1122,1124,1125,1127,1128,1129,1130,1131,1132,1133,1134],[1123],[1123,1126],[490,921,922,941,1035,1046,1065],[490,882,925,938,939,941,1054,1056,1064,1066],[490,873,882,922,924,938,939,940],[921,922,923],[921],[924,1404],[873,922,923,925,938],[490,491],[349,490,491,492,882,925,926,928,929,931,932,933,934,935,936,937,938,939,1067,1068,1080,1081,1083,1138,1141,1146,1149,1156,1349,1359,1363,1365,1367,1369,1370,1371,1389,1390,1392,1393],[490,941,1034,1035,1064],[490,882,925,938,939,941,1054,1056,1064,1065,1081,1082],[332,490,873,882,922,924,925,939,941,1054,1056,1057,1059,1060,1061,1062,1063],[490,921,922,924,1035,1046,1057,1060,1062,1063,1064,1065,1069,1081],[921,922],[873,939],[939,1045],[490,1055],[1034],[490,1091,1097],[490,882,929,932,933,934,1054,1056,1081,1087,1091,1097,1140],[490,921,1062,1081,1084,1093,1094,1095,1096,1097,1098,1139],[332,490,873,882,922,932,933,934,1054,1056,1059,1061,1062,1081,1084,1091,1094,1095,1096],[873,934],[934,1045],[490,921,922,930,1035,1065,1086,1087],[490,882,925,929,938,939,941,1054,1056,1064,1087,1368],[490,882,929,930,1085,1086],[930],[921,1085],[1058],[349,1058],[490,882,925,926,928,929,931,936,937,938,939,941,1054,1056,1064,1087,1144,1149,1153,1154,1156,1330,1348],[490,873,882,922,923,924,929,930,937,1064,1144,1147,1148,1153],[490,1080],[490,921,1034,1058,1090,1394],[921,936],[921,927,1184,1323],[921,930],[927,929,938],[921,927],[921,1324],[873,936],[873,930,936],[873,926,927,928,929,931,935,938],[490,921,922,930,1035,1046,1065,1093,1098,1136,1324,1327,1328,1330,1360],[490,882,925,928,929,931,932,933,934,936,937,938,939,941,1054,1056,1064,1081,1087,1091,1097,1144,1149,1153,1330,1364],[490,873,882,927,928,929,930,931,935,936,938,1090,1324,1325,1326,1327,1328,1329],[927],[936],[921,1155],[873,926,930],[490,921,922,930,1035,1065,1136,1155,1348,1360],[490,882,925,926,928,931,936,938,939,941,1054,1056,1064,1156,1330,1348,1366],[340,349,490,873,882,926,930,936,1090,1135,1155,1156,1157,1330,1331,1332,1334,1344,1345,1346,1347],[340,349,490,1090,1333],[934,938],[921,1383],[921,1371],[873,934,938,1370],[490,921,930,1093,1098,1371,1384,1385,1386],[490,882,928,929,931,932,933,934,935,936,938,1054,1056,1081,1087,1091,1097,1330,1370,1371,1373,1382,1385,1387,1389],[490,873,882,930,934,935,938,1090,1091,1327,1330,1370,1371,1372,1373,1374,1377,1382,1383,1384],[1374,1375,1376],[1374],[349,490,1117,1118,1135],[873,938],[490,921,1143,1144],[490,882,937,1144,1145],[490,873,882,937,1090,1142,1143],[873,921],[873,930,938],[873,936,937],[490,921,922,1035,1046,1065,1136,1148,1153,1360,1361],[490,882,925,937,938,939,941,1054,1056,1064,1144,1149,1153,1362],[490,873,882,930,938,1090,1144,1148,1149,1150,1151,1152],[921,1372],[873,936,1371],[490,1372,1373],[490,882,936,1370,1371,1373,1391],[490,873,882,936,1370,1371,1372],[873,929,932,933],[490,921,930,1046,1088,1091,1092,1093,1098,1136],[490,882,929,932,933,934,1054,1056,1081,1087,1091,1097,1137],[490,873,882,929,930,934,1084,1087,1088,1089,1090],[921,1378],[873,934,936],[332,340,349,1090,1344,1379,1380],[490,921,1093,1098,1378,1382],[490,882,928,929,931,932,933,934,935,936,938,1054,1056,1081,1087,1091,1097,1330,1370,1382,1385,1388,1390],[490,873,882,930,934,935,936,1090,1091,1330,1370,1378,1381,1385]],"referencedMap":[[1414,1],[1432,2],[1079,3],[1073,4],[1072,5],[1071,6],[1077,5],[1076,7],[1070,5],[1074,8],[1078,9],[1080,10],[396,11],[397,11],[399,12],[409,13],[401,14],[404,11],[405,11],[406,11],[408,15],[416,16],[421,17],[413,18],[414,19],[422,20],[412,21],[411,22],[267,23],[439,24],[424,24],[431,24],[428,24],[441,24],[432,24],[438,24],[423,25],[442,24],[445,26],[436,24],[426,24],[444,24],[429,24],[427,24],[437,24],[433,24],[443,24],[430,24],[440,24],[425,24],[435,24],[434,24],[452,27],[448,28],[451,29],[490,30],[973,31],[63,32],[979,33],[978,34],[253,35],[254,32],[462,36],[464,37],[257,38],[256,39],[259,38],[262,40],[274,41],[280,42],[282,43],[288,44],[378,45],[377,7],[395,46],[1022,47],[273,48],[271,49],[269,50],[270,51],[387,52],[390,53],[383,54],[388,55],[386,56],[389,57],[384,58],[385,59],[286,60],[391,61],[287,62],[393,63],[394,64],[268,65],[392,66],[458,67],[459,68],[454,69],[455,70],[456,71],[457,72],[460,73],[476,74],[475,75],[481,76],[474,77],[477,74],[478,78],[480,79],[479,80],[482,81],[467,82],[468,83],[471,84],[470,84],[469,83],[472,83],[466,85],[484,86],[483,87],[486,88],[485,89],[487,90],[449,60],[450,91],[488,92],[465,93],[489,94],[942,95],[943,96],[964,97],[965,98],[967,99],[968,100],[977,101],[970,102],[974,103],[982,104],[980,12],[981,105],[971,106],[985,107],[986,108],[987,109],[976,110],[972,111],[996,112],[984,113],[1011,114],[969,96],[1012,115],[1009,116],[1010,12],[1034,117],[959,118],[955,119],[957,120],[1008,121],[950,122],[998,123],[958,124],[1005,125],[962,126],[1007,127],[960,128],[954,129],[961,130],[956,131],[1002,132],[1015,133],[1013,12],[945,12],[1001,134],[946,19],[947,98],[948,135],[952,136],[951,137],[1014,138],[953,139],[990,140],[988,107],[989,141],[999,19],[1000,142],[1003,143],[1018,144],[1019,145],[1016,146],[1017,147],[1020,148],[1021,149],[1023,150],[995,151],[992,152],[993,11],[994,141],[1025,153],[1024,154],[1031,155],[963,12],[1027,156],[1026,12],[1029,157],[1030,158],[975,159],[1004,160],[1033,161],[1032,12],[1053,162],[1049,163],[1048,164],[1051,165],[1052,166],[1054,167],[1403,168],[1398,169],[1396,12],[1399,169],[1400,169],[1401,169],[1402,12],[1404,170],[1102,171],[1103,172],[1117,173],[1105,174],[1104,175],[1099,176],[1116,177],[1107,178],[1108,178],[1109,178],[1110,178],[1112,179],[1111,178],[1113,180],[1114,181],[1106,7],[1115,182],[1358,183],[1350,19],[1351,184],[1352,185],[1353,185],[1354,185],[1356,186],[1357,12],[1359,187],[887,188],[893,189],[896,190],[897,188],[900,191],[901,188],[902,192],[903,190],[906,193],[911,194],[920,195],[910,196],[899,192],[908,197],[912,198],[917,199],[913,12],[914,12],[915,12],[916,12],[919,200],[921,201],[877,202],[875,203],[876,204],[881,205],[874,206],[879,207],[878,208],[880,209],[882,210],[1417,211],[1413,1],[1415,212],[1416,1],[1055,7],[1044,213],[1043,176],[1424,214],[1423,215],[1040,216],[1045,217],[1425,218],[1427,219],[1428,220],[1437,221],[1047,222],[1441,223],[1118,224],[290,225],[291,225],[326,226],[327,227],[328,228],[329,229],[330,230],[331,231],[332,232],[333,233],[334,234],[335,235],[336,235],[338,236],[337,237],[339,238],[340,239],[341,240],[325,241],[342,242],[343,243],[344,244],[376,245],[345,246],[346,247],[347,248],[348,249],[349,250],[350,251],[351,252],[352,253],[353,254],[354,255],[355,255],[356,256],[357,257],[359,258],[358,259],[360,260],[361,261],[362,262],[363,263],[364,264],[365,265],[366,266],[367,267],[368,268],[369,269],[370,270],[371,271],[372,272],[373,273],[374,274],[1333,275],[1445,276],[1443,277],[1470,278],[1471,279],[1446,280],[1449,280],[1468,278],[1469,278],[1459,278],[1458,281],[1456,278],[1451,278],[1464,278],[1462,278],[1466,278],[1450,278],[1463,278],[1467,278],[1452,278],[1453,278],[1465,278],[1447,278],[1454,278],[1455,278],[1457,278],[1461,278],[1472,282],[1460,278],[1448,278],[1485,283],[1479,282],[1481,284],[1480,282],[1473,282],[1474,282],[1476,282],[1478,282],[1482,284],[1483,284],[1475,284],[1477,284],[1037,285],[1042,286],[1494,287],[1490,288],[1492,289],[1493,290],[1488,291],[1491,292],[1489,293],[1498,294],[1496,295],[1497,296],[1495,297],[1227,298],[1500,299],[1501,300],[1339,301],[1341,302],[1342,303],[1343,304],[1175,305],[1176,305],[1177,305],[1183,306],[1178,305],[1179,305],[1180,305],[1181,305],[1182,305],[1166,307],[1184,308],[1168,309],[1161,305],[1162,310],[1174,311],[1163,305],[1164,305],[1169,312],[1170,313],[1171,305],[1307,314],[1311,314],[1310,314],[1308,314],[1309,314],[1312,314],[1191,314],[1203,314],[1192,314],[1205,314],[1207,314],[1201,314],[1200,314],[1202,314],[1206,314],[1208,314],[1193,314],[1204,314],[1194,314],[1196,315],[1197,314],[1198,314],[1199,314],[1215,314],[1214,314],[1315,316],[1209,314],[1211,314],[1210,314],[1212,314],[1213,314],[1314,314],[1313,314],[1216,314],[1298,314],[1297,314],[1228,317],[1229,317],[1231,314],[1275,314],[1296,314],[1232,317],[1276,314],[1273,314],[1277,314],[1233,314],[1234,314],[1235,317],[1278,314],[1272,317],[1230,317],[1279,314],[1236,317],[1280,314],[1260,314],[1237,317],[1238,314],[1239,314],[1270,317],[1242,314],[1241,314],[1281,314],[1282,314],[1283,317],[1244,314],[1246,314],[1247,314],[1253,314],[1254,314],[1248,317],[1284,314],[1271,317],[1249,314],[1250,314],[1285,314],[1251,314],[1243,317],[1286,314],[1269,314],[1287,314],[1252,317],[1255,314],[1256,314],[1274,317],[1288,314],[1289,314],[1268,318],[1245,314],[1290,317],[1291,314],[1292,314],[1293,314],[1294,317],[1257,314],[1295,314],[1261,314],[1258,317],[1259,317],[1240,314],[1262,314],[1265,314],[1263,314],[1264,314],[1217,314],[1305,314],[1299,314],[1300,314],[1302,314],[1303,314],[1301,314],[1306,314],[1304,314],[1190,319],[1323,320],[1321,321],[1322,322],[1320,323],[1319,314],[1318,324],[1317,325],[1195,319],[1337,326],[1058,327],[1436,328],[1434,329],[1435,330],[1267,331],[1433,332],[1344,333],[252,334],[203,335],[201,335],[251,336],[216,337],[215,337],[116,338],[67,339],[223,338],[224,338],[226,340],[227,338],[228,341],[127,342],[229,338],[200,338],[230,338],[231,343],[232,338],[233,337],[234,344],[235,338],[236,338],[237,338],[238,338],[239,337],[240,338],[241,338],[242,338],[243,338],[244,345],[245,338],[246,338],[247,338],[248,338],[249,338],[66,336],[69,341],[70,341],[71,341],[72,341],[73,341],[74,341],[75,341],[76,338],[78,346],[79,341],[77,341],[80,341],[81,341],[82,341],[83,341],[84,341],[85,341],[86,338],[87,341],[88,341],[89,341],[90,341],[91,341],[92,338],[93,341],[94,341],[95,341],[96,341],[97,341],[98,341],[99,338],[101,347],[100,341],[102,341],[103,341],[104,341],[105,341],[106,345],[107,338],[108,338],[122,348],[110,349],[111,341],[112,341],[113,338],[114,341],[115,341],[117,350],[118,341],[119,341],[120,341],[121,341],[123,341],[124,341],[125,341],[126,341],[128,351],[129,341],[130,341],[131,341],[132,338],[133,341],[134,352],[135,352],[136,352],[137,338],[138,341],[139,341],[140,341],[145,341],[141,341],[142,338],[143,341],[144,338],[146,341],[147,341],[148,341],[149,341],[150,341],[151,341],[152,338],[153,341],[154,341],[155,341],[156,341],[157,341],[158,341],[159,341],[160,341],[161,341],[162,341],[163,341],[164,341],[165,341],[166,341],[167,341],[168,341],[169,353],[170,341],[171,341],[172,341],[173,341],[174,341],[175,341],[176,338],[177,338],[178,338],[179,338],[180,338],[181,341],[182,341],[183,341],[184,341],[202,354],[250,338],[187,355],[186,356],[210,357],[209,358],[205,359],[204,358],[206,360],[195,361],[193,362],[208,363],[207,360],[196,364],[109,365],[65,366],[64,341],[191,367],[192,368],[190,369],[188,341],[197,370],[68,371],[214,337],[212,372],[185,373],[198,374],[555,375],[500,376],[655,377],[864,378],[706,379],[863,380],[862,380],[557,381],[662,382],[658,383],[859,379],[781,384],[782,385],[783,385],[795,385],[788,386],[787,387],[789,385],[790,385],[794,388],[792,389],[822,390],[818,391],[820,385],[833,392],[827,393],[505,394],[506,395],[809,396],[539,397],[540,397],[786,398],[784,398],[497,399],[536,400],[828,401],[793,394],[821,206],[791,402],[810,397],[811,403],[812,404],[813,404],[814,404],[815,404],[816,405],[817,405],[826,406],[824,407],[829,408],[649,409],[652,377],[653,377],[654,377],[623,410],[624,411],[643,377],[562,412],[647,377],[642,413],[604,414],[568,415],[626,416],[646,377],[641,417],[627,410],[628,418],[645,377],[651,419],[657,420],[531,421],[629,377],[644,377],[638,422],[639,423],[529,398],[619,424],[610,425],[659,426],[550,427],[537,428],[868,392],[547,385],[549,429],[548,405],[541,430],[544,401],[712,431],[735,431],[716,431],[719,432],[721,431],[771,431],[747,431],[711,431],[739,431],[768,431],[718,431],[748,431],[733,431],[736,431],[724,431],[758,433],[753,431],[746,431],[728,434],[727,434],[744,432],[754,431],[773,435],[774,436],[759,437],[750,431],[731,431],[717,431],[720,431],[752,431],[737,432],[745,431],[742,438],[760,438],[743,432],[729,431],[755,431],[738,431],[772,431],[762,431],[749,431],[770,431],[751,431],[730,431],[766,431],[756,431],[732,431],[761,431],[769,431],[734,431],[757,434],[740,431],[765,439],[715,439],[726,431],[725,431],[723,440],[722,431],[767,438],[763,438],[741,438],[764,438],[569,441],[575,442],[574,443],[565,444],[573,445],[572,445],[571,445],[853,446],[570,447],[580,448],[579,449],[834,441],[836,441],[837,441],[838,441],[839,441],[840,441],[841,450],[846,441],[842,441],[843,441],[852,441],[844,441],[845,441],[847,441],[848,441],[849,441],[850,441],[835,441],[851,451],[707,452],[873,453],[854,454],[855,455],[857,456],[551,457],[552,458],[856,455],[508,459],[522,460],[701,461],[699,385],[697,462],[705,463],[694,405],[518,405],[502,464],[663,465],[666,406],[524,401],[598,466],[527,467],[526,468],[523,469],[667,470],[602,471],[515,472],[669,473],[520,474],[519,475],[516,476],[665,477],[501,461],[525,478],[622,479],[865,480],[621,457],[866,481],[867,482],[514,483],[714,484],[713,485],[567,486],[676,487],[684,488],[687,489],[616,490],[689,491],[677,492],[691,493],[692,494],[683,495],[605,496],[679,497],[678,497],[661,498],[660,498],[690,499],[609,500],[607,501],[608,501],[693,502],[688,503],[614,504],[686,505],[685,506],[674,507],[858,508],[860,509],[611,510],[620,511],[613,512],[617,513],[672,514],[512,206],[869,515],[532,516],[673,517],[599,518],[511,519],[603,520],[560,521],[671,522],[582,523],[513,524],[595,525],[593,526],[588,527],[589,528],[592,426],[591,529],[587,528],[590,529],[583,426],[584,426],[585,426],[586,530],[870,531],[872,532],[308,533],[315,534],[307,533],[322,535],[299,536],[298,537],[321,7],[316,538],[319,539],[301,540],[300,541],[296,542],[295,543],[318,544],[297,545],[302,546],[306,546],[324,547],[323,546],[310,548],[311,549],[313,550],[309,551],[312,552],[317,7],[304,553],[305,554],[314,555],[294,556],[320,557],[1135,558],[1124,559],[1127,560],[1126,559],[1128,559],[1129,560],[1130,559],[1132,559],[1066,561],[1067,562],[941,563],[924,564],[940,565],[1405,566],[939,567],[492,568],[1394,569],[491,12],[1065,570],[1083,571],[1064,572],[1082,573],[1063,565],[1060,574],[1057,565],[925,575],[1046,576],[1056,577],[1035,578],[1098,579],[1141,580],[1140,581],[1097,582],[1095,565],[1062,565],[1096,565],[1094,574],[932,583],[933,583],[1093,584],[1368,585],[1369,586],[1087,587],[1086,565],[1085,588],[1406,589],[929,206],[1347,590],[1059,590],[1090,591],[1349,592],[1154,593],[1081,594],[1395,595],[1326,596],[1324,597],[1407,598],[1325,599],[1327,600],[1328,601],[928,602],[931,603],[936,604],[1364,605],[1365,606],[1330,607],[1329,608],[1157,609],[1155,565],[1331,588],[1408,610],[926,602],[1156,611],[1366,612],[1367,613],[1348,614],[1334,615],[1384,565],[1383,616],[1409,617],[1386,618],[1371,619],[1387,620],[1390,621],[1385,622],[1377,623],[1376,624],[1136,625],[1360,12],[1143,565],[937,626],[1145,627],[1146,628],[1144,629],[1150,588],[1361,630],[1149,631],[938,632],[1362,633],[1363,634],[1153,635],[1410,636],[1370,637],[1391,638],[1392,639],[1373,640],[1084,565],[1092,565],[1088,565],[1089,565],[934,641],[1137,642],[1138,643],[1091,644],[1378,565],[1411,645],[935,646],[1381,647],[1388,648],[1389,649],[1382,650]],"exportedModulesMap":[[1414,1],[1432,2],[1079,3],[1073,4],[1072,5],[1071,6],[1077,5],[1076,7],[1070,5],[1074,8],[1078,9],[1080,10],[396,11],[397,11],[399,12],[409,13],[401,14],[404,11],[405,11],[406,11],[408,15],[416,16],[421,17],[413,18],[414,19],[422,20],[412,21],[411,22],[267,23],[439,24],[424,24],[431,24],[428,24],[441,24],[432,24],[438,24],[423,25],[442,24],[445,26],[436,24],[426,24],[444,24],[429,24],[427,24],[437,24],[433,24],[443,24],[430,24],[440,24],[425,24],[435,24],[434,24],[452,27],[448,28],[451,29],[490,30],[973,31],[63,32],[979,33],[978,34],[253,35],[254,32],[462,36],[464,37],[257,38],[256,39],[259,38],[262,40],[274,41],[280,42],[282,43],[288,44],[378,45],[377,7],[395,46],[1022,47],[273,48],[271,49],[269,50],[270,51],[387,52],[390,53],[383,54],[388,55],[386,56],[389,57],[384,58],[385,59],[286,60],[391,61],[287,62],[393,63],[394,64],[268,65],[392,66],[458,67],[459,68],[454,69],[455,70],[456,71],[457,72],[460,73],[476,74],[475,75],[481,76],[474,77],[477,74],[478,78],[480,79],[479,80],[482,81],[467,82],[468,83],[471,84],[470,84],[469,83],[472,83],[466,85],[484,86],[483,87],[486,88],[485,89],[487,90],[449,60],[450,91],[488,92],[465,93],[489,94],[942,95],[943,96],[964,97],[965,98],[967,99],[968,100],[977,101],[970,102],[974,103],[982,104],[980,12],[981,105],[971,106],[985,107],[986,108],[987,109],[976,110],[972,111],[996,112],[984,113],[1011,114],[969,96],[1012,115],[1009,116],[1010,12],[1034,117],[959,118],[955,119],[957,120],[1008,121],[950,122],[998,123],[958,124],[1005,125],[962,126],[1007,127],[960,128],[954,129],[961,130],[956,131],[1002,132],[1015,133],[1013,12],[945,12],[1001,134],[946,19],[947,98],[948,135],[952,136],[951,137],[1014,138],[953,139],[990,140],[988,107],[989,141],[999,19],[1000,142],[1003,143],[1018,144],[1019,145],[1016,146],[1017,147],[1020,148],[1021,149],[1023,150],[995,151],[992,152],[993,11],[994,141],[1025,153],[1024,154],[1031,155],[963,12],[1027,156],[1026,12],[1029,157],[1030,158],[975,159],[1004,160],[1033,161],[1032,12],[1053,162],[1049,163],[1048,164],[1051,165],[1052,166],[1054,167],[1403,168],[1398,169],[1396,12],[1399,169],[1400,169],[1401,169],[1402,12],[1404,170],[1102,171],[1103,172],[1117,173],[1105,174],[1104,175],[1099,176],[1116,177],[1107,178],[1108,178],[1109,178],[1110,178],[1112,179],[1111,178],[1113,180],[1114,181],[1106,7],[1115,182],[1358,183],[1350,19],[1351,184],[1352,185],[1353,185],[1354,185],[1356,186],[1357,12],[1359,187],[887,188],[893,189],[896,190],[897,188],[900,191],[901,188],[902,192],[903,190],[906,193],[911,194],[920,195],[910,196],[899,192],[908,197],[912,198],[917,199],[913,12],[914,12],[915,12],[916,12],[919,200],[921,201],[877,202],[875,203],[876,204],[881,205],[874,206],[879,207],[878,208],[880,209],[882,210],[1417,211],[1413,1],[1415,212],[1416,1],[1055,7],[1044,213],[1043,176],[1424,214],[1423,215],[1040,216],[1045,217],[1425,218],[1427,219],[1428,220],[1437,221],[1047,222],[1441,223],[1118,224],[290,225],[291,225],[326,226],[327,227],[328,228],[329,229],[330,230],[331,231],[332,232],[333,233],[334,234],[335,235],[336,235],[338,236],[337,237],[339,238],[340,239],[341,240],[325,241],[342,242],[343,243],[344,244],[376,245],[345,246],[346,247],[347,248],[348,249],[349,250],[350,251],[351,252],[352,253],[353,254],[354,255],[355,255],[356,256],[357,257],[359,258],[358,259],[360,260],[361,261],[362,262],[363,263],[364,264],[365,265],[366,266],[367,267],[368,268],[369,269],[370,270],[371,271],[372,272],[373,273],[374,274],[1333,275],[1445,276],[1443,277],[1470,278],[1471,279],[1446,280],[1449,280],[1468,278],[1469,278],[1459,278],[1458,281],[1456,278],[1451,278],[1464,278],[1462,278],[1466,278],[1450,278],[1463,278],[1467,278],[1452,278],[1453,278],[1465,278],[1447,278],[1454,278],[1455,278],[1457,278],[1461,278],[1472,282],[1460,278],[1448,278],[1485,283],[1479,282],[1481,284],[1480,282],[1473,282],[1474,282],[1476,282],[1478,282],[1482,284],[1483,284],[1475,284],[1477,284],[1037,285],[1042,286],[1494,287],[1490,288],[1492,289],[1493,290],[1488,291],[1491,292],[1489,293],[1498,294],[1496,295],[1497,296],[1495,297],[1227,298],[1500,299],[1501,300],[1339,301],[1341,302],[1342,303],[1343,304],[1175,305],[1176,305],[1177,305],[1183,306],[1178,305],[1179,305],[1180,305],[1181,305],[1182,305],[1166,307],[1184,308],[1168,309],[1161,305],[1162,310],[1174,311],[1163,305],[1164,305],[1169,312],[1170,313],[1171,305],[1307,314],[1311,314],[1310,314],[1308,314],[1309,314],[1312,314],[1191,314],[1203,314],[1192,314],[1205,314],[1207,314],[1201,314],[1200,314],[1202,314],[1206,314],[1208,314],[1193,314],[1204,314],[1194,314],[1196,315],[1197,314],[1198,314],[1199,314],[1215,314],[1214,314],[1315,316],[1209,314],[1211,314],[1210,314],[1212,314],[1213,314],[1314,314],[1313,314],[1216,314],[1298,314],[1297,314],[1228,317],[1229,317],[1231,314],[1275,314],[1296,314],[1232,317],[1276,314],[1273,314],[1277,314],[1233,314],[1234,314],[1235,317],[1278,314],[1272,317],[1230,317],[1279,314],[1236,317],[1280,314],[1260,314],[1237,317],[1238,314],[1239,314],[1270,317],[1242,314],[1241,314],[1281,314],[1282,314],[1283,317],[1244,314],[1246,314],[1247,314],[1253,314],[1254,314],[1248,317],[1284,314],[1271,317],[1249,314],[1250,314],[1285,314],[1251,314],[1243,317],[1286,314],[1269,314],[1287,314],[1252,317],[1255,314],[1256,314],[1274,317],[1288,314],[1289,314],[1268,318],[1245,314],[1290,317],[1291,314],[1292,314],[1293,314],[1294,317],[1257,314],[1295,314],[1261,314],[1258,317],[1259,317],[1240,314],[1262,314],[1265,314],[1263,314],[1264,314],[1217,314],[1305,314],[1299,314],[1300,314],[1302,314],[1303,314],[1301,314],[1306,314],[1304,314],[1190,319],[1323,320],[1321,321],[1322,322],[1320,323],[1319,314],[1318,324],[1317,325],[1195,319],[1337,326],[1058,327],[1436,328],[1434,329],[1435,330],[1267,331],[1433,332],[1344,333],[252,334],[203,335],[201,335],[251,336],[216,337],[215,337],[116,338],[67,339],[223,338],[224,338],[226,340],[227,338],[228,341],[127,342],[229,338],[200,338],[230,338],[231,343],[232,338],[233,337],[234,344],[235,338],[236,338],[237,338],[238,338],[239,337],[240,338],[241,338],[242,338],[243,338],[244,345],[245,338],[246,338],[247,338],[248,338],[249,338],[66,336],[69,341],[70,341],[71,341],[72,341],[73,341],[74,341],[75,341],[76,338],[78,346],[79,341],[77,341],[80,341],[81,341],[82,341],[83,341],[84,341],[85,341],[86,338],[87,341],[88,341],[89,341],[90,341],[91,341],[92,338],[93,341],[94,341],[95,341],[96,341],[97,341],[98,341],[99,338],[101,347],[100,341],[102,341],[103,341],[104,341],[105,341],[106,345],[107,338],[108,338],[122,348],[110,349],[111,341],[112,341],[113,338],[114,341],[115,341],[117,350],[118,341],[119,341],[120,341],[121,341],[123,341],[124,341],[125,341],[126,341],[128,351],[129,341],[130,341],[131,341],[132,338],[133,341],[134,352],[135,352],[136,352],[137,338],[138,341],[139,341],[140,341],[145,341],[141,341],[142,338],[143,341],[144,338],[146,341],[147,341],[148,341],[149,341],[150,341],[151,341],[152,338],[153,341],[154,341],[155,341],[156,341],[157,341],[158,341],[159,341],[160,341],[161,341],[162,341],[163,341],[164,341],[165,341],[166,341],[167,341],[168,341],[169,353],[170,341],[171,341],[172,341],[173,341],[174,341],[175,341],[176,338],[177,338],[178,338],[179,338],[180,338],[181,341],[182,341],[183,341],[184,341],[202,354],[250,338],[187,355],[186,356],[210,357],[209,358],[205,359],[204,358],[206,360],[195,361],[193,362],[208,363],[207,360],[196,364],[109,365],[65,366],[64,341],[191,367],[192,368],[190,369],[188,341],[197,370],[68,371],[214,337],[212,372],[185,373],[198,374],[555,375],[500,376],[655,377],[864,378],[706,379],[863,380],[862,380],[557,381],[662,382],[658,383],[859,379],[781,384],[782,385],[783,385],[795,385],[788,386],[787,387],[789,385],[790,385],[794,388],[792,389],[822,390],[818,391],[820,385],[833,392],[827,393],[505,394],[506,395],[809,396],[539,397],[540,397],[786,398],[784,398],[497,399],[536,400],[828,401],[793,394],[821,206],[791,402],[810,397],[811,403],[812,404],[813,404],[814,404],[815,404],[816,405],[817,405],[826,406],[824,407],[829,408],[649,409],[652,377],[653,377],[654,377],[623,410],[624,411],[643,377],[562,412],[647,377],[642,413],[604,414],[568,415],[626,416],[646,377],[641,417],[627,410],[628,418],[645,377],[651,419],[657,420],[531,421],[629,377],[644,377],[638,422],[639,423],[529,398],[619,424],[610,425],[659,426],[550,427],[537,428],[868,392],[547,385],[549,429],[548,405],[541,430],[544,401],[712,431],[735,431],[716,431],[719,432],[721,431],[771,431],[747,431],[711,431],[739,431],[768,431],[718,431],[748,431],[733,431],[736,431],[724,431],[758,433],[753,431],[746,431],[728,434],[727,434],[744,432],[754,431],[773,435],[774,436],[759,437],[750,431],[731,431],[717,431],[720,431],[752,431],[737,432],[745,431],[742,438],[760,438],[743,432],[729,431],[755,431],[738,431],[772,431],[762,431],[749,431],[770,431],[751,431],[730,431],[766,431],[756,431],[732,431],[761,431],[769,431],[734,431],[757,434],[740,431],[765,439],[715,439],[726,431],[725,431],[723,440],[722,431],[767,438],[763,438],[741,438],[764,438],[569,441],[575,442],[574,443],[565,444],[573,445],[572,445],[571,445],[853,446],[570,447],[580,448],[579,449],[834,441],[836,441],[837,441],[838,441],[839,441],[840,441],[841,450],[846,441],[842,441],[843,441],[852,441],[844,441],[845,441],[847,441],[848,441],[849,441],[850,441],[835,441],[851,451],[707,452],[873,453],[854,454],[855,455],[857,456],[551,457],[552,458],[856,455],[508,459],[522,460],[701,461],[699,385],[697,462],[705,463],[694,405],[518,405],[502,464],[663,465],[666,406],[524,401],[598,466],[527,467],[526,468],[523,469],[667,470],[602,471],[515,472],[669,473],[520,474],[519,475],[516,476],[665,477],[501,461],[525,478],[622,479],[865,480],[621,457],[866,481],[867,482],[514,483],[714,484],[713,485],[567,486],[676,487],[684,488],[687,489],[616,490],[689,491],[677,492],[691,493],[692,494],[683,495],[605,496],[679,497],[678,497],[661,498],[660,498],[690,499],[609,500],[607,501],[608,501],[693,502],[688,503],[614,504],[686,505],[685,506],[674,507],[858,508],[860,509],[611,510],[620,511],[613,512],[617,513],[672,514],[512,206],[869,515],[532,516],[673,517],[599,518],[511,519],[603,520],[560,521],[671,522],[582,523],[513,524],[595,525],[593,526],[588,527],[589,528],[592,426],[591,529],[587,528],[590,529],[583,426],[584,426],[585,426],[586,530],[870,531],[872,532],[308,533],[315,534],[307,533],[322,535],[299,536],[298,537],[321,7],[316,538],[319,539],[301,540],[300,541],[296,542],[295,543],[318,544],[297,545],[302,546],[306,546],[324,547],[323,546],[310,548],[311,549],[313,550],[309,551],[312,552],[317,7],[304,553],[305,554],[314,555],[294,556],[320,557],[1135,558],[1124,559],[1127,560],[1126,559],[1128,559],[1129,560],[1130,559],[1132,559],[1066,561],[1067,562],[941,563],[924,564],[940,565],[1405,566],[939,567],[492,568],[1394,569],[491,12],[1065,570],[1083,571],[1064,572],[1082,573],[1063,565],[1060,574],[1057,565],[925,575],[1046,576],[1056,577],[1035,578],[1098,579],[1141,580],[1140,581],[1097,582],[1095,565],[1062,565],[1096,565],[1094,574],[932,583],[933,583],[1093,584],[1368,585],[1369,586],[1087,587],[1086,565],[1085,588],[1406,589],[929,206],[1347,590],[1059,590],[1090,591],[1349,592],[1154,593],[1081,594],[1395,595],[1326,596],[1324,597],[1407,598],[1325,599],[1327,600],[1328,601],[928,602],[931,603],[936,604],[1364,605],[1365,606],[1330,607],[1329,608],[1157,609],[1155,565],[1331,588],[1408,610],[926,602],[1156,611],[1366,612],[1367,613],[1348,614],[1334,615],[1384,565],[1383,616],[1409,617],[1386,618],[1371,619],[1387,620],[1390,621],[1385,622],[1377,623],[1376,624],[1136,625],[1360,12],[1143,565],[937,626],[1145,627],[1146,628],[1144,629],[1150,588],[1361,630],[1149,631],[938,632],[1362,633],[1363,634],[1153,635],[1410,636],[1370,637],[1391,638],[1392,639],[1373,640],[1084,565],[1092,565],[1088,565],[1089,565],[934,641],[1137,642],[1138,643],[1091,644],[1378,565],[1411,645],[935,646],[1381,647],[1388,648],[1389,649],[1382,650]],"semanticDiagnosticsPerFile":[1414,1412,1429,1432,1075,1079,1073,1072,1071,1077,1076,1070,1074,1078,1080,944,407,58,396,397,398,399,409,400,401,402,403,404,405,406,408,416,418,415,421,419,417,413,414,420,422,410,412,411,264,267,263,991,265,266,439,424,431,428,441,432,438,423,442,445,436,426,444,429,427,437,433,443,430,440,425,435,434,452,448,447,446,451,490,59,60,61,973,63,979,978,253,254,461,283,284,462,255,463,464,62,257,258,256,259,260,262,274,275,280,276,277,278,279,281,282,288,378,289,377,395,379,380,1022,273,271,269,270,272,387,381,390,383,388,386,389,384,385,286,391,287,393,394,382,261,268,392,458,453,459,454,455,456,457,460,476,475,481,473,474,477,478,480,479,482,467,468,471,470,469,472,466,484,483,486,485,487,449,450,285,488,465,489,942,943,964,965,966,967,968,977,970,974,982,980,981,971,983,985,986,987,976,972,996,984,1011,969,1012,1009,1010,1034,959,955,957,1008,950,998,997,958,1005,962,1006,1007,960,954,961,956,949,1002,1015,1013,945,1001,946,947,948,952,951,1014,953,990,988,989,999,1000,1003,1018,1019,1016,1017,1020,1021,1023,995,992,993,994,1025,1024,1031,963,1027,1026,1029,1028,1030,975,1004,1033,1032,1053,1049,1048,1050,1051,1052,1054,1403,1398,1396,1399,1400,1401,1402,1397,1404,1102,1103,1117,1105,1104,1099,1100,1101,1116,1107,1108,1109,1110,1112,1111,1113,1114,1106,1115,1358,1350,1351,1352,1353,1354,1355,1356,1357,1359,883,884,887,888,889,891,890,905,892,893,894,895,896,897,898,900,901,902,903,904,906,911,920,910,885,899,908,909,907,912,917,913,914,915,916,886,918,919,921,877,875,876,881,874,879,878,880,882,1431,1417,1413,1415,1416,1055,1044,1418,1043,1419,1379,1424,1420,1423,1421,1040,1045,1425,1041,1426,1427,1428,1437,1422,1047,1438,1439,1036,1440,1441,1118,290,291,326,327,328,329,330,331,332,333,334,335,336,338,337,339,340,341,325,375,342,343,344,376,345,346,347,348,349,350,351,352,353,354,355,356,357,359,358,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,1442,1333,1038,1039,1445,1443,1470,1471,1446,1449,1468,1469,1459,1458,1456,1451,1464,1462,1466,1450,1463,1467,1452,1453,1465,1447,1454,1455,1457,1461,1472,1460,1448,1485,1484,1479,1481,1480,1473,1474,1476,1478,1482,1483,1475,1477,1037,1042,1486,1494,1487,1490,1492,1493,1488,1491,1489,1498,1496,1497,1495,1444,1227,1218,1219,1220,1221,1222,1223,1224,1225,1226,1499,1500,1501,1346,292,1430,1339,1341,1342,1340,1338,1343,1175,1176,1177,1183,1178,1179,1180,1181,1182,1166,1165,1184,1172,1168,1159,1158,1160,1161,1162,1174,1163,1164,1169,1170,1171,1167,1173,1188,1307,1311,1310,1308,1309,1312,1191,1203,1192,1205,1207,1201,1200,1202,1206,1208,1193,1204,1194,1196,1197,1198,1199,1215,1214,1315,1209,1211,1210,1212,1213,1314,1313,1216,1298,1297,1228,1229,1231,1275,1296,1232,1276,1273,1277,1233,1234,1235,1278,1272,1230,1279,1236,1280,1260,1237,1238,1239,1270,1242,1241,1281,1282,1283,1244,1246,1247,1253,1254,1248,1284,1271,1249,1250,1285,1251,1243,1286,1269,1287,1252,1255,1256,1274,1288,1289,1268,1245,1290,1291,1292,1293,1294,1257,1295,1261,1258,1259,1240,1262,1265,1263,1264,1217,1305,1299,1300,1302,1303,1301,1306,1304,1190,1323,1321,1322,1320,1319,1318,1187,1189,1185,1316,1317,1195,1186,1337,1336,1058,1436,1434,1435,1267,1266,1433,1344,57,252,225,203,201,251,216,215,116,67,223,224,226,227,228,127,229,200,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,66,69,70,71,72,73,74,75,76,78,79,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,100,102,103,104,105,106,107,108,122,110,111,112,113,114,115,117,118,119,120,121,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,145,141,142,143,144,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,182,183,184,202,250,187,186,210,209,205,204,206,195,193,208,207,194,196,109,65,64,199,191,192,189,190,188,197,68,217,218,211,214,213,219,220,212,221,222,185,198,1335,555,554,576,500,556,509,499,618,709,655,864,706,863,862,708,557,662,658,859,830,781,782,783,795,788,787,789,790,794,792,822,819,818,820,833,831,832,827,796,797,800,798,799,801,802,805,803,804,806,807,505,778,777,779,776,506,775,780,809,808,538,539,540,786,784,785,497,536,828,504,793,821,791,810,811,812,813,814,815,816,817,826,825,823,824,829,648,649,652,653,654,623,624,643,562,647,566,642,604,568,625,626,646,640,641,627,628,530,645,650,651,656,657,531,629,644,631,632,633,634,635,636,630,637,861,638,639,503,528,553,533,535,615,529,558,561,619,610,659,550,545,537,868,546,534,547,549,548,541,544,712,735,716,719,721,771,747,711,739,768,718,748,733,736,724,758,753,746,728,727,744,754,773,774,759,750,731,717,720,752,737,745,742,760,743,729,755,738,772,762,749,770,751,730,766,756,732,761,769,734,757,740,765,715,726,725,723,710,722,767,763,741,764,569,575,574,565,564,573,572,571,853,570,612,563,580,579,834,836,837,838,839,840,841,846,842,843,852,844,845,847,848,849,850,835,851,542,707,873,854,855,857,551,552,856,597,508,700,517,522,701,698,601,704,668,699,696,697,705,695,694,518,502,663,702,703,666,507,524,598,527,526,523,667,602,515,669,520,519,516,665,494,521,495,496,498,501,493,543,664,525,622,865,621,866,867,514,714,713,567,676,684,687,616,689,677,691,692,675,683,605,679,678,661,660,690,609,607,608,680,693,681,688,614,686,682,685,606,674,858,860,871,611,578,620,577,613,617,596,510,600,559,670,672,581,512,869,532,673,599,511,603,560,671,582,513,595,594,593,588,589,592,591,587,590,583,584,585,586,870,872,54,55,11,9,10,15,14,2,16,17,18,19,20,21,22,23,3,24,4,25,29,26,27,28,30,31,32,5,33,34,35,36,6,40,37,38,39,41,7,42,47,48,43,44,45,46,8,56,52,49,50,51,1,53,13,12,308,315,307,322,299,298,321,316,319,301,300,296,295,318,297,302,303,306,293,324,323,310,311,313,309,312,317,304,305,314,294,320,1123,1135,1119,1120,1121,1122,1124,1125,1127,1126,1128,1129,1130,1131,1132,1133,1134,1066,1067,941,924,940,1405,939,492,1394,491,1065,1083,1064,1082,1063,1060,1069,1057,925,1046,1056,1035,1098,1141,1140,1097,1139,1095,1062,1096,1094,932,933,1093,1368,1369,1087,1086,1085,1406,929,1068,1347,1059,1393,1090,1349,1154,1147,1081,1395,1326,1324,1407,1325,1327,1328,928,931,936,1364,1365,1330,1329,1157,1155,1331,1332,1345,1408,926,1156,927,1366,1367,1348,1334,1384,1383,1374,1409,1386,1371,1387,1390,1385,1375,1377,1376,1061,922,930,923,1136,1360,1142,1143,937,1145,1146,1144,1150,1148,1361,1151,1152,1149,938,1362,1363,1153,1372,1410,1370,1391,1392,1373,1084,1092,1088,1089,934,1137,1138,1091,1378,1411,935,1380,1381,1388,1389,1382]},"version":"5.4.2"} \ No newline at end of file diff --git a/backend/dist/user/dto/create-user.dto.d.ts b/backend/dist/user/dto/create-user.dto.d.ts new file mode 100644 index 00000000..70209dfd --- /dev/null +++ b/backend/dist/user/dto/create-user.dto.d.ts @@ -0,0 +1,7 @@ +export declare class CreateUserDto { + email: string; + name: string; + lastName: string; + password: string; + birthDate: Date; +} diff --git a/backend/dist/user/dto/create-user.dto.js b/backend/dist/user/dto/create-user.dto.js new file mode 100644 index 00000000..ba9dd7e9 --- /dev/null +++ b/backend/dist/user/dto/create-user.dto.js @@ -0,0 +1,37 @@ +"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.CreateUserDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class CreateUserDto { +} +exports.CreateUserDto = CreateUserDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateUserDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateUserDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateUserDto.prototype, "lastName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], CreateUserDto.prototype, "password", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Date) +], CreateUserDto.prototype, "birthDate", void 0); +//# sourceMappingURL=create-user.dto.js.map \ No newline at end of file diff --git a/backend/dist/user/dto/create-user.dto.js.map b/backend/dist/user/dto/create-user.dto.js.map new file mode 100644 index 00000000..7be5f084 --- /dev/null +++ b/backend/dist/user/dto/create-user.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-user.dto.js","sourceRoot":"","sources":["../../../src/user/dto/create-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,aAAa;CAWzB;AAXD,sCAWC;AATC;IADC,IAAA,qBAAW,GAAE;;4CACA;AAEd;IADC,IAAA,qBAAW,GAAE;;2CACD;AAEb;IADC,IAAA,qBAAW,GAAE;;+CACG;AAEjB;IADC,IAAA,qBAAW,GAAE;;+CACG;AAEjB;IADC,IAAA,qBAAW,GAAE;8BACH,IAAI;gDAAC"} \ No newline at end of file diff --git a/backend/dist/user/dto/update-preferedCategories.dto.d.ts b/backend/dist/user/dto/update-preferedCategories.dto.d.ts new file mode 100644 index 00000000..e1e4cc9d --- /dev/null +++ b/backend/dist/user/dto/update-preferedCategories.dto.d.ts @@ -0,0 +1,3 @@ +export declare class UpdatePreferedCategoriesDto { + idCategories: number[]; +} diff --git a/backend/dist/user/dto/update-preferedCategories.dto.js b/backend/dist/user/dto/update-preferedCategories.dto.js new file mode 100644 index 00000000..31d02b19 --- /dev/null +++ b/backend/dist/user/dto/update-preferedCategories.dto.js @@ -0,0 +1,21 @@ +"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.UpdatePreferedCategoriesDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class UpdatePreferedCategoriesDto { +} +exports.UpdatePreferedCategoriesDto = UpdatePreferedCategoriesDto; +__decorate([ + (0, swagger_1.ApiProperty)({ isArray: true, type: Number, example: [1, 2] }), + __metadata("design:type", Array) +], UpdatePreferedCategoriesDto.prototype, "idCategories", void 0); +//# sourceMappingURL=update-preferedCategories.dto.js.map \ No newline at end of file diff --git a/backend/dist/user/dto/update-preferedCategories.dto.js.map b/backend/dist/user/dto/update-preferedCategories.dto.js.map new file mode 100644 index 00000000..6d307087 --- /dev/null +++ b/backend/dist/user/dto/update-preferedCategories.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-preferedCategories.dto.js","sourceRoot":"","sources":["../../../src/user/dto/update-preferedCategories.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,2BAA2B;CAGvC;AAHD,kEAGC;AADC;IADC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;;iEACvC"} \ No newline at end of file diff --git a/backend/dist/user/dto/update-user.dto.d.ts b/backend/dist/user/dto/update-user.dto.d.ts new file mode 100644 index 00000000..58f3b7d4 --- /dev/null +++ b/backend/dist/user/dto/update-user.dto.d.ts @@ -0,0 +1,7 @@ +export declare class UpdateUserDto { + name: string; + lastName: string; +} +export declare class UpdateImageUserDto { + image: any; +} diff --git a/backend/dist/user/dto/update-user.dto.js b/backend/dist/user/dto/update-user.dto.js new file mode 100644 index 00000000..6e968634 --- /dev/null +++ b/backend/dist/user/dto/update-user.dto.js @@ -0,0 +1,32 @@ +"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.UpdateImageUserDto = exports.UpdateUserDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class UpdateUserDto { +} +exports.UpdateUserDto = UpdateUserDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UpdateUserDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UpdateUserDto.prototype, "lastName", void 0); +class UpdateImageUserDto { +} +exports.UpdateImageUserDto = UpdateImageUserDto; +__decorate([ + (0, swagger_1.ApiProperty)({ type: 'string', format: 'binary' }), + __metadata("design:type", Object) +], UpdateImageUserDto.prototype, "image", void 0); +//# sourceMappingURL=update-user.dto.js.map \ No newline at end of file diff --git a/backend/dist/user/dto/update-user.dto.js.map b/backend/dist/user/dto/update-user.dto.js.map new file mode 100644 index 00000000..37f381b7 --- /dev/null +++ b/backend/dist/user/dto/update-user.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-user.dto.js","sourceRoot":"","sources":["../../../src/user/dto/update-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,aAAa;CAKzB;AALD,sCAKC;AAHC;IADC,IAAA,qBAAW,GAAE;;2CACD;AAEb;IADC,IAAA,qBAAW,GAAE;;+CACG;AAGnB,MAAa,kBAAkB;CAG9B;AAHD,gDAGC;AADC;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;iDAC5C"} \ No newline at end of file diff --git a/backend/dist/user/dto/user-response.d.ts b/backend/dist/user/dto/user-response.d.ts new file mode 100644 index 00000000..86a65669 --- /dev/null +++ b/backend/dist/user/dto/user-response.d.ts @@ -0,0 +1,7 @@ +export declare class UserResponse { + name: string; + lastName: string; + imageUrl: string; + email: string; + emailConfirmed: boolean; +} diff --git a/backend/dist/user/dto/user-response.js b/backend/dist/user/dto/user-response.js new file mode 100644 index 00000000..7d3e85d5 --- /dev/null +++ b/backend/dist/user/dto/user-response.js @@ -0,0 +1,37 @@ +"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.UserResponse = void 0; +const swagger_1 = require("@nestjs/swagger"); +class UserResponse { +} +exports.UserResponse = UserResponse; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserResponse.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserResponse.prototype, "lastName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserResponse.prototype, "imageUrl", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", String) +], UserResponse.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Boolean) +], UserResponse.prototype, "emailConfirmed", void 0); +//# sourceMappingURL=user-response.js.map \ No newline at end of file diff --git a/backend/dist/user/dto/user-response.js.map b/backend/dist/user/dto/user-response.js.map new file mode 100644 index 00000000..b37a150c --- /dev/null +++ b/backend/dist/user/dto/user-response.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-response.js","sourceRoot":"","sources":["../../../src/user/dto/user-response.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,YAAY;CAaxB;AAbD,oCAaC;AAXC;IADC,IAAA,qBAAW,GAAE;;0CACD;AAEb;IADC,IAAA,qBAAW,GAAE;;8CACG;AAEjB;IADC,IAAA,qBAAW,GAAE;;8CACG;AAGjB;IADC,IAAA,qBAAW,GAAE;;2CACA;AAGd;IADC,IAAA,qBAAW,GAAE;;oDACU"} \ No newline at end of file diff --git a/backend/dist/user/entities/user.entity.d.ts b/backend/dist/user/entities/user.entity.d.ts new file mode 100644 index 00000000..ef543932 --- /dev/null +++ b/backend/dist/user/entities/user.entity.d.ts @@ -0,0 +1,15 @@ +import { UserConfirmCode } from 'src/auth/user/entities/user-confirm-code.entity'; +import { UserResetCode } from 'src/auth/user/entities/user-reset-code.entity'; +import { Category } from 'src/category/entities/category.entity'; +export declare class User { + email: string; + preferedCategories: Category[]; + name: string; + lastName: string; + birthDate: Date; + password: string; + imageUrl: string; + isEmailConfirmed: boolean; + resetCodes: UserResetCode[]; + confirmCodes: UserConfirmCode[]; +} diff --git a/backend/dist/user/entities/user.entity.js b/backend/dist/user/entities/user.entity.js new file mode 100644 index 00000000..426cfed4 --- /dev/null +++ b/backend/dist/user/entities/user.entity.js @@ -0,0 +1,64 @@ +"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.User = void 0; +const user_confirm_code_entity_1 = require("../../auth/user/entities/user-confirm-code.entity"); +const user_reset_code_entity_1 = require("../../auth/user/entities/user-reset-code.entity"); +const category_entity_1 = require("../../category/entities/category.entity"); +const typeorm_1 = require("typeorm"); +let User = class User { +}; +exports.User = User; +__decorate([ + (0, typeorm_1.PrimaryColumn)(), + __metadata("design:type", String) +], User.prototype, "email", void 0); +__decorate([ + (0, typeorm_1.JoinTable)(), + (0, typeorm_1.ManyToMany)(() => category_entity_1.Category), + __metadata("design:type", Array) +], User.prototype, "preferedCategories", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], User.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], User.prototype, "lastName", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", Date) +], User.prototype, "birthDate", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], User.prototype, "password", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true }), + __metadata("design:type", String) +], User.prototype, "imageUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: false }), + __metadata("design:type", Boolean) +], User.prototype, "isEmailConfirmed", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => user_reset_code_entity_1.UserResetCode, (resetCode) => resetCode.user), + __metadata("design:type", Array) +], User.prototype, "resetCodes", void 0); +__decorate([ + (0, typeorm_1.OneToMany)(() => user_confirm_code_entity_1.UserConfirmCode, (confirmCode) => confirmCode.user), + __metadata("design:type", Array) +], User.prototype, "confirmCodes", void 0); +exports.User = User = __decorate([ + (0, typeorm_1.Entity)() +], User); +//# sourceMappingURL=user.entity.js.map \ No newline at end of file diff --git a/backend/dist/user/entities/user.entity.js.map b/backend/dist/user/entities/user.entity.js.map new file mode 100644 index 00000000..f274f231 --- /dev/null +++ b/backend/dist/user/entities/user.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../../src/user/entities/user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gGAAkF;AAClF,4FAA8E;AAC9E,6EAAiE;AACjE,qCAA0F;AAGnF,IAAM,IAAI,GAAV,MAAM,IAAI;CA+BhB,CAAA;AA/BY,oBAAI;AAEf;IADC,IAAA,uBAAa,GAAE;;mCACF;AAId;IAFC,IAAA,mBAAS,GAAE;IACX,IAAA,oBAAU,EAAC,GAAG,EAAE,CAAC,0BAAQ,CAAC;;gDACI;AAG/B;IADC,IAAA,gBAAM,GAAE;;kCACI;AAGb;IADC,IAAA,gBAAM,GAAE;;sCACQ;AAGjB;IADC,IAAA,gBAAM,GAAE;8BACE,IAAI;uCAAC;AAGhB;IADC,IAAA,gBAAM,GAAE;;sCACQ;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACV;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;8CACD;AAG1B;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,sCAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;;wCAClC;AAG5B;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0CAAe,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;;0CACpC;eA9BrB,IAAI;IADhB,IAAA,gBAAM,GAAE;GACI,IAAI,CA+BhB"} \ No newline at end of file diff --git a/backend/dist/user/user.controller.d.ts b/backend/dist/user/user.controller.d.ts new file mode 100644 index 00000000..b8697bbc --- /dev/null +++ b/backend/dist/user/user.controller.d.ts @@ -0,0 +1,20 @@ +import { UserService } from './user.service'; +import { UpdatePreferedCategoriesDto } from './dto/update-preferedCategories.dto'; +import { CustomUserRequest } from 'src/auth/user/interface/customUserReq'; +import { UpdateUserDto } from './dto/update-user.dto'; +import { CustomAdminRequest } from 'src/auth/admin/interface/customAdminReq'; +export declare class UserController { + private readonly userService; + constructor(userService: UserService); + updatePreferedCategories(updatePreferedCategoriesDto: UpdatePreferedCategoriesDto, req: CustomUserRequest): Promise<{ + message: string; + }>; + getPreferedCategories(req: CustomUserRequest, lang: string): Promise; + updateInfo(updateUserDto: UpdateUserDto, req: CustomUserRequest): Promise<{ + message: string; + }>; + updatePhoto(reqImg: CustomAdminRequest, req: CustomUserRequest): Promise<{ + message: string; + }>; + getInfo(req: CustomUserRequest): Promise; +} diff --git a/backend/dist/user/user.controller.js b/backend/dist/user/user.controller.js new file mode 100644 index 00000000..9577b867 --- /dev/null +++ b/backend/dist/user/user.controller.js @@ -0,0 +1,138 @@ +"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.UserController = void 0; +const common_1 = require("@nestjs/common"); +const user_service_1 = require("./user.service"); +const update_preferedCategories_dto_1 = require("./dto/update-preferedCategories.dto"); +const swagger_1 = require("@nestjs/swagger"); +const authUser_guard_1 = require("../auth/user/authUser.guard"); +const update_user_dto_1 = require("./dto/update-user.dto"); +const file_save_interceptor_1 = require("../shared/interceptors/file-save.interceptor"); +let UserController = class UserController { + constructor(userService) { + this.userService = userService; + } + async updatePreferedCategories(updatePreferedCategoriesDto, req) { + try { + const { email } = req.user; + await this.userService.updatePreferedCategories(email, updatePreferedCategoriesDto.idCategories); + return { message: 'Prefered categories updated successfully' }; + } + catch (error) { + throw error; + } + } + async getPreferedCategories(req, lang) { + try { + const { email } = req.user; + return await this.userService.getPreferedCategories(email, lang); + } + catch (error) { + throw error; + } + } + async updateInfo(updateUserDto, req) { + try { + const { email } = req.user; + await this.userService.updateInfo(email, updateUserDto); + return { message: 'User info updated successfully' }; + } + catch (error) { + throw error; + } + } + async updatePhoto(reqImg, req) { + try { + const { email } = req.user; + const image = reqImg.file.filename; + await this.userService.updatePhoto(email, image); + return { message: 'User photo updated successfully' }; + } + catch (error) { + throw error; + } + } + async getInfo(req) { + try { + const { email } = req.user; + return await this.userService.getUserInfo(email); + } + catch (error) { + throw error; + } + } +}; +exports.UserController = UserController; +__decorate([ + (0, common_1.Patch)('update-prefered-categories'), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiBody)({ type: update_preferedCategories_dto_1.UpdatePreferedCategoriesDto }), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [update_preferedCategories_dto_1.UpdatePreferedCategoriesDto, Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "updatePreferedCategories", null); +__decorate([ + (0, common_1.Get)('prefered-categories'), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiQuery)({ name: 'lang', type: String }), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)('lang')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, String]), + __metadata("design:returntype", Promise) +], UserController.prototype, "getPreferedCategories", null); +__decorate([ + (0, common_1.Patch)('info'), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, swagger_1.ApiBody)({ type: update_user_dto_1.UpdateUserDto }), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [update_user_dto_1.UpdateUserDto, Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "updateInfo", null); +__decorate([ + (0, common_1.Patch)('photo'), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + (0, swagger_1.ApiConsumes)('multipart/form-data'), + (0, swagger_1.ApiBody)({ type: update_user_dto_1.UpdateImageUserDto }), + (0, common_1.UseInterceptors)((0, file_save_interceptor_1.fileInterceptor)('image', 'static/user/', ['.jpg', '.jpeg', '.png'])), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "updatePhoto", null); +__decorate([ + (0, common_1.Get)('info'), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "getInfo", null); +exports.UserController = UserController = __decorate([ + (0, common_1.Controller)('user'), + (0, swagger_1.ApiTags)('User'), + __metadata("design:paramtypes", [user_service_1.UserService]) +], UserController); +//# sourceMappingURL=user.controller.js.map \ No newline at end of file diff --git a/backend/dist/user/user.controller.js.map b/backend/dist/user/user.controller.js.map new file mode 100644 index 00000000..2316a10a --- /dev/null +++ b/backend/dist/user/user.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user.controller.js","sourceRoot":"","sources":["../../src/user/user.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/dist/user/user.module.d.ts b/backend/dist/user/user.module.d.ts new file mode 100644 index 00000000..7ccd53b6 --- /dev/null +++ b/backend/dist/user/user.module.d.ts @@ -0,0 +1,2 @@ +export declare class UserModule { +} diff --git a/backend/dist/user/user.module.js b/backend/dist/user/user.module.js new file mode 100644 index 00000000..5569ba03 --- /dev/null +++ b/backend/dist/user/user.module.js @@ -0,0 +1,33 @@ +"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.UserModule = void 0; +const common_1 = require("@nestjs/common"); +const user_service_1 = require("./user.service"); +const user_controller_1 = require("./user.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const user_entity_1 = require("./entities/user.entity"); +const category_service_1 = require("../category/category.service"); +const category_entity_1 = require("../category/entities/category.entity"); +const authUserservice_1 = require("../auth/user/authUserservice"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const user_reset_code_entity_1 = require("../auth/user/entities/user-reset-code.entity"); +const user_confirm_code_entity_1 = require("../auth/user/entities/user-confirm-code.entity"); +const email_service_1 = require("../email/email.service"); +let UserModule = class UserModule { +}; +exports.UserModule = UserModule; +exports.UserModule = UserModule = __decorate([ + (0, common_1.Module)({ + controllers: [user_controller_1.UserController], + providers: [user_service_1.UserService, category_service_1.CategoryService, authUserservice_1.AuthUserService, jwt_1.JwtService, encryption_service_1.EncryptionService, email_service_1.EmailService], + imports: [typeorm_1.TypeOrmModule.forFeature([user_entity_1.User, category_entity_1.Category, user_reset_code_entity_1.UserResetCode, user_confirm_code_entity_1.UserConfirmCode])], + }) +], UserModule); +//# sourceMappingURL=user.module.js.map \ No newline at end of file diff --git a/backend/dist/user/user.module.js.map b/backend/dist/user/user.module.js.map new file mode 100644 index 00000000..1834f53c --- /dev/null +++ b/backend/dist/user/user.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user.module.js","sourceRoot":"","sources":["../../src/user/user.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,iDAA6C;AAC7C,uDAAmD;AACnD,6CAAgD;AAChD,wDAA8C;AAC9C,mEAAgE;AAChE,0EAAiE;AACjE,kEAAgE;AAChE,qCAAyC;AACzC,8EAA2E;AAC3E,yFAA8E;AAC9E,6FAAkF;AAClF,0DAAuD;AAOhD,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,EAAE,kCAAe,EAAE,iCAAe,EAAE,gBAAU,EAAE,sCAAiB,EAAE,4BAAY,CAAC;QACvG,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,kBAAI,EAAE,0BAAQ,EAAE,sCAAa,EAAE,0CAAe,CAAC,CAAC,CAAC;KACtF,CAAC;GACW,UAAU,CAAG"} \ No newline at end of file diff --git a/backend/dist/user/user.service.d.ts b/backend/dist/user/user.service.d.ts new file mode 100644 index 00000000..e2356b27 --- /dev/null +++ b/backend/dist/user/user.service.d.ts @@ -0,0 +1,22 @@ +import { User } from './entities/user.entity'; +import { Repository } from 'typeorm'; +import { CreateUserDto } from './dto/create-user.dto'; +import { CategoryService } from 'src/category/category.service'; +import { LANGUAGES } from 'src/shared/enum/languages.enum'; +import { UpdateUserDto } from './dto/update-user.dto'; +import { UserResponse } from './dto/user-response'; +export declare class UserService { + private userRepository; + private categoryService; + constructor(userRepository: Repository, categoryService: CategoryService); + findOne(email: string): Promise; + create(createUserDto: CreateUserDto): Promise; + userExists(email: string): Promise; + updatePassword(email: string, password: string): Promise; + updatePreferedCategories(email: string, idCategories: number[]): Promise; + getPreferedCategories(email: string, language: LANGUAGES): Promise; + confirmEmail(email: string): Promise; + updateInfo(email: string, updateUserDto: UpdateUserDto): Promise; + updatePhoto(email: string, photo: string): Promise; + getUserInfo(email: string): Promise; +} diff --git a/backend/dist/user/user.service.js b/backend/dist/user/user.service.js new file mode 100644 index 00000000..cdf4205d --- /dev/null +++ b/backend/dist/user/user.service.js @@ -0,0 +1,126 @@ +"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.UserService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const user_entity_1 = require("./entities/user.entity"); +const typeorm_2 = require("typeorm"); +const category_service_1 = require("../category/category.service"); +const languages_enum_1 = require("../shared/enum/languages.enum"); +const server_contants_1 = require("../constants/server.contants"); +let UserService = class UserService { + constructor(userRepository, categoryService) { + this.userRepository = userRepository; + this.categoryService = categoryService; + } + async findOne(email) { + const user = await this.userRepository.findOneBy({ email }); + return user; + } + async create(createUserDto) { + await this.userRepository.insert(createUserDto); + } + async userExists(email) { + const user = await this.userRepository.findOneBy({ email }); + if (user) + return true; + else + return false; + } + async updatePassword(email, password) { + await this.userRepository.update({ email }, { password }); + } + async updatePreferedCategories(email, idCategories) { + const user = await this.userRepository.findOneBy({ email }); + const categories = []; + for (const idCategory of idCategories) { + const categoryEN = await this.categoryService.findOne(idCategory); + if (!categoryEN) + throw new common_1.BadRequestException('Category not found'); + categoryEN.language = languages_enum_1.LANGUAGES.EN; + const categoryES = { + ...categoryEN, + language: languages_enum_1.LANGUAGES.ES, + }; + categories.push(categoryEN); + categories.push(categoryES); + } + user.preferedCategories = categories; + await this.userRepository.save(user); + } + async getPreferedCategories(email, language) { + const user = await this.userRepository.findOne({ + relations: { + preferedCategories: true, + }, + where: { + email, + preferedCategories: { + language, + }, + }, + }); + return user?.preferedCategories || []; + } + async confirmEmail(email) { + try { + await this.userRepository.update({ email }, { isEmailConfirmed: true }); + } + catch (error) { + throw new common_1.BadRequestException('Error confirming email'); + } + } + async updateInfo(email, updateUserDto) { + try { + await this.userRepository.update({ email }, updateUserDto); + } + catch (error) { + throw new common_1.BadRequestException('Error updating user info'); + } + } + async updatePhoto(email, photo) { + try { + await this.userRepository.update({ email }, { imageUrl: photo }); + } + catch (error) { + throw new common_1.BadRequestException('Error updating user photo'); + } + } + async getUserInfo(email) { + try { + const user = await this.userRepository.findOneBy({ email }); + user.imageUrl = `${server_contants_1.ServerConstants.HOST}/user/${user.imageUrl}`; + const res = { + imageUrl: user.imageUrl, + lastName: user.lastName, + email: user.email, + name: user.name, + emailConfirmed: user.isEmailConfirmed, + }; + return res; + } + catch (error) { + throw new common_1.BadRequestException('Error getting user info'); + } + } +}; +exports.UserService = UserService; +exports.UserService = UserService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)), + __metadata("design:paramtypes", [typeorm_2.Repository, + category_service_1.CategoryService]) +], UserService); +//# sourceMappingURL=user.service.js.map \ No newline at end of file diff --git a/backend/dist/user/user.service.js.map b/backend/dist/user/user.service.js.map new file mode 100644 index 00000000..6ed2e7e1 --- /dev/null +++ b/backend/dist/user/user.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/user/user.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAiE;AACjE,6CAAmD;AACnD,wDAA8C;AAC9C,qCAAqC;AAGrC,mEAAgE;AAChE,kEAA2D;AAG3D,kEAAgE;AAMzD,IAAM,WAAW,GAAjB,MAAM,WAAW;IACtB,YACkC,cAAgC,EACxD,eAAgC;QADR,mBAAc,GAAd,cAAc,CAAkB;QACxD,oBAAe,GAAf,eAAe,CAAiB;IACvC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,aAA4B;QACvC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;;YACjB,OAAO,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,QAAgB;QAClD,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,KAAa,EAAE,YAAsB;QAClE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAe,EAAE,CAAC;QAClC,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,MAAM,UAAU,GAAa,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5E,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,4BAAmB,CAAC,oBAAoB,CAAC,CAAC;YACrE,UAAU,CAAC,QAAQ,GAAG,0BAAS,CAAC,EAAE,CAAC;YACnC,MAAM,UAAU,GAAa;gBAC3B,GAAG,UAAU;gBACb,QAAQ,EAAE,0BAAS,CAAC,EAAE;aACvB,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;QACrC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,QAAmB;QAC5D,MAAM,IAAI,GAAQ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAClD,SAAS,EAAE;gBACT,kBAAkB,EAAE,IAAI;aACzB;YACD,KAAK,EAAE;gBACL,KAAK;gBACL,kBAAkB,EAAE;oBAClB,QAAQ;iBACT;aACF;SACF,CAAC,CAAC;QACH,OAAO,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,4BAAmB,CAAC,wBAAwB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,aAA4B;QAC1D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,4BAAmB,CAAC,0BAA0B,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,KAAa;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,4BAAmB,CAAC,2BAA2B,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,QAAQ,GAAG,GAAG,iCAAe,CAAC,IAAI,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChE,MAAM,GAAG,GAAiB;gBACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,gBAAgB;aACtC,CAAC;YACF,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,4BAAmB,CAAC,yBAAyB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF,CAAA;AAlGY,kCAAW;sBAAX,WAAW;IAJvB,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;qCAAyB,oBAAU;QACjC,kCAAe;GAH/B,WAAW,CAkGvB"} \ No newline at end of file diff --git a/backend/dist/visited/dto/create-visited.dto.d.ts b/backend/dist/visited/dto/create-visited.dto.d.ts new file mode 100644 index 00000000..0bd00b6b --- /dev/null +++ b/backend/dist/visited/dto/create-visited.dto.d.ts @@ -0,0 +1,4 @@ +export declare class CreateVisitedDto { + idPlace: number; + rating: number; +} diff --git a/backend/dist/visited/dto/create-visited.dto.js b/backend/dist/visited/dto/create-visited.dto.js new file mode 100644 index 00000000..731ae054 --- /dev/null +++ b/backend/dist/visited/dto/create-visited.dto.js @@ -0,0 +1,25 @@ +"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.CreateVisitedDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +class CreateVisitedDto { +} +exports.CreateVisitedDto = CreateVisitedDto; +__decorate([ + (0, swagger_1.ApiProperty)(), + __metadata("design:type", Number) +], CreateVisitedDto.prototype, "idPlace", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ type: 'number', description: 'Rating from 1 to 5' }), + __metadata("design:type", Number) +], CreateVisitedDto.prototype, "rating", void 0); +//# sourceMappingURL=create-visited.dto.js.map \ No newline at end of file diff --git a/backend/dist/visited/dto/create-visited.dto.js.map b/backend/dist/visited/dto/create-visited.dto.js.map new file mode 100644 index 00000000..b01186bd --- /dev/null +++ b/backend/dist/visited/dto/create-visited.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-visited.dto.js","sourceRoot":"","sources":["../../../src/visited/dto/create-visited.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,gBAAgB;CAK5B;AALD,4CAKC;AAHC;IADC,IAAA,qBAAW,GAAE;;iDACE;AAEhB;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;;gDACpD"} \ No newline at end of file diff --git a/backend/dist/visited/dto/update-visited.dto.d.ts b/backend/dist/visited/dto/update-visited.dto.d.ts new file mode 100644 index 00000000..6d85c63b --- /dev/null +++ b/backend/dist/visited/dto/update-visited.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateVisitedDto } from './create-visited.dto'; +declare const UpdateVisitedDto_base: import("@nestjs/common").Type>; +export declare class UpdateVisitedDto extends UpdateVisitedDto_base { +} +export {}; diff --git a/backend/dist/visited/dto/update-visited.dto.js b/backend/dist/visited/dto/update-visited.dto.js new file mode 100644 index 00000000..32ab7551 --- /dev/null +++ b/backend/dist/visited/dto/update-visited.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateVisitedDto = void 0; +const swagger_1 = require("@nestjs/swagger"); +const create_visited_dto_1 = require("./create-visited.dto"); +class UpdateVisitedDto extends (0, swagger_1.PartialType)(create_visited_dto_1.CreateVisitedDto) { +} +exports.UpdateVisitedDto = UpdateVisitedDto; +//# sourceMappingURL=update-visited.dto.js.map \ No newline at end of file diff --git a/backend/dist/visited/dto/update-visited.dto.js.map b/backend/dist/visited/dto/update-visited.dto.js.map new file mode 100644 index 00000000..e3470152 --- /dev/null +++ b/backend/dist/visited/dto/update-visited.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-visited.dto.js","sourceRoot":"","sources":["../../../src/visited/dto/update-visited.dto.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,6DAAwD;AAExD,MAAa,gBAAiB,SAAQ,IAAA,qBAAW,EAAC,qCAAgB,CAAC;CAAG;AAAtE,4CAAsE"} \ No newline at end of file diff --git a/backend/dist/visited/entities/visited.entity.d.ts b/backend/dist/visited/entities/visited.entity.d.ts new file mode 100644 index 00000000..1dd5d360 --- /dev/null +++ b/backend/dist/visited/entities/visited.entity.d.ts @@ -0,0 +1,9 @@ +import { Place } from 'src/place/entities/place.entity'; +import { User } from 'src/user/entities/user.entity'; +export declare class Visited { + idVisited: number; + place: Place; + user: User; + rating: number; + date: Date; +} diff --git a/backend/dist/visited/entities/visited.entity.js b/backend/dist/visited/entities/visited.entity.js new file mode 100644 index 00000000..d0e96883 --- /dev/null +++ b/backend/dist/visited/entities/visited.entity.js @@ -0,0 +1,44 @@ +"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.Visited = void 0; +const place_entity_1 = require("../../place/entities/place.entity"); +const user_entity_1 = require("../../user/entities/user.entity"); +const typeorm_1 = require("typeorm"); +let Visited = class Visited { +}; +exports.Visited = Visited; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], Visited.prototype, "idVisited", void 0); +__decorate([ + (0, typeorm_1.OneToOne)(() => place_entity_1.Place, (place) => place.idPlace, { eager: true }), + (0, typeorm_1.JoinColumn)({ name: 'place' }), + __metadata("design:type", place_entity_1.Place) +], Visited.prototype, "place", void 0); +__decorate([ + (0, typeorm_1.ManyToOne)(() => user_entity_1.User, (user) => user.email), + (0, typeorm_1.JoinColumn)({ name: 'user' }), + __metadata("design:type", user_entity_1.User) +], Visited.prototype, "user", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false }), + __metadata("design:type", Number) +], Visited.prototype, "rating", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true, default: () => 'CURRENT_TIMESTAMP' }), + __metadata("design:type", Date) +], Visited.prototype, "date", void 0); +exports.Visited = Visited = __decorate([ + (0, typeorm_1.Entity)() +], Visited); +//# sourceMappingURL=visited.entity.js.map \ No newline at end of file diff --git a/backend/dist/visited/entities/visited.entity.js.map b/backend/dist/visited/entities/visited.entity.js.map new file mode 100644 index 00000000..fe3b1837 --- /dev/null +++ b/backend/dist/visited/entities/visited.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"visited.entity.js","sourceRoot":"","sources":["../../../src/visited/entities/visited.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAwD;AACxD,iEAAqD;AACrD,qCAAkG;AAG3F,IAAM,OAAO,GAAb,MAAM,OAAO;CAiBnB,CAAA;AAjBY,0BAAO;AAElB;IADC,IAAA,gCAAsB,GAAE;;0CACP;AAIlB;IAFC,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAChE,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8BACvB,oBAAK;sCAAC;AAIb;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8BACvB,kBAAI;qCAAC;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;uCACb;AAGf;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;8BACzD,IAAI;qCAAC;kBAhBA,OAAO;IADnB,IAAA,gBAAM,GAAE;GACI,OAAO,CAiBnB"} \ No newline at end of file diff --git a/backend/dist/visited/templates/visit_template.d.ts b/backend/dist/visited/templates/visit_template.d.ts new file mode 100644 index 00000000..9a488539 --- /dev/null +++ b/backend/dist/visited/templates/visit_template.d.ts @@ -0,0 +1 @@ +export declare const visit_template: (places: string[]) => string; diff --git a/backend/dist/visited/templates/visit_template.js b/backend/dist/visited/templates/visit_template.js new file mode 100644 index 00000000..3f6fe685 --- /dev/null +++ b/backend/dist/visited/templates/visit_template.js @@ -0,0 +1,131 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.visit_template = void 0; +const visit_template = (places) => ` + + + + + + Document + + + +
+
+

Jerez de García Salinas, Zacatecas

+
+
+ ${places + .map((place) => `
+ +
`) + .join('\n')} +
+ +
+
+ + +`; +exports.visit_template = visit_template; +//# sourceMappingURL=visit_template.js.map \ No newline at end of file diff --git a/backend/dist/visited/templates/visit_template.js.map b/backend/dist/visited/templates/visit_template.js.map new file mode 100644 index 00000000..00bab434 --- /dev/null +++ b/backend/dist/visited/templates/visit_template.js.map @@ -0,0 +1 @@ +{"version":3,"file":"visit_template.js","sourceRoot":"","sources":["../../../src/visited/templates/visit_template.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,MAAgB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4G5C,MAAM;KACL,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;;qBAEA,KAAK;;;eAGX,CACN;KACA,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;CAUlB,CAAC;AA/HW,QAAA,cAAc,kBA+HzB"} \ No newline at end of file diff --git a/backend/dist/visited/utils/visited_places_image_creator.d.ts b/backend/dist/visited/utils/visited_places_image_creator.d.ts new file mode 100644 index 00000000..07fd1834 --- /dev/null +++ b/backend/dist/visited/utils/visited_places_image_creator.d.ts @@ -0,0 +1,4 @@ +export declare class VisitedPlacesImageCreator { + generateImage(imagesURL: string[]): Promise; + private getTemplate; +} diff --git a/backend/dist/visited/utils/visited_places_image_creator.js b/backend/dist/visited/utils/visited_places_image_creator.js new file mode 100644 index 00000000..b127a016 --- /dev/null +++ b/backend/dist/visited/utils/visited_places_image_creator.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VisitedPlacesImageCreator = void 0; +const ejs_1 = require("ejs"); +const fs_1 = require("fs"); +const puppeteer_1 = require("puppeteer"); +const crypto_1 = require("crypto"); +const path_1 = require("path"); +const visit_template_1 = require("../templates/visit_template"); +const server_contants_1 = require("../../constants/server.contants"); +class VisitedPlacesImageCreator { + async generateImage(imagesURL) { + try { + const template = this.getTemplate(imagesURL); + const browser = await puppeteer_1.default.launch(); + const page = await browser.newPage(); + await page.setContent(template); + await page.setViewport({ width: 470, height: 320, deviceScaleFactor: 2 }); + const outDir = (0, path_1.join)(__dirname, "../../../static/visits"); + if (!(0, fs_1.existsSync)(outDir)) { + (0, fs_1.mkdir)(outDir, { recursive: true }, (err) => { + if (err) + throw err; + }); + } + const imageName = `${(0, crypto_1.randomUUID)()}.png`; + const outPath = (0, path_1.join)(outDir, imageName); + await page.screenshot({ path: outPath }); + await browser.close(); + return (0, path_1.join)(server_contants_1.ServerConstants.HOST, "visits", imageName); + } + catch (error) { + console.log(error); + throw error; + } + } + getTemplate(images) { + const template = (0, visit_template_1.visit_template)(images); + return (0, ejs_1.render)(template, { images }); + } +} +exports.VisitedPlacesImageCreator = VisitedPlacesImageCreator; +//# sourceMappingURL=visited_places_image_creator.js.map \ No newline at end of file diff --git a/backend/dist/visited/utils/visited_places_image_creator.js.map b/backend/dist/visited/utils/visited_places_image_creator.js.map new file mode 100644 index 00000000..a7c0cec4 --- /dev/null +++ b/backend/dist/visited/utils/visited_places_image_creator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"visited_places_image_creator.js","sourceRoot":"","sources":["../../../src/visited/utils/visited_places_image_creator.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,2BAAqD;AACrD,yCAAkC;AAClC,mCAAoC;AACpC,+BAA4B;AAC5B,gEAA6D;AAC7D,qEAAgE;AAEhE,MAAa,yBAAyB;IAC3B,KAAK,CAAC,aAAa,CAAC,SAAmB;QAC1C,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,mBAAS,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;YACzD,IAAI,CAAC,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,IAAA,UAAK,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;oBACvC,IAAI,GAAG;wBAAE,MAAM,GAAG,CAAC;gBACvB,CAAC,CAAC,CAAC;YACP,CAAC;YACD,MAAM,SAAS,GAAG,GAAG,IAAA,mBAAU,GAAE,MAAM,CAAC;YACxC,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACzC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YAEtB,OAAO,IAAA,WAAI,EAAC,iCAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,MAAgB;QAChC,MAAM,QAAQ,GAAG,IAAA,+BAAc,EAAC,MAAM,CAAC,CAAC;QACxC,OAAO,IAAA,YAAM,EAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;CACJ;AA/BD,8DA+BC"} \ No newline at end of file diff --git a/backend/dist/visited/visited.controller.d.ts b/backend/dist/visited/visited.controller.d.ts new file mode 100644 index 00000000..8153cdef --- /dev/null +++ b/backend/dist/visited/visited.controller.d.ts @@ -0,0 +1,32 @@ +import { VisitedService } from './visited.service'; +import { CreateVisitedDto } from './dto/create-visited.dto'; +import { CustomUserRequest } from 'src/auth/user/interface/customUserReq'; +export declare class VisitedController { + private readonly visitedService; + constructor(visitedService: VisitedService); + create(createVisitedDto: CreateVisitedDto, req: CustomUserRequest): Promise; + getVisitedPlacesImage(routeId: string): Promise; + findAllByUser(req: CustomUserRequest): Promise<{ + place: { + imageName: string; + idPlace: number; + town: import("src/town/entities/town.entity").Town; + points: import("src/pointOfInterest/entities/PointOfInterest.entity").PointOfInterest[]; + availableDates: import("src/place/entities/available-date.entity").AvailableDate[]; + categories: import("src/category/entities/category.entity").Category[]; + placeTraduction: import("src/place/entities/place-traduction.entity").PlaceTraduction[]; + visited: import("src/visited/entities/visited.entity").Visited[]; + available: import("src/pointOfInterest/enum/available.enum").Available; + name: string; + latitude: any; + longitude: any; + address: string; + openAt: number; + closeAt: number; + }; + idVisited: number; + user: import("src/user/entities/user.entity").User; + rating: number; + date: Date; + }[]>; +} diff --git a/backend/dist/visited/visited.controller.js b/backend/dist/visited/visited.controller.js new file mode 100644 index 00000000..97197543 --- /dev/null +++ b/backend/dist/visited/visited.controller.js @@ -0,0 +1,74 @@ +"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.VisitedController = void 0; +const common_1 = require("@nestjs/common"); +const visited_service_1 = require("./visited.service"); +const create_visited_dto_1 = require("./dto/create-visited.dto"); +const swagger_1 = require("@nestjs/swagger"); +const authUser_guard_1 = require("../auth/user/authUser.guard"); +let VisitedController = class VisitedController { + constructor(visitedService) { + this.visitedService = visitedService; + } + async create(createVisitedDto, req) { + try { + const { email } = req.user; + return await this.visitedService.create(createVisitedDto, email); + } + catch (e) { + return e; + } + } + async getVisitedPlacesImage(routeId) { + return await this.visitedService.getVisitedPlacesImage(+routeId); + } + async findAllByUser(req) { + const { email } = req.user; + return this.visitedService.findAllByUser(email); + } +}; +exports.VisitedController = VisitedController; +__decorate([ + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + (0, common_1.Post)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [create_visited_dto_1.CreateVisitedDto, Object]), + __metadata("design:returntype", Promise) +], VisitedController.prototype, "create", null); +__decorate([ + (0, common_1.Get)('/getImage/:routeId'), + __param(0, (0, common_1.Param)('routeId')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], VisitedController.prototype, "getVisitedPlacesImage", null); +__decorate([ + (0, common_1.UseGuards)(authUser_guard_1.AuthUserGuard), + (0, swagger_1.ApiBearerAuth)('jwt'), + (0, common_1.Get)('/user/'), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], VisitedController.prototype, "findAllByUser", null); +exports.VisitedController = VisitedController = __decorate([ + (0, common_1.Controller)('visited'), + (0, swagger_1.ApiTags)('Visited places'), + __metadata("design:paramtypes", [visited_service_1.VisitedService]) +], VisitedController); +//# sourceMappingURL=visited.controller.js.map \ No newline at end of file diff --git a/backend/dist/visited/visited.controller.js.map b/backend/dist/visited/visited.controller.js.map new file mode 100644 index 00000000..1dd49379 --- /dev/null +++ b/backend/dist/visited/visited.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"visited.controller.js","sourceRoot":"","sources":["../../src/visited/visited.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4F;AAC5F,uDAAmD;AACnD,iEAA4D;AAC5D,6CAAyD;AACzD,gEAA6D;AAMtD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAKzD,AAAN,KAAK,CAAC,MAAM,CAAS,gBAAkC,EAAS,GAAsB;QACpF,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YAC3B,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAGK,AAAN,KAAK,CAAC,qBAAqB,CAAmB,OAAe;QAC3D,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAKK,AAAN,KAAK,CAAC,aAAa,CAAQ,GAAsB;QAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AA3BY,8CAAiB;AAMtB;IAHL,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,kBAAS,EAAC,8BAAa,CAAC;IACxB,IAAA,aAAI,GAAE;IACO,WAAA,IAAA,aAAI,GAAE,CAAA;IAAsC,WAAA,IAAA,YAAG,GAAE,CAAA;;qCAAxB,qCAAgB;;+CAOtD;AAGK;IADL,IAAA,YAAG,EAAC,oBAAoB,CAAC;IACG,WAAA,IAAA,cAAK,EAAC,SAAS,CAAC,CAAA;;;;8DAE5C;AAKK;IAHL,IAAA,kBAAS,EAAC,8BAAa,CAAC;IACxB,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,YAAG,EAAC,QAAQ,CAAC;IACO,WAAA,IAAA,YAAG,GAAE,CAAA;;;;sDAGzB;4BA1BU,iBAAiB;IAF7B,IAAA,mBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,iBAAO,EAAC,gBAAgB,CAAC;qCAEqB,gCAAc;GADhD,iBAAiB,CA2B7B"} \ No newline at end of file diff --git a/backend/dist/visited/visited.module.d.ts b/backend/dist/visited/visited.module.d.ts new file mode 100644 index 00000000..4af361ee --- /dev/null +++ b/backend/dist/visited/visited.module.d.ts @@ -0,0 +1,2 @@ +export declare class VisitedModule { +} diff --git a/backend/dist/visited/visited.module.js b/backend/dist/visited/visited.module.js new file mode 100644 index 00000000..7faca055 --- /dev/null +++ b/backend/dist/visited/visited.module.js @@ -0,0 +1,66 @@ +"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.VisitedModule = void 0; +const common_1 = require("@nestjs/common"); +const visited_service_1 = require("./visited.service"); +const visited_controller_1 = require("./visited.controller"); +const typeorm_1 = require("@nestjs/typeorm"); +const user_service_1 = require("../user/user.service"); +const place_service_1 = require("../place/place.service"); +const user_entity_1 = require("../user/entities/user.entity"); +const place_entity_1 = require("../place/entities/place.entity"); +const visited_entity_1 = require("./entities/visited.entity"); +const category_service_1 = require("../category/category.service"); +const category_entity_1 = require("../category/entities/category.entity"); +const available_date_entity_1 = require("../place/entities/available-date.entity"); +const place_traduction_entity_1 = require("../place/entities/place-traduction.entity"); +const town_entity_1 = require("../town/entities/town.entity"); +const authUserservice_1 = require("../auth/user/authUserservice"); +const jwt_1 = require("@nestjs/jwt"); +const encryption_service_1 = require("../auth/encryption/encryption.service"); +const user_reset_code_entity_1 = require("../auth/user/entities/user-reset-code.entity"); +const user_confirm_code_entity_1 = require("../auth/user/entities/user-confirm-code.entity"); +const email_service_1 = require("../email/email.service"); +const travel_place_entity_1 = require("../travel-place/entities/travel-place.entity"); +const route_module_1 = require("../route/route.module"); +let VisitedModule = class VisitedModule { +}; +exports.VisitedModule = VisitedModule; +exports.VisitedModule = VisitedModule = __decorate([ + (0, common_1.Module)({ + controllers: [visited_controller_1.VisitedController], + providers: [ + visited_service_1.VisitedService, + user_service_1.UserService, + place_service_1.PlaceService, + category_service_1.CategoryService, + authUserservice_1.AuthUserService, + jwt_1.JwtService, + encryption_service_1.EncryptionService, + email_service_1.EmailService, + ], + imports: [ + (0, common_1.forwardRef)(() => route_module_1.RouteModule), + typeorm_1.TypeOrmModule.forFeature([ + user_entity_1.User, + place_entity_1.Place, + visited_entity_1.Visited, + category_entity_1.Category, + available_date_entity_1.AvailableDate, + place_traduction_entity_1.PlaceTraduction, + town_entity_1.Town, + visited_entity_1.Visited, + user_reset_code_entity_1.UserResetCode, + user_confirm_code_entity_1.UserConfirmCode, + travel_place_entity_1.TravelPlace, + ]), + ], + }) +], VisitedModule); +//# sourceMappingURL=visited.module.js.map \ No newline at end of file diff --git a/backend/dist/visited/visited.module.js.map b/backend/dist/visited/visited.module.js.map new file mode 100644 index 00000000..643c223c --- /dev/null +++ b/backend/dist/visited/visited.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"visited.module.js","sourceRoot":"","sources":["../../src/visited/visited.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,uDAAmD;AACnD,6DAAyD;AACzD,6CAAgD;AAChD,uDAAoD;AACpD,0DAAuD;AACvD,8DAAqD;AACrD,iEAAwD;AACxD,8DAAoD;AACpD,mEAAgE;AAChE,0EAAiE;AACjE,mFAAyE;AACzE,uFAA6E;AAC7E,8DAAqD;AACrD,kEAAgE;AAChE,qCAAyC;AACzC,8EAA2E;AAC3E,yFAA8E;AAC9E,6FAAkF;AAClF,0DAAuD;AACvD,sFAA4E;AAC5E,wDAAqD;AAgC9C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IA7BzB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,sCAAiB,CAAC;QAChC,SAAS,EAAE;YACT,gCAAc;YACd,0BAAW;YACX,4BAAY;YACZ,kCAAe;YACf,iCAAe;YACf,gBAAU;YACV,sCAAiB;YACjB,4BAAY;SACb;QACD,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC;YAC7B,uBAAa,CAAC,UAAU,CAAC;gBACvB,kBAAI;gBACJ,oBAAK;gBACL,wBAAO;gBACP,0BAAQ;gBACR,qCAAa;gBACb,yCAAe;gBACf,kBAAI;gBACJ,wBAAO;gBACP,sCAAa;gBACb,0CAAe;gBACf,iCAAW;aACZ,CAAC;SACH;KACF,CAAC;GACW,aAAa,CAAG"} \ No newline at end of file diff --git a/backend/dist/visited/visited.service.d.ts b/backend/dist/visited/visited.service.d.ts new file mode 100644 index 00000000..e6b6eefc --- /dev/null +++ b/backend/dist/visited/visited.service.d.ts @@ -0,0 +1,42 @@ +import { Visited } from './entities/visited.entity'; +import { Repository } from 'typeorm'; +import { User } from 'src/user/entities/user.entity'; +import { UserService } from 'src/user/user.service'; +import { CreateVisitedDto } from './dto/create-visited.dto'; +import { PlaceService } from 'src/place/place.service'; +import { TravelPlace } from 'src/travel-place/entities/travel-place.entity'; +import { RouteService } from 'src/route/route.service'; +export declare class VisitedService { + private readonly routeService; + private visitedRepository; + private readonly userService; + private readonly placeService; + private travelPlaceRepository; + constructor(routeService: RouteService, visitedRepository: Repository, userService: UserService, placeService: PlaceService, travelPlaceRepository: Repository); + create(createVisitedDto: CreateVisitedDto, email: string): Promise; + getVisitedByUser(email: string): Promise; + findAllByUser(email: string): Promise<{ + place: { + imageName: string; + idPlace: number; + town: import("src/town/entities/town.entity").Town; + points: import("src/pointOfInterest/entities/PointOfInterest.entity").PointOfInterest[]; + availableDates: import("src/place/entities/available-date.entity").AvailableDate[]; + categories: import("src/category/entities/category.entity").Category[]; + placeTraduction: import("src/place/entities/place-traduction.entity").PlaceTraduction[]; + visited: Visited[]; + available: import("src/pointOfInterest/enum/available.enum").Available; + name: string; + latitude: any; + longitude: any; + address: string; + openAt: number; + closeAt: number; + }; + idVisited: number; + user: User; + rating: number; + date: Date; + }[]>; + getVisitedPlacesImage(routeId: number): Promise; +} diff --git a/backend/dist/visited/visited.service.js b/backend/dist/visited/visited.service.js new file mode 100644 index 00000000..b7f06d10 --- /dev/null +++ b/backend/dist/visited/visited.service.js @@ -0,0 +1,95 @@ +"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.VisitedService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const visited_entity_1 = require("./entities/visited.entity"); +const typeorm_2 = require("typeorm"); +const user_service_1 = require("../user/user.service"); +const place_service_1 = require("../place/place.service"); +const visited_places_image_creator_1 = require("./utils/visited_places_image_creator"); +const server_contants_1 = require("../constants/server.contants"); +const travel_place_entity_1 = require("../travel-place/entities/travel-place.entity"); +const common_2 = require("@nestjs/common"); +const route_service_1 = require("../route/route.service"); +let VisitedService = class VisitedService { + constructor(routeService, visitedRepository, userService, placeService, travelPlaceRepository) { + this.routeService = routeService; + this.visitedRepository = visitedRepository; + this.userService = userService; + this.placeService = placeService; + this.travelPlaceRepository = travelPlaceRepository; + } + async create(createVisitedDto, email) { + const place = await this.placeService.findOne(createVisitedDto.idPlace); + const user = await this.userService.findOne(email); + if (!place || !user) + throw new common_1.BadRequestException('Place or user not found'); + try { + await this.travelPlaceRepository.update({ place }, { done: true }); + } + catch (error) { + console.log(error); + } + await this.visitedRepository.save({ place, user, rating: createVisitedDto.rating }); + } + async getVisitedByUser(email) { + const user = await this.userService.findOne(email); + return await this.visitedRepository.find({ + where: { user }, + relations: ['place', 'place.categories'], + }); + } + async findAllByUser(email) { + const res = await this.visitedRepository.find({ where: { user: { email } } }); + const visited = res.map((visit) => { + return { + ...visit, + place: { + ...visit.place, + imageName: `${server_contants_1.ServerConstants.HOST}/places/${visit.place.imageName}`, + }, + }; + }); + return visited; + } + async getVisitedPlacesImage(routeId) { + try { + const visitedPlaces = (await this.routeService.getRouteInfoById(routeId)).travelPlace + .filter((travelPlace) => travelPlace.done) + .map((travelPlace) => travelPlace.place.imageName) + .slice(0, 5); + console.info('visitedPlaces', visitedPlaces); + const visitedPlacesImageCreator = new visited_places_image_creator_1.VisitedPlacesImageCreator(); + return await visitedPlacesImageCreator.generateImage(visitedPlaces); + } + catch (error) { + throw new common_1.InternalServerErrorException('Error generating image'); + } + } +}; +exports.VisitedService = VisitedService; +exports.VisitedService = VisitedService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, common_2.Inject)((0, common_2.forwardRef)(() => route_service_1.RouteService))), + __param(1, (0, typeorm_1.InjectRepository)(visited_entity_1.Visited)), + __param(4, (0, typeorm_1.InjectRepository)(travel_place_entity_1.TravelPlace)), + __metadata("design:paramtypes", [route_service_1.RouteService, + typeorm_2.Repository, + user_service_1.UserService, + place_service_1.PlaceService, + typeorm_2.Repository]) +], VisitedService); +//# sourceMappingURL=visited.service.js.map \ No newline at end of file diff --git a/backend/dist/visited/visited.service.js.map b/backend/dist/visited/visited.service.js.map new file mode 100644 index 00000000..acf18939 --- /dev/null +++ b/backend/dist/visited/visited.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"visited.service.js","sourceRoot":"","sources":["../../src/visited/visited.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 81fa18fa..fba84dc0 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -44,10 +44,10 @@ import { UserConfirmCode } from './auth/user/entities/user-confirm-code.entity'; TypeOrmModule.forRoot({ type: 'mysql', host: DbConstants.DB_HOST, - port: DbConstants.DB_PORT, username: DbConstants.DB_USER, password: DbConstants.DB_PASSWORD, database: DbConstants.DB_NAME, + url: DbConstants.DB_URL, entities: [ Admin, User, diff --git a/backend/src/constants/db.constants.ts b/backend/src/constants/db.constants.ts index 895c209a..112cbe22 100644 --- a/backend/src/constants/db.constants.ts +++ b/backend/src/constants/db.constants.ts @@ -5,4 +5,5 @@ export class DbConstants { static DB_PASSWORD: string = process.env.DB_PASSWORD || 'root'; static DB_NAME: string = process.env.DB_NAME || 'pueblos'; static DB_SYNC: boolean = process.env.DB_SYNC === 'true'; + static DB_URL: string = process.env.DB_URL || null; } diff --git a/backend/src/constants/server.contants.ts b/backend/src/constants/server.contants.ts index ec36e1ce..3e52bb9f 100644 --- a/backend/src/constants/server.contants.ts +++ b/backend/src/constants/server.contants.ts @@ -17,5 +17,5 @@ export class ServerConstants { network.get_private_ip(function (err, ip) { publicIp = ip; ServerConstants.IP = publicIp; - ServerConstants.HOST = `http://${publicIp || 'localhost'}:${ServerConstants.PORT}`; + ServerConstants.HOST = `https://superb-amazement-production.up.railway.app`; }); diff --git a/backend/static/qr/example.png b/backend/static/audios/h.html similarity index 100% rename from backend/static/qr/example.png rename to backend/static/audios/h.html diff --git a/backend/static/index.html b/backend/static/index.html new file mode 100644 index 00000000..981175e8 --- /dev/null +++ b/backend/static/index.html @@ -0,0 +1 @@ + diff --git a/backend/static/places/default.jpeg b/backend/static/places/default.jpeg deleted file mode 100644 index a20424e9462de9eecc11a18ead64ba6a2d36b13c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136079 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⪙pIs*;|Mh%%E#pJYe>kut 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 diff --git a/backend/static/points/h.html b/backend/static/points/h.html new file mode 100644 index 00000000..e69de29b diff --git a/backend/static/qr/h.html b/backend/static/qr/h.html new file mode 100644 index 00000000..e69de29b diff --git a/backend/static/visits/h.html b/backend/static/visits/h.html new file mode 100644 index 00000000..e69de29b diff --git a/mobile/app.json b/mobile/app.json index be791f72..337c6a35 100644 --- a/mobile/app.json +++ b/mobile/app.json @@ -12,18 +12,27 @@ "resizeMode": "contain", "backgroundColor": "#ffffff" }, - "assetBundlePatterns": [ - "**/*" - ], + "assetBundlePatterns": ["**/*"], "ios": { - "supportsTablet": true + "supportsTablet": true, + "infoPlist": { + "NSPhotoLibraryUsageDescription": "Allow $(PRODUCT_NAME) to access your photos.", + "NSPhotoLibraryAddUsageDescription": "Allow $(PRODUCT_NAME) to save photos." + } }, "android": { "adaptiveIcon": { "foregroundImage": "./assets/adaptive-icon.png", "backgroundColor": "#ffffff" }, - "package": "com.lorenzotrujillo.mobile" + "package": "com.lorenzotrujillo.mobile", + "permissions": [ + "android.permission.CAMERA", + "android.permission.RECORD_AUDIO", + "android.permission.READ_EXTERNAL_STORAGE", + "android.permission.WRITE_EXTERNAL_STORAGE", + "android.permission.ACCESS_MEDIA_LOCATION" + ] }, "web": { "favicon": "./assets/favicon.png" @@ -61,13 +70,6 @@ "expo-secure-store", "expo-localization" ], - "extra": { - "router": { - "origin": false - }, - "eas": { - "projectId": "e886fd36-a509-4844-bc03-c722bb61a245" - } - } + "owner": "lorenzotrujillo" } } diff --git a/mobile/src/activity/screens/activity_description_page.tsx b/mobile/src/activity/screens/activity_description_page.tsx index ab6d642c..a080d4eb 100644 --- a/mobile/src/activity/screens/activity_description_page.tsx +++ b/mobile/src/activity/screens/activity_description_page.tsx @@ -54,7 +54,7 @@ export const ActivityDescriptionPage = ({ } if (activityInfo === undefined || activityInfo === null) { return ( - + Activity not found ); diff --git a/mobile/src/auth/pages/reset_password_page_error.tsx b/mobile/src/auth/pages/reset_password_page_error.tsx index 9ea63bfa..b9c751eb 100644 --- a/mobile/src/auth/pages/reset_password_page_error.tsx +++ b/mobile/src/auth/pages/reset_password_page_error.tsx @@ -2,21 +2,29 @@ import { View, Text, StyleSheet } from "react-native"; import { FloatingBackButton } from "../../common/components/floating_back_button"; import { FloatingEndActionButton } from "../../common/components/floating_end_action_button"; import { router } from "expo-router"; +import { useTranslation } from "react-i18next"; +import { LANG_CONSTANTS } from "../../lang/lang"; export const ResetPasswordError = () => { - const onClick = () => { - router.replace("login"); - }; + const { t } = useTranslation(); + const onClick = () => { + router.replace("login"); + }; return ( - Reset Password Error + + {t(LANG_CONSTANTS.resetYourPasswordErrorScreenMainLabel)} + - We were unable to reset your password. Please try again. + {t(LANG_CONSTANTS.resetYourPasswordErrorScreenDescription)} - + ); -} +}; const styles = StyleSheet.create({ mainContainer: { @@ -33,4 +41,4 @@ const styles = StyleSheet.create({ fontSize: 16, marginBottom: 16, }, -}); \ No newline at end of file +}); diff --git a/mobile/src/common/components/modals/server_connection_error.tsx b/mobile/src/common/components/modals/server_connection_error.tsx index 4a5087e2..fefa09d0 100644 --- a/mobile/src/common/components/modals/server_connection_error.tsx +++ b/mobile/src/common/components/modals/server_connection_error.tsx @@ -1,5 +1,7 @@ +import { useTranslation } from "react-i18next"; import { FullPageMessageModal } from "../full_page_message_modal"; import { Text } from "react-native"; +import { LANG_CONSTANTS } from "../../../lang/lang"; interface ServerConnectionErrorModalProps { isErrorModalVisible: boolean; @@ -10,12 +12,13 @@ export const ServerConnectionErrorModal = ({ isErrorModalVisible, closeErrorModal, }: ServerConnectionErrorModalProps) => { + const { t } = useTranslation(); return ( closeErrorModal()} > - Error de conexión, intente más tarde + {t(LANG_CONSTANTS.commonConectionError)} ); }; diff --git a/mobile/src/common/components/rating_page/full_page_rating.tsx b/mobile/src/common/components/rating_page/full_page_rating.tsx index 515607f7..d28effa1 100644 --- a/mobile/src/common/components/rating_page/full_page_rating.tsx +++ b/mobile/src/common/components/rating_page/full_page_rating.tsx @@ -3,14 +3,20 @@ import { StyleSheet, View, Animated, Text } from "react-native"; import { StarRatingForm } from "./star_rating_form"; import AntDesign from "@expo/vector-icons/AntDesign"; import { FloatingEndActionButton } from "../floating_end_action_button"; +import { useTranslation } from "react-i18next"; +import { LANG_CONSTANTS } from "../../../lang/lang"; interface FullPageRatingProps { onClose: () => void; onSubmitted: (rating: number) => void; } -export const FullPageRating = ({ onClose, onSubmitted }: FullPageRatingProps) => { +export const FullPageRating = ({ + onClose, + onSubmitted, +}: FullPageRatingProps) => { const [rating, setRating] = useState(0); + const { t } = useTranslation(); const opacityRef = useRef(new Animated.Value(0)).current; useEffect(() => { Animated.timing(opacityRef, { @@ -51,7 +57,7 @@ export const FullPageRating = ({ onClose, onSubmitted }: FullPageRatingProps) => ]} > - ¿Te gustó esta actividad? Califícala + {t(LANG_CONSTANTS.rateActivityScreenMessage)} color="red" onPress={() => handleOnClose(onClose)} /> - {setRating(rating)}} /> - handleOnClose(() => onSubmitted(rating))} /> + { + setRating(rating); + }} + /> + handleOnClose(() => onSubmitted(rating))} + /> ); diff --git a/mobile/src/common/const/api.ts b/mobile/src/common/const/api.ts index 68fdfbea..f892c369 100644 --- a/mobile/src/common/const/api.ts +++ b/mobile/src/common/const/api.ts @@ -1 +1 @@ -export const API_URL = "http://192.168.0.14:3005"; +export const API_URL = "https://superb-amazement-production.up.railway.app"; diff --git a/mobile/src/common/screens/error_page.tsx b/mobile/src/common/screens/error_page.tsx index f6d618e8..21442cd4 100644 --- a/mobile/src/common/screens/error_page.tsx +++ b/mobile/src/common/screens/error_page.tsx @@ -1,23 +1,23 @@ import { View, Text, StyleSheet } from "react-native"; import { MaterialIcons } from "@expo/vector-icons"; import { TouchableOpacity } from "react-native-gesture-handler"; +import { useTranslation } from "react-i18next"; +import { LANG_CONSTANTS } from "../../lang/lang"; interface ErrorPageProps { refresh?: () => void; } export const ErrorPage = ({ refresh }: ErrorPageProps) => { + const { t } = useTranslation(); return ( - - Ups, algo salio mal, revisa tu conexión a internet o intentalo más - tarde... - + {t(LANG_CONSTANTS.errorPageMessage)} {refresh && ( - Reintentar + {t(LANG_CONSTANTS.errorPageButton)} )} diff --git a/mobile/src/common/screens/scan_page.tsx b/mobile/src/common/screens/scan_page.tsx index 25c2c627..ed4c2f99 100644 --- a/mobile/src/common/screens/scan_page.tsx +++ b/mobile/src/common/screens/scan_page.tsx @@ -4,12 +4,15 @@ import { CameraView } from "expo-camera/next"; import { BarCodeScanningResult } from "expo-camera"; import { useEffect, useRef } from "react"; import { activityPointRouteValidator } from "../../activity/utils/activity_route"; +import { useTranslation } from "react-i18next"; +import { LANG_CONSTANTS } from "../../lang/lang"; export default function ScanPage() { const { hasPermission, getPermission, scanning, onQRScanned, qrData } = - useQRScanner({validator: activityPointRouteValidator}); + useQRScanner({ validator: activityPointRouteValidator }); const qrAnimation = useRef(new Animated.Value(0)).current; + const { t } = useTranslation(); const startAnimation = () => { Animated.loop( @@ -37,7 +40,7 @@ export default function ScanPage() { if (!hasPermission) { return ( - No permission + {t(LANG_CONSTANTS.commonNoPermissions)}

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 diff --git a/backend/static/places/h.html b/backend/static/places/h.html new file mode 100644 index 00000000..e69de29b diff --git a/backend/static/points/default.jpeg b/backend/static/points/default.jpeg deleted file mode 100644 index a20424e9462de9eecc11a18ead64ba6a2d36b13c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136079 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⪙pIs*;|Mh%%E#pJYe>kut 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