pro-clubs-shared-dtos 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INTEGRATION_GUIDE.md +237 -0
- package/MIGRATION_SUMMARY.md +163 -0
- package/README.md +284 -0
- package/dist/dtos/api-error-response.d.ts +33 -0
- package/dist/dtos/api-error-response.d.ts.map +1 -0
- package/dist/dtos/api-error-response.js +27 -0
- package/dist/dtos/api-error-response.js.map +1 -0
- package/dist/dtos/api-response/api-error-response.dto.d.ts +33 -0
- package/dist/dtos/api-response/api-error-response.dto.d.ts.map +1 -0
- package/dist/dtos/api-response/api-error-response.dto.js +27 -0
- package/dist/dtos/api-response/api-error-response.dto.js.map +1 -0
- package/dist/dtos/api-response/index.d.ts +2 -0
- package/dist/dtos/api-response/index.d.ts.map +1 -0
- package/dist/dtos/api-response/index.js +18 -0
- package/dist/dtos/api-response/index.js.map +1 -0
- package/dist/dtos/enums/extended-game-status.d.ts +9 -0
- package/dist/dtos/enums/extended-game-status.d.ts.map +1 -0
- package/dist/dtos/enums/extended-game-status.enum.d.ts +9 -0
- package/dist/dtos/enums/extended-game-status.enum.d.ts.map +1 -0
- package/dist/dtos/enums/extended-game-status.enum.js +13 -0
- package/dist/dtos/enums/extended-game-status.enum.js.map +1 -0
- package/dist/dtos/enums/extended-game-status.js +13 -0
- package/dist/dtos/enums/extended-game-status.js.map +1 -0
- package/dist/dtos/enums/index.d.ts +72 -0
- package/dist/dtos/enums/index.d.ts.map +1 -0
- package/dist/dtos/enums/index.js +97 -0
- package/dist/dtos/enums/index.js.map +1 -0
- package/dist/dtos/index.d.ts +5 -0
- package/dist/dtos/index.d.ts.map +1 -0
- package/dist/dtos/index.js +21 -0
- package/dist/dtos/index.js.map +1 -0
- package/dist/dtos/models/ban.d.ts +15 -0
- package/dist/dtos/models/ban.d.ts.map +1 -0
- package/dist/dtos/models/ban.js +87 -0
- package/dist/dtos/models/ban.js.map +1 -0
- package/dist/dtos/models/chat.d.ts +25 -0
- package/dist/dtos/models/chat.d.ts.map +1 -0
- package/dist/dtos/models/chat.js +95 -0
- package/dist/dtos/models/chat.js.map +1 -0
- package/dist/dtos/models/comment.d.ts +14 -0
- package/dist/dtos/models/comment.d.ts.map +1 -0
- package/dist/dtos/models/comment.js +46 -0
- package/dist/dtos/models/comment.js.map +1 -0
- package/dist/dtos/models/event.d.ts +54 -0
- package/dist/dtos/models/event.d.ts.map +1 -0
- package/dist/dtos/models/event.js +102 -0
- package/dist/dtos/models/event.js.map +1 -0
- package/dist/dtos/models/fixture.d.ts +26 -0
- package/dist/dtos/models/fixture.d.ts.map +1 -0
- package/dist/dtos/models/fixture.js +58 -0
- package/dist/dtos/models/fixture.js.map +1 -0
- package/dist/dtos/models/index.d.ts +23 -0
- package/dist/dtos/models/index.d.ts.map +1 -0
- package/dist/dtos/models/index.js +39 -0
- package/dist/dtos/models/index.js.map +1 -0
- package/dist/dtos/models/league.d.ts +20 -0
- package/dist/dtos/models/league.d.ts.map +1 -0
- package/dist/dtos/models/league.js +63 -0
- package/dist/dtos/models/league.js.map +1 -0
- package/dist/dtos/models/news.d.ts +47 -0
- package/dist/dtos/models/news.d.ts.map +1 -0
- package/dist/dtos/models/news.js +97 -0
- package/dist/dtos/models/news.js.map +1 -0
- package/dist/dtos/models/notification.d.ts +16 -0
- package/dist/dtos/models/notification.d.ts.map +1 -0
- package/dist/dtos/models/notification.js +93 -0
- package/dist/dtos/models/notification.js.map +1 -0
- package/dist/dtos/models/player-association-request.d.ts +16 -0
- package/dist/dtos/models/player-association-request.d.ts.map +1 -0
- package/dist/dtos/models/player-association-request.js +89 -0
- package/dist/dtos/models/player-association-request.js.map +1 -0
- package/dist/dtos/models/season-achievement.d.ts +86 -0
- package/dist/dtos/models/season-achievement.d.ts.map +1 -0
- package/dist/dtos/models/season-achievement.js +126 -0
- package/dist/dtos/models/season-achievement.js.map +1 -0
- package/dist/dtos/models/team-of-the-season.d.ts +31 -0
- package/dist/dtos/models/team-of-the-season.d.ts.map +1 -0
- package/dist/dtos/models/team-of-the-season.js +69 -0
- package/dist/dtos/models/team-of-the-season.js.map +1 -0
- package/dist/dtos/models/team.d.ts +63 -0
- package/dist/dtos/models/team.d.ts.map +1 -0
- package/dist/dtos/models/team.js +88 -0
- package/dist/dtos/models/team.js.map +1 -0
- package/dist/dtos/models/transfer-request.d.ts +18 -0
- package/dist/dtos/models/transfer-request.d.ts.map +1 -0
- package/dist/dtos/models/transfer-request.js +132 -0
- package/dist/dtos/models/transfer-request.js.map +1 -0
- package/dist/dtos/models/user.d.ts +21 -0
- package/dist/dtos/models/user.d.ts.map +1 -0
- package/dist/dtos/models/user.js +109 -0
- package/dist/dtos/models/user.js.map +1 -0
- package/dist/dtos/requests/create-player-request.d.ts +12 -0
- package/dist/dtos/requests/create-player-request.d.ts.map +1 -0
- package/dist/dtos/requests/create-player-request.js +3 -0
- package/dist/dtos/requests/create-player-request.js.map +1 -0
- package/dist/dtos/requests/fixture-game-requests.d.ts +25 -0
- package/dist/dtos/requests/fixture-game-requests.d.ts.map +1 -0
- package/dist/dtos/requests/fixture-game-requests.js +3 -0
- package/dist/dtos/requests/fixture-game-requests.js.map +1 -0
- package/dist/dtos/requests/fixture-requests.d.ts +12 -0
- package/dist/dtos/requests/fixture-requests.d.ts.map +1 -0
- package/dist/dtos/requests/fixture-requests.js +3 -0
- package/dist/dtos/requests/fixture-requests.js.map +1 -0
- package/dist/dtos/requests/game-requests.d.ts +15 -0
- package/dist/dtos/requests/game-requests.d.ts.map +1 -0
- package/dist/dtos/requests/game-requests.js +3 -0
- package/dist/dtos/requests/game-requests.js.map +1 -0
- package/dist/dtos/requests/index.d.ts +8 -0
- package/dist/dtos/requests/index.d.ts.map +1 -0
- package/dist/dtos/requests/index.js +24 -0
- package/dist/dtos/requests/index.js.map +1 -0
- package/dist/dtos/requests/player-performance-request.d.ts +15 -0
- package/dist/dtos/requests/player-performance-request.d.ts.map +1 -0
- package/dist/dtos/requests/player-performance-request.js +3 -0
- package/dist/dtos/requests/player-performance-request.js.map +1 -0
- package/dist/dtos/requests/player-requests.d.ts +9 -0
- package/dist/dtos/requests/player-requests.d.ts.map +1 -0
- package/dist/dtos/requests/player-requests.js +3 -0
- package/dist/dtos/requests/player-requests.js.map +1 -0
- package/dist/dtos/requests/update-player-data-request.d.ts +9 -0
- package/dist/dtos/requests/update-player-data-request.d.ts.map +1 -0
- package/dist/dtos/requests/update-player-data-request.js +3 -0
- package/dist/dtos/requests/update-player-data-request.js.map +1 -0
- package/dist/dtos/responses/api-error-response.interface.d.ts +33 -0
- package/dist/dtos/responses/api-error-response.interface.d.ts.map +1 -0
- package/dist/dtos/responses/api-error-response.interface.js +27 -0
- package/dist/dtos/responses/api-error-response.interface.js.map +1 -0
- package/dist/dtos/responses/error-dtos.d.ts +33 -0
- package/dist/dtos/responses/error-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/error-dtos.js +27 -0
- package/dist/dtos/responses/error-dtos.js.map +1 -0
- package/dist/dtos/responses/event-dtos.d.ts +84 -0
- package/dist/dtos/responses/event-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/event-dtos.js +3 -0
- package/dist/dtos/responses/event-dtos.js.map +1 -0
- package/dist/dtos/responses/fixture-dtos.d.ts +46 -0
- package/dist/dtos/responses/fixture-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/fixture-dtos.js +3 -0
- package/dist/dtos/responses/fixture-dtos.js.map +1 -0
- package/dist/dtos/responses/game-dtos.d.ts +76 -0
- package/dist/dtos/responses/game-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/game-dtos.js +3 -0
- package/dist/dtos/responses/game-dtos.js.map +1 -0
- package/dist/dtos/responses/index.d.ts +11 -0
- package/dist/dtos/responses/index.d.ts.map +1 -0
- package/dist/dtos/responses/index.js +27 -0
- package/dist/dtos/responses/index.js.map +1 -0
- package/dist/dtos/responses/league-dtos.d.ts +10 -0
- package/dist/dtos/responses/league-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/league-dtos.js +3 -0
- package/dist/dtos/responses/league-dtos.js.map +1 -0
- package/dist/dtos/responses/notification-dtos.d.ts +21 -0
- package/dist/dtos/responses/notification-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/notification-dtos.js +3 -0
- package/dist/dtos/responses/notification-dtos.js.map +1 -0
- package/dist/dtos/responses/player-dtos.d.ts +83 -0
- package/dist/dtos/responses/player-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/player-dtos.js +3 -0
- package/dist/dtos/responses/player-dtos.js.map +1 -0
- package/dist/dtos/responses/stats-dtos.d.ts +77 -0
- package/dist/dtos/responses/stats-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/stats-dtos.js +3 -0
- package/dist/dtos/responses/stats-dtos.js.map +1 -0
- package/dist/dtos/responses/team-dtos.d.ts +28 -0
- package/dist/dtos/responses/team-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/team-dtos.js +3 -0
- package/dist/dtos/responses/team-dtos.js.map +1 -0
- package/dist/dtos/responses/transfer-dtos.d.ts +60 -0
- package/dist/dtos/responses/transfer-dtos.d.ts.map +1 -0
- package/dist/dtos/responses/transfer-dtos.js +3 -0
- package/dist/dtos/responses/transfer-dtos.js.map +1 -0
- package/dist/dtos/transfer-request/index.d.ts +2 -0
- package/dist/dtos/transfer-request/index.d.ts.map +1 -0
- package/dist/dtos/transfer-request/index.js +18 -0
- package/dist/dtos/transfer-request/index.js.map +1 -0
- package/dist/dtos/transfer-request/transfer-request.dto.d.ts +1 -0
- package/dist/dtos/transfer-request/transfer-request.dto.d.ts.map +1 -0
- package/dist/dtos/transfer-request/transfer-request.dto.js +2 -0
- package/dist/dtos/transfer-request/transfer-request.dto.js.map +1 -0
- package/dist/enums/event-enums.d.ts +10 -0
- package/dist/enums/event-enums.d.ts.map +1 -0
- package/dist/enums/event-enums.js +15 -0
- package/dist/enums/event-enums.js.map +1 -0
- package/dist/enums/extended-game-status.d.ts +10 -0
- package/dist/enums/extended-game-status.d.ts.map +1 -0
- package/dist/enums/extended-game-status.js +14 -0
- package/dist/enums/extended-game-status.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/api-error-response.d.ts +33 -0
- package/dist/interfaces/api-error-response.d.ts.map +1 -0
- package/dist/interfaces/api-error-response.js +27 -0
- package/dist/interfaces/api-error-response.js.map +1 -0
- package/dist/interfaces/event.dto.d.ts +86 -0
- package/dist/interfaces/event.dto.d.ts.map +1 -0
- package/dist/interfaces/event.dto.js +34 -0
- package/dist/interfaces/event.dto.js.map +1 -0
- package/dist/interfaces/fixture/fixture-controller.interface.d.ts +7 -0
- package/dist/interfaces/fixture/fixture-controller.interface.d.ts.map +1 -0
- package/dist/interfaces/fixture/fixture-controller.interface.js +3 -0
- package/dist/interfaces/fixture/fixture-controller.interface.js.map +1 -0
- package/dist/interfaces/fixture/fixture-repository.interface.d.ts +14 -0
- package/dist/interfaces/fixture/fixture-repository.interface.d.ts.map +1 -0
- package/dist/interfaces/fixture/fixture-repository.interface.js +3 -0
- package/dist/interfaces/fixture/fixture-repository.interface.js.map +1 -0
- package/dist/interfaces/fixture/fixture-service.interface.d.ts +11 -0
- package/dist/interfaces/fixture/fixture-service.interface.d.ts.map +1 -0
- package/dist/interfaces/fixture/fixture-service.interface.js +3 -0
- package/dist/interfaces/fixture/fixture-service.interface.js.map +1 -0
- package/dist/interfaces/fixture/index.d.ts +5 -0
- package/dist/interfaces/fixture/index.d.ts.map +1 -0
- package/dist/interfaces/fixture/index.js +3 -0
- package/dist/interfaces/fixture/index.js.map +1 -0
- package/dist/interfaces/game/game-controller.interface.d.ts +16 -0
- package/dist/interfaces/game/game-controller.interface.d.ts.map +1 -0
- package/dist/interfaces/game/game-controller.interface.js +3 -0
- package/dist/interfaces/game/game-controller.interface.js.map +1 -0
- package/dist/interfaces/game/game-repository.interface.d.ts +37 -0
- package/dist/interfaces/game/game-repository.interface.d.ts.map +1 -0
- package/dist/interfaces/game/game-repository.interface.js +3 -0
- package/dist/interfaces/game/game-repository.interface.js.map +1 -0
- package/dist/interfaces/game/game-service.interface.d.ts +32 -0
- package/dist/interfaces/game/game-service.interface.d.ts.map +1 -0
- package/dist/interfaces/game/game-service.interface.js +3 -0
- package/dist/interfaces/game/game-service.interface.js.map +1 -0
- package/dist/interfaces/game/index.d.ts +5 -0
- package/dist/interfaces/game/index.d.ts.map +1 -0
- package/dist/interfaces/game/index.js +3 -0
- package/dist/interfaces/game/index.js.map +1 -0
- package/dist/interfaces/league/index.d.ts +5 -0
- package/dist/interfaces/league/index.d.ts.map +1 -0
- package/dist/interfaces/league/index.js +3 -0
- package/dist/interfaces/league/index.js.map +1 -0
- package/dist/interfaces/league/league-controller.interface.d.ts +17 -0
- package/dist/interfaces/league/league-controller.interface.d.ts.map +1 -0
- package/dist/interfaces/league/league-controller.interface.js +3 -0
- package/dist/interfaces/league/league-controller.interface.js.map +1 -0
- package/dist/interfaces/league/league-repository.interface.d.ts +30 -0
- package/dist/interfaces/league/league-repository.interface.d.ts.map +1 -0
- package/dist/interfaces/league/league-repository.interface.js +3 -0
- package/dist/interfaces/league/league-repository.interface.js.map +1 -0
- package/dist/interfaces/league/league-service.interface.d.ts +54 -0
- package/dist/interfaces/league/league-service.interface.d.ts.map +1 -0
- package/dist/interfaces/league/league-service.interface.js +3 -0
- package/dist/interfaces/league/league-service.interface.js.map +1 -0
- package/dist/interfaces/news/index.d.ts +5 -0
- package/dist/interfaces/news/index.d.ts.map +1 -0
- package/dist/interfaces/news/index.js +3 -0
- package/dist/interfaces/news/index.js.map +1 -0
- package/dist/interfaces/news/news-controller.interface.d.ts +10 -0
- package/dist/interfaces/news/news-controller.interface.d.ts.map +1 -0
- package/dist/interfaces/news/news-controller.interface.js +3 -0
- package/dist/interfaces/news/news-controller.interface.js.map +1 -0
- package/dist/interfaces/news/news-repository.interface.d.ts +11 -0
- package/dist/interfaces/news/news-repository.interface.d.ts.map +1 -0
- package/dist/interfaces/news/news-repository.interface.js +3 -0
- package/dist/interfaces/news/news-repository.interface.js.map +1 -0
- package/dist/interfaces/news/news-service.interface.d.ts +21 -0
- package/dist/interfaces/news/news-service.interface.d.ts.map +1 -0
- package/dist/interfaces/news/news-service.interface.js +3 -0
- package/dist/interfaces/news/news-service.interface.js.map +1 -0
- package/dist/interfaces/player/index.d.ts +5 -0
- package/dist/interfaces/player/index.d.ts.map +1 -0
- package/dist/interfaces/player/index.js +3 -0
- package/dist/interfaces/player/index.js.map +1 -0
- package/dist/interfaces/player/player-comparison.interface.d.ts +71 -0
- package/dist/interfaces/player/player-comparison.interface.d.ts.map +1 -0
- package/dist/interfaces/player/player-comparison.interface.js +3 -0
- package/dist/interfaces/player/player-comparison.interface.js.map +1 -0
- package/dist/interfaces/player/player-controller.interface.d.ts +23 -0
- package/dist/interfaces/player/player-controller.interface.d.ts.map +1 -0
- package/dist/interfaces/player/player-controller.interface.js +3 -0
- package/dist/interfaces/player/player-controller.interface.js.map +1 -0
- package/dist/interfaces/player/player-opponent-analysis.interface.d.ts +75 -0
- package/dist/interfaces/player/player-opponent-analysis.interface.d.ts.map +1 -0
- package/dist/interfaces/player/player-opponent-analysis.interface.js +11 -0
- package/dist/interfaces/player/player-opponent-analysis.interface.js.map +1 -0
- package/dist/interfaces/player/player-repository.interface.d.ts +27 -0
- package/dist/interfaces/player/player-repository.interface.d.ts.map +1 -0
- package/dist/interfaces/player/player-repository.interface.js +3 -0
- package/dist/interfaces/player/player-repository.interface.js.map +1 -0
- package/dist/interfaces/player/player-season-history.interface.d.ts +55 -0
- package/dist/interfaces/player/player-season-history.interface.d.ts.map +1 -0
- package/dist/interfaces/player/player-season-history.interface.js +3 -0
- package/dist/interfaces/player/player-season-history.interface.js.map +1 -0
- package/dist/interfaces/player/player-service.interface.d.ts +34 -0
- package/dist/interfaces/player/player-service.interface.d.ts.map +1 -0
- package/dist/interfaces/player/player-service.interface.js +3 -0
- package/dist/interfaces/player/player-service.interface.js.map +1 -0
- package/dist/interfaces/stats/top-contributor.interface.d.ts +16 -0
- package/dist/interfaces/stats/top-contributor.interface.d.ts.map +1 -0
- package/dist/interfaces/stats/top-contributor.interface.js +3 -0
- package/dist/interfaces/stats/top-contributor.interface.js.map +1 -0
- package/dist/interfaces/team/index.d.ts +5 -0
- package/dist/interfaces/team/index.d.ts.map +1 -0
- package/dist/interfaces/team/index.js +3 -0
- package/dist/interfaces/team/index.js.map +1 -0
- package/dist/interfaces/team/team-controller.interface.d.ts +20 -0
- package/dist/interfaces/team/team-controller.interface.d.ts.map +1 -0
- package/dist/interfaces/team/team-controller.interface.js +3 -0
- package/dist/interfaces/team/team-controller.interface.js.map +1 -0
- package/dist/interfaces/team/team-repository.interface.d.ts +17 -0
- package/dist/interfaces/team/team-repository.interface.d.ts.map +1 -0
- package/dist/interfaces/team/team-repository.interface.js +3 -0
- package/dist/interfaces/team/team-repository.interface.js.map +1 -0
- package/dist/interfaces/team/team-service.interface.d.ts +25 -0
- package/dist/interfaces/team/team-service.interface.d.ts.map +1 -0
- package/dist/interfaces/team/team-service.interface.js +3 -0
- package/dist/interfaces/team/team-service.interface.js.map +1 -0
- package/dist/interfaces/user/index.d.ts +4 -0
- package/dist/interfaces/user/index.d.ts.map +1 -0
- package/dist/interfaces/user/index.js +20 -0
- package/dist/interfaces/user/index.js.map +1 -0
- package/dist/interfaces/user/user-controller.interface.d.ts +18 -0
- package/dist/interfaces/user/user-controller.interface.d.ts.map +1 -0
- package/dist/interfaces/user/user-controller.interface.js +3 -0
- package/dist/interfaces/user/user-controller.interface.js.map +1 -0
- package/dist/interfaces/user/user-repository.interface.d.ts +12 -0
- package/dist/interfaces/user/user-repository.interface.d.ts.map +1 -0
- package/dist/interfaces/user/user-repository.interface.js +3 -0
- package/dist/interfaces/user/user-repository.interface.js.map +1 -0
- package/dist/interfaces/user/user-service.interface.d.ts +44 -0
- package/dist/interfaces/user/user-service.interface.d.ts.map +1 -0
- package/dist/interfaces/user/user-service.interface.js +3 -0
- package/dist/interfaces/user/user-service.interface.js.map +1 -0
- package/dist/interfaces/util-services/cache-service.interface.d.ts +6 -0
- package/dist/interfaces/util-services/cache-service.interface.d.ts.map +1 -0
- package/dist/interfaces/util-services/cache-service.interface.js +3 -0
- package/dist/interfaces/util-services/cache-service.interface.js.map +1 -0
- package/dist/interfaces/util-services/image-service.interface.d.ts +5 -0
- package/dist/interfaces/util-services/image-service.interface.d.ts.map +1 -0
- package/dist/interfaces/util-services/image-service.interface.js +3 -0
- package/dist/interfaces/util-services/image-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/index.d.ts +8 -0
- package/dist/interfaces/wrapper-services/index.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/index.js +3 -0
- package/dist/interfaces/wrapper-services/index.js.map +1 -0
- package/dist/interfaces/wrapper-services/league-stats-service.interface.d.ts +22 -0
- package/dist/interfaces/wrapper-services/league-stats-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/league-stats-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/league-stats-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/player-stats-service.interface.d.ts +14 -0
- package/dist/interfaces/wrapper-services/player-stats-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/player-stats-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/player-stats-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/player-team-service.interface.d.ts +7 -0
- package/dist/interfaces/wrapper-services/player-team-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/player-team-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/player-team-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/season-achievement-service.interface.d.ts +145 -0
- package/dist/interfaces/wrapper-services/season-achievement-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/season-achievement-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/season-achievement-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/season-completion-service.interface.d.ts +7 -0
- package/dist/interfaces/wrapper-services/season-completion-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/season-completion-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/season-completion-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/team-league-service.interface.d.ts +6 -0
- package/dist/interfaces/wrapper-services/team-league-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/team-league-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/team-league-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/team-of-the-season-service.interface.d.ts +16 -0
- package/dist/interfaces/wrapper-services/team-of-the-season-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/team-of-the-season-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/team-of-the-season-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/team-of-the-week-service.interface.d.ts +8 -0
- package/dist/interfaces/wrapper-services/team-of-the-week-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/team-of-the-week-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/team-of-the-week-service.interface.js.map +1 -0
- package/dist/interfaces/wrapper-services/team-stats-service.interface.d.ts +24 -0
- package/dist/interfaces/wrapper-services/team-stats-service.interface.d.ts.map +1 -0
- package/dist/interfaces/wrapper-services/team-stats-service.interface.js +3 -0
- package/dist/interfaces/wrapper-services/team-stats-service.interface.js.map +1 -0
- package/dist/models/ban.d.ts +19 -0
- package/dist/models/ban.d.ts.map +1 -0
- package/dist/models/ban.js +87 -0
- package/dist/models/ban.js.map +1 -0
- package/dist/models/chat.d.ts +29 -0
- package/dist/models/chat.d.ts.map +1 -0
- package/dist/models/chat.js +95 -0
- package/dist/models/chat.js.map +1 -0
- package/dist/models/comment/comment.d.ts +18 -0
- package/dist/models/comment/comment.d.ts.map +1 -0
- package/dist/models/comment/comment.js +46 -0
- package/dist/models/comment/comment.js.map +1 -0
- package/dist/models/event.d.ts +58 -0
- package/dist/models/event.d.ts.map +1 -0
- package/dist/models/event.js +102 -0
- package/dist/models/event.js.map +1 -0
- package/dist/models/fixture.d.ts +30 -0
- package/dist/models/fixture.d.ts.map +1 -0
- package/dist/models/fixture.js +58 -0
- package/dist/models/fixture.js.map +1 -0
- package/dist/models/game/ea-game-details.d.ts +97 -0
- package/dist/models/game/ea-game-details.d.ts.map +1 -0
- package/dist/models/game/ea-game-details.js +3 -0
- package/dist/models/game/ea-game-details.js.map +1 -0
- package/dist/models/game/game-types.d.ts +44 -0
- package/dist/models/game/game-types.d.ts.map +1 -0
- package/dist/models/game/game-types.js +3 -0
- package/dist/models/game/game-types.js.map +1 -0
- package/dist/models/game/game.d.ts +72 -0
- package/dist/models/game/game.d.ts.map +1 -0
- package/dist/models/game/game.js +145 -0
- package/dist/models/game/game.js.map +1 -0
- package/dist/models/game/player-validation.d.ts +196 -0
- package/dist/models/game/player-validation.d.ts.map +1 -0
- package/dist/models/game/player-validation.js +33 -0
- package/dist/models/game/player-validation.js.map +1 -0
- package/dist/models/league.d.ts +24 -0
- package/dist/models/league.d.ts.map +1 -0
- package/dist/models/league.js +63 -0
- package/dist/models/league.js.map +1 -0
- package/dist/models/news.d.ts +51 -0
- package/dist/models/news.d.ts.map +1 -0
- package/dist/models/news.js +97 -0
- package/dist/models/news.js.map +1 -0
- package/dist/models/notification.d.ts +20 -0
- package/dist/models/notification.d.ts.map +1 -0
- package/dist/models/notification.js +93 -0
- package/dist/models/notification.js.map +1 -0
- package/dist/models/player/player-types.d.ts +11 -0
- package/dist/models/player/player-types.d.ts.map +1 -0
- package/dist/models/player/player-types.js +3 -0
- package/dist/models/player/player-types.js.map +1 -0
- package/dist/models/player/player.d.ts +75 -0
- package/dist/models/player/player.d.ts.map +1 -0
- package/dist/models/player/player.js +115 -0
- package/dist/models/player/player.js.map +1 -0
- package/dist/models/player-association-request.d.ts +20 -0
- package/dist/models/player-association-request.d.ts.map +1 -0
- package/dist/models/player-association-request.js +89 -0
- package/dist/models/player-association-request.js.map +1 -0
- package/dist/models/prediction/prediction.d.ts +21 -0
- package/dist/models/prediction/prediction.d.ts.map +1 -0
- package/dist/models/prediction/prediction.js +42 -0
- package/dist/models/prediction/prediction.js.map +1 -0
- package/dist/models/season-achievement.d.ts +90 -0
- package/dist/models/season-achievement.d.ts.map +1 -0
- package/dist/models/season-achievement.js +126 -0
- package/dist/models/season-achievement.js.map +1 -0
- package/dist/models/team-of-the-season.d.ts +35 -0
- package/dist/models/team-of-the-season.d.ts.map +1 -0
- package/dist/models/team-of-the-season.js +69 -0
- package/dist/models/team-of-the-season.js.map +1 -0
- package/dist/models/team.d.ts +67 -0
- package/dist/models/team.d.ts.map +1 -0
- package/dist/models/team.js +88 -0
- package/dist/models/team.js.map +1 -0
- package/dist/models/transfer-request.d.ts +22 -0
- package/dist/models/transfer-request.d.ts.map +1 -0
- package/dist/models/transfer-request.js +132 -0
- package/dist/models/transfer-request.js.map +1 -0
- package/dist/models/user.d.ts +25 -0
- package/dist/models/user.d.ts.map +1 -0
- package/dist/models/user.js +109 -0
- package/dist/models/user.js.map +1 -0
- package/package.json +32 -0
- package/src/dtos/api-error-response.ts +71 -0
- package/src/dtos/enums/extended-game-status.enum.ts +13 -0
- package/src/dtos/enums/extended-game-status.ts +13 -0
- package/src/dtos/enums/index.ts +88 -0
- package/src/dtos/index.ts +7 -0
- package/src/dtos/requests/create-player-request.ts +12 -0
- package/src/dtos/requests/fixture-game-requests.ts +27 -0
- package/src/dtos/requests/fixture-requests.ts +13 -0
- package/src/dtos/requests/game-requests.ts +16 -0
- package/src/dtos/requests/index.ts +8 -0
- package/src/dtos/requests/player-performance-request.ts +18 -0
- package/src/dtos/requests/player-requests.ts +9 -0
- package/src/dtos/requests/update-player-data-request.ts +9 -0
- package/src/dtos/responses/api-error-response.interface.ts +71 -0
- package/src/dtos/responses/error-dtos.ts +39 -0
- package/src/dtos/responses/event-dtos.ts +97 -0
- package/src/dtos/responses/fixture-dtos.ts +52 -0
- package/src/dtos/responses/game-dtos.ts +82 -0
- package/src/dtos/responses/index.ts +11 -0
- package/src/dtos/responses/league-dtos.ts +10 -0
- package/src/dtos/responses/notification-dtos.ts +23 -0
- package/src/dtos/responses/player-dtos.ts +93 -0
- package/src/dtos/responses/stats-dtos.ts +87 -0
- package/src/dtos/responses/team-dtos.ts +30 -0
- package/src/dtos/responses/transfer-dtos.ts +66 -0
- package/src/dtos/transfer-request/index.ts +1 -0
- package/src/dtos/transfer-request/transfer-request.dto.ts +0 -0
- package/src/enums/extended-game-status.ts +15 -0
- package/src/index.ts +28 -0
- package/src/models/ban.ts +70 -0
- package/src/models/chat.ts +89 -0
- package/src/models/comment/comment.ts +62 -0
- package/src/models/event.ts +137 -0
- package/src/models/fixture.ts +52 -0
- package/src/models/game/ea-game-details.ts +124 -0
- package/src/models/game/game-types.ts +46 -0
- package/src/models/game/game.ts +170 -0
- package/src/models/game/player-validation.ts +262 -0
- package/src/models/league.ts +71 -0
- package/src/models/news.ts +130 -0
- package/src/models/notification.ts +80 -0
- package/src/models/player/player-types.ts +10 -0
- package/src/models/player/player.ts +174 -0
- package/src/models/player-association-request.ts +76 -0
- package/src/models/prediction/prediction.ts +54 -0
- package/src/models/season-achievement.ts +173 -0
- package/src/models/team-of-the-season.ts +74 -0
- package/src/models/team.ts +133 -0
- package/src/models/transfer-request.ts +129 -0
- package/src/models/user.ts +101 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { GAME_STATUS, EXTENDED_GAME_STATUS } from "../../enums/extended-game-status";
|
|
2
|
+
import mongoose, { Document, Schema } from "mongoose";
|
|
3
|
+
import { PlayerGamePerformance } from "./game-types";
|
|
4
|
+
import { EAGameDetails } from "./ea-game-details";
|
|
5
|
+
|
|
6
|
+
export enum PLAYOFF_STAGE {
|
|
7
|
+
PLAY_IN_ROUND = "Play-in Round",
|
|
8
|
+
QUARTER_FINAL = "Quarter-Final",
|
|
9
|
+
SEMI_FINAL = "Semi-Final",
|
|
10
|
+
FINAL = "Final",
|
|
11
|
+
THIRD_PLACE = "3rd Place Match",
|
|
12
|
+
PROMOTION_PLAYOFF = "Promotion Playoff",
|
|
13
|
+
RELEGATION_PLAYOFF = "Relegation Playoff"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export enum SERIES_FORMAT {
|
|
17
|
+
BEST_OF_1 = "Best of 1",
|
|
18
|
+
BEST_OF_3 = "Best of 3",
|
|
19
|
+
BEST_OF_5 = "Best of 5",
|
|
20
|
+
BEST_OF_7 = "Best of 7"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface PlayoffDetails {
|
|
24
|
+
stage: PLAYOFF_STAGE;
|
|
25
|
+
format: SERIES_FORMAT;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface IGame extends Document {
|
|
29
|
+
id: string;
|
|
30
|
+
fixture: mongoose.Types.ObjectId;
|
|
31
|
+
round: number;
|
|
32
|
+
league: mongoose.Types.ObjectId;
|
|
33
|
+
seasonNumber: number;
|
|
34
|
+
homeTeam: mongoose.Types.ObjectId;
|
|
35
|
+
awayTeam: mongoose.Types.ObjectId;
|
|
36
|
+
date?: Date;
|
|
37
|
+
status: EXTENDED_GAME_STATUS;
|
|
38
|
+
isPlayoff: boolean;
|
|
39
|
+
playoffStage?: PLAYOFF_STAGE;
|
|
40
|
+
matchNumber?: number;
|
|
41
|
+
technicalLoss?: {
|
|
42
|
+
teamId: mongoose.Types.ObjectId;
|
|
43
|
+
reason: string;
|
|
44
|
+
};
|
|
45
|
+
result?: {
|
|
46
|
+
homeTeamGoals: number;
|
|
47
|
+
awayTeamGoals: number;
|
|
48
|
+
penalties?: {
|
|
49
|
+
homeTeamPenalties: number;
|
|
50
|
+
awayTeamPenalties: number;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
broadcast?: {
|
|
54
|
+
streamUrl: string;
|
|
55
|
+
broadcastingTeam: string;
|
|
56
|
+
};
|
|
57
|
+
homeTeamPlayersPerformance?: PlayerGamePerformance[];
|
|
58
|
+
awayTeamPlayersPerformance?: PlayerGamePerformance[];
|
|
59
|
+
homeTeamLineupSent?: boolean;
|
|
60
|
+
homeTeamLineupSentAt?: Date;
|
|
61
|
+
awayTeamLineupSent?: boolean;
|
|
62
|
+
awayTeamLineupSentAt?: Date;
|
|
63
|
+
aiAnalysisImage?: string; // URL to the saved AI analysis image (deprecated - use team-specific fields)
|
|
64
|
+
homeTeamPlayersImage?: string; // URL to the home team's player stats screenshot
|
|
65
|
+
awayTeamPlayersImage?: string; // URL to the away team's player stats screenshot
|
|
66
|
+
eaGameDetails?: EAGameDetails; // EA game details from Clubs API
|
|
67
|
+
playerValidationResult?: any; // Player eligibility validation result from EA match data
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const playerGameStatsSchema = new Schema(
|
|
71
|
+
{
|
|
72
|
+
playerId: { type: mongoose.Schema.Types.ObjectId, ref: "Player", required: true },
|
|
73
|
+
rating: { type: Number, required: true },
|
|
74
|
+
cleanSheet: { type: Boolean, required: true },
|
|
75
|
+
goals: { type: Number },
|
|
76
|
+
assists: { type: Number },
|
|
77
|
+
playerOfTheMatch: { type: Boolean },
|
|
78
|
+
positionPlayed: { type: String },
|
|
79
|
+
isBotPlayer: { type: Boolean, default: false }, // Flag to identify BOT players
|
|
80
|
+
},
|
|
81
|
+
{ id: false }
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
const gameSchema = new Schema<IGame>(
|
|
85
|
+
{
|
|
86
|
+
fixture: { type: mongoose.Schema.Types.ObjectId, ref: "Fixture", required: true },
|
|
87
|
+
round: { type: Number, required: true },
|
|
88
|
+
league: { type: mongoose.Schema.Types.ObjectId, ref: "League", required: true },
|
|
89
|
+
seasonNumber: { type: Number, required: true },
|
|
90
|
+
homeTeam: { type: mongoose.Schema.Types.ObjectId, ref: "Team", required: true },
|
|
91
|
+
awayTeam: { type: mongoose.Schema.Types.ObjectId, ref: "Team", required: true },
|
|
92
|
+
date: { type: Date },
|
|
93
|
+
status: { type: String, required: true, default: EXTENDED_GAME_STATUS.SCHEDULED, enum: Object.values(EXTENDED_GAME_STATUS) },
|
|
94
|
+
isPlayoff: { type: Boolean, required: true, default: false },
|
|
95
|
+
playoffStage: { type: String, enum: Object.values(PLAYOFF_STAGE), required: false },
|
|
96
|
+
matchNumber: { type: Number, required: false },
|
|
97
|
+
technicalLoss: {
|
|
98
|
+
type: {
|
|
99
|
+
reason: { type: String, required: true },
|
|
100
|
+
teamId: { type: mongoose.Schema.Types.ObjectId, ref: "Team", required: true },
|
|
101
|
+
},
|
|
102
|
+
id: false,
|
|
103
|
+
required: false,
|
|
104
|
+
},
|
|
105
|
+
result: {
|
|
106
|
+
type: {
|
|
107
|
+
homeTeamGoals: { type: Number },
|
|
108
|
+
awayTeamGoals: { type: Number },
|
|
109
|
+
penalties: {
|
|
110
|
+
type: {
|
|
111
|
+
homeTeamPenalties: { type: Number },
|
|
112
|
+
awayTeamPenalties: { type: Number },
|
|
113
|
+
},
|
|
114
|
+
required: false,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
required: false,
|
|
118
|
+
},
|
|
119
|
+
broadcast: {
|
|
120
|
+
type: {
|
|
121
|
+
streamUrl: { type: String, required: true },
|
|
122
|
+
broadcastingTeam: { type: String, required: true },
|
|
123
|
+
},
|
|
124
|
+
required: false,
|
|
125
|
+
},
|
|
126
|
+
homeTeamPlayersPerformance: [playerGameStatsSchema],
|
|
127
|
+
awayTeamPlayersPerformance: [playerGameStatsSchema],
|
|
128
|
+
homeTeamLineupSent: { type: Boolean, required: false, default: false },
|
|
129
|
+
homeTeamLineupSentAt: { type: Date, required: false },
|
|
130
|
+
awayTeamLineupSent: { type: Boolean, required: false, default: false },
|
|
131
|
+
awayTeamLineupSentAt: { type: Date, required: false },
|
|
132
|
+
aiAnalysisImage: { type: String, required: false }, // URL to the saved AI analysis image (deprecated)
|
|
133
|
+
homeTeamPlayersImage: { type: String, required: false }, // URL to the home team's player stats screenshot
|
|
134
|
+
awayTeamPlayersImage: { type: String, required: false }, // URL to the away team's player stats screenshot
|
|
135
|
+
eaGameDetails: {
|
|
136
|
+
type: {
|
|
137
|
+
eaMatchId: { type: String, required: false },
|
|
138
|
+
fetchedAt: { type: Date, required: false },
|
|
139
|
+
homeTeamStats: { type: Schema.Types.Mixed, required: false },
|
|
140
|
+
awayTeamStats: { type: Schema.Types.Mixed, required: false },
|
|
141
|
+
lastFetchedJob: {
|
|
142
|
+
type: {
|
|
143
|
+
jobId: { type: String, required: true },
|
|
144
|
+
scheduledFor: { type: Date, required: true },
|
|
145
|
+
executedAt: { type: Date, required: false }
|
|
146
|
+
},
|
|
147
|
+
required: false
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
required: false
|
|
151
|
+
},
|
|
152
|
+
playerValidationResult: {
|
|
153
|
+
type: Schema.Types.Mixed,
|
|
154
|
+
required: false
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
toJSON: { virtuals: true },
|
|
159
|
+
id: true, // Use 'id' instead of '_id'
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
// Define the index
|
|
164
|
+
gameSchema.index({ league: 1, seasonNumber: 1, date: 1 });
|
|
165
|
+
gameSchema.index({ GAME_STATUS: 1 });
|
|
166
|
+
|
|
167
|
+
const Game = mongoose.model<IGame>("Game", gameSchema);
|
|
168
|
+
|
|
169
|
+
export default Game;
|
|
170
|
+
export { PlayerGamePerformance, AddGameData, PopulatedPlayerGameData } from "./game-types";
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPL Player Validation Feature - Interfaces and Types
|
|
3
|
+
*
|
|
4
|
+
* This module defines the data structures and types needed for validating
|
|
5
|
+
* player eligibility when processing match data from the EA API.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import mongoose from "mongoose";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* EA API Player Data structure as returned from the API
|
|
12
|
+
* Contains player-level statistics from a specific match
|
|
13
|
+
*/
|
|
14
|
+
export interface EAPlayerData {
|
|
15
|
+
gamerTag: string;
|
|
16
|
+
playerName: string;
|
|
17
|
+
position: string;
|
|
18
|
+
rating: number;
|
|
19
|
+
goals?: number;
|
|
20
|
+
assists?: number;
|
|
21
|
+
saves?: number;
|
|
22
|
+
[key: string]: any; // Allow additional EA stats
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Result of validating a single player against team squad
|
|
27
|
+
*/
|
|
28
|
+
export interface PlayerValidationResult {
|
|
29
|
+
gamerTag: string;
|
|
30
|
+
playerName: string;
|
|
31
|
+
position: string;
|
|
32
|
+
found: boolean;
|
|
33
|
+
matchedPlayerId?: string; // ObjectId of matched player in our system
|
|
34
|
+
reason?: string; // Reason if not found
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Validation results for all players from one team
|
|
39
|
+
*/
|
|
40
|
+
export interface TeamValidationResult {
|
|
41
|
+
teamId: string;
|
|
42
|
+
eaTeamId: string;
|
|
43
|
+
teamName: string;
|
|
44
|
+
allPlayersVerified: boolean;
|
|
45
|
+
verifiedPlayerCount: number;
|
|
46
|
+
ineligiblePlayerCount: number;
|
|
47
|
+
playerValidations: PlayerValidationResult[];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Summary of a complete match validation
|
|
52
|
+
* Shows if match is valid and if technical win should be awarded
|
|
53
|
+
*/
|
|
54
|
+
export interface MatchValidationResult {
|
|
55
|
+
matchId: string;
|
|
56
|
+
eaMatchId: string;
|
|
57
|
+
validationTimestamp: Date;
|
|
58
|
+
status: "valid" | "invalid";
|
|
59
|
+
homeTeam: TeamValidationResult;
|
|
60
|
+
awayTeam: TeamValidationResult;
|
|
61
|
+
ineligiblePlayers: Array<EAPlayerData & { team: string }>;
|
|
62
|
+
technicalWinAward?: {
|
|
63
|
+
awardedToTeamId: string;
|
|
64
|
+
awardedToTeamName: string;
|
|
65
|
+
reason: string;
|
|
66
|
+
ineligiblePlayerCount: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Enriched player performance data from EA API match
|
|
72
|
+
* Stored for future seasons' use
|
|
73
|
+
*/
|
|
74
|
+
export interface EnrichedPlayerMatchData {
|
|
75
|
+
playerId: string;
|
|
76
|
+
gamerTag: string;
|
|
77
|
+
playerName: string;
|
|
78
|
+
position: string;
|
|
79
|
+
eaStats: {
|
|
80
|
+
rating: number;
|
|
81
|
+
goals?: number;
|
|
82
|
+
assists?: number;
|
|
83
|
+
saves?: number;
|
|
84
|
+
[key: string]: any;
|
|
85
|
+
};
|
|
86
|
+
matchDate: Date;
|
|
87
|
+
opponent: {
|
|
88
|
+
teamId: string;
|
|
89
|
+
teamName: string;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Complete enriched match data structure
|
|
95
|
+
* Contains validation results and enriched player data
|
|
96
|
+
*/
|
|
97
|
+
export interface EnrichedMatchData {
|
|
98
|
+
gameId: string;
|
|
99
|
+
eaMatchId: string;
|
|
100
|
+
matchDate: Date;
|
|
101
|
+
validationResult: MatchValidationResult;
|
|
102
|
+
enrichedPlayerData?: {
|
|
103
|
+
homeTeam: EnrichedPlayerMatchData[];
|
|
104
|
+
awayTeam: EnrichedPlayerMatchData[];
|
|
105
|
+
};
|
|
106
|
+
matchResult: {
|
|
107
|
+
homeGoals: number;
|
|
108
|
+
awayGoals: number;
|
|
109
|
+
winner: "home" | "away" | "draw";
|
|
110
|
+
isTechnicalWin: boolean;
|
|
111
|
+
technicalWinReason?: string;
|
|
112
|
+
};
|
|
113
|
+
storedAt: Date;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Request object for player validation
|
|
118
|
+
* Contains all necessary data to validate a match's players
|
|
119
|
+
*/
|
|
120
|
+
export interface PlayerValidationRequest {
|
|
121
|
+
matchId: string;
|
|
122
|
+
eaMatchId: string;
|
|
123
|
+
matchDate: Date;
|
|
124
|
+
homeTeam: {
|
|
125
|
+
teamId: string;
|
|
126
|
+
eaTeamId: string;
|
|
127
|
+
teamName: string;
|
|
128
|
+
players: EAPlayerData[];
|
|
129
|
+
};
|
|
130
|
+
awayTeam: {
|
|
131
|
+
teamId: string;
|
|
132
|
+
eaTeamId: string;
|
|
133
|
+
teamName: string;
|
|
134
|
+
players: EAPlayerData[];
|
|
135
|
+
};
|
|
136
|
+
matchResult: {
|
|
137
|
+
homeGoals: number;
|
|
138
|
+
awayGoals: number;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Database schema interface for storing validation results
|
|
144
|
+
* Extends Mongoose Document
|
|
145
|
+
*/
|
|
146
|
+
export interface IMatchValidationRecord extends mongoose.Document {
|
|
147
|
+
gameId: mongoose.Types.ObjectId;
|
|
148
|
+
eaMatchId: string;
|
|
149
|
+
matchDate: Date;
|
|
150
|
+
validationResult: MatchValidationResult;
|
|
151
|
+
enrichedPlayerData?: {
|
|
152
|
+
homeTeam: EnrichedPlayerMatchData[];
|
|
153
|
+
awayTeam: EnrichedPlayerMatchData[];
|
|
154
|
+
};
|
|
155
|
+
matchResult: {
|
|
156
|
+
homeGoals: number;
|
|
157
|
+
awayGoals: number;
|
|
158
|
+
winner: "home" | "away" | "draw";
|
|
159
|
+
isTechnicalWin: boolean;
|
|
160
|
+
technicalWinReason?: string;
|
|
161
|
+
};
|
|
162
|
+
storedAt: Date;
|
|
163
|
+
updatedAt: Date;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Audit log entry for tracking validation and technical wins
|
|
168
|
+
*/
|
|
169
|
+
export interface ValidationAuditLog {
|
|
170
|
+
matchId: string;
|
|
171
|
+
eaMatchId: string;
|
|
172
|
+
validationTimestamp: Date;
|
|
173
|
+
status: "VALID" | "INVALID" | "REJECTED_DUE_TO_INELIGIBLE_PLAYERS";
|
|
174
|
+
ineligiblePlayerCount: number;
|
|
175
|
+
technicalWinAwarded?: {
|
|
176
|
+
teamId: string;
|
|
177
|
+
teamName: string;
|
|
178
|
+
};
|
|
179
|
+
adminReviewRequired: boolean;
|
|
180
|
+
severity?: "LOW" | "MEDIUM" | "HIGH"; // HIGH for multiple ineligible players
|
|
181
|
+
notes?: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Statistics for a season showing validation patterns
|
|
186
|
+
*/
|
|
187
|
+
export interface ValidationStatistics {
|
|
188
|
+
season: number;
|
|
189
|
+
totalMatchesValidated: number;
|
|
190
|
+
validMatches: number;
|
|
191
|
+
invalidMatches: number;
|
|
192
|
+
technicalWinsAwarded: number;
|
|
193
|
+
totalIneligiblePlayersDetected: number;
|
|
194
|
+
teamsWithViolations: Array<{
|
|
195
|
+
teamId: string;
|
|
196
|
+
teamName: string;
|
|
197
|
+
violationCount: number;
|
|
198
|
+
ineligiblePlayerCount: number;
|
|
199
|
+
}>;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Example validation data for testing/documentation
|
|
204
|
+
*/
|
|
205
|
+
export const VALIDATION_EXAMPLES = {
|
|
206
|
+
// Scenario 1: Valid match
|
|
207
|
+
validMatch: {
|
|
208
|
+
matchId: "match_valid_001",
|
|
209
|
+
status: "valid",
|
|
210
|
+
description:
|
|
211
|
+
"All 22 players from both teams are found in their respective squads",
|
|
212
|
+
homeTeamPlayers: 11,
|
|
213
|
+
awayTeamPlayers: 11,
|
|
214
|
+
ineligiblePlayers: 0,
|
|
215
|
+
technicalWin: null,
|
|
216
|
+
} as const,
|
|
217
|
+
|
|
218
|
+
// Scenario 2: Single ineligible player
|
|
219
|
+
singleIneligiblePlayer: {
|
|
220
|
+
matchId: "match_invalid_001",
|
|
221
|
+
status: "invalid",
|
|
222
|
+
description:
|
|
223
|
+
"Away team fielded 1 player not in their registered squad",
|
|
224
|
+
homeTeamPlayers: 11,
|
|
225
|
+
awayTeamPlayers: 10,
|
|
226
|
+
ineligiblePlayers: 1,
|
|
227
|
+
technicalWin: "home team",
|
|
228
|
+
} as const,
|
|
229
|
+
|
|
230
|
+
// Scenario 3: Multiple ineligible players
|
|
231
|
+
multipleIneligiblePlayers: {
|
|
232
|
+
matchId: "match_invalid_002",
|
|
233
|
+
status: "invalid",
|
|
234
|
+
description: "Away team fielded 3 players not in their registered squad",
|
|
235
|
+
homeTeamPlayers: 11,
|
|
236
|
+
awayTeamPlayers: 8,
|
|
237
|
+
ineligiblePlayers: 3,
|
|
238
|
+
technicalWin: "home team",
|
|
239
|
+
} as const,
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Technical win award details
|
|
244
|
+
* Used when a team fields ineligible players
|
|
245
|
+
*/
|
|
246
|
+
export interface TechnicalWinAward {
|
|
247
|
+
awardedToTeamId: string;
|
|
248
|
+
awardedToTeamName: string;
|
|
249
|
+
awardedAt: Date;
|
|
250
|
+
reason: string;
|
|
251
|
+
ineligiblePlayerCount: number;
|
|
252
|
+
matchId: string;
|
|
253
|
+
eaMatchId: string;
|
|
254
|
+
originalEAScore?: {
|
|
255
|
+
homeGoals: number;
|
|
256
|
+
awayGoals: number;
|
|
257
|
+
};
|
|
258
|
+
technicalWinScore: {
|
|
259
|
+
homeGoals: number;
|
|
260
|
+
awayGoals: number;
|
|
261
|
+
};
|
|
262
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import mongoose, { Schema, Document } from "mongoose";
|
|
2
|
+
|
|
3
|
+
enum Role {
|
|
4
|
+
OWNER = "OWNER",
|
|
5
|
+
MANAGER = "MANAGER",
|
|
6
|
+
MODERATOR = "MODERATOR",
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface ILeagueAdmin {
|
|
10
|
+
playerId: mongoose.Types.ObjectId;
|
|
11
|
+
role: Role;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface ILeague extends Document {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
imgUrl?: string;
|
|
18
|
+
teams: mongoose.Types.ObjectId[];
|
|
19
|
+
// admins: ILeagueAdmin[];
|
|
20
|
+
seasonsHistory: ILeagueSeason[];
|
|
21
|
+
currentSeason: ILeagueSeason;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ILeagueSeason {
|
|
25
|
+
seasonNumber: number;
|
|
26
|
+
winner: mongoose.Types.ObjectId | null;
|
|
27
|
+
fixtures: mongoose.Types.ObjectId[];
|
|
28
|
+
teams?: mongoose.Types.ObjectId[];
|
|
29
|
+
startDate: Date;
|
|
30
|
+
endDate?: Date;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const leagueSeasonSchema = new Schema(
|
|
34
|
+
{
|
|
35
|
+
seasonNumber: { type: Number, required: true },
|
|
36
|
+
winner: { type: mongoose.Schema.Types.ObjectId, ref: "Team", default: null },
|
|
37
|
+
teams: [{ type: mongoose.Schema.Types.ObjectId, ref: "Team" }],
|
|
38
|
+
fixtures: [{ type: mongoose.Schema.Types.ObjectId, ref: "Fixture" }],
|
|
39
|
+
startDate: { type: mongoose.Schema.Types.Date, required: true },
|
|
40
|
+
endDate: { type: mongoose.Schema.Types.Date },
|
|
41
|
+
},
|
|
42
|
+
{ _id: false }
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const leagueSchema: Schema = new Schema<ILeague>(
|
|
46
|
+
{
|
|
47
|
+
name: { type: String, required: true, unique: true },
|
|
48
|
+
imgUrl: { type: String },
|
|
49
|
+
teams: [{ type: mongoose.Schema.Types.ObjectId, ref: "Team" }],
|
|
50
|
+
seasonsHistory: [leagueSeasonSchema],
|
|
51
|
+
currentSeason: leagueSeasonSchema,
|
|
52
|
+
// admins: [
|
|
53
|
+
// {
|
|
54
|
+
// playerId: {
|
|
55
|
+
// type: mongoose.Types.ObjectId,
|
|
56
|
+
// required: true,
|
|
57
|
+
// ref: "Player",
|
|
58
|
+
// },
|
|
59
|
+
// role: { type: String, enum: Object.values(Role), required: true },
|
|
60
|
+
// },
|
|
61
|
+
// ],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
toJSON: { virtuals: true },
|
|
65
|
+
id: true, // Use 'id' instead of '_id'
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
const League = mongoose.model<ILeague>("League", leagueSchema);
|
|
70
|
+
|
|
71
|
+
export default League;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// models/news.ts
|
|
2
|
+
import mongoose, { Document, Schema } from 'mongoose';
|
|
3
|
+
|
|
4
|
+
export interface ITransferData {
|
|
5
|
+
playerDetails: {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
imgUrl?: string;
|
|
9
|
+
};
|
|
10
|
+
fromTeam: {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
imgUrl?: string;
|
|
14
|
+
};
|
|
15
|
+
toTeam: {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
imgUrl?: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface IFreeAgentData {
|
|
23
|
+
playerDetails: {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
imgUrl?: string;
|
|
27
|
+
position: string;
|
|
28
|
+
age: number;
|
|
29
|
+
};
|
|
30
|
+
previousTeams: {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
imgUrl?: string;
|
|
34
|
+
seasonNumber: number;
|
|
35
|
+
}[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Define the interface for the news item
|
|
39
|
+
export interface INews extends Document {
|
|
40
|
+
title: string;
|
|
41
|
+
content: string;
|
|
42
|
+
type: 'General' | 'Transfer' | 'FreeAgent';
|
|
43
|
+
createdBy: string;
|
|
44
|
+
createdAt: Date;
|
|
45
|
+
transferData?: ITransferData;
|
|
46
|
+
freeAgentData?: IFreeAgentData;
|
|
47
|
+
likes: string[]; // Array of user IDs who liked this news
|
|
48
|
+
likeCount: number; // Computed field for like count
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const transferDataSchema = new Schema(
|
|
52
|
+
{
|
|
53
|
+
playerDetails: {
|
|
54
|
+
id: { type: String, required: true },
|
|
55
|
+
name: { type: String, required: true },
|
|
56
|
+
imgUrl: { type: String },
|
|
57
|
+
},
|
|
58
|
+
fromTeam: {
|
|
59
|
+
id: { type: String },
|
|
60
|
+
name: { type: String },
|
|
61
|
+
imgUrl: { type: String },
|
|
62
|
+
},
|
|
63
|
+
toTeam: {
|
|
64
|
+
id: { type: String, required: true },
|
|
65
|
+
name: { type: String, required: true },
|
|
66
|
+
imgUrl: { type: String },
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{ _id: false }
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
const freeAgentDataSchema = new Schema(
|
|
73
|
+
{
|
|
74
|
+
playerDetails: {
|
|
75
|
+
id: { type: String, required: true },
|
|
76
|
+
name: { type: String, required: true },
|
|
77
|
+
imgUrl: { type: String, required: false },
|
|
78
|
+
position: { type: String, required: true },
|
|
79
|
+
age: { type: Number, required: true },
|
|
80
|
+
},
|
|
81
|
+
previousTeams: [{
|
|
82
|
+
id: { type: String, required: true },
|
|
83
|
+
name: { type: String, required: true },
|
|
84
|
+
imgUrl: { type: String, required: false },
|
|
85
|
+
seasonNumber: { type: Number, required: true },
|
|
86
|
+
}],
|
|
87
|
+
},
|
|
88
|
+
{ _id: false }
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const newsSchema = new Schema(
|
|
92
|
+
{
|
|
93
|
+
title: { type: String, required: true },
|
|
94
|
+
content: { type: String, required: true },
|
|
95
|
+
type: {
|
|
96
|
+
type: String,
|
|
97
|
+
enum: ['General', 'Transfer', 'FreeAgent'],
|
|
98
|
+
required: true
|
|
99
|
+
},
|
|
100
|
+
createdBy: { type: String, required: true },
|
|
101
|
+
createdAt: { type: Date, default: Date.now },
|
|
102
|
+
likes: { type: [String], default: [] }, // Array of user IDs
|
|
103
|
+
transferData: {
|
|
104
|
+
type: transferDataSchema,
|
|
105
|
+
required: false,
|
|
106
|
+
},
|
|
107
|
+
freeAgentData: {
|
|
108
|
+
type: freeAgentDataSchema,
|
|
109
|
+
required: false,
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{ timestamps: true }
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
// Virtual field for like count
|
|
116
|
+
newsSchema.virtual('likeCount').get(function() {
|
|
117
|
+
return this.likes ? this.likes.length : 0;
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Add index on createdAt for faster sorting
|
|
121
|
+
newsSchema.index({ createdAt: -1 });
|
|
122
|
+
|
|
123
|
+
// Ensure virtual fields are serialized
|
|
124
|
+
newsSchema.set('toJSON', { virtuals: true });
|
|
125
|
+
newsSchema.set('toObject', { virtuals: true });
|
|
126
|
+
|
|
127
|
+
// Create the model
|
|
128
|
+
const News = mongoose.model<INews>('News', newsSchema);
|
|
129
|
+
|
|
130
|
+
export default News;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import mongoose, { Document, Schema } from 'mongoose';
|
|
2
|
+
|
|
3
|
+
export interface INotification extends Document {
|
|
4
|
+
id: string;
|
|
5
|
+
userId: mongoose.Types.ObjectId; // Recipient of the notification
|
|
6
|
+
type: 'transfer_request' | 'transfer_approved' | 'transfer_rejected' | 'transfer_cancelled' | 'player_association_request' | 'player_association_approved' | 'player_association_rejected' | 'system';
|
|
7
|
+
title: string;
|
|
8
|
+
message: string;
|
|
9
|
+
data?: any; // Additional data for the notification
|
|
10
|
+
isRead: boolean;
|
|
11
|
+
createdAt: Date;
|
|
12
|
+
readAt?: Date;
|
|
13
|
+
expiresAt?: Date;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const notificationSchema = new Schema<INotification>(
|
|
17
|
+
{
|
|
18
|
+
userId: {
|
|
19
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
20
|
+
ref: 'User',
|
|
21
|
+
required: true
|
|
22
|
+
},
|
|
23
|
+
type: {
|
|
24
|
+
type: String,
|
|
25
|
+
enum: ['transfer_request', 'transfer_approved', 'transfer_rejected', 'transfer_cancelled', 'player_association_request', 'player_association_approved', 'player_association_rejected', 'system'],
|
|
26
|
+
required: true
|
|
27
|
+
},
|
|
28
|
+
title: {
|
|
29
|
+
type: String,
|
|
30
|
+
required: true,
|
|
31
|
+
maxlength: 200
|
|
32
|
+
},
|
|
33
|
+
message: {
|
|
34
|
+
type: String,
|
|
35
|
+
required: true,
|
|
36
|
+
maxlength: 1000
|
|
37
|
+
},
|
|
38
|
+
data: {
|
|
39
|
+
type: Schema.Types.Mixed,
|
|
40
|
+
default: {}
|
|
41
|
+
},
|
|
42
|
+
isRead: {
|
|
43
|
+
type: Boolean,
|
|
44
|
+
default: false
|
|
45
|
+
},
|
|
46
|
+
createdAt: {
|
|
47
|
+
type: Date,
|
|
48
|
+
default: Date.now
|
|
49
|
+
},
|
|
50
|
+
readAt: {
|
|
51
|
+
type: Date
|
|
52
|
+
},
|
|
53
|
+
expiresAt: {
|
|
54
|
+
type: Date
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
timestamps: true,
|
|
59
|
+
toJSON: { virtuals: true },
|
|
60
|
+
id: true
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// Indexes for efficient querying
|
|
65
|
+
notificationSchema.index({ userId: 1, isRead: 1 });
|
|
66
|
+
notificationSchema.index({ userId: 1, createdAt: -1 });
|
|
67
|
+
notificationSchema.index({ type: 1 });
|
|
68
|
+
notificationSchema.index({ expiresAt: 1 });
|
|
69
|
+
|
|
70
|
+
// Virtual for populated user details
|
|
71
|
+
notificationSchema.virtual('user', {
|
|
72
|
+
ref: 'User',
|
|
73
|
+
localField: 'userId',
|
|
74
|
+
foreignField: '_id',
|
|
75
|
+
justOne: true
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const Notification = mongoose.model<INotification>('Notification', notificationSchema);
|
|
79
|
+
|
|
80
|
+
export default Notification;
|