Skip to content

The Nope Multiplayer Game Server is used to handle online gameplay for the Nope card game

Notifications You must be signed in to change notification settings

Louis3797/nope-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Inhaltsübersicht

Über das Projekt

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

Tech Stack

Technologies


Architektur

Architectur

Endpoints

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.

Projektstruktur

.
├── 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

Datenbank

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.

ERD

Diagramme

Login und Register Sequenzdiagramm

Auth Sequenzdiagramm

Create Tournament Sequenzdiagramm

Create Tournament Sequenzdiagramm

Join Tournament Sequenzdiagramm

Join Tournament Sequenzdiagramm

Matchmaking Ablaufdiagramm

Matchmaking Ablaufsdiagramm

Umgebungsvariablen

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

Erste Schritte

Voraussetzungen

Dieses Projekt nutzt Yarn als Packetmanager

 npm install --global yarn

Installation

  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

Linting

  # run ESLint
  yarn lint

  # fix ESLint errors
  yarn lint:fix

  # run prettier
  yarn prettier:check

  # fix prettier errors
  yarn prettier:format

Tests ausführen

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

Local ausführen

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

Ausführen mit Docker

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

About

The Nope Multiplayer Game Server is used to handle online gameplay for the Nope card game

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages