- Architect: Török Tamás
- SCRUM Master: Szanyi Szabolcs
- Product Owner: Szalai István
- Fejlesztő: Béres Benjámin
- Fejlesztő: Schaffer Tamás
- Fejlesztő: Molnár Ákos
Backend elindításához szükségünk van egy Visual Studio-ra vagy bármilyen IDE-ra vagy kód editorra.
Frontend elindításához szükségünk van egy Angular CLI-re. Amennyiben először húzzuk le a repository-t, akkor szükség van az "npm install" parancsra, majd ezt követően pedig az "ng serve" utasítást kiadva a kliensünk le build-elődik. Ha nem adtunk meg egyéb portot, akkor a klienst alapértelmezetten a http://localhost:4200 címen érjük el.
User
- TestAdmin1
- Email: TestAdmin1@uni-obuda.hu
- Password: TestAdmin1!
- Role: Admin
- TestAdmin2
- Email: TestAdmin2@stud.uni-obuda.hu
- Password: TestAdmin2!
- Role: Admin
- TestUser1
- Email: TestUser1@stud.uni-obuda.hu
- Password: TestUser1!
- TestUser2
- Email: TestUser2@uni-obuda.hu
- Password: TestUser2!
- TestUser3
- Email: TestUser3@stud.uni-obuda.hu
- Password: TestUser3!
- TestUser4
- Email: TestUser4@gmail.com
- Password: TestUser4!
- TestUser5
- Email: TestUser5@gmail.com
- Password: TestUser5!
Group
- Oe
- Creator: TestAdmin1
- EmailDomains: uni-obuda.hu, stud.uni-obuda.hu
- OeStud
- Creator: TestAdmin2
- EmailDomains: stud.uni-obuda.hu
- Random
- Creator: TestUser2
- Members: TestUser4, TestUser5, TestUser3
- Empty
- Creator: TestUser1
-
- Get
- /api/app/group: Pagináltan lekérdezo az összes Group-t a megadott keresési argumentumok alapján.
- /api/app/group/{id}: Lekérdez egy Group-t id alapján.
- /api/app/group/{id}/explicit-members: Megadja az adott id-jű Grouphoz tartozó Memberként hozzáadott Userek paginált listáját a keresési argumentumok alapján.
- /api/app/group/{id}/group-members: Megadja az adott id-jű Grouphoz tartozó összes User paginált listáját, beleértve a Membereket és az EmailDomaint is, a keresési argumentumok alapján.
- /api/src/group/{id}/image: Lekéri az adott id-jű Group képét.
- /api/src/group/{id}/thumbnail-image: Lekéri az adott id-jű Group thumbnail képét.
- /api/src/group/default-image: Lekéri a Groupok alapértelmezett képét.
- Post
- /api/app/group: Létrehoz egy Group-t. Csak bejelentkezett felhasználó hozhat létre.
- /api/app/group/upload-default-image: Feltölt egy alapértelmezett képet a Groupokhoz. Csak admin jogosultságú felhasználó hajthatja végre.
- Put
- /api/app/group/{id}: Módosít egy Group-t. Csak a létrehozója hajthatja végre.
- Delete
- /api/app/group/{id}: Kitöröl egy Group-t. Csak a létrehozója hajthatja végre.
- Get
-
- Get
- /api/app/oe-tube-user: Pagináltan lekérdez több User-t a megadott keresési argumentumok alapján.
- /api/app/oe-tube-user/{id}: Lekérdez egy User-t id alapján.
- /api/app/oe-tube-user/{id}/groups: Pagináltan lekérdezi az összes Grouput, amihez User tartozik a keresési argumentumok alapján.
- /api/src/oe-tube-user/default-image: Lekéri a Userek alapértelmezett képét.
- /api/src/ou-tube-user/{id}/image: Lekéri az adott id-jű User képét.
- /api/src/ou-tube-user/{id}/thumbnail-image: Lekéri az adott id-jű User thumbnail képét.
- Post
- /api/app/oe-tube-user/upload-default-image: Feltölt egy alapértelmezett képet a Userekhez. Csak admin jogosultságú felhasználó hajthatja végre.
- Put
- /api/app/oe-tube-user/{id}: Módosít egy User profilját. Csak a hozzátartozó felhasználó hajthatja végre.
- Get
-
- Get
- /api/app/playlist: Pagináltan lekérdezi az összes kérelmezőnek elérhető Playlist-t a megadott keresési argumentumok alapján.
- /api/app/playlist/{id}: Lekérdez egy Playlist-t id alapján és ellenőrzi, hogy a kérelmezőnek van-e hozzáférése.
- /api/app/playlist/{id}/videos: Lekérdezi pagináltan az összes adott id-jű Playlisthez tartozó, kérelmezőnek elérhető videót a keresési argumentumok alapján.
- /api/src/playlist/{id}/image: Lekéri az adott id-jű Playlist képét és ellenőrzi, hogy a kérelmezőnek elérhető-e.
- /api/src/playlist/{id}/thumbnail-image: Lekéri az adott id-jű Playlist thumbnail képét és ellenőrzi, hogy a kérelmezőnek elérhető-e.
- /api/src/playlist/default-image: Lekéri a Playlistek alapértelmezett képét.
- Post
- /api/app/playlist: Létrehoz egy Playlist-t. Csak bejelentkezett felhasználó hozhat létre és csak saját videókat adhat hozzá, mint elem.
- /api/app/playlist/upload-default-image: Feltölt egy alapértelmezett képet a Playlistekhez. Csak admin jogosultságú felhasználó hajthatja végre.
- Put
- /api/app/playlist/{id}: Módosit egy Playlist-t. Csak létrehozója hajthatja végre és csak saját videókat adhat hozzá, mint elem.
- Delete
- /api/app/playlist/{id}: Kitöröl egy Playlist-t. Csak a létrehozója hajthatja végre.
- Get
-
- Get
- /api/app/video: Pagináltan lekérdezi az összes kérelmezőnek elérhető Video-t a megadott keresési argumentumok alapján.
- /api/app/video/{id}: Lekérdez egy Video-t id alapján és ellenőrzi, hogy a kérelmezőnek van-e hozzáférése.
- /api/app/video/{id}/access-groups: Lekérdezi pagináltan az összes adott id-jű Video-hoz tartozó Group-t a keresési argumentumok alapján és ellenörzi, hogy a kérelmezőnek van-e hozzáférése.
- /api/app/video/{id}/index-images: Lekérdezi az adott id-jű Video-hoz tartozó indexképeket. Csak a létrehozója fér hozzá.
- /api/src/video/{id}/{width}x{height}/{segment}.ts: Lekéri az adott id-jű Video-hoz tartozó HLS szegmenst felbontás(widthxheight) és sorszám(segment) alapján. Ellenőrzi, hogy a kérelmezőnek van-e hozzáférése.
- /api/src/video/{id}/{width}x{height}/list.m3u8: Lekéri az adott id-jű Video-hoz tartozó HLS listát felbontás(widthxheight) alapján. Ellenőrzi, hogy a kérelmezőnek van-e hozzáférése.
- /api/src/video/{id}/index_image: Lekéri az adott id-jű Video-hoz tartozó, beállított indexképet. Ellenőrzi, hogy a kérelmezőnek van-e hozzáférése.
- /api/src/video/{id}/index_image/{index}: Lekéri az adott id-jű Video-hoz tartozó indexképet index alapján. Csak a Video létrehozója fér hozzá.
- Post
- /api/app/video/{id}/continue-upload: Feltölti a kliens által átméretezett fájlt az adott id-jű Video-hoz és leellenörzi a tartalmát. Ha az összes kiosztott feladat teljesült a szerver elkezdi feldolgozni a feltöltéseket. Csak a Video létrehozója folytathatja a feltöltést és csak mp4 formátum támogatott.
- /api/app/video/start-upload: Feltölti a forrásfájlt és ellenőrzés után a szerver kiosztja az átméretezési feladatokat a kliensnek. Csak bejelentkezett felhasználó tölthet fel és csak mp4 formátum támogatott.
- Put
- /api/app/video/{id}: Módosit egy Video-t. Csak a létrehozója hajthatja végre.
- Delete
- /api/app/video/{id}: Kitöröl egy Video-t. Csak a létrehozója hajthatja végre.
- Get
Bejelentkezéstől függetlenül hozzáfér a felhasználó ehhez az oldalhoz.
Bejelentkezett felhasználó nem csak a publikus videókhoz fér hozzá, hanem minden olyan videóhoz, amihez jogosultsága van. Az alábbi képen egy extra videóval bővül ki a lista, amely a felhasználóhoz tartozó privát videó. Továbbá megjelenik egy extra tab (Upload), ahol a felhasználónak lehetősége van feltölteni videót.
Ezen a felületen lehet feltölteni a kiválasztott videó fájlt. A Name mező kitöltése kötelező, viszont a Description mező opcionális. Ezen két paraméteren kívül értelemszerűen ki kell választani a videófájlt a SELECT FILE gomb megnyomása után. Van lehetőség a láthatóságot is kiválasztani (Private, Public, Group). A group esetében egyénileg elkészített csoportok közül lehet választani.
Amennyiben a felhasználó megnyomja a SUBMIT gombot, akkor a kovenrzió, majd feltöltés megkezdődik. A konverzió állapotát egy pop-up ablakon lehet nyomonkövetni.
A kiválasztott videót lehet megnézni, illetve a videó jobb oldalán minden egyéb videó klistázásra kerül, amihez a felhasználónak jogosultsága van. Amennyiben egy lejátszási listához tartozik a videó, akkor a jobb oldalon az adott lejátszási többi tartalma jelenik meg.
Ezen a felületen lehet módosítani a feltöltött videó adatait
Kilistázásra kerül minden playlist amihez hozzáfér a felhasználó. Amennyiben a felhasználó készítette a listát vagy van benne olyan tartalom amihez jogosultsága van a felhasználónak, akkor az a lejátszási lista megjelenik.
Lejátszási listákat lehet létrehozni, a megfelelő adatok megadása után. Ezen adatok közül a Name az kötelező, viszont a Description és a képfeltöltés opcionális. Amennyiben nem ad meg a felhasználó képet, akkor egy alapértelmezett kép, lesz a lejátszási lista indexképe. Létrehozáskor azonnal tudunk videókat is hozzáadni a listához. Ezeket a videókat egy pop-up ablakon keresztül tudjuk hozzáadni a listához.
A kiválaszott lejátszáis lista adatai (indexkép, name, description) és a tartalma jelenik meg.
A lejátszási lista minden paramétere edit-elhető, illetve a Delete gomb megnyomásával törölhető a lista.
Az összes létrehozott csoport kilistázásra kerül és a a felhasználó által létrehozott csoportok szerkeszthetőek is.
A Name paraméter kivételével minden egyéb paraméter opcionális. Fel lehet tölteni képet, viszont, ha nem tölt fel képet a felhasználó, akkor egy alapértelmezett indexkép rendelődik a csoporthoz. A megszokott stuktúra alapján egy pop-up ablakban lehet kiválasztani a csoporthoz tartozó felhasználókat. Ezen lépések utána SUBMIT gomb megnyomása után a csoport elkészül.
A kiválasztott csoport adatai jelennek meg, illetve az oda tartozó felhasználók kerülnek kilistázásra.
A kiválasztott csoport szerkeszthető.
- Új keretrendszer megismerése
- Bejelentkezés hosszú ideig nem működött kliens oldalon, mert az environment.*.ts-ben az oAuthConfig "issuer" fieldjében a backend címének végéről lemaradt egy per jel.
- ABP seedelés migráláskor rendszeresen hibára futott. A csoportok seedelésénél egy olyan több darabból álló(split query) lekérdezés volt használva, ami paginálta(skip,take) az adatokat, de nem határozta meg a rendezés módját. https://learn.microsoft.com/hu-hu/ef/core/querying/single-split-queries#split-queries.
- Nem lehetett 3 karakternél hosszabb nevű lejátszási listát létrehozni, mert a playlist adatbázis konfigurációjában véletlenül fel volt cserélve a minimális és a maximális hossz.
- Lejátszási listák videói nem az eredeti sorrendben jelentek meg. Módosításkor a kliens csak a videók id-jait küldi el, amikből egy WHERE...IN-nek megfelelő LINQ lekérdezéssel jut hozzá a szerver a valódi entitásokhoz. Ezzel az a probléma, hogy az adatok lekérésének a sorrendje nem a bemeneti paraméterek sorendjétől függ, hanem ahogy épp az adatbázis "megtalálja" őket, szóval találatokat vissza kellett rendezni, mielőtt tovább lettek küldve update-re.
- Az abp és a devex megjelenítés összeolvasztása nem volt zökkenőmentes
- Videó lejátszásánál kezelni kellett azt, hogy a video seeker egyszerre mutassa azt, hogy hol tart a jelenlegi lejátszás, és kézzel is állítható legyen (nehéz volt megkülönböztetni, hogy a seeker állása azért változott meg, mert a videó előrehaladt, vagy mert a felhasználó beletekert)
- Többszöri videómegnyitáskor nem állt le az előző videó, ezért többszörösen is hallani lehetett a hangot.
- A csapatból valaki által létrehozott komponens újrafelhasználása nehézkes volt néha, mivel elég komplexekre sikeredtek és amennyiben nem te írtad, akkor nehézkes volt átlátni.
- Project kezdetén nagyon sok időbe telt, mire sikerült egy olyan FFMPEG WASM javascript könyvtárat találni, ami nem csak szerveroldali, hanem böngészős környezetben is működik: "@ffmpeg/core": "^0.11.0", "@ffmpeg/ffmpeg": "^0.11.5",
- Kliens kilistázta a videókat, de néhánynál az indexkép nem jelent és egyénileg sem lehetett elérni őket. Egyes videóknál a gond a hibás listázó SQL lekérdezés volt backend oldalon, így a felhasználónak olyan videókat is kilistázott, amihez valójában nem volt hozzáférése. Emellett voltak olyan videók is, amihez viszont volt és ugyanúgy nem jelentek meg a tartalmak. Itt a háttérben az állt, hogy a frontend a beágyazott tartalmaknál nem küldte el az azonosító tokent. Végül a képeknél egy pipe, míg a HLS streamingnél a helyes XMLHttpRequest konfiguráció megoldotta a problémát.