BE - MongoDB + express.js

Programovacie jazyky, rady, poradňa...
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 871
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

BE - MongoDB + express.js

Príspevok od používateľa Laster »

Ahojte,

robím si momentálne projekt BugTracker. Zatiaľ BE, keď to bude, tak na FE bude použitý React.
Mám vytvorenú jednu schému pre user a potom druhú pre projekt.

A keď vytváram projekt alebo ho updatujem, tak by som tam chcel pridať existujúceho užívateľa, ktorý je uložený v databázy.
Ale keď ich tam mám napríklad 10, tak na projekt by som chcel vybrať iba napríklad 3, nie všetkých.
Ako by ste ku tomu pristupovali?

Napáda, že v schéme ProjectSchema pridám users: type bude array.
Cez req.params.id vytiahnem jedného užívateľa, uložím do premennej a pridám ho do tej array, ale to mi na jeden request pridá iba jedného používateľa.

alebo
cez req.body pridám users [id1,id2] a validujem či existujú ak áno tam ich tam pridá.

vďaka
aacid
Hardcore addict
Hardcore addict
Príspevky: 5779
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

neviem co je presne tvojim cielom, pokial je to naucit sa technologie, tak ok, ale aj tak v dnesnej dobe neodporucam cokolvek vytvarat uplne od zakladu. bug trackerov najdes na internete hromadu, aj open source. nech sa budes snazit ako chces, velmi mala sanca ze dosiahnes (a budes vediet udrzat) taku robustnost a bezpecnost ako uz existujuci open source projekt.
ked uz tak by som si radsej nasiel nejake existujuce riesenie na githube a cokolvek co ti tam chyba dokodil priamo do toho.

a pokial to mas ako projekt s ktorym sa chces naucit technologie tak ani v tom pripade nemusis robit vsetko rucne. na komunikaciu s mongodb pouzi mongoose, 100x jednoduchsie ako vsetko pisat rucne, tak to nerobi nikde.
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 871
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

Re: BE - MongoDB + express.js

Príspevok od používateľa Laster »

Cieľ mám použiť mernstack, urobiť projekt a potom ísť s ním na pohovor. Lebo už myslím dosť bolo kurzov a podobne... A toto mi príde ako taký komplexný projekt, kde dám všetko dokopy to čo viem a fajn sa to bude prezentovať.

Mongoose používam, toto je také odrazové video ako by to malo plus mínus vyzerať... okolo 50 sekundy vyberá užívateľov do projektu.

Login a register aj zobrazenie userov a zmena údajov už mám hotovú, teraz riešim vytváranie projektu a tam by som chcel pripojiť existujúcich userov, ale iba tých čo vyberiem, nie všetkých.


a vďaka skúsim pohľadať na githube.

Autoeditácia príspevku po 22 min 31 sek:
Akurát som to takto urobil, ale príde mi to ako mess.

Kód: Vybrať všetko

const createProject = async (req, res) => {
  const { users: usersId } = req.body

  for (let i = 0; i < usersId.length; i++) {
    const userIdExist = await User.findOne({ _id: usersId[i] })
    if (!userIdExist) {
      throw new CustomError.NotFoundError(
        `User with id ${usersId[i]} does not exist`
      )
    }
  }
  req.body.user = req.user.userId

  const project = await Project.create(req.body)

  res.status(StatusCodes.CREATED).json({ project })
}
aacid
Hardcore addict
Hardcore addict
Príspevky: 5779
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

nejak stale nerozumiem ze kde je tvoj problem.

mas objekt projekt, ktory ma zoznam userov, teda ich idciek.
ked vytvaras novy projekt, vyberies si vsetkych userov zo zoznamu a na backende ich ulozis.
ten kod co si sem pastol je v pohode, otazne je ci musis robit tu validaciu mas alebo to vie aj mongoose spravit za teba.

k povodnej otazke, ked chces ulozit viac uzivatelov tak logicky nemozes vyberat iba jedneho, ze?

podla mna tvoj hlavny problem je ze robis iba backend... podla mna ovela praktickejsie je robit backend aj frontend naraz. skratka navrhnes stranku na vytvorenie noveho projektu, pokial tam potrebujes vytiahnut zoznam uzivatelov, tak spravit http get endpoint na backende a vytiahnes ich. ked budes mat vsetko co potrebujes tak to mozes poslat na backend a vtedy vytvoris zase http post endpoint kde to vsetko ulozis.
potom by si podla mna nemal taketo problemy.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2286
Registrovaný: 08 máj 2006, 1:34

Re: BE - MongoDB + express.js

Príspevok od používateľa *****HERO***** »

nie je trochu neekologicke dopytovat sa na databazu v cykle po jednom id? nebolo by lepsie tam jednym dopytom poslat cele pole a az vysledok pripadne precyklit? predsa len je to dost okrajovy scenar (zmanipulovany vstup/user bol medzitym vymazany), ze to id v databaze nebude, tak mozno by si stacilo len vytiahnut pocet, porovnat so vstupom a v pripade neekvality nejak obecne vyfakovat usera.

tymto cyklom tiez nezvalidujes, ked ti z requestu pride [id1,id1,id1,id2,id3 ..] .. v mongu sa ti asi potom vytvori viacnasobne naviazanie na toho isteho usera

inak neviem co dalsie na tom komentovat, mozno len "req.body.user = req.user.userId" vyzera trochu fishy
ropman
Medium Professional
Medium Professional
Príspevky: 1237
Registrovaný: 12 apr 2010, 21:07

Re: BE - MongoDB + express.js

Príspevok od používateľa ropman »

S mongodb som dlho nerobil a uz si to moc ani nepamatam ale ta validacna logika by nemala byt v nejakom controlleri resp. v metode ktora riesi http request a response, ale bud na urovni databazy alebo ak na aplikacnej urovni tak v nejakom modeli alebo inej metode, ktora sa bude dat pouzit aj v inych requestoch. Lebo teraz ak by si chcel vytvorit projekt aj niekde inde tak to nemas ako elegantne urobit bez toho refactoringu, iba copy-paste.

To ze getujes userov z databazy po jednom je tiez trochu otazne ale v pripade mongodb tam asi nebude velky performance overhead oproti tomu keby si to getol vsetko naraz. Ale je mozne ze dost ludom sa pacit nebude, ked pocet dopytov na db je zavisly od velkosti vstupu.
aacid
Hardcore addict
Hardcore addict
Príspevky: 5779
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

ako pise HERO, miesto toho aby si to robil po jednom vies pouzit v mongoose $in operator, kde ti najde vsetky objekty ktorych id-cko je v array.

ropman:
tak on len overuje ci ten user existuje, to mi nepride ako nieco co sa oplati extrahovat do samotnej classy/funkcie/controlleru.
otazne je hlavne ci to vobec potrebuje, s nosql databazami nemam az take skusenosti (je to fuj podla mna :D) ale myslim ze aj v mongodb by si mal vediet robit nejake vazby ci foreign keys. v idealnom pripade to mas spravene tak ze z requestu vytiahnes IDcka userov, vlozis ich do array objektu a nasledne ked sa ho pokusis ulozit do databazy tak dostanes vynadane ze taky user neexistuje.
ropman
Medium Professional
Medium Professional
Príspevky: 1237
Registrovaný: 12 apr 2010, 21:07

Re: BE - MongoDB + express.js

Príspevok od používateľa ropman »

Momentalne ano, ale v buducnosti moze pri vytvarani projektu pribudnut aj nejaka dalsia logika alebo poziadavka na vytvaranie projektu aj z inych requestov. V idealnom pripade je takyto check na referencnu integritu dobre zabezpecit na strane DB, to ano, ale tiez neviem ci mongodb take nieco ma.
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 871
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

Re: BE - MongoDB + express.js

Príspevok od používateľa Laster »

Ahojte sorry, ze som sa neozval ten kod hore tam je stale, aj ked uz je zbytocny...
Ak by mal niekto cas bol by som rad za nazory...
Zajtra skusim posielat zivotopisy, tak snad sa niekde na juniora zadari.

Chyby co viem css nie je uplne responzivne, ked som to dal live som zistil, ze som to skorej na tablety urobil..., dajake funkcionalita este chybaju ale to uz by som riesil to iste a popravde uz ma uplne nebavi na tomto robit. Potom typescript vsade chcu co pozeram...
A chcel by som tam este nahodit aspon dajake testy - asi cypress alebo jest. Ale uplne to nemam nastudovane zatial.



Autoeditácia príspevku po 8 min 37 sek:
A btw aacid mal si urcite pravdu mal som robit Fe aj Be naraz :)
aacid
Hardcore addict
Hardcore addict
Príspevky: 5779
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

bug:
mas poprehadzovane hlavicky v detaile ticketu. vid prilohu.

nech kliknem na akykolvek projekt, stale vidim tie iste tickety. vypada to ze nemas aktualne ziadnu vazbu medzi projektami a ticketmi. preco ich potom zobrazujes spolocne na jednom mieste?
dalej na co je dobry taky ticket? ked si pozriem ako fungujeme my v jire (asi najznamejsi issue tracker), description vacsinou predstavuje paragrafy textu, musi byt vizualne inde ako jednoslovny status ci priorita. tiez velmi podstatna vec (hlavne ked uz tam mas team memberov) je osoba ktora na bugu pracuje (assignee), vidim ze tam mas stlpec author ale to nie je az take podstatne ako kto na tom pracuje (mimochodom autora ti to tiez nezobrazuje)...
tiez by som tam pridal komentare, ked uz mas userov, mas tickety, pridat komentare pod tickety sa tak nejak pyta.

uprimne, na tvojom mieste by som toto na pohovore radsej neukazoval. len by som povedal ze mas iste skusenosti s express a reactom a pokial budu chciet zistit co vies tak nech si ta radsej oskusaju.
lebo toto ked som otvoril (stacil len ten github projekt) tak to vypada ako keby si zacal robit nejaky tutorial co si nasiel na internete a (po tom co som videl samotnu appku) si ho ani nedokoncil.

btw este drobna idea, ked uz to mas na githube, tak sa nauc s githubom pracovat, miesto toho aby si daval co treba spravit do README.md ako nejake TODO, tak si vytvor issues pre kazdy bug, pre vsetko co chces dokoncit.
ja osobne aj ked robim na nejakych mensich sukromnych projektoch sam tak si vsetko trackujem na githube, vytvorim si tam projekt a vsetky features a bugy (na to si vytvoris labely) mam v issues, ktore potom referencujem v commitoch a dokonca si ich aj komentujem ked na nieco nechcem zabudnut.
dalsia vec na co by som sa casom pozrel je github actions co ti umozni napriklad automaticky po kazdom pushi zbuildovat projekt a skopirovat ho trebars na to heroku.

to su veci ktore su nie len uzitocne pre teba ale na pohovore sa tym mozes pochvalit ze ovladas nastroje developerske.

napisal si ze je to nedokoncene lebo ta na tom uz moc nebavi robit. neviem ci som to pisal uz vyssie ale toto je presne problem takehoto kodenia len tak aby si kodil. pokial vies ze vysledok aj tak nebudes pouzivat ty ani nikto iny, tak preco sa snazit?
podla mna ovela lepsie ako vymyslat si vlastne projekty by bolo zacat prispievat do nejakeho open source projektu. najdi si nieco so sa ti paci a mas pocit ze by si tam vedel nieco pridat a zacni na tom robit. ono to aj pekne vypada na pohovore ked ukazes svoj github profil a mas tam rozne projekty.
hlavne hned uvidis ako ma taka aplikacia vypadat a ako ma vypadat kod.
tiez je to trochu blizsie realnej praci ako toto, lebo myslim ze je celkom mala sanca ze nastupis niekam ako junior developer a dostanes za ulohu vytvorit komplet backend/frontend aplikaciu od zaciatku do konca.
skor budes na zaciatok dostavat ulohy v style "tuto mame bug ze sa nam zle zobrazuju texty na tlacitku ak ma uzivatel madarske lokale, fixni to".
Prílohy
Capture.PNG
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 871
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

Re: BE - MongoDB + express.js

Príspevok od používateľa Laster »

bug:
mas poprehadzovane hlavicky v detaile ticketu. vid prilohu.
ďakujem, fixnem to.
nech kliknem na akykolvek projekt, stale vidim tie iste tickety. vypada to ze nemas aktualne ziadnu vazbu medzi projektami a ticketmi. preco ich potom zobrazujes spolocne na jednom mieste?
Väzba je, že ticket má projekt ID, ktorý ti pridá automaticky keď si v danom projekte a vytváraš ticket. Len ešte zobrazenie som neimplementoval.
dalej na co je dobry taky ticket? ked si pozriem ako fungujeme my v jire (asi najznamejsi issue tracker), description vacsinou predstavuje paragrafy textu, musi byt vizualne inde ako jednoslovny status ci priorita. tiez velmi podstatna vec (hlavne ked uz tam mas team memberov) je osoba ktora na bugu pracuje (assignee), vidim ze tam mas stlpec author ale to nie je az take podstatne ako kto na tom pracuje (mimochodom autora ti to tiez nezobrazuje)...
tiez by som tam pridal komentare, ked uz mas userov, mas tickety, pridat komentare pod tickety sa tak nejak pyta.
Ok, description dám vedľa ostatných dát a zmenim input na text area.
Autora som akurát včera vymazal, lebo tiež mi to nedávalo zmysel, len nadpis som zabudol dať preč.
Momentálne to je tak, že vidíš iba projekty, do ktorých si priradený, ak by si sa registroval na novo, tak by si nemal vidieť nič.
uprimne, na tvojom mieste by som toto na pohovore radsej neukazoval. len by som povedal ze mas iste skusenosti s express a reactom a pokial budu chciet zistit co vies tak nech si ta radsej oskusaju.
lebo toto ked som otvoril (stacil len ten github projekt) tak to vypada ako keby si zacal robit nejaky tutorial co si nasiel na internete a (po tom co som videl samotnu appku) si ho ani nedokoncil.
Toto vieš prosím ťa rozpísať prečo to tak vyzerá, lebo celé som to robil sám, je tam pár vecí z dajakých kurzov, ale aj tak som to musel prerábať, aby to fungovalo ako ja chcem.
A druhá vec čo im mám ukázať? :D, že som neurobil nič mi príde určite horšie a pozeral len dajaké videá.
btw este drobna idea, ked uz to mas na githube, tak sa nauc s githubom pracovat, miesto toho aby si daval co treba spravit do README.md ako nejake TODO, tak si vytvor issues pre kazdy bug, pre vsetko co chces dokoncit.
ja osobne aj ked robim na nejakych mensich sukromnych projektoch sam tak si vsetko trackujem na githube, vytvorim si tam projekt a vsetky features a bugy (na to si vytvoris labely) mam v issues, ktore potom referencujem v commitoch a dokonca si ich aj komentujem ked na nieco nechcem zabudnut.
dalsia vec na co by som sa casom pozrel je github actions co ti umozni napriklad automaticky po kazdom pushi zbuildovat projekt a skopirovat ho trebars na to heroku.

to su veci ktore su nie len uzitocne pre teba ale na pohovore sa tym mozes pochvalit ze ovladas nastroje developerske.
ďakujem toto naštudujem.

Nevyjadril som sa úplne dobre, nie že nebaví. Ale pre príklad, ak by user videl, iba tickety, do ktorých je priradený, tak je to presne taká istá implantácia ako keď vidí teraz user iba projekty, kde je priradený.
Preto napríklad radšej by som tam implementoval testy momentálne, ktoré neviem urobiť, ale keď ich pár urobím, tak budem vedieť niečo nové.
Z toho pohľadu to nemám chuť dokončovať.

A neberiem to tak, že to bolo, len aby som kodil. Veľa bugov som musel fiknúť, na veľa vecí hľadať riešenia, správne googliť, lebo to som predtým úplne nevedel, naučil som čítať dokumentáciu.
Cieľ nebol urobiť kópiu jiri napríklad, kde je všetko funkčné. Skorej urobiť fullstack app, naučiť sa to prepojiť, zobraziť čo chcem, poslať dáta do databázy, pracovať s hookmi a states v reacte, rozbiť appku na componenty a tak
Ale neviem možno to vidím zle.

Tie open source pozriem, toto som zatiaľ našiel pre tých čo chcú prispievať prvýkrát https https://www.firsttimersonly.com/

A fakt ďakujem, určite ti to dalo veľa práce mi odpísať :)
aacid
Hardcore addict
Hardcore addict
Príspevky: 5779
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

po mne na pohovoroch nikto nikdy nechcel nejake portfolio. ono to ani nema moc zmysel, pretoze pokial si pracoval v nejakej firme, tam si nieco vytvoril tak je to aj tak vlastnictvo tej firmy a vynasat produkty ci zdrojovy kod mimo firmy, nebodaj dokonca priamo konkurencii asi nie je uplne ok.
portfolio ma mozno zmysel ak chces pracovat ako freelancer alebo si chces zalozit vlastne podnikanie. ale aj tam nebude nikoho zaujimat nejaka nedokoncena aplikacia ktoru nikto nepouziva.

kazdy kto dokoncil vysoku skolu musi mat takychto projektov zopar. minimalne bakalarku a diplomovku ale velmi pravdepodobne hromadu dalsieho kodu co robil na rozne predmety.
ale malokedy je to nieco co si budes tahat na pohovor ze "aha toto som spravil"...

neviem, mozno sa vyjadri niekto iny ale ja by som to na pohovore neukazoval. mozno ak sa budu vyslovene pytat ale svojvolne sa tym chvalit... neviem ci by to bolo na nieco dobre.
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 871
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

Re: BE - MongoDB + express.js

Príspevok od používateľa Laster »

No, ale to je to ja som nepracoval v IT firme, tak nemám za sebou iné projekty alebo skúsenosti odtiaľ.

Viem, že od brata niekde chceli ukážku práce a niekde nie aj keď už pár rokov robil programátora. Záleží asi od firmy a od ich politiky.

Každopádne ozval som na dve ponuky tak uvidím, keď tak potom napíšem, ak pošlú zadanie rád ho vypracujem.

A určite sa tým nechcem chváliť viem, že to má veľa chýb, ale pre mňa to je dobrý štart. Keby na tomto nerobím, tak polke vecí nechápem ako fungujú.
aacid
Hardcore addict
Hardcore addict
Príspevky: 5779
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

s tym samozrejme suhlasim, je dobre ze si to spravil. akurat si myslim ze je to nieco co si robil pre seba aby si sa to naucil, nie aby si to ukazoval na pohovoroch.
aj to je v poriadku ze nemas pracovnu historiu, ved sa ides hlasit na junior poziciu, tam to nikto neocakava. tym som chcel iba povedat ze to nie je uplne bezny trend aby si na full time poziciu programatora nosil portfolio. a uz vobec nie taketo nieco.

inak my sme mali hromadu otvorenych pozicii, zial teraz nam kvoli aktualnej situacii na trhu globalne stopli akykolvek hiring, inak by som ta odporucil :D
ked zase nejake pozicie otvorime tak sa ozvem ci este hladas pracu.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 5170
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: BE - MongoDB + express.js

Príspevok od používateľa harrison314 »

aacid napísal: 17 aug 2022, 22:19 s tym samozrejme suhlasim, je dobre ze si to spravil. akurat si myslim ze je to nieco co si robil pre seba aby si sa to naucil, nie aby si to ukazoval na pohovoroch.
aj to je v poriadku ze nemas pracovnu historiu, ved sa ides hlasit na junior poziciu, tam to nikto neocakava. tym som chcel iba povedat ze to nie je uplne bezny trend aby si na full time poziciu programatora nosil portfolio. a uz vobec nie taketo nieco.
Podla mna je dobre, ze to spravil. Je to urcite vyhoda vci ludom, co nemaju nic. No samotnu stranku by som kvoli zabugovanosti a UX neukazoval, len kod.


@Laster - preco si zvolil MongoDb? Ved je to najhorsia dokumentova databaza na trhu a este na projekt, kde sa priam ziada relacny model?
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 871
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

Re: BE - MongoDB + express.js

Príspevok od používateľa Laster »

Súhlasím, ale neviem zatiaľ inú. A mongoDB si kvázi furt javascripte lande.
A radšej by som robil iba FE, len som chcel na tom projekte ukázať, že to viem prepojiť na BE.

A teda zatiaľ dve firmy ma generickým mailom poslali kade tade a u jednej mám pohovor a že zadanie dostanem na doma potom. Tak uvidím čo to bude zač.
Napísať odpoveď