### Pour lancer le docker :

- Il faut un fichier .env qu'on ne doit pas push, donc je ne le push pas.
- Pour l'instant, on doit donc le faire à la main (je verrai par la suite comment faire mieux).
- Dans le .env il y a juste à mettre (sans les guillemets) "NODE_ENV=development" ou "NODE_ENV=production".
- Il faut le placer au même endroit que docker-compose.yml
- Dans le makefile il y a un sedf pour changer l'un ou l'autre.



### TODO List : Utilisateur édition.

- [x] Utilisateur : faire la base pour un utilisateur
- [x] Utilisateur : faire le système de requêtes amis
- [ ] Utilisateur : mettre en place le système de session (voire de statut ?)
- [ ] Utilisateur : mettre en place le système d'avatar
- [ ] Utilisateur : mettre en place la double authentification
- [ ] Utilisateur : mettre en place le système d'Oauth
- [ ] Utilisateur : mettre en place la hashage de mot de passe (avec Oauth)
- [ ] Utilisateur : mettre en place le système de statut
- [ ] Utilisateur : mettre en place le système de stats
- [ ] Utilisateur : mettre en place l'historique des matches

### TODO List : Docker édition.

- [ ] Docker : trouver un moyen simple de générer un .env. Peut-être renouveller les clé à chaque lancement.



## questions :

- choose a secondary browser
- choose solution to rootless mode (VM, rebuild, unique root uid)
- choose 2fa method : texto ? Google Authentication ?
- when chat-room owner leaves what happens ?
- can chat-room administrators ban and mute other administrators ?
- game technologie (canvas ?)

---

## tasks :

#### luke

- getting started with Javascript
- getting started with Node.js/Nest.js
- pong game solo front-end (canvas ? js ?)
- add multiplayers to Pong with Node.js (without database, accounts, ...)

#### eric

- getting started with Javascript
- getting started with framework TypeScript front-end (Svelte ?)
- single-page démo, sans back-end
- chat front-end ? (tester avec des messages random locaux)

#### hugo

- getting started with Javascript
- getting started with Node.js/Nest.js
- getting started with PostgreSQL

---

## instructions :

#### global instructions :

- [ ] backend in NestJs
- [ ] frontend any TypeScript framework
- [ ] latest stable version of any library or framework used
- [ ] use only PostgreSQL db
- [ ] single page application
- [ ] navigator back and forward button working
- [ ] works on last Chrome and another browser
- [ ] launch with "docker-compose up --build", put in sgoinfre, in rootless mode
- [ ] can't use bind-mount volumes :
	1. docker in VM ?
	2. rebuild after changes ?
	3. craft own imags with root as unique UID

#### security concerns :

- [ ] hash every passwords in db

- [ ] protection against SQL injections

- [ ] server-side validation of users inputs

- [ ] store credentials in local .env git-ignored

#### user account :

- [ ] login with 42 intranet OAuth system

- [ ] user can choose name, avatar, 2fa (ex texto or Google Authenticator)

- [ ] display user name on site

- [ ] user default avatar if not chosen

- [ ] user can add friends, and see status (online/offline, in game, ...)

- [ ] display stats on user profile (wins, losses, ladderm levelm achievements, ...)

- [ ] public match history (lvl games, ladder, ...)

#### chat :

- [ ] can create chat-rooms (public/private, password protected)

- [ ] send direct messages

- [ ] block other users

- [ ] creators of chat-room are owners, untill they leave

- [ ] chat-room owner can set, change, remove password

- [ ] chat-room owner is administrator and can set other administrators

- [ ] administrators can ban or mute for a time other users

- [ ] send game invitation in chat

- [ ] view user profiles from chat

#### game :

- [ ] play pong with others on website

- [ ] matchmaking system : join a queue untill automatic match

- [ ] faithfull to original pong (1972)

- [ ] customs options (powers up, multiple maps, ...), with a default one

- [ ] reponsive

- [ ] can watch other matchs


---
## Resources

### Svelte
- [The Official Svelte Tutorial](https://svelte.dev/tutorial/basics)
- SPA Svelte Article [Build a single-page application in Svelte with svelte-spa-router](https://blog.logrocket.com/build-spa-svelte-svelte-spa-router/)
- [An excellent Svelt Tutorial video series](https://www.youtube.com/watch?v=zojEMeQGGHs&list=PL4cUxeGkcC9hlbrVO_2QFVqVPhlZmz7tO&index=2)


