poff-bnff / web2021

1 stars 0 forks source link

Moodle logimine Strapi kaudu #486

Open mpennaste opened 2 years ago

mpennaste commented 2 years ago

Sarnaselt nagu kirjeldatud siin

Moodle plugin: Dashboard - Site administration - Plugins - Authentication - External database Strapi enda süsteemis kasutab järgnevat: Link

Moodle plugin aga tundub, et salt'imist ei kasuta? image

Lisaks on meil databaasi ühendus SSL certiga, seda kohta ei leia pluginast hetkel.

mpennaste commented 2 years ago

Peale Mihkli ja Mardiga kõnet, panin siis testkeskkonnas tööle OAuth 2 Google ja FB (sutsu aeglane võib lihtsalt olla, USA server jne), see siis samade FB ja Google appidega mis meil live: https://bit.ly/mpmoodle

Kuigi ma ei tea täpselt kas just see on see mis me soovime, sest ei saanud aru kas Mart mõistis seda pluginat millest ka ülal juttu ning mis kirjelduse järgi tegelt just vastaks kõige paremini meie soovidele, vähemalt minu arusaama mööda, st kasutataks olemasolevaid Strapi kasutajaid ja nende kontode infot (lisainfo siis talletatakse ka Moodles ja uuendatakse vajadusel): image

mitselek commented 2 years ago

Kui me ikkagi soovime oma kasutajatele võimaldada parooliga autentimist, siis on selleks ainus moodus oma oauth teenuse käivitamine, mille vastu siis nii koduka, kui Moodle kasutajad saavad pöörduda.

Seda aitaks teha selle Argo est-o-auth abil; pealekauba oleks sellega kohe olemas ka ID, MID ja SmartID.

jaanleppik commented 2 years ago

Kui kasutaja ostab kursuse, siis:

Igale kurususele loome eraldi rolli (UserRole) strapis

jaanleppik commented 2 years ago

loodud: user collectionis UID väli nimega moodle_id course collectionis UID väli nimega moodle_id

jaanleppik commented 2 years ago

loodud roll Course_01_participant

ja selle alla seotud 2 õigust:

loodud 2 funktsiooni moodle_user_create ja moodle_register_to_course_01

mpennaste commented 2 years ago

Ma siin oma keskkonnas sain lõpuks loogika mingitpidi küll tööle, aga mitmeid küsimusi tekkis.

  1. Praegu toodet ostes veebilehe kaudu, muudetakse toodet, see tähendab Productile lisatakse User külge, mitte vastupidi. Niiviisi aga ei käivitu Useri lifecycle'id. (Ja ei käivitu ka seetõttu, et kasutame ostu jaoks strapi.services mis lifecycleid ei käivita, aga selle saab vahetada strapi.query vastu mis peaks käivitama). Samamoodi ei käivitata Strapis ka product'i poolt toodet lisades/eemaldades tema relatsioonide (nt User) lifecycle'id. Seega peaksime otsustama kumba collectioni poolt Strapis soovime läheneda, kas ainult toote poolt või ainult user poolt, et talle kursuse toodet lisada/eemaldada. Mõlemal juhul pean miskit rohkem või vähem ringi tegema.
  2. Toote all on mittekorratav Product_type, ma eeldaks, et selle pigem võtaks ikkagi tootekategooria alt? Samas seal on ka juba Product_types olemas ja millegi tõttu korratav. Lisaks on tootekategooria alt puudu moodle_id, omale localis lisasin, sest tundus kõige õigem ta siis sealt kätte saada ja hetkel toimib mul see nii, sest viidet kursusele (kus all on moodle_id) sest rägastikust ei leidnud. Saaks küll tootekategooria siduda kursusega vajadusel, aga juba näiteks toote poolt päringuid tehes lähenedes kujuneks asi vb juba liiga sügavaks ja peaks Strapis lisapäringuid tekitama.
  3. Kas ja kust alt saan ajavahemiku (enrolment start, enrolment end) moodle kursusele enrolimiseks? Kas loogikaga, et kui on producti all olemas, siis sealt ja kui seal pole, siis product category ValidityPeriod alt esimese?
jaanleppik commented 2 years ago
  1. küsimusele suunaks vastama Liisi ja Mihkli :)

3.

jaanleppik commented 2 years ago

lisasin ka yhele course'le moodle ID ja yhele CourseEventile sama moodle ID - see on päriselt olemasolev kursus seal, id'ga 2

mpennaste commented 2 years ago

2.

  • Toote alt selle product_type kustutaksin ära, aga tahaks enne kindel olla, et me seda väärtust kusagil ei kasuta. Praegu tabeli kaudu tooteid luues täidame selle väärtusega 'pass'. Nii et võibolla kasutame? Nõus Martiniga, et kuna see on loodud nyyd product_category alla, siis loeks tyypi sealt (pass ja course on praegu tüübid). Äkki Liis oskab kommenteerida näiteks Google tabelisse aruande küsimise juures - kas seal kasutame seda tyypi producti alt?

Tundub mõistlik. Samas miks Product_Category all see korratav on, kas põhjusega?

  • ProductType juures palun veel kriitikat, et kas seal oleks parem kasutada lisaks nimele ka value välja: näiteks name = Pass ja value = pass?

Samuti ilmselt mõistlik, sest seal ei osanudki muud võtta hetkel kui võrrelda ID järgi, et kui sisaldab ID 2, siis järelikult passitüübiga tegu.

  • Kui teha relatsioon Course (CourseEvent) ja Product_Category vahel kahepoolseks? Sest moodle_id käsitsi kopeerimine Moodlest lisaks Course'le (CourseEventile) veel ka Product_Category alla - ei tundu õige ja on ka veaaldis.

Või sisestada ainult Product_Category alla. Kuna ma pärin asja alates Productist siis väga sügavaid andmeid ei saa kätte, sama näiteks juba product_types'iga, mida siis spetsiaalselt pärin, sest ta on relatsioonina. Siin targemad siis otsustagu. Lihtsalt neid relatsioone lisades võib juhtuda, et peab lisapäringuid tegema just selle tarbeks (mis mulle pole probleem, aga Strapi kohta ei tea kui koormus suur).

3.

  • Jah, võiks olla küll sel viisil hierarhiliselt, et kui on üksiku producti (kindla iD'ga toote) all kirjas tema valid_from ja valid_to - siise sealt, muidu Product_Category alt. Küsimus: kas peaks need sama asja kirjeldavad infod viima ka samale kujule? Product_category all on need korratava komponendi sees, Producti all lapikult.

Mina toetaks mõlemal puhul lapikut :)

  • Kui Kursuse juures on see info pigem informatiivne, siis Product_Category juures pigem funktsionaalne, e sealt peaks saama nii selle info, millal kasutaja võib osta kursusele piletit (sales_period) kui ka selle, millal ta seda piletiga saadud õigust kasutada võib (validity_period)

Ma kasutaks jah funktsionaalsuses Product_Category't (st ka moodle_id oleks tore seal) ja super kui ajavahemik lapik oleks, hetkel passi saadavust/ostmisvõimalust kontrollides kasutan nt esimest priceAtPeriod vahemikku mis ette jääb ja millesse ostmisaeg mahub.

LiisKasper commented 2 years ago
  • Toote alt selle product_type kustutaksin ära, aga tahaks enne kindel olla, et me seda väärtust kusagil ei kasuta. Praegu tabeli kaudu tooteid luues täidame selle väärtusega 'pass'. Nii et võibolla kasutame? Nõus Martiniga, et kuna see on loodud nyyd product_category alla, siis loeks tyypi sealt (pass ja course on praegu tüübid). Äkki Liis oskab kommenteerida näiteks Google tabelisse aruande küsimise juures - kas seal kasutame seda tyypi producti alt?

Jah, kui tabelist kirjutame siis anname kaasa tüübi pass, ei pea! Küsimise osas, ei oska 100% vastata, kus võime kasutada aga Mirror eraldi esmapilgul ei tundunud küsivat tüüpi toote all.

  • ProductType juures palun veel kriitikat, et kas seal oleks parem kasutada lisaks nimele ka value välja: näiteks name = Pass ja value = pass?

Kui tundub nii selgem. siis ilmselt võib lisada välja. Koodis ma ei näe vahet, kas küsid ja kontrollida väärtust välja sees v id'd.

Tundub, et Martini vastused ja koosolekul arutatu vastab küs :)

mpennaste commented 2 years ago

Kui tundub nii selgem. siis ilmselt võib lisada välja. Koodis ma ei näe vahet, kas küsid ja kontrollida väärtust välja sees v id'd.

Ses tõesti vist väga vahet pole, jätab ilmselt selle lisavälja siis ära (kui just muud head põhjust sellele pole ja keegi seda vahepeal ei kustuta ja uut ei loo). Ma koodis katsunud mõne kommentaari ka panna, et hiljem ise midagi aru saaks ja ei peaks jooksma Strapisse või kuhugi piiluma, et mis see ID 2 siis nüüd lõpuks oli :)

jaanleppik commented 2 years ago

Testin:

  1. KASUTAJA ALL määrasin Strapis oma kasutajale jaanleppik@me.com külge toote tp19740643, mis kuulub product_categorysse Course_01. Toote alla tekib minu kasutaja kui Owner. Aga Moodlesse minu kasutajat kursuse alla ei teki.
  2. kustutasin oma kasutaja Moodlest yldse ära.
  3. kustutsn seose oma kasutaja ja Course_01 kategooria toote vahel
  4. TOOTE ALL (Tp19740643) määrn tootle omanikuks oma kasutaja jaanleppik@me.com
  5. Kasutaja all on nöha seos tootega, aga ei teki rolli Course_01_participant ega ei teki minu kasutajat Moodlesse
  6. Lisan kasutajale rolli Course_01_participant
  7. Kasutajat moodlesse ei looda

E nagu nähe, ma ei oska testida

jaanleppik commented 2 years ago

dev keskkonnas:

  1. kuna see on live koopia, siis alustasin oma kasutaja alt toodete ja rolli eemaldamisega, samuti kustutasin oma kasutaja Moodlest.
  2. KASUTAJA ALL lisan oma kasutajale toote Course_01 kategooriast ja salvestan.
  3. saan kirja moodlest, et mulle on loodud kasutaja.4.
  4. moodles lisatakse minu kasutaja kursuse alla. Selle kohta ma kirja ei saa.
  5. Strapis minu kasutaja all rolli 'Course_01_participant' ei ilmu
  6. login kirjas saadud konto andmetega Moodlesse, vahetan parooli, ja saan kurusel osaleda.
jaanleppik commented 2 years ago

toote müügi ajal lisaks:

jaanleppik commented 2 years ago

Keiss: Kasutaja on ostnud toote, mis annab õiguse osaleda kursusel, nii meie lehel kui Strapis. Aga tekib olukord, kus meil on vaja peatada (näiteks ajutiselt) tema õigus kursusel osaleda. Siis tal peab säilima ostetud toode - selle eest on ta maksnud, see on tema oma, transaktsiooniga seotud jne. E me ei saa kursusel osalemise õigust ära kaotada temalt toote ära võtmisega. Product'i all on boolean väli ACTIVE. Product'i all on ka väljad valid_from ja valid_to, ja kui need on tyhjad, siis lloetakse need väärtused Product_Category alt. E kasutaja õigus kursusel osaleda tuleb toote kaudu ja tootel on kehtivusaeg ja aktiivsuse boolean väärtus. Neid mõlemaid saaks kasutada kursusel ühe konkreetse kasutaja ühel konkreetsel kursusel osalemise õiguse kontrollimiseks.

Tahame, et kasutaja näeks oma tooteid ja oma kursusi. Ja tahame, et kasutaja näeks, nii neid kursusi, millel osalemiseks on tal õigus, kui ka neid, millele tema õigus on peatatud.

Ettepanek:

jaanleppik commented 2 years ago

Arutame täna, 8. juunil, koosolekul kuidas seda testida.

jaanleppik commented 2 years ago

pikkade nimedega objektide vahelised relatsioonid DEVis - kas saame üle vaadata?

mpennaste commented 2 years ago

See on tegemata või ei tööta, vajab uurimist:

  1. Strapis minu kasutaja all rolli 'Course_01_participant' ei ilmu kontrollida, kas Productile vastava Product_Category all on user_roles relatioonis väärtusi. Kui on, siis lisada need user_role väärtused Producti ostja User'ile
    • [ ] Teha, lisada kõik user_roles product_category alt userile toodet userile omistades.
mpennaste commented 2 years ago

Mulle tundub ka see teema pole veel reaalsuses lahendust leidnud.

Keiss: Kasutaja on ostnud toote, mis annab õiguse osaleda kursusel, nii meie lehel kui Strapis. Aga tekib olukord, kus meil on vaja peatada (näiteks ajutiselt) tema õigus kursusel osaleda. Siis tal peab säilima ostetud toode - selle eest on ta maksnud, see on tema oma, transaktsiooniga seotud jne. E me ei saa kursusel osalemise õigust ära kaotada temalt toote ära võtmisega. Product'i all on boolean väli ACTIVE. Product'i all on ka väljad valid_from ja valid_to, ja kui need on tyhjad, siis lloetakse need väärtused Product_Category alt. E kasutaja õigus kursusel osaleda tuleb toote kaudu ja tootel on kehtivusaeg ja aktiivsuse boolean väärtus. Neid mõlemaid saaks kasutada kursusel ühe konkreetse kasutaja ühel konkreetsel kursusel osalemise õiguse kontrollimiseks.

Tahame, et kasutaja näeks oma tooteid ja oma kursusi. Ja tahame, et kasutaja näeks, nii neid kursusi, millel osalemiseks on tal õigus, kui ka neid, millele tema õigus on peatatud.

Ettepanek:

  • lisada kasutaja alla lisaks My_products, My_films, My_screenings ja My_events'ile ka My_courses (CourseEvents). -- Kas see peaks olema relatsioon, nagu My_products või korratav komponent nagu teised (filmid, seansid ja evendid)?
  • näidata kasutajale kõiki tema tooteid
  • näidata kasutajale kõiki tema kursusi -- ideaalis näidata kursuste juures ka nende 'kehtivust' - sest need on alati ajalised - on möödunud kursused, käimasolevad ja tulevad kursused. E ideaalis tahaks markeerida aktiivseid ja mitteaktiivseid kursusi.
jaanleppik commented 2 years ago

Testisin LIVEs

mpennaste commented 2 years ago

Rollide osas, et kas lihtsalt lisamisest piisab või jääb kasutaja ka mingi hetk rollist ilma, ala kui toode vahetab omanikku vms?

Lisaks see omanikuvahetuse asi, arve jms osas vist tegime eraldi, st owner väli pole enam see mis kajastab ostjat vaid konkreetset toote praegust omanikku?

jaanleppik commented 2 years ago

Rollide osas, et kas lihtsalt lisamisest piisab või jääb kasutaja ka mingi hetk rollist ilma, ala kui toode vahetab omanikku vms?

Jah, kui roll tuleb toote kaudu ja toode vahetab omanikku, e kasutaja pole eile ostetud toote omanik näiteks täna, siis peaks ka roll kaduma. Hetkel on see passide ostul ja ehk ka kursustel / Industry'l osalemisel toimuv, kui ma ostja palvel määran tootele uue omaniku.

Lisaks see omanikuvahetuse asi, arve jms osas vist tegime eraldi, st owner väli pole enam see mis kajastab ostjat vaid konkreetset toote praegust omanikku?

Selleks tegime jah eraldi issue: https://github.com/poff-bnff/web2021/issues/514

mpennaste commented 2 years ago

Rollidega lõpuks pea tossas, aga üht juhtumit ei saagi hetkel nagu lahendada. Aga laias laastus peaks töötama.

Siin siis ainuke probleem selles, et kui keegi peaks käsitsi lisama kasutajale mingi rolli mis võib kaasneda hiljem ka mõne tootega, siis tootest ilma jäädes kaotab ta selle rolli, mis siis, et see oli tal ka juba kellegi poolt käsitsi ilma tooteta lisatud.

St näide:

  1. Jaan lisab Martinile käsitsi user all rolli "course_1_participant"
  2. Hiljem Martin ostab/saab ka kontole testpassi millega kaasneb sama roll "course_1_participant"
  3. Kuna Strapis ei saa kasutajale kaks korda sama rolli omistada (st array saab olla vaid [ 1 ], mitte aga [ 1, 1 ]), siis kui nüüd Martin müüb oma passi maha, kingib ära vms, siis jääb ta rollist "course_1_participant" igal juhul ilma.

St hetkel võtame kasutaja õigused, lahutame sealt kasutajalt eemaldatud toodetega seotud õigused ning lisame omakorda kõik kasutaja hetkel olemasolevate toodetega seotud õigused.