Der Nope Multiplayer Game Server wird für die Abwicklung von Online-Spielen für das Nope-Kartenspiel verwendet. Er bietet sowohl eine REST-API als auch eine WebSocket-Verbindung und ermöglicht es Spielern, in Echtzeit gegeneinander anzutreten. Der Server wurde mit Express.js, Socket.io und TypeScript entwickelt.
Der Server kann unter dieser URL angesprochen werden https://nope-server.azurewebsites.net
Der Server bietet eine umfassende API auf die per Websockets (per Socket.io) oder REST API zugegriffen werden kann.
Um einen guten Einblick in die API des Servers zugeben gibt es zum einen die Endpoints.md, in der die Socket.io Events zu finden sind, die die Clients anzusprechen. Zudem ist die REST API des Servers mit Swagger dokumentiert Swagger Dokumentation
Der Server stellt eine umfassende API zur Verfügung, auf die über Websockets (mit Socket.io) oder die REST API zugegriffen werden kann.
Um einen umfassenden Überblick über die API des Servers zu erhalten, stehen zwei Ressourcen zur Verfügung. Die Datei Endpoints.md enthält eine Liste der Socket.io-Ereignisse, die von den Clients verwendet werden können. Zusätzlich ist die REST API des Servers mit Swagger dokumentiert und kann unter Swagger Dokumentation eingesehen werden.
.
├── CONTRIBUTE.md Contribution Guide
├── Changelog.md Changelogs
├── Dockerfile DOckerfile
├── Endpoints.md Dokumentation der Endpoints
├── README.md Readme
├── api-test REST API Tests
│ ├── postman Postman Tests
│ └── thunder-client Thunder Client Tests
├── assets Assets (Bilder, Diagramme, etc.)
├── prisma
│ ├── migrations Prisma Migrationen
│ └── schema.prisma Primsa Schema für die Datenbank
├── src
│ ├── config Config Dateien
│ ├── controller Controller
│ ├── error Custom Error Klassen
│ ├── interfaces Typescript Interfaces
│ ├── middleware Middlewares
│ │ └── socket Socket.io Middlewares
│ ├── model Modelle
│ ├── routes Routen/Endpoints
│ ├── service Services
│ ├── socket Socket.io Sezifische Controller
│ ├── types Typescript Types
│ ├── utils Utility Klassen und Funktionen
│ ├── validations Validierungs Middlewares
│ ├── app.ts Express App
│ └── index.ts Server Entrypoint
├── test Tests
│ ├── integration Integration Tests
│ └── unit Unit Tests
├── jest.config.ts Jest Config
├── package-lock.json Lockfile für npm (Für das Dockerfile)
├── package.json Package.json
├── tsconfig.build.json Typescript Config für Build Stage
├── tsconfig.json Basis Typescript Config
├── tsconfig.test.json Typescript Config für Tests
├── web.config Web Config
├── yarn-error.log Yarn Error Logs
└── yarn.lock Lockfile für yarn
Unser Server nutzt MySQL als primäres Datenbankmanagementsystem zur Speicherung und Verwaltung aller relevanten Daten. MySQL ist ein beliebtes und weit verbreitetes relationales Open-Source-Datenbanksystem, das eine effiziente, sichere und skalierbare Speicherung und Abfrage von Daten ermöglicht.
Um die Verwaltung der in der MySQL-Datenbank gespeicherten Daten zu vereinfachen und zu rationalisieren, setzen wir Prisma ein, ein modernes, typsicheres ORM, das verschiedene Datenbanken, darunter auch MySQL, unterstützt.
Prisma hilft uns, Datenbankabfragen in einer besser lesbaren und intuitiven Weise zu schreiben, was die Verwaltung der in unserer MySQL-Datenbank gespeicherten Daten erleichtert. Durch den Einsatz von Prisma als ORM unserer Wahl können wir außerdem sicherstellen, dass unsere Anwendung skalierbar, effizient und wartungsfreundlich bleibt.
Wenn Sie sich für die Struktur unserer Datenbank interessieren, können Sie einen Blick auf das unten dargestellte Datenmodell werfen, das einen Überblick über die Tabellen, Spalten und Beziehungen innerhalb der Datenbank gibt.
Um dieses Projekt auszuführen, müssen Sie die folgenden Umgebungsvariablen zu Ihrer .env-Datei hinzufügen
# App's running environment
# Possible values: test, production, development
NODE_ENV=
# App's running port
PORT=
HOST=
# Cors origin url
# Example: https://example.com or for multiple origins
# https://example.com|https://example2.com|https://example3.com or simple * to allow all origins
CORS_ORIGIN=
# Run node -e "console.log(require('crypto').randomBytes(256).toString('base64'));" in your console to generate a secret
ACCESS_TOKEN_SECRET=
ACCESS_TOKEN_EXPIRE=
# database name
MYSQL_DATABASE=
# database root password
MYSQL_ROOT_PASSWORD=
# database user
MYSQL_USER=
# database user password
MYSQL_PASSWORD=
# database port
MYSQL_PORT=
# Example: mysql://USER:PASSWORD@HOST:PORT/DATABASE
DATABASE_URL=
Siehe .env.example für weitere Details
Dieses Projekt nutzt Yarn als Packetmanager
npm install --global yarn
git clone https://github.com/Louis3797/nope-server.git
cd nope-server
cp .env.example .env
yarn install # install dependencies
yarn husky install
yarn prisma migrate dev --name init
yarn prisma:gen
# run ESLint
yarn lint
# fix ESLint errors
yarn lint:fix
# run prettier
yarn prettier:check
# fix prettier errors
yarn prettier:format
Die Tests lassen sich mit folgenden Befehl ausführen
yarn test
Um die Tests mit der --watch flag laufen zu lassen kann man dieses Script verwenden
yarn test:watch
Testabdeckung anzeigen lassen
yarn coverage
Starten des Servers im Entwicklungsmodus
Hinweis: Vergessen Sie nicht, die .env-Variablen zu definieren.
Falls MySQL nicht auf Ihrem Computer installiert ist, können Sie lokal eine laufende Umgebung einrichten, indem Sie den Server mit Docker Compose ausführen.
yarn dev
Starten des Servers im Produktionsmodus
yarn start
Image aus Dockerfile erstellen
docker build -t <image-name> .
Verwende die --target Flag, um nur bis zu einer bestimmten Stufe in der Dockerdatei zu bauen.
Docker-Image als Container ausführen
docker run --name <container-name> -p <exposed-port>:<port> <image-name>
Server und MySQL-Umgebung mit docker compose starten
yarn docker:prod