Read this in other languages: English, Hungarian.
Ez a projekt a "DXVK pipeline state cache" fájlok tárolását és automatikus összevonását hivatott megoldani alkalmazásonként egyetlen növekvő "incremental cache file"-ba, amelyet később több eszköz között is meg lehet osztani. Egy példa ennek a manuális megvalósítására olvasható itt.
Az ötlet az, hogy különböző felhasználók regisztrálhatnak az API-hoz és megoszthatják az alkalmazásuk által generált "cache" fájljaikat, melyet a backend eltárol és a dxvk-cache-tool nevű programmal az alkalmazáshoz tartozó növekvő "cache" fájllal összevonja. Az aktuális növekvő "cache" fájlt bárki bármikor letöltheti, regisztráció nem szükséges hozzá.
Megjegyzés: a program nem ad UI-t, csak REST végpontokat szolgáltat
- DTO-k használata
- DTO-k validációja
- Játékprogramok eltárolása/frissítlse/törlése
- Felhasználók eltárolása/frissítlse/törlése
- Cache fájlok eltárolása/törlése
- Cache fájlok automatikus összevonása játékonként 1-1 növekvő cache fájlba
- Bináris fájlok stream-elése adatbázisból/-ba
- Érvénytelen cache fájlok visszadobása
- Olyan Cache fájlok visszadobása, melyek nem hoznak be új cache entry-t
- Integrációs és egységtesztek
- Aszinkronos futtatás
- Egyszerű logolás
- PostgreSQL backend használata
- Swagger dokumentáció
- Flyway adatbázis migráció:
- Egy .sql fájl migráció (V1)
- Egy Java migráció (V2)
- Dockerizáció
Az idő szorítása miatt nem sikerült elkészítenem minden tervezett funkciót. Amik kimaradtak:
- HTTP Basic Authentication. Jelenleg a felhasználóknak meg kell adniuk egy jelszót, de az titkosítatlanul kerül eltárolásra és nem kerül felhasználásra sehol sem. A program nem használ jelenleg egyetlen endpointjához sem authentikációt.
- Automatikus Newman black box tesztek írása
- Felhasználó profilképek validálása
- Cache fájlok byte szintű validálása. Jelenleg a validációt úgy végzi a program, hogy minden egyes cache fájlon lefuttatja a dxvk-cache-tool -t és ha az hibakóddal tér vissza, akkor a cache file mindenbizonnyal hibás. Szerintem nem a legjobb megoldás, de egy gyors megoldás.
A végpontok láthatóak a Wiki oldalon vagy a program futása közben a Swagger dokumentációban.
Jelenleg a programom csak Dockerrel, vagy Linux alatt futtatható, mert a dxvk-cache-tool alkalmazásnak nincs natív Windows kiadása.
Szükségletek:
- docker
- docker compose plugin (általában ez a docker-rel együtt automatikusan települ)
# Navigálj a projekt könyvtárába és futtasd a következő utasítást:
$ docker compose up
Szükségletek:
- docker
- docker compose plugin (általában ez a docker-rel együtt automatikusan települ)
- dxvk-cache-tool
megléte futtatási jogokkal:
- egy PATH könyvtárban (ajánlott)
- vagy egy bármely másik könyvtárban (több konfiguráció szükséges hozzá, erről majd később)
- egy PostgreSQL adatbázis szerver (fellőhető docker-ből, lásd A szükséges PostgreSQL szerver elindítása)
- egy futtatási profil kiválasztása.
Az adatbázis kívülről a következő adatokkal lesz elérhető:
url: //localhost:5430/dxvk-cache-bank-db
user: postgres
password: pass
$ docker run \
-it \
--rm \
-p "5430:5432" \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=pass \
-e POSTGRES_DB=dxvk-cache-bank-db \
postgres:14.3-alpine3.16
# Ha a dxvk-cache-tool egy PATH könyvtárban van:
$ ./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
# Ha a dxvk-cache-tool máshol elérhető, akkor meg kell adni ezt a könyvtárat az alkalmazásnak PATH könyvtárként:
$ env PATH=$PATH:/path/to/dxvk-cache-tool-directory ./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
- Indítsd el a PostgreSQL szervert (lásd: A szükséges PostgreSQL szerver elindítása)
- Töltsd be a projektet maven projektként
- Állítsd be a "Run/Debug Configurations" -t a következőképpen:
- Ha a dxvk-cache-tool nem egy PATH könytvárban van, akkor a "Run/DebugConfigurations"->"Environment Variables" mezőben meg kell adni még a letöltött program könyvtárát PATH könyvtárként, pl.: "PATH=$PATH:/path/to/dxvk-cache-tool-directory"
- A program ezután a szokásos módon indítható IDEA-val.
- Indítsd el a PostgreSQL szervert (lásd: A szükséges PostgreSQL szerver elindítása)
- Töltsd be a projektet maven projektként
- Adj hozzá új tesztkonfigurációt: **"Run/DebugConfigurations"->"Add new configuration"->"JUnit"
- Állítsd be a következőképpen:
Profilt itt nem szükséges megadni!
- Ha a dxvk-cache-tool nem egy PATH könytvárban van, akkor az "Environment Variables" mezőben meg kell adni még a letöltött program könyvtárát PATH könyvtárként, pl.: "PATH=$PATH:/path/to/dxvk-cache-tool-directory"
- Néha a test/resources mappa nem kerül automatikusan "test resources" mappának megjelölésre.
hogy ezt kijavítsuk, meg kell jelölnünk "test resources root"-ként a következőképpen:
jobb klikk a test/resources mappára->"Mark directory as"->"Resources root"
- Mostmár futtathatod a teszteket IDEA-val a szokásos módon
A futtatás Windows alól csak WSL Docker konténerben támogatott.
Lásd: A program futtatása, Futtatás Dockerben
- Sajnos newman tesztek elkészítésére már nem volt időm, ezért manuálisan lehet caak kívülről tesztelni a projektet
- Indítsd el a programot Dockerben (lásd: Futtatás Dockerben)
- Használd a következő Postman Workspace-t tesztelésre.
- Példa cache és profilkép fájlokat a Postman kérések futtatásához találsz a projekt resources/sample mappájában
- Egy példa a tesztelésre, a program működésének szemléltetése érdekében:
- Egy Game posztolása
- Egy User posztolása
- r5apex-barely-populated.dxvk-cache CacheFile posztolása a létrehozott User-ként a létrehozott Game-hez - El kell tárolnia a cache file-t és 200OK-t kell visszaadnia. Incremental cache-ben is létre kell jönnie a fájlnak.
- r5apex-highly-populated.dxvk-cache CacheFile posztolása a létrehozott User-ként a létrehozott Game-hez - El kell tárolnia a cache file-t és 200OK-t kell visszaadnia. Incremental cache-ben az összevont fájlnak kell lennie.
- r5apex-barely-populated.dxvk-cache CacheFile újraposztolása a létrehozott User-ként a létrehozott Game-hez - Nem szabad eltárolnia a cache file-t és 422 UNPROCESSABLE_ENTITY-t kell visszaadnia, mert ugyanazt a cache file-t posztolva már nem hoztunk be új cache entry-t. Incremental cache nem szabad hogy változzon.