Név | Feladatkör |
---|---|
Béres Benjámin | Backend |
Kiss Levente | Frontend, team leader |
Léránt Sámuel | Frontend |
Nagy Máté | Frontend |
A szoftvertermék beüzemeléséhez működő Visual Studio fejlesztőkörnyezet szükséges, amely támogatja a .NET6 keretrendszerben készült projekteket. Fontos, hogy telepítve legyenek az ASP.NET and web development, Data storage and processing, SQL Server Data Tools, IIS Express, NuGet package manager, NuGet targets and build tasks és Entity Framework 6 tools komponensek. A fejlesztőkörnyezet "Package Manager Console" funkciójában szükséges az "Update-Database" parancs kiadása a program indítása előtt. A projekt fejlesztőkörnyezetben történő megnyitását követően a szerver réteg a Ctrl + F5 billentyűkombinációval indítható. A felugró böngészőablakkal (swagger) nem szükséges foglalkozni, bezárása azonban nem javasolt, mivel az a szerver leállásához vezet. Későbbiekben, igény esetén csapatunk nyitott arra, hogy a fenti projektet publikusan elérhető weboldalra migráljuk (pl. Azure), hogy a szerver eléréséhez ne legyenek szükségesek a fent leírtak. A kliens alkalmazást indításához, (amit Ön ténylegesen használni fog), a Frontend mappát érdemes egy parancssorral megnyitni, és ott egy 'npm install' (idézőjelek nélkül) parancs telepíteni fogja az alkalmazáshoz szükséges függőségeket. Ha a parancs végigfutott, az 'ng serve' paranccsal futtatni tudja a programot a böngészőben, a következő weboldalon: [számítógép ip címe]:4200 (szögletes zárójelek nélkül). Ha az Ön helyi számítógépéről futtatja, akkor elegendő a számítógép ip címét azzal helyettesíteni, hogy 'localhost' (idézőjelek nélkül).
Ha a böngészőben az alábbi ablakot látja (és Visual Studio alkalmazásból elindította a szerver alkalmazást), akkor az Ön gépén már fut a programunk, amelyet rendeltetésszerűen tud használni. Az adminisztrációs felület eléréséhez az alapértelmezett email-cím + jelszó páros:
- [email protected]
- 123Admin456
- /api/Admin/DeleteImage/{id}
- Egy adott egyedi azonosítójú képet töröl (ami egy upload alatt van)
- Ha ez a kép egy feltöltés (upload) utolsó képe, akkor a hozzá tartozó feltöltés objektum is törlésre kerül
- /api/Admin/DeleteUpload/{id}
- Egy adott egyedi azonosítójú feltöltés objektumot töröl, beleértve az összes képet az adott feltöltés alatt
- /api/Admin/EditImage
- Egy adott egyedi azonosítójú kép objektumban a leírást lehet módosítani, illetve az NSFW tulajdonságot lehet indokolt esetben igazzá tenni (vagy éppen hamissá)
- /api/Admin/GetAllImage
- Az összes feltöltött kép elérhető
- /api/Admin/GetAllUpload
- Az összes feltöltött feltöltés objektum elérhető
- /api/Admin/Login
- Az admin felületbe lehet vele bejelentkezni, melynek működési elve:
- a kérés header-ében a korábban backend által generált tokent (API-SESSION-KEY) elküldjük, a kérés törzsében pedig json formátumban az email-jelszó párost
- ha helyesek az adatok, akkor a backend a mi munkamenetünkhöz hozzárendeli az admin jogokat
- ez azért fontos, mert a fentebb részletezett végpontok is elküldik a headerben a munkamenetünk azonosítóját, és ha nem vagyunk admin jogúak, akkor a kérések (pl. feltöltés törlése, összes feltöltés megtekintése) megtagadásra kerülnek
- Az admin felületbe lehet vele bejelentkezni, melynek működési elve:
- /api/Admin/Logout
- Az admin felületből lehet kijelentkezni (a kérés törzsében elküldjük a munkamenet azonosítónkat) és a backend eltávolítja az admin jogokat ezen azonosítóról
- /api/Admin/IsAdmin
- egy adott munkamenet azonosítóról eldöntni, hogy admin-e vagy sem, és ennek megfelelően egy true vagy false választ ad
- ez technikailag volt szükséges bizonyos funkciók megvalósításakor a kliens alkalmazásban
- egy adott munkamenet azonosítóról eldöntni, hogy admin-e vagy sem, és ennek megfelelően egy true vagy false választ ad
- /api/Admin/GetRegisterKey
- ha új admin felhasználót szeretnénk hozzáadni, akkor egy már meglévő admin felhasználónak kulcsot kell generálnia, hogy lehessen admin felhasználóként regisztrálni
- vannak további végpontok, amik admin joggal is indíthatók, de kimenetük ugyanaz lesz, mintha felhasználóként indítanánk el, ezek a felhasználó API funkcióknál kerülnek majd részletezésre
- /api/Public/EnterPassword/{uploadId}
- ha egy jelszóval védett feltöltéshez (vagy képhez) kapunk linket, akkor ez a végpont fogja a szervernek elküldeni az adott munkamenet által megadni próbált jelszót, mely ha megfelel, hozzáférést fog nyerni az adott feltöltéshez/képhez
- ha nem felel meg, 10 percen belül 3 helytelen próbálkozás után az adott munkamenetet kitiltja
- ha egy jelszóval védett feltöltéshez (vagy képhez) kapunk linket, akkor ez a végpont fogja a szervernek elküldeni az adott munkamenet által megadni próbált jelszót, mely ha megfelel, hozzáférést fog nyerni az adott feltöltéshez/képhez
- /api/Public/PostUpload
- egy feltöltés objektumot tudunk vele feltölteni a képekkel együtt
- /api/Public/PostImage
- egy kép feltöltéséhez szükséges, végül ez nem került felhasználásra
- /api/Public/PostRegister
- ha adminként szeretnénk regisztrálni, ezt ennek a végpontnak a segítségével tehetjük meg, természetesen szükséges ehhez a korábban GetRegisterKey végpont által generált kulcs
- /api/Public/GetImage/{id}
- egy adott egyedi azonosítójú kép tulajdonságait tudjuk lekérdezni (leírás, felnőtt tartalom-e, melyik feltöltéshez tartozik)
- /api/Public/GetImagewithSourceFile/{id}
- egy adott egyedi azonosítójú kép bináris adatát adja vissza, mely alapján maga a kép kirajzolható
- /api/Public/GetImageWithThumbnailFile/{id}
- egy adott egyedi azonosítójú kép bélyegképének (csökkentett felbontás és így csökkentett fájlméret) bináris adatát adja vissza, mely alapján maga a kép (kisebb változata) kirajzolható
- /api/Public/GetUpload/{id}
- egy adott egyedi azonosítójú feltöltést tudunk lekérdezni vele, melyben az összes, az adott feltöltésbe tartozó képek tulajdonságai is elérhetők
- /api/Public/GetUploadWithSourceFiles/{id}
- egy adott egyedi azonosítójú feltöltésnek az összes képének bináris adatát elérhetjük
- /api/Public/GetUploadWithThumbnailFiles/{id}
- egy adott egyedi azonosítójú feltöltésnek az összes képének a bélyegképének a bináris adatát elérhetjük
- új feltöltés, kezdőoldal:
- meglévő feltöltés megtekintése:
- adott képre kattintás után:
- login felület adminra:
- admin felhasználói felület:
- szerkesztés után:
- admin regisztráció:
- A legelején elfelejtettünk .gitignore fájlt betenni, így rengeteg felesleges dolog került fel a repoba
- megoldás: töröltük az egész projektet, újrakezdtük, de előtte betettük a gitignore fájlt
- Eredetileg api projektet kellett volna létrehozni, helyette ASP.NET MVC appot hoztunk létre
- megoldás: a swaggert kézzel üzemeltettük be, macerásnak tűnt
- Adminlogin készítésekor félrecsúszott a kommunikáció a csapatban, és két csapattag készítette egyidőben ugyanazt, commitkor pedig konfliktus keletkezett, mivel bár más módon, de ugyanazon funkciót implementálták, a sessionid között is volt összeakadás
- megoldás: az egyikük egyenként, kézzel megoldotta a conflictot, ellentmondásokat
- frontend: modelek nem jól lettek megírva / nem konzisztensen (kis/nagybetű pl.)
- megoldás: mivel későn jöttünk rá (valószínűleg A és B ember más konvenciókkal dolgozott), ezekkel együtt dolgoztunk tovább, lassabb lett a kliens fejlesztése
- már majdnem készen volt a teljes kliens, amikor egyikünk észrevette, hogy új munkamenetben az egész alkalmazás egy fehér ablak, nem működik
- megoldás: 'API-SESSION-KEY' -t nem szerzünk localStorage -ból, helyette a sessionIdService service-en belül található getSessionId-t meghívja jutunk id-hez, és azt az id-t állítjuk be a kérések header-ébe