{"id":21340709,"url":"https://github.com/artainmo/ft_transcendence","last_synced_at":"2026-04-09T18:41:38.237Z","repository":{"id":93053032,"uuid":"438049161","full_name":"artainmo/ft_transcendence","owner":"artainmo","description":"42 school project. Web app that allows playing pong, login, chat in DM or channel, visualize profiles and more...","archived":false,"fork":false,"pushed_at":"2024-10-27T11:59:02.000Z","size":61869,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-22T15:31:55.903Z","etag":null,"topics":["42school","api","docker","docker-compose","game","nestjs","postgresql","react","typescript","web"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/artainmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-13T22:54:40.000Z","updated_at":"2024-10-27T11:59:06.000Z","dependencies_parsed_at":"2025-01-22T15:41:44.227Z","dependency_job_id":null,"html_url":"https://github.com/artainmo/ft_transcendence","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artainmo%2Fft_transcendence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artainmo%2Fft_transcendence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artainmo%2Fft_transcendence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artainmo%2Fft_transcendence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artainmo","download_url":"https://codeload.github.com/artainmo/ft_transcendence/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243817854,"owners_count":20352621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["42school","api","docker","docker-compose","game","nestjs","postgresql","react","typescript","web"],"created_at":"2024-11-22T00:52:39.636Z","updated_at":"2026-04-09T18:41:33.187Z","avatar_url":"https://github.com/artainmo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ft_transcendence\n\n42 school [subject](https://cdn.intra.42.fr/pdf/pdf/68431/en.subject.pdf).\n\nIn this project we have to create a website that allows playing pong, login via 42API as 42student, see profiles, chat in DM or channel, have two-factor authentication and more...\u003cbr\u003e\nThis website is a single page application, with backend written in NestJS, database used being PostgreSQL and frontend written in Typescript React. We use docker-compose to launch the app with frontend, backend and database being in separate containers.\n\n## Run\n```\ndocker-compose up --build\n```\n\nUsually the .env should be added and not be present in this repository. However we let it inside this repository because being an exercise this is not dangerous. \n\n### TODOs left\n* artainmo:\n  - [x] /database -\u003e create the database in the backend\n  - [x] /routes -\u003e create the routes (module, controller, provider) for CRUD requests on database in backend\n  - [x] /gateway -\u003e Create server-side websockets in the backend for chat and game\n  - [x] Make backend launch\n  - [x] Make frontend launch\n  - [x] /api -\u003e create api calls from frontend to interact with database\n  - [x] /gateway -\u003e Create client-side web socket functions for chat and game\n  - [x] Login option with OAuth system of 42 intranet\n  - [x] Finish the chat\n  - [x] encrypt password\n  - [x] 2FA\n  - [x] Through the chat interface users should be able to ask other players to do a Pong match\n  - [x] Through the chat interface users must be able to see other players profiles\n  - [x] On profile next to disconnected/connected add \"in game\"\n  - [x] Add button next to \"in game\" to view the game live\n  - [x] Each user has a match history\n  - [x] base css\n  - [x] protect against SQL injection (https://github.com/typeorm/typeorm/issues/3696) -\u003e ORM is used without raw query string\n  - [x] You must implement some kind of server-side validation for forms and any user input -\u003e ParseIntPipe \u0026 ValidationPipe with class-validator\n\u003cbr\u003e\n\n* Jules:\n  - [x] Finish the game\n  - [x] Multiple games can be played right after one another\n  - [x] Other users can watch the game live without interfering in it.\n  - [x] Game accepts different options(ballspeed/maps)\n  - [x] Responsive game: setInterval (check window dimensions) -\u003e if they change -\u003e change state of game window dimensions appropriately\n\u003cbr\u003e\n\n* Alessio:\n  - [x] docker-compose\n  - [x] API KEYS in .env\n\u003cbr\u003e\n\n* Other:\n  * CSS\n    - [x] css positioning?\n    - [x] profile extra css? buttons to display ?\n    - [x] clean message chat css/material-ui?\n    - [x] review profile and message css\n  * Potential bugs\n    - [x] change state \"in game\" vs \"search game\" \u0026 online/offline\n    - [x] Change state and remove active game after refresh/back/close-tab?\n    - [x] User refresh during game, what happen to other player/live-viewers and match-history??\n    - [x] User refresh at end of game? MatchHistory?\n    - [x] User already connected when creating account from intra 42\n    - [x] User logs in multiple times on different pages? (can create bugs related to status...)\n    - [x] BackButton while playing game? -\u003e Only set backbutton after games finishes and pushes datas to database\n    - [x] ban a user and directly after the user tries to access the channel -\u003e Unable to recreate bug\n    - [x] After some time of the ball fastening it slows down again?\n    - [x] user demands game in chat returns in home menu and other player accepts\n    - [x] Both users disconnect unexpectedly and come back to replay\n    - [x] Watch live end of game\n    - [x] Long names go out of scope game | game on safari font (set same font as rest website: Courier New) | change name with login\n    - [x] Point does not stop in game, until ball slows down and point is given to one player\n  * clean\n    - [x] clean all console.log\n  * additions?\n\t- [x] page with all live games\n\t- [x] On page with all live games also have a \"ladder\"\n\t- [x] if user clicks on own play invite in chat he deactivates the invite\n\t- [x] Let viewing user have a back button and do not remove the game in this case...\n\t- [x] separate user login (with encrypted password) independent of intra 42\n  * test \u0026 reread pdf\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartainmo%2Fft_transcendence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartainmo%2Fft_transcendence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartainmo%2Fft_transcendence/lists"}